Procedury Wyświetl,Sortuj,Wypelnj. Pomoc w odnalezieniu błędu.

0
 program prg;
      uses crt;
   type
   tab=array[1..100] of integer;

var
  Z:Tab;
x:integer;


 procedure sortuj(var z:Tab; var x:integer);
     var
     pom:integer;
     i:byte;
     begin
            for i:=1 to x-1 do begin

            if z[i]> z[i+1] then
            begin
            z[i]:=pom;
            z[i]:=z[i+1];
            z[i+1]:=pom;
            end;


 end;
 end;

  procedure wypelnji( z:tab;var x:integer);
  var
  s:integer;
 znak:char;
  begin

  s:=1;


  repeat
  writeln('podaj liczbe');
  readln(z[s]);
         s:=s+1;
                znak:=readkey;
  until znak='k';
  x:=s;
  end;

  procedure wyswietl( z:tab; x:integer);
  var
  i:byte;
  begin

  for i:=1 to x do
  writeln(Z[i]);

   end;

begin
  clrscr;
  wypelnji(z,x);
  sortuj(z,x);

wyswietl(z,x);






  readln;
end.

Wydawało mi się, że nie będę miał większych problemów ze zrobieniem tego no ale niestety cosik jest nie tak i nie do końca pojmuje co.
Jakby ktoś mógł mi wskazać co robię nie tak to byłoby miło.
Pozdrawiam

0
  1. nie formatujesz kodu.
  2. nie przyjmujesz się dokładnymi wartościami: do 99 czy do 100 czy do 101 dla ciebie to wszystko jedno.
  3. nie zrozumiałeś algorytmu sortowania.
0

Kod to faktycznie wypadałoby sformatować, bo jest nieczytelny i mało w nim widać (m.in. dzięki temu nie umiesz znaleźć błędów);

Musisz określić, czy chcesz przekazywać tablicę jako argument, czy mieć do niej dostęp globalny; I jedno i drugie nie ma sensu, bo po co przekazywać coś w parametrze, skoro i tak ma się do tego dostęp? Poza tym identyfikatory zarówno zmiennych globalnych, jak i parametrów procedur są takie same - można się pogubić;

Ostatnią sprawą jest procedura sortująca - myślę, że chcesz wykorzystać sortowanie bąbelkowe, ale źle jest zaimplementowane; Brakuje jednej pętli; Do poczytania - http://pl.wikipedia.org/wiki/Sortowanie_bąbelkowe;

Zobacz ten kawałek, odpowiedzialny za zamianę elementów w tablicy:

begin
  z[i]:=pom;
  z[i]:=z[i+1];
  z[i+1]:=pom;
end;

Myślisz, że te dwa elementy faktycznie zostaną zamienione? pom zawsze będzie miało jedną, niezdefiniowaną wartość.

0
{...........Procedura WypeniajĄca}

                 Procedure Wypelnji(var tablica:tab);
  var
    i:integer;
    znak:boolean;
          begin
          i:=1;
          znak:=false;

            repeat
            writeln('podaj ',i,'  liczbe');
            readln(x[i]);

                   if tablica[i]=0 then
            begin
                      znak:=true;
                      i:=i-1
                 end
                      else    i:=i+1;


             until znak=true;
               z:=i;

       end;
{...............}


  {.............Sortowanie........}

  procedure sortuj(var z:integer; var tablica:tab);

                var
                   pom:integer;
                         j,i:byte;
               begin
                          pom:=0;

                          for i:=1 to z-1 do
                          for j:=i+1 to z do
                begin

                         if tablica[i]>tablica[j] then

                         begin

                         pom:=tablica[i];
                         tablica[i]:=tablica[j];
                         tablica[j]:=pom;
                              end;

              end;
               end;

 {...............}

Okie Dokie. Błędy poprawione. Dość sporo ich było. W wypełnianiu tylko zmieniłem bez redkeya tak na wszelki wypadek no i śmiga:)
Thx

poprawienie znaczników <code class="pascal"> - fp

0

Błędy poprawione.

A formatowanie kodu? Ja nie wiem jak Ty możesz analizować tak bałaganiarski kod...

Jeśli faktycznie rozwiązałeś problem i jesteś z tego rozwiązania zadowolony - rozdaj plusiki i zafajkuj post rozwiązujący problem; W ten sposób pokażesz wszystkim, że już pomocy nie potrzebujesz; No i zapamiętaj na przyszłość jak "zamyka się" wątki :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1