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
pc.qwerty pisze: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
Mediator14 pisze: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
pc.qwerty pisze: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^
pc.qwerty pisze: {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.