PDA

Zobacz pełną wersję : Program Ksiazka w Pascalu



magda80
17-05-07, 19:20
Pisze po raz drugi poprawiłam wczesniejszy program czy ktos moze mi napisac czy to jest teraz dobrze zrobione

Zdefiniuj typ rekordowy opisujący książkę(tytuł, autor, wydawca, rok wydania). Wykorzystaj typ w prostym programie obsługującym mała bibliotekę. Program powinien umożliwiać wprowadzenie danych książek ich wypisanie i znalezienie książki o zadanym tytule. Do przechowywania opisów książek wykorzystaj tablice rekordów.



Program ksiazka;
uses crt;
type
Tksiazka=record
Autor:string;
Tytul:string;
Wydawnictwo:string;
RokWydania:integer;
end;
var
Katalog:Tksiazka;
begin
with Katalog do
begin
Write (‘Podaj autora: ‘);
Readln (Autor);
Write (‘Podaj tytul: ‘);
Readln (Tytul);
Write (‘Podaj wydawnictwo: ‘);
Readln (Wydawnictwo);
Write (‘Podaj rok wydania: ‘);
Readln (RokWydania);
Writeln (‘ksiazka: ‘,Autor:20,Tytul:20,Wydawnictwo:20,RokWydania :5);
end;
end.

Alpha
18-05-07, 14:47
Pisze po raz drugi poprawiłam wczesniejszy program czy ktos moze mi napisac czy to jest teraz dobrze zrobione

Zdefiniuj typ rekordowy opisujący książkę(tytuł, autor, wydawca, rok wydania).
(...) Do przechowywania opisów książek wykorzystaj tablice rekordów.


Program ksiazka;
uses crt;
type
Tksiazka=record
Autor:string;
Tytul:string;
Wydawnictwo:string;
RokWydania:integer;
end;
...


Hm, wygląda na to, że dostałaś tu osobistego asystenta :-)
Zatem dobrze:

Zdefiniowałaś typ rekordowy dobrze;
nie ma jeszcze tablicy;
ponadto program wczytuje jedna książkę, ale nie robi tego, co jest w temacie.
Prosiłem, żebyś używała symbolu CODE, ale po to, żeby nie stracić wcięć; spójrz na mój fragment...
Kontynuuj.

magda80
01-06-07, 21:40
ALPHA czy mozesz mi powiedziec jak wstawic te wciecia bo ja tego niewiem jakos mi to nie wychodzi, i co sdzisz o tym kodzie choc do konca nie dziaa bo nie chce scompilowac



program biblioteka;
uses crt;
type
ksiazka = record
tytul: string[30];
autor : string[25];
wydawnictwo : string[25];
rok : integer;
licznik:word;
end;
var
katalog : array[1..100] of ksiazka;
l:integer;
wybor:word;

procedure wprowadz_dane(var r : ksiazka);
begin
with r do
begin
write('tytul: ');readln(tytul);
write('autor: ');readln(autor);
write('wydawnictwo: ');readln(wydawnictwo);
write('rok wydania: ');readln(rok);
writeln;
end;
end;

procedure wypisz_dane (r : ksiazka);
begin
with r do
begin
write('tytul: ');writeln(tytul);
write('autor: ');writeln(autor);
write('wydawnictwo: ');writeln(wydawnictwo);
write('rok wydania: ');writeln(rok);
end;
writeln;
end;

procedure dodaj_ksiazke;
begin
Inc(l);
writeln('nowa pozycja w katalogu; ',l);
wprowadz_dane(katalog[l]);
katalog[l].licznik:=0;
end;

procedure usun_ksiazke(numer : integer);
begin
katalog[numer]:= katalog[l];
dec(l);
end;


procedure wypisz_katalog;
var
i:integer;
begin
for i:=1 to l do
begin
writeln('pozycja katalogu nr ',i,'.');
wypisz_dane(katalog[i]);
end;
end;

function menu: integer;
var
c:char;
begin
clrscr;
writeln('program mala biblioteka');
writeln;
writeln('wybierz funkcje');
writeln('1:dodanie ksiazki');
writeln('2:wyswietlenie wszystkich pozycji');
writeln('3:usun');
writeln('4:szukaj ksiazki');
writeln('0:koniec pracy');
writeln;
repeat
c:=readkey
until c in ['0'..'4'];
menu:=ord(c)-ord('0');
end;



function szukaj(tekst:string; pozycja:integer) :integer;
var
i:integer;
begin
i:=pozycja;
while(pos(tekst, katalog[i].tytul)=0) and (i<=l) do
inc(i);
if i<=l then
szukaj :=i
else
szukaj :=-1;
end;

procedure sprawdz_ksiazki(tytul : string);
var
i:integer;
begin
write('Podaj tytul ksiazki: ');
readln(tytul);
i:=1;
repeat
i:=szukaj(tytul, i);
if i<>-1 then
begin
writeln('pozycja katalogu nr ',i,':');
wypisz_dane(katalog[i]);
inc(i);
end;
until i=-1
end;


begin
repeat
wybor:=menu;
case wybor of
1:dodaj_ksiazke;
2:begin
wypisz_katalog;
readln;
end;
3:usun_ksiazke;
4:sprawdz_ksiazki;
end;
until wybor=0;

end.

doderic
01-06-07, 23:14
ALPHA czy mozesz mi powiedziec jak wstawic te wciecia bo ja tego niewiem jakos mi to nie wychodzi
Zakładam, że wcięcia masz wstawione w TP (choćby spacjami).
Żeby je było widać też na forum, musisz kod wstawiac w tagach CODE (jak już Alpha zuważył), czyli dokładnie zrobić tak:


&#91;CODE&#93;
tutaj kod programu
&#91;/CODE&#93;

ew. użyć tej ikonki w edytorze, która wygląda jak #.


Hm, wygląda na to, że dostałaś tu osobistego asystenta :-)

I się więcej nie wtrącam, no chyba, że Alpha pozwoli ;)

magda80
02-06-07, 15:48
Wielkie dzieki doderic:) :kawa: :piwo: ,Tobie Alpha rowniez dziekuje za wskazówki ale chyba juz se odpuszcze ten program z książko i zajme sie innymi przedmiotami bo juz mam egzaminy i zaliczenia ale jeszcze dzis chwile nad nim posiedze :smile:

magda80
02-06-07, 16:41
troche porawiam ale jest problem z wyszukiwaniem reszta dziaa mozecie mi pomc gdzie bd lub czegos brak



program biblioteka;
uses crt;
type
ksiazka = record
tytul: string[30];
autor : string[25];
wydawnictwo : string[25];
rok : integer;
licznik:word;
end;
var
katalog : array[1..100] of ksiazka;
l:integer;
wybor:word;

procedure wprowadz_dane(var r : ksiazka);
begin
with r do
begin
write('tytul: ');readln(tytul);
write('autor: ');readln(autor);
write('wydawnictwo: ');readln(wydawnictwo);
write('rok wydania: ');readln(rok);
writeln;
end;
end;

procedure wypisz_dane (r : ksiazka);
begin
with r do
begin
write('tytul: ');writeln(tytul);
write('autor: ');writeln(autor);
write('wydawnictwo: ');writeln(wydawnictwo);
write('rok wydania: ');writeln(rok);
end;
writeln;
end;

procedure dodaj_ksiazke;
begin
Inc(l);
writeln('nowa pozycja w katalogu; ',l);
wprowadz_dane(katalog[l]);
katalog[l].licznik:=0;
end;

procedure usun_ksiazke;
var
numer : integer;
begin
katalog[numer]:= katalog[l];
dec(l);
end;


procedure wypisz_katalog;
var
i:integer;
begin
for i:=1 to l do
begin
writeln('pozycja katalogu nr ',i,'.');
wypisz_dane(katalog[i]);
end;
end;

function menu: integer;
var
c:char;
begin
clrscr;
writeln('program mala biblioteka');
writeln;
writeln('wybierz funkcje');
writeln('1:dodanie ksiazki');
writeln('2:wyswietlenie wszystkich pozycji');
writeln('3:usun');
writeln('4:szukaj ksiazki');
writeln('0:koniec pracy');
writeln;
repeat
c:=readkey
until c in ['0'..'4'];
menu:=ord(c)-ord('0');
end;



function szukaj(tekst:string; pozycja:integer) :integer;
var
i:integer;
begin
i:=pozycja;
while(pos(tekst, katalog[i].tytul)=0) and (i<=l) do
inc(i);
if i<=l then
szukaj :=i
else
szukaj :=-1;
end;

procedure sprawdz_ksiazki;
var
tytul : string;
i:integer;
begin
write('Podaj tytul ksiazki: ');
readln(tytul);
i:=1;
repeat
i:=szukaj(tytul, i);
if i<>-1 then
begin
writeln('pozycja katalogu nr ',i,':');
wypisz_dane(katalog[i]);
inc(i);
end;
until i=-1
end;


begin
repeat
wybor:=menu;
case wybor of
1:dodaj_ksiazke;
2:begin
wypisz_katalog;
readln;
end;
3:usun_ksiazke;
4:sprawdz_ksiazki;
end;
until wybor=0;

end.

doderic
02-06-07, 17:43
troche porawiam ale jest problem z wyszukiwaniem reszta dziaa mozecie mi pomc gdzie bd lub czegos brak


procedure sprawdz_ksiazki;
var
tytul : string;
i:integer;
begin
write('Podaj tytul ksiazki: ');
readln(tytul);
i:=1;
repeat
i:=szukaj(tytul, i);
if i<>-1 then
begin
writeln('pozycja katalogu nr ',i,':');
wypisz_dane(katalog[i]);
inc(i);
end;
until i=-1
{BRAKUJE dokadnie tutaj}
end;

Zauwa, e po wyszukiwaniu od razu przechodzisz znw do menu, a wic ekran jest czyszczony - nie zdysz nawet zobaczy wynikw wyszukiwania. Male "readln" czyni cuda. ;)

Natomiast co chyba popsuem, bo jak usunem ostatni ksik z katalogu, to program zwariowa... :(
---
Ju wiem co z usuwaniem: nie pytasz, ktr pozycj usun.

magda80
03-06-07, 09:34
Dziki doderic teraz po wstawieniu 'readln' dziaa :brawo:


procedure sprawdz_ksiazki;
var
tytul : string;
i:integer;
begin
write('Podaj tytul ksiazki: ');
readln(tytul);
i:=1;
repeat
i:=szukaj(tytul, i);
if i<>-1 then
begin
writeln('pozycja katalogu nr ',i,':');
wypisz_dane(katalog[i]);
inc(i);
end;
until i=-1;
readln;

end;

:razz: :piwo: DZIEKI

doderic
03-06-07, 10:23
Cieszę się, że mogłem pomóc... i powodzenia na egz.!
:tak_trzymaj: