Poslao: 05 Okt 2012 19:29
|
offline
- crusher
- Ugledni građanin
- 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.
|
|
Poslao: 05 Okt 2012 19:49
|
offline
- Srki_82
- Moderator foruma
- 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();
}
|
|
|
|
Poslao: 05 Okt 2012 20:55
|
offline
- Aleksandr1996
- Ugledni građanin
- 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
|
|
|
|
Poslao: 06 Okt 2012 10:36
|
offline
- crusher
- Ugledni građanin
- 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.
|
|
|
|
Poslao: 06 Okt 2012 10:58
|
offline
- Srki_82
- Moderator foruma
- 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)
|
|
|
|
Poslao: 06 Okt 2012 11:31
|
offline
- Aleksandr1996
- Ugledni građanin
- 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 )
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).
|
|
|
|
Poslao: 06 Okt 2012 13:28
|
offline
- crusher
- Ugledni građanin
- 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.
|
|
|
|
Poslao: 06 Okt 2012 14:14
|
offline
- Srki_82
- Moderator foruma
- 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?
|
|
|
|
Poslao: 06 Okt 2012 15:24
|
offline
- crusher
- Ugledni građanin
- 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;
}
|
|
|
|
Poslao: 06 Okt 2012 15:43
|
offline
- Srki_82
- Moderator foruma
- 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.
|
|
|
|