Kezdőoldal » Számítástechnika » Programozás » Mi a hiba az alábbi algoritmus...

Mi a hiba az alábbi algoritmusban?

Figyelt kérdés

program buborekos;

uses crt;

var n,i,j,be:integer;

a: array [1..100] of integer;

begin

writeln('Hány számot akarok beolvasni?');

readln(n);

for i:=1 to n do

begin

writeln('Következö szám');

readln(a[i]);

end;

for i:=2 to n do begin

be:=a[i];

j:=i-1;

while (j>0) and a[j]>be) do begin

a[j+1]:=j-1;

end;

a[j+1]:=be;

end;

writeln(a[i],' ');

end.


A pascal nem talál hibát benne, engedi lefuttatni,de amikor le akarom futtatni, beolvassa az értékeket,utánna lefagy, semmilyen billentyüre nem reagál, viszont az X-nél egyszerüen le lehet zárni,tehát nem maga a Pascal fagy le,csak a benne futó program.



#programozás #hiba #Pascal #rendezés #beszúrásos rendezés
2013. máj. 4. 17:33
1 2
 11/11 anonim ***** válasza:

Annyit tennék hozzá, hogy ha valamilyen utasítást nem értesz miért nem keresel rá a neten, vagy miért nem kérdezed meg, hogy pl. Pascalban mit jelent a pl. Goto, vagy procedure utasítás, valaki tudna rá példát is mutatni?

Annyit tartanék butaságnak aki azt mondta, hogy a tömbhöz miért ne lehetne az indexet hozzárendelni, mert az nagy butaság, problémát nem okozhat. Persze az más kérdés, hogy sok sebből vérzik az algoritmusod( ami rossz meghatározás a pontosak akarunk lenni)

program buborekos;

uses crt;

var tomb:array[1..100] of integer;

number, i:integer;

masodik_ciklus_valto:integer

seged:integer;

BEGIN

ClrScr;

while(1) do begin

____Writeln('Hány számot akarsz beolvasni?');

____readln(number);

__if (number<100) and (number>0) then

____ break;

end;

___Writeln('Köszönöm megadását');

for i:=1 to number do begin

_____Writeln('Kérem a következő számot');

____readln(tomb[i]);

____end;

for j:=2 to number do begin

____masodik_ciklus_valtozo:=j-1;

____seged:=tomb[j]

____while(seged<tomb[masodi_ciklus_valtozo) and _______(masodi_ciklus_valtozo>0) do

________begin

__ ________tomb[masodik_ciklus_valtozo+1]=tomb[masodik_ciklus_valtozo];

________Dec(masodik_ciklus_valtozo);

________end;

___tomb[masodik_ciklus_valtozo+1]=seged;

__end;

Writeln('A rendezett tömb:');

for k:=1 to number do begin

____Writeln(tomb[k]);

____end;

readln;

end.


A __ jelek szóközök akarnak lenni. És részben azért van benne, hogy ne csak copyznod kelljen a kódomat.

Ez a beszúrásos rendezés kódja.

Bár a google-ban sok elemi algoritmus kódja benne van.

A tiedben a hibák a következők voltak:

-a[j+1]= te egyenlővé tetted j-1-el haelyett, hogy a[j]-vel tetted volna egyenlővé

Innen az egész elcsúszott és mivel nem csökkentetted j értéket, és az index eleve mindig pozitív szám, így soha nem lépsz belőle. Az integer tipus túlcsodul, ha ne tenné, akkor végtelen ciklust kapnál.

2013. máj. 13. 16:22
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!