Prawdziwe oblicze Informatyki. Tysiące linijek kodu i kompilatory które nigdy nie wybaczają.
Awatar użytkownika

QwertY^

Posty: 2
Rejestracja: 19 lut 2013, 18:15
    Windows 7 Firefox

Post19 lut 2013, 18:19

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.

Awatar użytkownika

pc.qwerty

Zasłużony użytkownik
Posty: 3272
Rejestracja: 01 lip 2010, 11:28
    Macintosh Opera

Post19 lut 2013, 18:28

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ę.
There is no cloud. It's just someone else's computer.

Awatar użytkownika

szx

Posty: 6
Rejestracja: 28 cze 2012, 20:36
Kontaktowanie:
    Ubuntu Firefox

Post19 lut 2013, 19:05

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.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/P/L/M d- s+:+ a--- C++ UL++ P+ L+++ E- W++ N w--- M- PS+ PE++ R+ tv-(--) b++++ D-- G+@ e* h!
------END GEEK CODE BLOCK------

Awatar użytkownika

TheMediator95

Posty: 468
Rejestracja: 29 kwie 2010, 9:35
Kontaktowanie:
    Windows 7 Opera

Post19 lut 2013, 21:58

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.

Awatar użytkownika

szx

Posty: 6
Rejestracja: 28 cze 2012, 20:36
Kontaktowanie:
    Ubuntu Firefox

Post19 lut 2013, 22:12

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.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/P/L/M d- s+:+ a--- C++ UL++ P+ L+++ E- W++ N w--- M- PS+ PE++ R+ tv-(--) b++++ D-- G+@ e* h!
------END GEEK CODE BLOCK------

Awatar użytkownika

pc.qwerty

Zasłużony użytkownik
Posty: 3272
Rejestracja: 01 lip 2010, 11:28
    Macintosh Opera

Post19 lut 2013, 22:23

IDE do Pascala? :trollface:
There is no cloud. It's just someone else's computer.

Awatar użytkownika

szx

Posty: 6
Rejestracja: 28 cze 2012, 20:36
Kontaktowanie:
    Ubuntu Firefox

Post19 lut 2013, 22:34

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.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/P/L/M d- s+:+ a--- C++ UL++ P+ L+++ E- W++ N w--- M- PS+ PE++ R+ tv-(--) b++++ D-- G+@ e* h!
------END GEEK CODE BLOCK------

Awatar użytkownika

QwertY^

Posty: 2
Rejestracja: 19 lut 2013, 18:15
    Windows 7 Firefox

Post20 lut 2013, 8:28

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. :)

Awatar użytkownika

pc.qwerty

Zasłużony użytkownik
Posty: 3272
Rejestracja: 01 lip 2010, 11:28
    Macintosh Opera

Post20 lut 2013, 13:40

Jeżeli program nie chce się kompilować, to trzeba to zmienić, najlepiej poprzez usunięcie błędu uniemożliwiającego kompilację. Powinno pomóc.
There is no cloud. It's just someone else's computer.

Awatar użytkownika

piotrmika

Zasłużony użytkownik
Posty: 125
Rejestracja: 10 lut 2008, 16:20
Lokalizacja: Kraków
    Windows 7 Chrome

Post21 lut 2013, 1:13

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.
MacBook Pro i5/8GB/256GB/Retina/MAC OS X Yosemite
iPhone 6, Samsung Galaxy S6 Edge

Kto jest online

Użytkownicy przeglądający to forum: Majestic-12 [Bot] i 1 gość