Zadatak za najveci, najmanji i srednji broj

1

Zadatak za najveci, najmanji i srednji broj

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Imam zadatak ovako:
Napisite program koji cita nizove od po cetiri broja sa tastature i daje izvestaj o srednjoj, najvecoj i najmanjoj procitanoj vrednosti. Izdvojte zadatke prikupljanja podataka, analize i prikazivanja izvestaja u posebne funkcije.

Ne razumem kako da napravim funkcije za ovaj zadatak. Znam ja da koristim i pravim funckije, ali ovo ne razumem kako. Molim vas mi pomognite, stvarno ne razumem.


Hvala unapred!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Cilj je da te nauče kako da komplikovan kod izvučeš iz main funkcije i time učiniš kod jednostavnijim za pregled, a i lakšim za traženje grešaka. Trebalo bi da napišeš kod koji liči na ovo:
#include <stdio.h> #include <stdlib.h> // Definiši skupne promenljive za sve funkcije void unos() {   // Tvoj kod } void analiza() {   // Tvoj kod } void prikaz() {   // Tvoj kod } void main() {   unos();   analiza();   prikaz(); }



offline
  • Na odmoru xD
  • Na odmoru xD
  • Pridružio: 15 Feb 2012
  • Poruke: 430

#include <stdio.h> #incldue <stdlib.h> // ovaj header ti je nepotreban ali ajde int intNiz[3], intBrojac, intNajveciBroj, intNajmanjiBroj; // Globalne promenljive koje su vidljive u celom programu float floatSrednjaVrednost; void unos(void) {     printf("Unesite 4 brija: \n");     for(intBrojac = 0;intBrojac < 4;intBrojac++)    {        scanf("%d", &intNiz[intBrojac]);    } } void analiza(void) {     intNajveciBroj = intNiz[0];     for(intBrojac = 0;intBrojac < 4;intBrojac++)     {        if (intNajveciBroj < intNiz[i])       {             intNajveciBroj = intNiz[i];       }     } /******************************************************/       for(  ;   ;   )    {      // Tvoj kod da pronadjes namanji broj pogledaj gore kako se trazi najveci    } /******************************************************/     for(   ;  ;   )    {      // Tvoj kod za srednu vrednost (predpostavljam d jer aritmeticki sredina u pitanju)      // Ideja naprais ovako nesta floatSrednjaVrednost = floatSrednjaVrednost + intNiz[i]; pa posle petlje stavis      // floatSrednjaVrednost = floatSrednjaVrednost / 4;    } } void prikaz(void) {     // samo stavis printf("Najveca vrednst je: %d\n", intNajvecaVrednost);    // i tako za svaku vrednost nezaboravi da su globalne promenljive svuda vidljive } int main(void) {     unos();    analiza();    prikaz();     system("PAUSE");    return 0; }
Evo da ti malo pomognem Very Happy

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Ja sam prvo pre nego sto sam poceo da pisem program, smislio kako cu. Moze li se to uraditi preko prototipova funkcije? Ja sam hteo tako, ali nisam znao kako da pozovem funkciju tj. da kad ukucam unos(), sta da stavim u zagradama.

@Aleksandar1996
Ne razumem sta radi ovaj kod u analiza() za najveci broj. Kaze da je intNajveciBroj jednak intNiz, pa onda nesto if i tako dalje... Mozes li mi pojasniti sta radi taj kod?

Hvala vam sto hocete da mi pomognete.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ehhh... izgleda da ipak ne razumeš šta su funkcije, čemu služe i kako se koriste. Mi smo ti samo dali predlog kako da rastaviš program, Aleksandar1996 je išao malo dalje, pa je dodao i malo implementacije.

Samo da se razumemo... to što smo mi predložili je samo jedan način. Podatke koje primaju i vraćaju funkcije ti sam definišeš. Ako funkciji trebaju podaci do kojih ne može da dođe, onda ih definišeš kao parametre i proslediš ih joj kad je zoveš.

Konkretno ovaj primer je mogao da se reši i bez globalnih promwnljivih. Funkcija unos je mogla da vrati niz brojeva, koje bi dao kao ulazni parametar funkciji prikaz, koja bi u svom telu zvala funkciju analiza() i prosledila joj broj za analizu, a ona bi vratila najmanji i najveći broj.

Kad definišeš finkciju razmišljaj ovako:
Šta sve funkciji treba od podataka da bi mogla da radi? (to će biti ulazni parametri)
Šta sve funkciji treba da izračuna/vrati? (to će biti rezultat)

offline
  • Na odmoru xD
  • Na odmoru xD
  • Pridružio: 15 Feb 2012
  • Poruke: 430

Kao sto Srki_82 rece problem moze da se resi na 1000 nacina tvoj je da ga izaberes. Protptip funkcije ti je samo deklaracija funkcije (opis) kao na primer int a; isto kao deklaracija promenljivih.
Kod is analiza funkcije prvo prekopira vrednost memorijske lokacije intNiz[0] u promenljivu intNajveciBroj i onda u petlji uporedjuje promenljivu sa vrednostima iz niza i ako je ona veca(vrednost iz niza) onda ga smesta u u promenljivu intNajveciBroj. I tako dobijes najveci broj u nizu. (Tu se krije resenje za najmanji broj u nizu Wink )
Globalne promenljive su ovde mozda najbolje i najbrze resenje iz razloga sto bi morao da deklarises svaku promenljivu za svaku funkciju a to bi datno iskomplikovalo situaciju a ovde imas 4 promenljive plus jedan niz kojima moze pristupiti svaka funkcija i nema potrebe za ulazne parametre zato su i sve void ime funkcije(void).

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Hvala vam sto ste mi objasnili za funkcije.

@Aleksandar1996
Ono u analizu, pise if(intNajveciBroj < intNiz[i])
Gde je obelezno ovo [i] i koliko je,, nigde se ne spominje.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Šta ti misliš, šta bi ta promenljiva trebala da radi i gde bi trebala da bude definisana? Smile

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Napisano: 06 Okt 2012 14:26

Ovo [i] nije nigde definisano, moglo bi np da stoji intNiz[5] umesto [i] ili neki drugi broj.

Dopuna: 06 Okt 2012 15:24

Ja sam napravio ovakav kod, ali kao da nisam nista napravio, jer neznam kako da namestim za najmanji i srednji broj. Stvarno ne kapiram kako da napravim. Uvek mi stoji 0 za najmanji.
#include <stdio.h> #include <stdlib.h> #define i 5 int Niz[5], NajveciBroj, NajmanjiBroj, Brojac; float SrednjaVrednost; void unos(void) {     printf("Unesite 4 broja: \n");     for(Brojac = 0; Brojac < 4; Brojac++){         scanf("%d", &Niz[i]);     } } void analiza(void) {     NajveciBroj = Niz[0];     for(Brojac = 0; Brojac < 4; Brojac++){         if(NajveciBroj < Niz[i]){             NajveciBroj = Niz[i];             }     } /*********************************************************************/ NajmanjiBroj = Niz[0];     for(Brojac = 0; Brojac < 4; Brojac++){         if(Niz[i] < NajmanjiBroj){             NajmanjiBroj = Niz[i];         }             } /********************************************************************/ SrednjaVrednost = Niz[0]; for(Brojac = 0; Brojac < 4; Brojac++){ SrednjaVrednost += Niz[i]; SrednjaVrednost /= 4; } } void prikaz(void) {     printf("\nNajveci broj je %d", NajveciBroj);     printf("\nNajmanji broj je %d", NajmanjiBroj);     printf("\nSrednja vrednost je %.2f\n", SrednjaVrednost); } int main() {     unos();     analiza();     prikaz();     system("PAUSE");     return EXIT_SUCCESS; }

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Hajde pogledaj svoj kod i svojim rečima mi objasni ovaj deo:
NajveciBroj = Niz[0];     for(Brojac = 0; Brojac < 4; Brojac++){         if(NajveciBroj < Niz[i]){             NajveciBroj = Niz[i];             }     }

Imaj na umu da si i definisao kao 5 i da se ne menja.

Ko je trenutno na forumu
 

Ukupno su 1135 korisnika na forumu :: 41 registrovanih, 6 sakrivenih i 1088 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, A.R.Chafee.Jr., amaterSRB, ArmyBoss, bigfoot, bojan_t, bojank, Boris90, ccoogg123, comi_pfc, Denaya, Dimitrije Paunovic, Doca, draganl, HrcAk47, ivan1973, ivica976, Još malo pa deda, jukeboxer, Klecaviks, kuntalo, Lieutenant, Magistar78, mane123, Mercury, Metanoja, milenko crazy north, miodrag, MiroslavD, mkukoleca, MrNo, nextyamb, ObicanUser, ostoja, ozzy, raykan, royst33, shone34, solic, Vlada1389, zlaya011