Problem z programem

diego3006
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 14 kwie 2010, o 16:35
Płeć: Mężczyzna
Lokalizacja: Bielsk

Problem z programem

Post autor: diego3006 »

Witam!
Właśnie niedawno napisałem program na zaliczenie Program ten służy do sortowania liczb trzema sposobami : bąbelkowy,przez wybór i wstawianie
Kod:

Kod: Zaznacz cały

program nowy;
uses crt;
var
tab:array [1..6] of integer;
i:integer;
o:string;

procedure babel;
var
   b,a,pom:integer;
begin
     for a:=1 to 5 do
     for b:=1 to 5 do
     if tab[b]>tab[b+1] then
begin
     pom:=tab[b];
     tab[b]:=tab[b+1];
     tab[b+1]:=pom;
end;
end;
procedure wstaw;
var
   i,j,k,elm:integer;
begin
     for i:=1 to 6 do
begin
     elm:=tab[i];
     k:=i-1;
     while (k>=1) and (tab[k]>elm)do
begin
     tab[k+1]:=tab[k];
     dec(k);
end;
    tab[k+1]:=elm
end;
end;
procedure zamien;
var
   a,b,temp:integer;
begin
     temp:=a;
     a:=b;
     b:=temp;
end;
procedure wyb;
var
i,j,k,temp:integer;
begin
for i:=1 to 6 do
begin
for i:=1 to 6 do
begin
k:=1;
for i:=1 to 6 do
if (tab[j]>tab[k]) then
k:=j;
zamien (tab[k],tab[j]) ;
end;
end;
end;
begin
     clrscr;
     writeln('Wybierz kt˘re sortowanie chcesz zastosowa†');
     writeln;
     writeln('BĄbelkowe wybierz 1 ');
     writeln('Przez wstawianie wybierz 2 ');
     writeln('Przez wyb˘r wybierz 3 ');
     readln(o);

    if o='babelkowe' then
begin
     for i:=1 to 6 do
     readln(tab[i]);
     babel;
for i:=1 to 6 do
     write(tab[i]);
     readln;
end;

    if o='wstawianie' then
begin
     for i:=1 to 6 do
     readln(tab[i]);
     wstaw;
for i:=1 to 6 do
    write(tab[i]);
    readln;
end;

    if o='wybor'then
begin
     for i:=1 to 6 do
     readln(tab[i]);
     wyb;
for i:=1 to 6 do
     writeln(tab[i]);
end;
end.
i mam problem z ostatnim sposobem mógłby ktoś pomóc
Awatar użytkownika
mcbob
Użytkownik
Użytkownik
Posty: 479
Rejestracja: 15 gru 2008, o 19:02
Płeć: Mężczyzna
Lokalizacja: Poland
Pomógł: 69 razy

Problem z programem

Post autor: mcbob »

diego3006 pisze:i mam problem z ostatnim sposobem mógłby ktoś pomóc
Chodzi ci o sortowanie przez wstawianie? Na pierwszy rzut oka widzę tylko jeden mały błąd. Iteruj zewnętrzną pętlę for od 2 a nie od 1. A jaki konkretnie masz ten problem?
diego3006
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 14 kwie 2010, o 16:35
Płeć: Mężczyzna
Lokalizacja: Bielsk

Problem z programem

Post autor: diego3006 »

Problem polega na tym że w sortowaniu przez wybór zastosowałem 2 procedury jedna o nazwie zmień a druga wyb i chodzi oto ze w procedurze wyb na końcu trzeba wywołać procedurę zmień wraz z tym co jest w nawiasach (kod:zamien (tab[k],tab[j]) i tu jest problem
Awatar użytkownika
mcbob
Użytkownik
Użytkownik
Posty: 479
Rejestracja: 15 gru 2008, o 19:02
Płeć: Mężczyzna
Lokalizacja: Poland
Pomógł: 69 razy

Problem z programem

Post autor: mcbob »

diego3006 pisze:i mam problem z ostatnim sposobem mógłby ktoś pomóc
diego3006 pisze:Program ten służy do sortowania liczb trzema sposobami : bąbelkowy,przez wybór i wstawianie
No i dlatego myślałem że chodzi ci o sortowanie przez wstawianie. A całego kodu mi się nie chciało czytać. Bez wcięć, bez znaczników code po prostu odstrasza. Właściwie to po co ci procedura zamień? Wiem że to elegancko wygląda ale według mnie jest nie potrzebne.
diego3006
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 14 kwie 2010, o 16:35
Płeć: Mężczyzna
Lokalizacja: Bielsk

Problem z programem

Post autor: diego3006 »

Problem rozwiązany trzeba było wywalić tamte procedury i wstawić tą:
for j:=1 to N-1 do
begin
min:=j;
for i:=j+1 to N do
if d < d[min] then min:=i;
x:=d[min];
d[min]:=d[j];
d[j]:=x;
end;

Ale teraz mam drugie pytanie jak zrobić żeby program pokazywał kolejne kroki postępowania np w sortowaniu bąbelkowym liczby 654321:
654321
564321
546321
543621
543261
543216
i tak dalej
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Problem z programem

Post autor: kadiii »

Używaj znaczników [ code ]! Wystarczy wypisać tablicę po każdym kroku pętli wewnętrznej.

Kod: Zaznacz cały

       for a:=1 to 5 do
         for b:=1 to 5 do
         begin
            if tab[b]>tab[b+1] then
            begin
               pom:=tab[b];
               tab[b]:=tab[b+1];
               tab[b+1]:=pom;
             end;
             for i:=1 to 6 do
                write(tab[i]);
             writeln;
          end;
diego3006
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 14 kwie 2010, o 16:35
Płeć: Mężczyzna
Lokalizacja: Bielsk

Problem z programem

Post autor: diego3006 »

Dobra sortowanie bąbelkowe załatwione ale teraz ja to powtórzyć jeszcze ze wstawianiem i przez wybór
bo tak jak w przypadku sortowania bąbelkowego pętla for nie działa
Awatar użytkownika
mcbob
Użytkownik
Użytkownik
Posty: 479
Rejestracja: 15 gru 2008, o 19:02
Płeć: Mężczyzna
Lokalizacja: Poland
Pomógł: 69 razy

Problem z programem

Post autor: mcbob »

Może jakiś kod wrzuć to będzie można ocenić co nie działa. Chcesz wypisywać tablicę po każdym kroku sortowania? No to na końcu zewnętrznej pętli for. Analogicznie jak w bąbelkowym.
diego3006
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 14 kwie 2010, o 16:35
Płeć: Mężczyzna
Lokalizacja: Bielsk

Problem z programem

Post autor: diego3006 »

Problem już rozwiązany
ODPOWIEDZ