Reklama
Pokazuje wyniki od 1 do 2 z 2

Temat: Program w Pascalu - pytanie

  1. #1

    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    695
    Siła reputacji
    0

    Domyślny Program w Pascalu - pytanie

    Mam napisać program który będzie za pomocą listy jednokierunkowej segregował podane słowa alfabetycznie i wypisywał je.
    Nie mam pojęcia, gdzie tutaj jest błąd, ponieważ delphi nie wywala żadnych errorów, tylko po prostu się zamyka, jeśli ktoś mógłby pomóc, to byłbym wdzięczny. Na razie mam tylko 2 procedury, menu jest wzięte z innego programu.

    Kod :
    program pgrzast;
    
    {$APPTYPE CONSOLE}
    
    type
      _wsk = ^wpis;
      wpis = record
        slowo: string;
        dalej: _wsk;
        end;
    
    function sprawdz(s1, s2:string):boolean;
    var
      a:integer;
    begin
      if ord(s1[1]) < ord(s2[1]) then result:= true
      else if ord(s1[1]) < ord(s2[1]) then result :=false
      else if ord(s1[1]) = ord(s2[1]) then
        result:=sprawdz(copy(s1,2,length(s1)),copy(s2,2,length(s2)))
    end;
    
    procedure Dodaj(var pocz: _wsk);
    var
      e,tmp: _wsk;
    begin
      new(e);
      writeln('Podaj slowo do wpisania:');
      readln(e^.slowo);
      if pocz = nil then
        begin
          e^.dalej:=pocz;
          pocz:=e;
        end
      else
        tmp:=pocz;
        while pocz <> nil do
          begin
            if Sprawdz(e^.slowo,pocz^.slowo) then tmp:=tmp^.dalej;
            pocz:=pocz^.dalej;
          end;
        e^.dalej:=tmp^.dalej;
        tmp^.dalej:=e;
    end;//Dodaj
    
    procedure PokazListe(Pocz: _wsk);
    begin
         while Pocz<>nil do
              begin
              write(Pocz^.slowo,^i);
              Pocz:=Pocz^.dalej;
         end;
    end;
    
    
    //GLOWNY
    
    var
    pocz: _wsk;
    slowo1,slowo2:string;
    znak:char;
    
    begin
    Pocz:=nil;
    repeat
          writeln('Lista jednokierunkowa');
          writeln('1 - pokaz cala Liste');
          writeln('2 - dodaj element do Listy');
          writeln('3 - zdejmij element z Listy');
          writeln('q - zakoncz program');
          readln(znak);
          case znak of
               '1': PokazListe(Pocz);
               '2': Dodaj(Pocz);
    
               'q': writeln('Do zobaczenia...');
               else
                   write('Wybrales inny klawisz, nacisnij ENTER aby wrocic');
          end;
          readln;
    until znak='q';
    end.

  2. #2
    Avatar Shaolineq
    Data rejestracji
    2008
    Posty
    234
    Siła reputacji
    18

    Domyślny

    -nie potrzebujesz funkcji sprawdz, w pascalu mozna bezposrednio porownywac stringi np wyrazenie 'abcde' < 'ghijk' zwroci wartosc TRUE
    - if pocz = nil then
    begin
    e^.dalej:=pocz;
    pocz:=e;
    end
    to zadziala, ale jest nieodpowiednio zapisane, e^.dalej ma wskazywac na nila, a nie na pocz(w tym przypadku i tak pocz wskazuje na nila ale to chyba nie do konca swiadomie zrobiles)
    -while pocz <> nil do
    zmieniasz pocz, a on ma sie nie zmieniac

    nie wiem czy cos jeszcze jest nie tak, nie sprawdzalem reszty

    Kod :
    program project1;
    uses crt;
    {$APPTYPE CONSOLE}
    
    type
      _wsk = ^wpis;
      wpis = record
        slowo: string;
        dalej: _wsk;
        end;
    
    {function sprawdz(s1, s2:string):boolean;
    var
      a:integer;
    begin
      if ord(s1[1]) < ord(s2[1]) then result:= true
      else if ord(s1[1]) < ord(s2[1]) then result :=false
      else if ord(s1[1]) = ord(s2[1]) then
        result:=sprawdz(copy(s1,2,length(s1)),copy(s2,2,length(s2)))
    end; }
    
    procedure Dodaj(var pocz: _wsk);
    var
      e,tmp: _wsk;
    begin
      new(e);
      writeln('Podaj slowo do wpisania:');
      readln(e^.slowo);
      writeln('slowo ktore wpisales to: "',e^.slowo,'"');
      if pocz = nil then
       begin
         pocz:=e;
         pocz^.dalej:=nil;
         //e^.dalej:=pocz;
         //pocz:=e;
       end
       else
       begin
        tmp:=pocz;
        if e^.slowo<tmp^.slowo then  //jesli slowo ma sie znalesc na pierwszym miejscu listy
          begin
            pocz:=e;
            pocz^.dalej:=tmp;
          end else   //jesli gdzies dalej
        while tmp^.dalej <> nil do
          begin
            if e^.slowo<tmp^.dalej^.slowo then //jesli nastepny element jest wiekszy od wstawianego
            begin
              e^.dalej:=tmp^.dalej;
              tmp^.dalej:=e;
            end else
            tmp:=tmp^.dalej;
          end;
        if e^.dalej=nil then //jesli 'e' sie nie zmienilo (nalezy wstawic element na ostatnie miejsce listy
        begin
             tmp^.dalej:=e;
        end;
       end;
    end;//Dodaj
    
    procedure PokazListe(tmp: _wsk);
    begin
         if tmp=nil then writeln('nie ma listy') else
         while tmp<>nil do
              begin
              //writeln(tmp^.slowo,^i);  co to ^i ?
              Writeln(tmp^.slowo);
              tmp:=tmp^.dalej;
         end;
    end;
    
    
    //GLOWNY
    
    var
    pocz: _wsk;
    slowo1,slowo2:string;
    znak:char;
    
    begin
    Pocz:=nil;
    repeat
          clrscr;
          writeln('Lista jednokierunkowa');
          writeln('1 - pokaz cala Liste');
          writeln('2 - dodaj element do Listy');
          writeln('3 - zdejmij element z Listy');
          writeln('q - zakoncz program');
          readln(znak);
          case znak of
               '1': PokazListe(Pocz);
               '2': Dodaj(Pocz);
               'q': writeln('Do zobaczenia...');
               else
                   write('Wybrales inny klawisz, nacisnij ENTER aby wrocic');
          end;
          Writeln('nacisnij dowolny klawisz aby kontynuowac...');
          readkey;
    until znak='q';
    end.
    Ostatnio zmieniony przez Shaolineq : 03-03-2013, 15:05

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Odpowiedzi: 565
    Ostatni post: 11-08-2012, 10:31
  2. Odpowiedzi: 32
    Ostatni post: 05-08-2010, 18:59
  3. [8.42+][Program] Kiro's Map Generator v0.0.1a
    Przez karQt w dziale Skrypty i technika
    Odpowiedzi: 0
    Ostatni post: 23-08-2009, 18:51
  4. Nowy program selekcji fansite'ów
    Przez Fejfer w dziale Niusy
    Odpowiedzi: 21
    Ostatni post: 17-11-2008, 19:08

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •