Strona 1 z 1

[Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 18:19
autor: QwertY^
Witam serdecznie, mam problem z programem. Miałem napisać program z instrukcją case, z wyborem sortowania bąbelkowego lub przez wybór. Po przejściu do sortowania bąbelkowego miało ukazać się kolejne menu: 1. Sortowanie rosnąco oraz 2. Sortowanie malejąco. Po napisaniu owego programu napotkałem problem, program nie chciał się uruchomić do sortowania malejącego, natomiast do rosnącego działa normalnie. Zamieszczam tutaj kod programu, może Wy coś poradzicie, bo ja już nie mam pomysłów.

Kod: Zaznacz cały

program sortowanie; uses crt; const n=30; var tab:array[1..n] of integer; a,b,c,min,i,j,k: integer; znak,d: byte; begin clrscr; writeln('Wybierz rodzaj sortowania: '); writeln('1. Sortowanie babelkowe.'); writeln('2. Sortowanie przez wybor.'); read(znak); case znak of 1: begin clrscr; writeln('3. Sortowanie rosnaco.'); writeln('4. Sortowanie malejaco.'); read(d); case d of 3: begin clrscr; writeln('Sortowanie babelkowe rosnaco.'); writeln('Liczby przed sortowaniem: '); randomize; for a:=1 to n do tab[a]:=random(100); for a:=1 to n do write(tab[a],' '); for b:=1 to n-1 do for a:=1 to n-1 do if tab[a]>tab[a+1] then begin c:=tab[a]; tab[a]:=tab[a+1]; tab[a+1]:=c; end; writeln; writeln('Liczby po sortowaniu: '); for a:=1 to n do write(tab[a],' '); repeat until keypressed; end; end; end; {4: begin clrscr; writeln('Sortowanie babelkowe malejaco.'); writeln('Liczby przed sortowaniem: '); randomize; for a:=1 to n do tab[a]:=random(100); for a:=1 to n do write(tab[a],' '); for b:=1 to n-1 do for a:=1 to n-1 do if tab[a]<tab[a+1] then begin c:=tab[a]; tab[a]:=tab[a+1]; tab[a+1]:=c; end; writeln; writeln('Liczby po sortowaniu: '); for a:=1 to n do write(tab[a],' '); repeat until keypressed; end;} {program wylacza sie po wybraniu opcji 4} 2: begin clrscr; writeln('3. Sortowanie rosnaco.'); writeln('4. Sortowanie malejaco.'); read(d); case d of 3: begin clrscr; writeln('Sortowanie przez wybor rosnaco.'); for i:=1 to n do tab[i]:=random(100); write('Liczby przed sortowaniem: '); writeln; randomize; for i:=1 to n do write(tab[i],' '); for j:=1 to n-1 do begin min:=j; for i:=j+1 to n do if tab[i]<tab[min] then min:=i; k:=tab[min]; tab[min]:=tab[j]; tab[j]:=k; end; end; end; writeln; writeln('Liczby po sortowaniu: '); for i:=1 to n do write(tab[i],' '); repeat until keypressed; end; {4:begin clrscr; writeln('Sortowanie przez wybor rosnaco.'); for i:=1 to n do tab[i]:=random(100); write('Liczby przed sortowaniem: '); writeln; randomize; for i:=1 to n do write(tab[i],' '); for j:=1 to n-1 do begin min:=j; for i:=j+1 to n do if tab[i]>tab[min] then min:=i; k:=tab[min]; tab[min]:=tab[j]; tab[j]:=k; end; end; writeln; writeln('Liczby po sortowaniu: '); for i:=1 to n do write(tab[i],' '); repeat until keypressed;} end; end.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 18:28
autor: pc.qwerty

Kod: Zaznacz cały

{4: begin
Skoro zakomentowałeś ten fragment kodu, to nic dziwnego, że nie działczy.

Kod: Zaznacz cały

end; end; end;
Nie wiem, czy tu nie jest nastawiane za dużo razy 'end', ale tak czy inaczej rób wcięcia (ale ładnie!). Nie wiem, w czym stukasz, ale zainstaluj sobie edytor, który to wizualizuje, to dużo pomaga. Ja polecam SublimeText2, domyślnie nie koloruje on składni pascalowej ale powinien istnieć dodatek dodający tę funkcję.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 19:05
autor: szx
Poza tym proponuję wydzielenie kodu sortującego do osobnych procedur zgodnie z duchem uświęconego przez programistów prawa DRY, ponieważ ten kopiuj-wklej boli moje serce. Kodu mniej, a i poprawki wprowadzać łatwiej.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 21:58
autor: TheMediator95
Ja polecam SublimeText2, domyślnie nie koloruje on składni pascalowej ale powinien istnieć dodatek dodający tę funkcję.
Ja polecam program Geany + kompilator FreePascal, podkreśla składnie i jest wygodny w obsłudze, dostępny w wersji PL.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 22:12
autor: szx
Ja polecam program Geany + kompilator FreePascal, podkreśla składnie i jest wygodny w obsłudze, dostępny w wersji PL.
Jak chcesz naprawdę porządne IDE do Pascala, to tylko Lazarus. Ewentualnie VIM.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 22:23
autor: pc.qwerty
IDE do Pascala? :trollface:

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 19 lut 2013, 22:34
autor: szx
IDE do Pascala? :trollface:
Jeśli przez IDE rozumiemy program oferujący edycje, podświetlanie, analizę i uzupełnianie kodu źródłowego, zarządzenie strukturą plików projektu, automatyzowanie kompilowania, debugger i inne pomocne w czasie programowania funkcjonalności, to myślę, że tak.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 20 lut 2013, 8:28
autor: QwertY^
{4: begin
Wstawiłem komentarz tylko dlatego, żeby program kompilował się, ale gdy go usunę to już nie chce się skompilować. Spróbuję użyć któregoś z tych programów, tak jak mówicie. :)

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 20 lut 2013, 13:40
autor: pc.qwerty
Jeżeli program nie chce się kompilować, to trzeba to zmienić, najlepiej poprzez usunięcie błędu uniemożliwiającego kompilację. Powinno pomóc.

Re: [Pascal] Sortowanie bąbelkowe oraz przez wybór.

: 21 lut 2013, 1:13
autor: piotrmika
Proszę bardzo, poprawny kod:

Kod: Zaznacz cały

program sortowanie; uses crt; const n=30; var tab:array[1..n] of integer; a,b,c,min,i,j,k: integer; znak,d: byte; begin clrscr; writeln('Wybierz rodzaj sortowania: '); writeln('1. Sortowanie babelkowe.'); writeln('2. Sortowanie przez wybor.'); read(znak); case znak of 1: begin clrscr; writeln('3. Sortowanie rosnaco.'); writeln('4. Sortowanie malejaco.'); read(d); case d of 3: begin clrscr; writeln('Sortowanie babelkowe rosnaco.'); writeln('Liczby przed sortowaniem: '); randomize; for a:=1 to n do tab[a]:=random(100); for a:=1 to n do write(tab[a],' '); for b:=1 to n-1 do for a:=1 to n-1 do if tab[a]>tab[a+1] then begin c:=tab[a]; tab[a]:=tab[a+1]; tab[a+1]:=c; end; writeln; writeln('Liczby po sortowaniu: '); for a:=1 to n do write(tab[a],' '); repeat until keypressed; end; 4: begin clrscr; writeln('Sortowanie babelkowe malejaco.'); writeln('Liczby przed sortowaniem: '); randomize; for a:=1 to n do tab[a]:=random(100); for a:=1 to n do write(tab[a],' '); for b:=1 to n-1 do for a:=1 to n-1 do if tab[a]<tab[a+1] then begin c:=tab[a]; tab[a]:=tab[a+1]; tab[a+1]:=c; end; writeln; writeln('Liczby po sortowaniu: '); for a:=1 to n do write(tab[a],' '); repeat until keypressed; end; {program wylacza sie po wybraniu opcji 4} end; end; 2: begin clrscr; writeln('3. Sortowanie rosnaco.'); writeln('4. Sortowanie malejaco.'); read(d); case d of 3: begin clrscr; writeln('Sortowanie przez wybor rosnaco.'); for i:=1 to n do tab[i]:=random(100); write('Liczby przed sortowaniem: '); writeln; randomize; for i:=1 to n do write(tab[i],' '); for j:=1 to n-1 do begin min:=j; for i:=j+1 to n do if tab[i]<tab[min] then min:=i; k:=tab[min]; tab[min]:=tab[j]; tab[j]:=k; end; writeln; writeln('Liczby po sortowaniu: '); for i:=1 to n do write(tab[i],' '); repeat until keypressed; end; 4:begin clrscr; writeln('Sortowanie przez wybor rosnaco.'); for i:=1 to n do tab[i]:=random(100); write('Liczby przed sortowaniem: '); writeln; randomize; for i:=1 to n do write(tab[i],' '); for j:=1 to n-1 do begin min:=j; for i:=j+1 to n do if tab[i]>tab[min] then min:=i; k:=tab[min]; tab[min]:=tab[j]; tab[j]:=k; end; writeln; writeln('Liczby po sortowaniu: '); for i:=1 to n do write(tab[i],' '); repeat until keypressed; end; end; end; end; end.
Oczywiście zmiana programu nic tu nie daje :) Ja program poprawiałem w Notepad2++, a kompilowałem we Free Pascalu.