Amikor ezt le akarom futtatni akkor a mindig jelez hogyan lehetne ezt kijavitani?
program lokalis_minimum;
const n=5;
var a :array[1..5, 1..5] of integer;
b :array[1..25] of integer;
i,j,k:integer;
begin
{ tomb kigenerealasa }
randomize;
for i:=1 to 5 do
for j:=1 to 5 do a[i,j]:=random(50)+1;
{ tomb kiirasa }
for i:=1 to 5 do write(a[i,j]:3);
writeln;
end
{ lokalis minimum keresese }
k:=0
for i:=1 to 5 do
for j:=1 to 5 do
begin
if (a[i,j]<a[i-1,j-1])
and (a[i,j]<a[i-1,j])
and (a[i,j]<a[i-1,j+1])
and (a[i,j]<a[i,j-1])
and (a[i,j]<a[i,j+1])
and (a[i,j]<a[i+1,j-1])
and (a[i,j]<a[i+1,j])
and (a[i,j]<a[i+1,j+1])
then
begin
k:=k+1;
b[k]:=a[i,j];
end;
begin
k:=0;
for i:=2 to n-1 do
if (a[1,i]<=a[1,i-1])
and (a[1,i]<=a[1,i+1])
and (a[1,i]<=a[2,i-1])
and (a[1,i]<=a[2,i])
and (a[1,i]<=a[2,i+1])
then inc(k);
writeln('k=',k);
end;
end;
{ a lokalis minimum kiiratasa }
writeln('Lokalis minimum ertekek a tombben: ');
for i:=1 to k do
write(b[i],' ');
readln;
end;
end.
Van még a világon pascal nyelv? :o
"mindig jelez hogyan lehetne ezt kijavitani?" - mondjuk ha leírtad volna, hogy mit, azzal lehetségessé vált volna a kérdés megválaszolása.
Kis trükk:
ha minden begin után bentebb kezdesz egy karakterrel és minden end után kintebb, sokkal áttekinthetőbb lesz a forrás.
"{ tomb kiirasa }" - ez meg marhára nem írja ki a tömböt... vagy igen? Vissza az 1. ponthoz: output alapján debuggolni sokkal célirányosabb, f___om áll neki száraztesztelni elölről...
#5: mért ne lehetne?
Pl:
begin
k:=k+1;
b[k]:=a[i,j];
end;
és túl nagy trükk sem kell hozzá, csak escapelni kell a szóközöket. -vel
előző leírnád idézőjelek közé hogy mit is írjak a szóköz karakter elé?
Egyébként így:
kkk
kkk
Nem mélyedtem el a programodban, de első blikkre főleg a begin..end blokkjaidat nem értem.
Már indulásnál néhány sor után lezárod a programot, igaz, nem szabályosan, hanem nagyvonalúan elmellőzöd, hogy bármivel jelezd az utasítás végét -- de mégiscsak ENDdel:
begin
{ tomb kigenerealasa }
randomize;
for i:=1 to 5 do
for j:=1 to 5 do a[i,j]:=random(50)+1;
{ tomb kiirasa }
for i:=1 to 5 do write(a[i,j]:3);
writeln;
end
Ha írnál utána egy pontot, kész, a fordító számára vége a programnak, a többi komment. Így viszont mire való?
A keresést megint csak egy lezáratlan sorral indítod:
k:=0
Az alábbi blokk meg hol van tulajdonképpen?
begin
k:=0;
for i:=2 to n-1 do
if (a[1,i]<=a[1,i-1])
and (a[1,i]<=a[1,i+1])
and (a[1,i]<=a[2,i-1])
and (a[1,i]<=a[2,i])
and (a[1,i]<=a[2,i+1])
then inc(k);
writeln('k=',k);
end;
Mert most az i-cikluson belül erőlködik, hogy megváltoztassa a ciklusváltozót, de a fordítónak ez sem tetszik.
Ezenkívül csak az utolsó ReadLn; utáni end; szerepe talányos, máskülönben remekül agyonzsúfolt kód, nehogy a rossz emberek gusztust kapjanak a crackelésére.
Hm... A tömböd mindkét irányban 1..5-ig tart, és ezeken a határokon belül töltöd fel. Ehhez képest a lokális minimum keresésekor indexeled 0-val és 6-tal is -- ott kívül miféle értékeket remélsz, amelyekkel hitelesen össze tudod hasonlítani a tömb tartalmát?
Csuda hasznosan alkalmazod az n konstanst. Egy eset kivételével sehol sem használod, ott egyébként semmivel sem indokoltabb, mint a többi helyen volna.
Hát... úgy tűnik, ez a projekt lezárult.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!