• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista której elementy to listy książek

Object Storage Arubacloud
0 głosów
202 wizyt
pytanie zadane 3 stycznia 2016 w Inne języki przez programmero Bywalec (2,420 p.)

Witam mam do napisania listę która będzie zawiera listy książek. Pierwsza lista zawiera litery alfabetu A, B, C a listy pozostałe tytuły książek (mam sobie wymyślić).

Dodatkowo lista liter alfabetu jest samo organizująca według litery czyli kolejność A, B, C.

Zadanie składu się z kilku podpunktów:

1. Opracować procedurę, która wstawia nową literę do listy liter. // Zrobiłem

2. Opracować funkcję, która zwraca wskaźnik na szukany element listy liter. // ???

3. Opracować funkcję, która zwraca wskaźnik na szukany element listy książek. // ???

4. Opracować procedurę, która wstawia nowy tytuł do listy książek. // ???

 

Jak zrobić listę samo organizującą się według litery i aby zawiera listy książek? Napisałem do tej pory tyle

program zad_listy;

type
  pLitera = ^TLitera;
  pKsiazka = ^TKsiazka;
  TLitera = record
    litera:char;
    kolejny:pLitera;
    ksiazki:pKsiazka;
  end;
  TKsiazka = record
    tytul:string[32];
    ilosc:integer;
    kolejny:pKsiazka;
  end;

procedure dodajLitere(var glowa:pLitera; litera:char);
var
  p:pLitera;
begin
  new(p);
  p^.litera := litera;
  p^.kolejny := glowa;
  glowa := p;
end;

procedure wyswieltListe(p:pLitera);
begin
  while p <> NIL do
  begin
    writeln(p^.litera);
    p := p^.kolejny;
  end;
end;

var
  L_liter:pLitera;

begin
  L_liter := NIL;
  dodajLitere(L_liter, 'A');
  dodajLitere(L_liter, 'B');
  dodajLitere(L_liter, 'C');
  writeln('lista:');
  wyswieltListe(L_liter);
  readln;
end.

 

Na pozostałe podpunkty również brak pomysłów ;/

2 odpowiedzi

+1 głos
odpowiedź 5 stycznia 2016 przez sonquer Gaduła (4,280 p.)
wybrane 5 stycznia 2016 przez programmero
 
Najlepsza
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Windows;

type
  TBook = record
    title:string[32];
    next:^TBook;
  end;
  TLetter = record
    letter:char;
    pLetter:Pointer;
    firstBook:Pointer;
    lastBook:Pointer;
  end;
var
  firstLetter : Pointer;
  lastLetter : Pointer;
  ptr : Pointer;

procedure AddLetter( letter:Char );
var
  p : Pointer;
begin
  p := AllocMem( SizeOf(TLetter) );
  TLetter(p^).letter := letter;
  TLetter(p^).pLetter := nil;
  TLetter(p^).firstBook := nil;
  TLetter(lastLetter^).pLetter := p;
  lastLetter := p;
end;

function GetLetter( letter:Char ) : Pointer;
var
  tmPtr : Pointer;
begin
  tmPtr := firstLetter;
  while TLetter(tmPtr^).pLetter <> nil do
    begin
      if TLetter(tmPtr^).letter = letter then Result := tmPtr;
      tmPtr := TLetter(tmPtr^).pLetter;
    end;
  if TLetter(tmPtr^).letter = letter then Result := tmPtr;
end;

procedure AddBookToLetter( letter:Char; title:String );
var
  tmPtr : Pointer;
  p : Pointer;
begin
  tmPtr := firstLetter;
  while TLetter(tmPtr^).pLetter <> nil do
    begin
      if TLetter(tmPtr^).letter = letter then
        begin
          if TLetter(tmPtr^).firstBook = nil then
            begin
               TLetter(tmPtr^).firstBook := AllocMem( SizeOf( TBook ) );
               TBook(TLetter(tmPtr^).firstBook^).title := title;
               TBook(TLetter(tmPtr^).firstBook^).next := nil;
               TLetter(tmPtr^).lastBook := TLetter(tmPtr^).firstBook;
            end
          else
            begin
              p := AllocMem( SizeOf(TBook) );
              TBook(p^).title := title;
              TBook(p^).next := nil;
              TBook( TLetter(tmPtr^).lastBook^).next := p;
              TLetter(tmPtr^).lastBook := p;
            end;
        end;
      tmPtr := TLetter(tmPtr^).pLetter;
    end;
  if TLetter(tmPtr^).letter = letter then
    begin
      if TLetter(tmPtr^).firstBook = nil then
        begin
           TLetter(tmPtr^).firstBook := AllocMem( SizeOf( TBook ) );
           TBook(TLetter(tmPtr^).firstBook^).title := title;
           TBook(TLetter(tmPtr^).firstBook^).next := nil;
           TLetter(tmPtr^).lastBook := TLetter(tmPtr^).firstBook;
        end
      else
        begin
          p := AllocMem( SizeOf(TBook) );
          TBook(p^).title := title;
          TBook(p^).next := nil;
          TBook( TLetter(tmPtr^).lastBook^).next := p;
          TLetter(tmPtr^).lastBook := p;
        end;
    end;
end;

function GetTitle( title : String ) : Pointer;
var
  tmPtr : Pointer;
  tiPtr : Pointer;
begin
  tmPtr := firstLetter;
  while TLetter(tmPtr^).pLetter <> nil do
    begin
      tiPtr := TLetter(tmPtr^).firstBook;
      if tiPtr <> nil then
        begin
          while TBook(tiPtr^).next <> nil do
            begin
              if TBook(tiPtr^).title = title then Result := tiPtr;
              tiPtr := TBook(tiPtr^).next;
            end;
          if TBook(tiPtr^).title = title then Result := tiPtr;
        end;
      tmPtr := TLetter(tmPtr^).pLetter;
    end;
  tiPtr := TLetter(tmPtr^).firstBook;
  if tiPtr <> nil then
    begin
      while TBook(tiPtr^).next <> nil do
        begin
          if TBook(tiPtr^).title = title then Result := tiPtr;
          tiPtr := TBook(tiPtr^).next;
        end;
      if TBook(tiPtr^).title = title then Result := tiPtr;
    end;
end;

////////// procedura debug ///////////////////
procedure showNode;
var
  tmPtr : Pointer;
  tiPtr : Pointer;
begin
  Writeln;
  Writeln( '=====DEBUG NODE BEGIN=====' );
  Writeln;
  tmPtr := firstLetter;
  while TLetter(tmPtr^).pLetter <> nil do
    begin
      Writeln( TLetter(tmPtr^).letter );
      tiPtr := TLetter(tmPtr^).firstBook;
      if tiPtr <> nil then
        begin
          while TBook(tiPtr^).next <> nil do
            begin
              Writeln( '  |_  ', TBook(tiPtr^).title );
              tiPtr := TBook(tiPtr^).next;
            end;
          Writeln( '  |_  ', TBook(tiPtr^).title );
          // TBook(tiPtr^).title;
        end;
      tmPtr := TLetter(tmPtr^).pLetter;
    end;
  Writeln( TLetter(tmPtr^).letter );
  tiPtr := TLetter(tmPtr^).firstBook;
  if tiPtr <> nil then
    begin
      while TBook(tiPtr^).next <> nil do
        begin
          Writeln( '  |_  ', TBook(tiPtr^).title );
          tiPtr := TBook(tiPtr^).next;
        end;
      Writeln( '  |_  ', TBook(tiPtr^).title );
    end;
  Writeln;
  Writeln( '======DEBUG NODE END======' );
  Writeln;
end;
///  USUNAC

begin
  try
    firstLetter := AllocMem( SizeOf(TLetter) );
    TLetter(firstLetter^).letter := 'A';
    TLetter(firstLetter^).pLetter := nil;
    TLetter(firstLetter^).firstBook := nil;
    lastLetter := firstLetter;
    AddLetter('B');
    AddLetter('C');

    ptr := GetLetter('B');
    Writeln(TLetter(ptr^).letter);

    AddBookToLetter( 'B', 'Bugi w kodzie' );
    AddBookToLetter( 'B', 'Bede lepszy' );

    AddBookToLetter( 'A', 'Ala' );
    AddBookToLetter( 'C', 'Cezar' );

    ptr := GetTitle('Cezar');
    Writeln(TBook(ptr^).title);

    ptr := GetTitle('Bede lepszy');
    Writeln(TBook(ptr^).title);

    showNode;

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Oto twój kod. Pozdr cool

komentarz 5 stycznia 2016 przez programmero Bywalec (2,420 p.)
Dziękuję za kod, profesjonalista z ciebie, cholera jasna aż ciężko to zrozumieć jak się na to patrzy. Mogę liczyć na wyjaśnienie albo czy wgl da się to napisać prościej?
+1 głos
odpowiedź 3 stycznia 2016 przez sonquer Gaduła (4,280 p.)
Hej, dobrze rozumiem że ma to wyglądać w następujący sposób:
A |
   |__> Ale jaja
   |__> Ala ma kota
B |
   |_> Bugi w kodzie
   |_> Bal przebierańców
C |

Pozdr.
komentarz 4 stycznia 2016 przez programmero Bywalec (2,420 p.)
Dokładnie tak powinno to wyglądać i funkcjonować. Podpowiesz jak wykonać? I chyba ta moja lista nie organizuje się sama prawda?
komentarz 4 stycznia 2016 przez sonquer Gaduła (4,280 p.)
Pokaże Ci potem rozwiązanie na podstawie kodu.
komentarz 4 stycznia 2016 przez programmero Bywalec (2,420 p.)
Jasne, byłoby świetnie.

Podobne pytania

0 głosów
0 odpowiedzi 448 wizyt
0 głosów
1 odpowiedź 111 wizyt
+1 głos
1 odpowiedź 259 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...