IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Výpočty ve funkci

Aktivity
Avatar
Dominik Baričák:31.3.2018 19:10

Zdravím,
Mám udělat tři funkce. Každá bude mít nějaký úkol. Prosím o žádné ukazatele nebo třídy a další věci, které nemám v kodu.

zde je zadání:

  1. Navrhněte datový typ xArray, který bude mít celočíselný datový typ, bude mít 20 políček.
  2. Vytvořte proměnnou s DT xArray s názvem pole.
  3. Napište funkci, která nebude mít žádný návratový parametr a bude mít jeden vstupní parametr xArray. Název funkce bude fill. Funkce naplní pole číselnými hodnotami z klávesnice.
  4. Napište funkci s názvem FindMinus, která bude vracet celé číslo a bude mít jeden vstupní parametr xArray. Funkce spočítá kolik je záporných hodnot v poli a tuto hodnotu pak vrátí do výstupního parametru.
  5. Napište funkci, která bude počítat aritmetický průměr z KLADNÝCH HODNOT v poli. Bude vracet float a bude mít jeden vstupní parametr xArray. Název funkce bude average.
  6. Tyto funkce postupně zavolejte ve funkci main.

Zkoušel jsem to, ale program dělá tyto problémy:

1: Když zadám například: -1, -2, -3, 1, 2 vyhodí mi to pocet zapornych cisel 3. A prumer kladnych vyhodi 0. Přitom by to mělo vyhodit 3 a 1,5.

2: Program umí vypočítat pocet zapornych cisel a jejich prumery. Divné :D

Zde mám zdroják:

// Example program
#include <iostream>
#include <string>

using namespace std;

const int velikost=4;
typedef double xArray[velikost];
xArray pole;

void fill(xArray&vstup){
    cout<<"zadej 5 cisel "<<endl;

    for(int x=0;x<=velikost;x++){
        cin>>vstup[x];
    }

}

int findMinus(xArray vstup){
    int hodnota=0;
    int pocet;

    for(int x=0;x<=velikost;x++){
        if(vstup[x]<hodnota){
         pocet++;
        }
    }

    cout<<"pocet zapornych cisel je: ";
    return pocet;
}

float average(xArray vstup){
    int hodnota=-32000;
    int hodnotaCisel=0;
    int pocet;
    float prumer;

    for(int x=0;x<=velikost;x++){
        if(vstup[x]>hodnota){
        hodnotaCisel=hodnotaCisel+vstup[x];
        pocet++;
        }

    }

    cout<<"prumer cisel je: ";
    prumer=hodnotaCisel/pocet;

    return prumer;

}

int main()
{
  fill(pole);
  cout<<findMinus(pole);
  cout<<endl;
  cout<<average(pole);


}
Editováno 31.3.2018 19:11
 
Odpovědět
31.3.2018 19:10
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Dominik Baričák
Martin Petrovaj:31.3.2018 19:29

Ahoj, tak už len vzhľadom na správanie tvojho programu ti mohlo napadnúť, že chyba bude niekde v tom, že tvoj program vôbec vie spočítať priemery záporných čísel, aj keď by to vôbec nemal robiť :-D

Pozrel by som sa do funkcie average a na to, aké čísla si v nej vlastne na základe podmienky filtruješ. Si si istý, že chceš zisťovať, či je číslo väčšie ako -32000, aby si ho započítal do priemeru? :-)

Nahoru Odpovědět
31.3.2018 19:29
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Dominik Baričák:31.3.2018 19:36

Díky moc. Já jsem strašné vemeno :D

 
Nahoru Odpovědět
31.3.2018 19:36
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Dominik Baričák
DarkCoder:31.3.2018 19:45

V zadání máš navrhnout celočíselný datový typ, místo toho používáš double.
Velikost pole volíš 4, přesto se jej snažís naplnit 5 hodnotami.
Seznam parametrů funkce fill() je chybně.
Inkrementuješ nedefinovanou lokální proměnnou pocet.
Inicializovat proměnnou hodnota na hodnotu -32000 není správné.

Nahoru Odpovědět
31.3.2018 19:45
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.