Kde je chyba?

Programovacie jazyky, rady, poradňa...
F1L1P
Expert
Expert
Príspevky: 174
Registrovaný: 15 máj 2009, 20:45

Kde je chyba?

Príspevok od používateľa F1L1P »

Pomohli by ste mi niekto najst chyby v tychto 2 programoch z lazarusu tak aby to fungovalo

Kód: Vybrať všetko

var
vyska:array[1..9]of real=(1.98,1.86,1.95,1.80,1.88,1.79,1.92,1.83,1.84);
priemer:real;
i,sucet,max,min:integer;
begin
Image1.Canvas.FillRect(Image1.ClientRect);
priemer:=0;
sucet:=0;
max:=vyska[i];
min:=vyska[i];
for i:=1 to 9 do begin
sucet:=sucet+vyska[i];
priemer:=sucet/7;
Image1.Canvas.TextOut( 10,30,'Priemerná vyska ziakov:'+ FloatToStr(priemer));
end;
for i:=1 to 9 do begin
if vyska[i]<=max then max:=vyska[i] else
if vyska[i]>=min then min:=vyska[i];
Image1.Canvas.TextOut(10,70,'najvyssi je'+IntToSTr(i)+ '.ziak s vyskou'+FloatToStr(max));
end;
end;

Kód: Vybrať všetko

var
znecistenie:array [1..11] of integer=(40,45,50,55,51,53,60,55,48,70,46 );
x,i,y:integer;
begin
Image1.Canvas.FillRect(Image1.ClientRect);
x:=20;
y:=100;
image1.canvas.textout(10,50,'Namerane udaje');
for i:=1 to 11 do begin
image1.canvas.textout(39*i,80,inttostr(znecistenie[i]));
image1.canvas.textout(20,60,'Zvyšena hodnota dusičnanov');
for i:=1 to 11 do begin
if znecistenie[i]>50 then
image1.canvas.TextOut(39*i,80,inttostr(znecistenie[i]));
end;
for i:=1 to 11 do
begin
image1.canvas.TextOut(y,x,'zvyšena namerana hodnota'inttostr(i);
y:=y+20;
end;
end;
end;
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Kde je chyba?

Príspevok od používateľa audiotrack »

v prvom:
1)

Kód: Vybrať všetko

max:=vyska[i];
min:=vyska[i];
zameň za

Kód: Vybrať všetko

max:=vyska[1];
min:=vyska[1];
2)

Kód: Vybrať všetko

priemer:=sucet/7;
Image1.Canvas.TextOut( 10,30,'Priemerná vyska ziakov:'+ FloatToStr(priemer));
nedávajú zmysel. Ak chceš robiť čiastkové priemery, tak priemer:=sucet/i; a ak chceš celkový priemer, tak to má byť až za cyklom a nie v cykle

3) druhý cyklus je zbytočný, dá sa to spraviť priamo v tom prvom

4)

Kód: Vybrať všetko

if vyska[i]<=max then max:=vyska[i] else
if vyska[i]>=min then min:=vyska[i];
tu máš opačne znamienka. Do max si teda hladáš minimum a do min maximum.

5)

Kód: Vybrať všetko

Image1.Canvas.TextOut(10,70,'najvyssi je'+IntToSTr(i)+ '.ziak s vyskou'+FloatToStr(max));
nemôže byť v cykle, tak predsa vypíšeš všetkých žiakov a nie najnižšieho a najvyššieho. Má to byť za cyklom (a teda v cykle si logicky musíš uchovať aj i do nejakej premennej, a nie použiť "i"




a keď vidím koľko chýb je v prvom, tak druhe ani opravovať nejdem. Najprv sa venujem tomu prvému príkladu, a keď ho opravíš tak sa pozreme na druhý
Napísať odpoveď