logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[TP] Tablice jednowymiarowe-sortowanie za pomocą pętli while

piotrekhbn 24 Lut 2009 19:31 3565 11
REKLAMA
  • #1 6199076
    piotrekhbn
    Poziom 11  
    Posty: 73
    Ocena: 2
    Witam wszystkich. Mam mały problem z napisaniem programu w Turbo Pascalu, program ma zawierać tablicę jednowymiarową do 1000, użytkownik decyduje czy chce wprowadzić następną liczbę czy też skończyć wprowadzanie, na końcu program bąbelkowo sortuje te liczby. Udało mi się napisać program który ma wszystko poza sortowaniem liczb. Szukałem w internecie i znalazłem kilka rozwiązań, lecz jak się dowiedziałem ma to być przy użyciu pętli While - a tego znaleźć nie mogłem, a sam jestem z niej prawie zielony. Może ktoś z Was wie co dodać do tego kodu aby sortował liczby od najmniejszej do największej?? Z góry dzięki za pomoc. oto kod:
    
    program abc;
    uses
    crt;
    const
    n=1000;
    var
    a:array[1..n] of integer;
    k,i:integer;
    odp:string;
    begin
    clrscr;
    textcolor(white);
    i:=0;
    repeat
    i:=i+1;
    k:=i;
    writeln;
    write('Podaj  wartosc nr '); textcolor(lightred); write(i); textcolor(white); write(': ');
    readln(a[i]);
    writeln;
    writeln('Czy chcesz podac nastepna liczbe? ');
    writeln('[T]-Tak   [N]-Nie');
    readln(odp);
    if odp='t' then k:=k+1;
    until odp='n';
    writeln;
    for i:=1 to k do
    begin
    write(a[i],' ');
    end;
    readkey;
    end.     
    
  • REKLAMA
  • REKLAMA
  • #3 6199159
    Dżyszla
    Poziom 42  
    Posty: 7065
    Pomógł: 1095
    Ocena: 211
    
    for i:=a to x do ...
    odpowiada (pod warunkiem x>a)
    i:=a;
    repeat
       ...
       inc(i);
    until i>x;
    odpowiada (bezwarunkowo)
    i:=a;
    while i<=x do ...

    Generalnie:
    1. Pętla repeat..until gwarantuje wykonanie kodu w niej zawartego co najmniej raz
    2. Pętla while nie gwarantuje wykonania kodu.
    3. Pętla for nie gwarantuje wykonaia kodu i zmusza do inkrementacji lub dekrementacji liczniko o 1 przy każdym przebiegu (pozostałe dwie nie mają tego ograniczenia, a licznik może być zmieniany dowolne w pętli, jednakże musi być zainicjowny przed (while) lub najpóźniej w pętli (repeat..until).

    Każdą pętlę for da się zapisać pętlą while.
    Każdą pętlę repeat...until da się zapisać pętlą while.

    Ergo: Nie ważne jaki kod wynajdziesz, każdy da się przekształcić na taki z użyciem pętli while.
  • #4 6199226
    piotrekhbn
    Poziom 11  
    Posty: 73
    Ocena: 2
    chablak - byłem na tej stronie, wiem jak działa sortowanie bąbelkowe tylko nie umiem go zastosować w moim przypadku. Domyślam się, że trzeba tylko zmienić kod ale jestem trochę zielony w tym.
  • REKLAMA
  • #6 6199291
    chablak
    Poziom 11  
    Posty: 60
    Pomógł: 1
    Ocena: 1
    tak jak napisał mój poprzednik pętle można wymieniać oto przykład w jaki sposób:

    Pętla for na repeat until:

    
    program nowy;
    uses
    crt;
    
    var
    licznik : byte;
    
    begin
    clrscr;
    for licznik := 1 to 10 do
         writeln(licznik);
    readkey;
    end.
    
    


    to samo tylko kożystając z pętli repeat until:

    
    program nowy;
    uses
    crt;
    
    var
    licznik : byte;
    
    begin
    clrscr;
    licznik := 0;
    
    repeat
    inc(licznik);
    writeln(licznik);
    until licznik = 10;
    end;
    readkey;
    end.


    i to samo korzystając z pętli while do:

    
    program nowy;
    uses
    crt;
    
    var
    licznik : byte;
    
    begin
    clrscr;
    
    licznik := 0;
    
    while licznik <> 10 do
    begin
    inc(licznik);
    writeln(licznik);
    end;
    readkey;
    end.
    


    teraz powinno być Ci prościej.

    Powodzenia

    EDIT

    Dżyszla chyba gotowiec...
  • REKLAMA
  • #7 6199299
    piotrekhbn
    Poziom 11  
    Posty: 73
    Ocena: 2
    Próbowałem już nie raz zastosować sortowanie za pomocą repeat/until i za każdym razem sortował mi tylko dwie pierwsze liczby, oczywiście schemat brałem z wikipedii. Próbuje zrobić ten program od paru dni i nic dalej mi nie wychodzi. Inaczej nie pisałbym na forum. Mógłbyś napisać czy przekształcić ten fragment kodu z pętlą while i sortowaniem wg moich zmiennych? Będę bardzo wdzięczny, ja już nie ogarniam tego.
  • #8 6199347
    Dżyszla
    Poziom 42  
    Posty: 7065
    Pomógł: 1095
    Ocena: 211
    Napisz program:
    
    for i:=1 to 9 do begin
      for j:=1 to 9 do
        write(i*j,#9);
      writeln;
    end;
    

    Zamień następnie na pętle while.
    Jak to się nauczysz, to będziesz umiał zmieniać i inne.
  • #9 6199369
    piotrekhbn
    Poziom 11  
    Posty: 73
    Ocena: 2
    no to sprawę pętli już chyba dam radę, a jak z sortowaniem? Mógłbyś napisać jak to powinno wyglądać na moich zmiennych?
  • #11 6199659
    piotrekhbn
    Poziom 11  
    Posty: 73
    Ocena: 2
    Napisałem, że nie mam już do tego głowy i poprosiłem o zrobiony fragment kodu.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu implementacji sortowania bąbelkowego tablicy jednowymiarowej w Turbo Pascalu z użyciem pętli while. Autor programu ma tablicę do 1000 elementów, do której użytkownik wprowadza liczby, decydując o kontynuacji lub zakończeniu wprowadzania. Problemem jest zastosowanie sortowania bąbelkowego wyłącznie za pomocą pętli while, gdyż autor zna działanie sortowania, ale nie potrafi go przekształcić na pętlę while. Uczestnicy forum wyjaśniają, że każdą pętlę for lub repeat..until można zastąpić pętlą while, podając przykłady konwersji pętli for i repeat..until na while. Podkreślają, że wystarczy przekształcić standardowy algorytm sortowania bąbelkowego na pętlę while, co jest możliwe i nie różni się zasadniczo od innych pętli. Autor prosi o gotowy fragment kodu z użyciem jego zmiennych, jednak otrzymuje wskazówki do samodzielnego przekształcenia pętli i linki do materiałów edukacyjnych. Wskazano również przykłady i schematy, które mają pomóc w nauce pętli while oraz w implementacji sortowania bąbelkowego w Turbo Pascalu.
Wygenerowane przez model językowy.
REKLAMA