PDA

Zobacz pełną wersję : Turbo pascal(Baza danych)



Bobicz
28-05-07, 18:18
Mam takie zadanie:

Napisz program o nazwie zbiory multimedialne zawieraj±cy następuj±ce pola w rekordzie:
-tytuł
-rodzaj danych
-rodzaj no¶nika
-opis
Program ma umożliwiać:
1.założenie nowego pliku
2.przyjmowanie nowego elementu
3.wy¶wietlenie wszystkich elementów
4.wy¶wietlenie pojedynczego elementu
5.zmiany w elemencie
6.usunięcie elementu
7.sortowanie elementów

Cze¶ć zadania już zrobiłem ale teraz mi wyskakuje bł±d procedurze zmiany w elemencie i nie chce działać wy¶wietlenie wszystkich elementów które wcze¶niej działało przed wprowadzeniem nowych procedur. Proszę pomoc.I jak kto¶ by umiał zrobić sortowanie podpunkt 7 tego akurat nie umie . Kod Ľródłowy programu poniżej:



PROGRAM ZBIORY_MULTIMEDIALNE;
USES CRT;
TYPE
DANE_MULTIMEDIA=RECORD
RODZAJ_DANYCH:STRING[25];
TYTUL:STRING[25];
OPIS:STRING[250];
RODZAJ_NOSNIKA:STRING[10];
END;
REKORD_W_PLIKU=FILE OF DANE_MULTIMEDIA;
DOSTEP=STRING[128];
VAR
OKNO_PLIKU:REKORD_W_PLIKU;
MULTIMEDIA:DANE_MULTIMEDIA;
LICZNIK:INTEGER;
WYBRANY_KLAWISZ:CHAR;


FUNCTION ISTNIEJE_PLIK (Nazwa_pliku : Dostep):Boolean;
BEGIN
(*$I-*);
Assign(Okno_pliku,Nazwa_pliku);
Reset(Okno_pliku);
(*$I+*);
IF IOResult=0 then
BEGIN
close(Okno_pliku);
istnieje_plik:=True
END
else
istnieje_plik:= False
End;


PROCEDURE Polecenie;
BEGIN
TextColor (LightRed);
Writeln ('Uwaga!!! ',#7#7#7,'Plik musi zostac',+
'najpierw utworzony! '); Delay (3000);
NormVideo
END;
PROCEDURE Tworzenie_nowego_pliku;
VAR
Nowy_plik: Boolean;
BEGIN
ClrScr;
Nowy_plik:=true;
TextColor(Yellow);
IF Istnieje_plik('MULTI.DAN') THEN
BEGIN
Writeln ('Uwaga!!! ',#7#7#7,' Wszystkie dotychczasowe',+ 'dane zostana usuniete z pliku!');
Writeln;
REPEAT
Write('Wykonywac dalej? (T)ak / (N)ie: ');
Readln (Wybrany_klawisz)
UNTIL Wybrany_klawisz IN ['T', 't', 'N', 'n'];
IF Wybrany_klawisz IN ['N', 'n'] THEN
Nowy_plik:=FALSE
END;
IF Nowy_plik THEN
BEGIN
Assign(Okno_pliku, 'MULTI.DAN');
Rewrite(Okno_pliku);
Close(Okno_pliku);
Writeln;
TextColor (White);
Writeln ('Nowo utworzony plik nazywa sie MULTI.DAN'); Delay (3000);
END;
NormVideo
END;


PROCEDURE dodawanie_nowego_zbioru;
BEGIN
Clrscr;
Textcolor(Yellow);
IF istnieje_plik('MULTI.DAN') THEN
BEGIN
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
Writeln;
Writeln('Rezygnacja ->>>x<<+>>Enter<<');
TextColor(LightBlue);
REPEAT
Writeln;
Write('Tytuˆ: ');
Readln(Multimedia.Tytul);
IF ((Multimedia.Tytul <> 'x') AND (Multimedia.Tytul <> 'x')) THEN
BEGIN
Write('Rodzaj danych: ');
Readln(Multimedia.Rodzaj_danych);
Seek(Okno_pliku,FileSize(Okno_pliku));
Write('Rodzaj nosnika: ');
Readln(Multimedia.Rodzaj_nosnika);
Write('Opis: ');
Readln(Multimedia.opis);
Write(Okno_pliku,Multimedia);
Writeln;
END;
UNTIL (Multimedia.Tytul = 'X') OR
(Multimedia.Tytul = 'x');
Close(Okno_pliku)
END
ELSE
Polecenie;
NormVideo
END;


PROCEDURE Lista_Multimediow;
{Wła¶nie ta procedura mi nie
działa.Działała gdy nie dodałem procedur tych co s± poniżej.
Jest napisana poprawnie program się uruchamia ale nie wypisuje}


BEGIN
ClrScr;
Licznik:=0;
IF Istnieje_plik('MULTI.DAN') THEN
BEGIN
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
TextColor(White) ;
Writeln (& #39;********************************************** ******************************
');
Writeln (' Tytul Rodzaj danych Rodzaj nosnika Opis ');
Writeln (& #39;********************************************** ******************************
*');
TextColor(Yellow) ;
WHILE NOT Eof (Okno_pliku) DO
BEGIN
Licznik:=Licznik+1;
Read(Okno_pliku,Multimedia);
GoToXY(4,Licznik+4);
Write(Multimedia.Tytul);
GoToXY (20,Licznik+4);
Write(Multimedia.Rodzaj_danych);
GoToXY (40,licznik+4);
Write(Multimedia.Rodzaj_nosnika);
GoToXY (55,licznik+4);
Write(Multimedia.Opis);
IF Licznik = 40 THEN
BEGIN
Readln;
Clrscr;
licznik:=0
END
END;
TextColor(White);
GoToXY (1,licznik+8);
Writeln(& #39;********************************************** ******************************
**');
Close(Okno_pliku)
END
ELSE
Polecenie;
NormVideo;
END;

PROCEDURE Edycja_jednego_zbioru;
var
szukany_tytul:string[25];
multimedia_jest_w_pliku:boolean;
BEGIN
ClrScr;
if istnieje_plik('MULTI.DAN') then
BEGIN
multimedia_jest_w_pliku:=false;
Write('Prosze podac tytul poszukiwanych danych multimedialnych : ');
Readln(Szukany_tytul);
Assign(okno_pliku,'MULTI.DAN');
Reset(okno_pliku);
Writeln;
Textcolor(red);
If eof(okno_pliku) then
Writeln('W pliku nie ma jeszcze zadnego',+'zapisu ! ',#7);
Textcolor(white);
While not eof(okno_pliku) do
BEGIN
Read(Okno_pliku,multimedia);
If multimedia.tytul=szukany_tytul then
BEGIN
Writeln('Tytul : ',+ multimedia.tytul);
Writeln('Rodzaj danych : ', + multimedia.rodzaj_danych);
Writeln('Rodzaj nosnika : ',+ multimedia.rodzaj_nosnika);
Writeln('Opis : ', + multimedia.opis);
multimedia_jest_w_pliku:=true
END
END;
If not multimedia_jest_w_pliku then
Writeln('Szukana multimedia nie znajduja sie w spisie!!!(Mozna je dodac)');
Close(okno_pliku);
END
Else
Polecenie;
NormVideo;
Readln
End;


PROCEDURE Zmiany_w_multimediach;
VAR
Podany_tytul:integer;
BEGIN
ClrScr;
If istnieje_plik('MULTI.DAN') then
BEGIN
Textcolor(LightGreen);
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
Write('Prosze podac tytul multimedi ktoirych dane maja byc zmienione: ');
ReadLN(Podany_tytul);
Seek(Okno_pliku,Podany_tytul);
Read(Okno_pliku,multimedia);
end;
end;


PROCEDURE Usuwanie_zbioru;
VAR
Okno_tymczasowe:FILE OF Dane_multimedia;
Usuwany_tytul:string[25];
BEGIN
Writeln;
If Istnieje_plik('MULTI.DAN')then
Begin
Assign(Okno_pliku, 'MULTI.DAN');
Reset(Okno_pliku);
Textcolor(lightred) ;
Write('Prosze podac tytul usuwanego zbioru multimedialnego');
Readln(Usuwany_tytul);
Assign(Okno_tymczasowe,'CHWILOWY.DAN');
Rewrite(Okno_tymczasowe);
WHILE NOT Eof(Okno_pliku) do
Begin
Read(Okno_pliku,multimedia);
If (multimedia.tytul) <> Usuwany_tytul Then; {Wła¶nie w tym miejscu mam bł±d nie wiem dlaczego}
BEGIN
multimedia.tytul:=FilePos(Okno_tymczasowe);
Write(Okno_tymczasowe,multimedia);
End;
End;
Close(Okno Pliku);
Close(Okno_Tymczasowe);
Erase(Okno_Pliku);
Rename(Okno_tymczasowe, 'MULTI.DAN');
END
ELSE
Polecenie;
normvideo
END;


Procedure Okno_wyboru;{To jest menu.Działa bez zarzutów}
Begin;
Clrscr;
TextColor(White);
Writeln('Potwierdzenie klawiszem ENTER.');
Writeln;
Writeln('Prosz&#169; nacisnac odpowiedni klawisz! ');
Writeln;
TextColor(White);
Writeln;
Write('Tworzenie nowego pliku');
textcolor(Green);
writeln('-T');
textcolor(white);
Write('Dodanie nowego zbioru multimedialnego');
textcolor(Green);
writeln ('-D');
textcolor(White);
Write('Lista wszystkich zbiorow multimedialnych');
Textcolor (Green);
Writeln('-L');
Textcolor(White);
Write('Wyswietla pojedynczy zbior multimedialny');
Textcolor(Green);
Writeln('-W');
Textcolor(White);
Write('Zmiany w zbiorze multimedialnym');
Textcolor(Green);
Writeln('-Z');
Textcolor(White);
Write('Usuwanie zbioru multimedialnego');
Textcolor(Green);
Writeln('-U');
Textcolor(White);
Write('Koniec programu');
Textcolor(Green);
Writeln('-K');
Writeln;
Write('Twoj wybor: ');
END;


BEGIN
clrscr;
REPEAT
Okno_wyboru;
Readln(wybrany_klawisz);
CASE Wybrany_klawisz OF
'T', 't': Tworzenie_nowego_pliku;
'D', 'd': Dodawanie_nowego_zbioru;
'L', 'l': Lista_multimediow;
'W', 'w': Edycja_jednego_zbioru;
'Z', 'z': Zmiany_w_multimediach;
'U', 'u': Usuwanie_zbioru;
else
NormVideo
END
until Wybrany_klawisz IN ['K', 'k'];
Repeat Until Keypressed;
End.

RRybak
29-05-07, 09:19
Nie zastosowałeś znacznika [ CODE ], więc nie będę tego dogłębnie analizował - program jest po prostu nieczytelny.

Na pierwszy rzut oka tylko spostrzeżenie, że w linii którą oznaczyłeś za błędną masz średnik po "then" - czyli wykonuje się instrukcja pusta, a nie - jak pewnie założyłeś - "begin..end" pod spodem.
Za to po NormVideo w paru miejscach średnika brakuje. Tyle na naprowadzenie na start..

doderic
29-05-07, 09:54
PROCEDURE Lista_Multimediow; {Właśnie ta procedura mi nie działa.Działała gdy nie dodałem procedur tych co są poniżej.Jest napisana poprawnie program się uruchamia ale nie wypisuje}

A próbowałeś uruchomić tylko tę procedurę używając pliku MULTI.DAN, który na pewno jest poprawny? Być może procedury, które dodałeś niepoprawnie modyfikują/zapisują do pliku?

PowtĂłrzÄ™ teĹĽ za RRybakiem: uĹĽywaj znacznika [code] przy wklejaniu kodu na forum.

Bobicz
29-05-07, 15:25
Poprawiłem procedure wypisywania wszystkich danych ale teraz mam problem z procedur± zmiany w multimediach konkretnie to w tej linijce mam bł±d :



PROCEDURE Zmiany_w_multimediach;
VAR
Podany_tytul:string[25];
BEGIN
ClrScr;
If istnieje_plik('MULTI.DAN') then
BEGIN
Textcolor(LightGreen);
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
Write('Prosze podac tytul multimedi ktoirych dane maja byc zmienione: ');
ReadLN(Podany_tytul);
Seek(Okno_pliku,Podany_tytul);{Tutaj mam bł±d}
Read(Okno_pliku,multimedia);
end;
end;

doderic
29-05-07, 15:54
Po¶więcę się...

Bobicz, w dobrym stylu jest stosowanie wcięć przy pisaniu programów. Ułatwia to póĽniejsze ich czytanie i zrozumienie. Ogólna zasada jest taka, aby wydzielać pewne bloki programu. W przypadku TP zwykle zwiększamy wcięcie przy takich słowach kluczowych, jak np. BEGIN oraz wewn±trz bloków BEGIN - END. Tak więc Twój kawałek kodu powinien wygl±dać bardziej tak:


PROCEDURE Zmiany_w_multimediach;
VAR
Podany_tytul:string[25];
BEGIN
ClrScr;
If istnieje_plik('MULTI.DAN') then
BEGIN
Textcolor(LightGreen);
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
Write('Prosze podac tytul multimedi ktoirych dane maja byc zmienione: ');
ReadLN(Podany_tytul);
Seek(Okno_pliku,Podany_tytul);{Tutaj mam bł±d}
Read(Okno_pliku,multimedia);
end;
end;

Pamiętaj o takich rzeczach...
8)

doderic
29-05-07, 16:04
Seek(Okno_pliku,Podany_tytul);{Tutaj mam błąd}

A jaki błąd?

O ile mnie pamięć nie myli, to funkcja Seek, jako drugi argument powinna dostawać rekord, który ma wyszukać, lub pozycję w bajtach. Tak więc, aby wyszukać rekord o zadanym tytule powinieneś raczej "pobiegać" po rekordach w pętli i posprawdzać czy kolejny rekord posiada szukany tytuł.

Bobicz
29-05-07, 16:13
Wyskakuje mi błąd:
Error 38:Integer Expression Expected

doderic
29-05-07, 16:35
Wyskakuje mi błąd:
Error 38:Integer Expression Expected
Tak więc, jak pisałem: Seek nie może zostać użyte tak, jak chcesz (niestety). Musisz napisać swoją własną funkcję "Szukaj", która przejrzy rekordy.

Bobicz
29-05-07, 16:56
Nie wiem czym mam to zastąpić chciałem aby to było zmieniane po podaniu tytułu ale widzę ze będę musiał z tego zrezygnować i zastąpić liczbami.

doderic
29-05-07, 17:46
Może jest inne rozwiązanie: dodanie funkcji wyszukajMutlimediaPoTytule, która przeszuka rekordy i zwróci ten, który zawiera poszukiwany tytuł?
coĹ› w stylu:

function wyszukajMutlimediaPoTytule(tytul: String) : DANE_MULTIMEDIA;
begin
repeat
Read(Okno_pliku,tmpMultimedia);
until (tmpMultimedia=tytul) or eof(Okno_pliku);
if (tmpMultimedia.tytul=tytul) then
wyszukajMutlimediaPoTytule = tmpMultimedia;
else
wyszukajMutlimediaPoTytule = Nothing;
end;

* Nie mam TP, więc pisałem po prostu tutaj, w poście - tak więc prawie na pewno funkcje nie zadziała tak sama z siebie, trzeba ją pewnie poprawić, ale mam nadzieję, że wystarczy jako koncept.

Takie rozwiązanie daje też możliwości rozwoju na przyszłość, jak byś chciał np. wyszukiwać po wilde cards (np. z gwiazdką). Wystarczy wtedy zamienić warunek "until (tmpMultimedia.tytul=tytul) ..." na "until (czyPasuje(tmpMultimedia.tytul, tytul))"...

Bobicz
29-05-07, 17:55
Dzięki za pomoc ale nie wiem czy sobie z tym poradzę ponieważ nie brałem takich
rzeczy jakie napisałe¶ ale dziękuje.Postaram się to przerobić do moich potrzeb.

Gdy zmieniłem na liczby(muszę podać liczbę usun±ć i zmienić) to funkcja usuń działa bez zarzutu ale funkcja do zmieniania gdy podaje liczę to przechodzi do menu. Nie wiem dlaczego a powinno wyskoczyć okno w którym mam wprowadzać poprawki. To funkcja może wiesz gdzie popełniłem bł±d ale wydaje mi sie że jest dobra



PROCEDURE Zmiany_w_multimediach;
VAR
Podany_nr:integer;
BEGIN
ClrScr;
If istnieje_plik('MULTI.DAN') then
BEGIN
Textcolor(LightGreen);
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
Write('Prosze podac Numer multimedi ktorych dane maja byc zmienione: ');
ReadLN(Podany_nr);
Seek(Okno_pliku,Podany_nr);
Read(Okno_pliku,Multimedia);
end;
Writeln;
end;

doderic
29-05-07, 21:30
Przejrzałem cały Twój program z pierwszego posta i mam kilka uwag:
1. Czy procedury: Zmiany_w_multimediach i Edycja_jednego_zbioru nie s± do siebie bardzo podobne?
Jedna wyszukuje i wy¶wietla rekordy, a druga ma wyszukiwać i... wy¶wietlać rekord, no i jeszcze umożliwiać zmiany.
Zmiany_w_multimediach niestety nie wy¶wietlaj± nigdzie wyszukanego rekordu - dlatego wraca do menu.

2. Obawiam się, że uczyli Cię Turbo Pascala, ale nikt nie nauczył Ciebie pisać programów?
Nie chcę tu aspirować do miana guru, jednak pozwól, że przedstawię Ci tu moje podej¶cie do Twojego zadania:

Jak podałe¶ - program ma posiadać następuj±ce funkcjonalno¶ci:

1.założenie nowego pliku
2.przyjmowanie nowego elementu
3.wy¶wietlenie wszystkich elementów
4.wy¶wietlenie pojedynczego elementu
5.zmiany w elemencie
6.usunięcie elementu
7.sortowanie elementów

Dla każdej z tych przygotujmy więc osobne funkcje (jak to zacz±łe¶ robić).
Żeby wydzielić pewne fragmenty progamu, ktore bedzie mozna wielokrotnie uzywac, przemy¶lmy też:
ad.1. czy to ma być osobna komenda, czy plik powinien być założony automatycznie przy dodawaniu nowego (pierwszego) elementu?
ad.4. wy¶wietlanie, czyli wypisanie danych. aby wybrac, ktory element - stworzmy osobna funkcje: wyszukaj.
ad.3. wy¶wietlanie wszystkich el. czyli: wy¶wietl pierwszy, przejdĽ do następnego, wy¶wietl, przejdĽ, wy¶wietl... oczywiscie uzyjmy wyswietlania z punktu 4.
ad.5. i 6. w punkcie 4. powstala juz procedura wyszukiwania, ktora mozna uzyc tutaj.
ad.7. jak nie wiem, jak cos napisac - szukam w google - jak szukam algorytmow to zaczynam od Wikipedii, np. http://pl.wikipedia.org/wiki/Algorytmy_sortowania

Nauczyłem się też przez te moje lata programowania, że pożytecznym może być takie definiowanie funkcji, żeby wszystkie parametry potrzebne do działania dostawały jako ich argumenty oraz żeby zwracały wynik, a nie modyfikowały jakie¶ zmienne globalne. Takie podej¶ci pomaga, jak chcesz póĽniej dodać nowe funkcjonalno¶ci.

Tak więc np. funkcja wyszukuj±ca zadany rekord mogła by wygl±dać tak:

function szukajMultimedii(tytul: String, plik: String): DANE_MULTIMEDIA
{funkcja zwraca rekord typu DANE_MULTIMEDIA lub NIL jeżeli rekordu nie znaleziono}
begin
{po napisaniu dzialajace funkcji juz nas nie interesuje srodek,
traktujemy funkcje jak 'czarne pudelko' - cos wchodzi, cos wychodzi,
juz nie wazne jak to dziala w srodku}
end;
wtedy w programie możesz użyć:

Write('Prosze podac tytul poszukiwanych danych multimedialnych : ');
Readln(Szukany_tytul);
Multi = szukajMultimedii(Szukany_tytul, 'MULTI.DAN');
if Multi = NIL then
wrtieln('Nie ma takiego rekordu')
else
wrtieln('Rekord znaleziony');
wypiszRekord(Multi)


Trochę się rozpisałem ;)
Jak masz jakie¶ pytania, wal ¶miało - poczytaj sobie trochę o sortowaniu, wybierz algorytm i możemy potem obgadać... 8)

Bobicz
29-05-07, 23:34
Nierozumnie niektórych rzeczy które piszesz ja dopiero mam 1 rok programowanie . Inie uczyłem się niektórych rzeczy które piszesz a te procedury które napisałem wzorowałem się na bazie danych którą robiliśmy na lekcji.A czy te procedury są do siebie podobne??Pewnie tak ale tak robiliśmy na lekcji ja się tylko wzoruje i dopisuje od siebie.Baza danych którą robiliśmy na lekcji jest podobna do mojej i wiej działa wszystko poprawnie tak że zostały mi jeszcze 2 procedury sortowanie i poprawienie zmiany w multimediach.

doderic
30-05-07, 07:45
OK, nie będę Cię zadręczał tymi dodatkowymi rzeczami. Choć jeśli chcesz być programistą zawodowo, to i tak będziesz się musiał tego kiedyś nauczyć.
Jeśli wyrazisz zainteresowanie, możemy wrócić do tego tematu później, na spokojnie, bez presji zadania z informatyki.

Jeśli zaś chodzi o procedury:
Edycja_jednego_zbioru - wyszukuje zadany tytuł w bazie i wyświetla zawartość takiego wpisu.
Natomiast Zmiany_w_multimediach - ma zrobić najpierw dokładnie to, co poprzednia procedura, czyli wyszukać zadany tytuł, wyświetlić go, a następnie umożliwić zmiany. Tak więc, żeby nie pisać dwa razy tego samego, możesz użyć kodu z Edycja_jednego_zbioru.

Osobną sprawą jest, czy po prostu skopiujesz kod z Edycja_jednego_zbioru do Zmiany_w_multimediach i dopiszesz końcówkę, czy też zastosujesz podejście takie:


procedure Zmiany_w_multimediach;
begin
{wyszukaj wpis do zmiany}
Edycja_jednego_zbioru;
{teraz w globalnej zmiennej "multimedia" znajduje siÄ™ jakiĹ› aktualny rekord
to właśnie jego będziesz zmieniać}
{tutaj miejsce na kod zmieniajÄ…cy wpis}
end;

W takim przypadku dobrze było by zamienić procedurę Edycja_jednego_zbioru na funkcję, która zwraca true/false - czy znalazła szukany rekord (czyli zwraca wartość zmiennej multimedia_jest_w_pliku) i sprawdzać to:


Zmiany_w_multimediach
var
wynik: boolean;
begin
wynik = Edycja_jednego_zbioru;
if (wynik) then
begin
{proponuj zmiany wpisu tylko, jesli zostal znaleziony!}
end;
end;

Bobicz
02-06-07, 14:58
Program już mi działa poprawnie ale mam zrobić ostatnie zadanie czyli sortowanie. Sortowanie ma być alfabetyczne po tytułach a tego nie umie. Robili¶my na lekcji za pomoc± liczb tylko.Jak by jaka¶ mała pomoc z waszej strony np jaki¶ przykład programu albo co¶ w tym stylu.A je¶li chodzi o poprzednie odpowiedzi to funkcja ma wygl±dać tak:



PROCEDURE Zmiany_w_multimediach;
var
podany_numer:integer;
Begin
Clrscr;
if istnieje_plik('MULTI.DAN') then
Begin
Textcolor(LightGreen);
Assign(Okno_pliku,'MULTI.DAN');
Reset(Okno_pliku);
Write('Prosze podac numer multimedi ktorej dane maja byc :');
Readln(Podany_numer);
Seek(Okno_pliku,Podany_numer);
(*$I-*)
Read(Okno_pliku,Multimedia);
(*$I+*)
If ioresult=0 then
Begin
Textcolor(40);
Writeln('Dotychczasowe dane multimedialne');
Writeln('-----------------------------');
Writeln;
Textcolor(lightblue);
Writeln('Tytul..................................:' ,+ multimedia.tytul);
Writeln('Rodzaj danych..........................:',+ multimedia.rodzaj_danych);
Writeln('Rodzaj nosnika.........................:',+ multimedia.rodzaj_nosnika);
Writeln('Opis...................................:' ,+ multimedia.opis);
Seek(okno_pliku, podany_numer);
Writeln;
Textcolor(40);
Writeln('==============================');
Writeln;
Textcolor(lightred);
Writeln('Nowe dane multimedialne');
Writeln;
Textcolor(40);
Write('Tytul....................................:' );
Readln(multimedia.tytul);
Write('Rodzaj danych............................:');
Readln(multimedia.rodzaj_danych);
Write('Rodzaj nosnika............................:');
Readln(multimedia.rodzaj_nosnika);
Write('Opis......................................: ');
Readln(multimedia.opis);
Write(okno_pliku,multimedia);
Close(okno_pliku)
End
else
Begin
Writeln;
Textcolor(75);
Writeln('Nie ma w pliku multimedi z takim numerem !'#7);
Delay(3000)
End
End
Else
Polecenie;
Normvideo
End;

doderic
02-06-07, 17:01
Muszę po wiedzieć, że procedura wygl±da bardzo ładnie :)

Co do sortowania:

Sortowanie ma być alfabetyczne po tytułach a tego nie umie. Robili¶my na lekcji za pomoc± liczb tylko.
Jeżeli masz program na sortowanie liczb, to w ten sam sposób możesz zrobić sortowanie po tytułach. Ci±gi tekstowe (stringi) można porównywać tak samo jak liczby, np.:

program test;
begin
writeln('Ala=Ala ', 'Ala' = 'Ala');
writeln('pies<kot ', 'pies' < 'kot');
if 'zero' > 'jeden' then writeln('0>1 - swiat stanal na glowie') else writeln ('0<1')
end.
* szczególnie podoba mi się ostatni przykład ;)

Proponuję też zajrzeć na http://pl.wikipedia.org/wiki/Algorytmy_sortowania gdzie s± opisane algorytmy, zwykle także z przykładami w Pascalu.

Je¶li będziesz potrzebował więcej pomocy, to zamie¶ć, którego algorytmu używasz i/lub jakie kawałki kodu już masz (choćby ten przykład z liczbami).

yanan
03-08-08, 15:16
Mam pytanie: Jak w końcu zrobić to usuwanie wpisu no i oczywiscie wyświetlenie wszystkich wpisów. Najlepiej prosiłbym o kod bo już nie daje rady...

Mam nadzieje ze teraz jest barrrrdziej po polskiemu ;)

Pozdrawiam.

szopa123
05-08-08, 06:37
if Multi = NIL then
wrtieln('Nie ma takiego rekordu')


A co to za NIL ??? Może miało być NULL, czyli je¶li Multi jest pusty...
A NIL to taka rzeka w Afryce :lol:

szopa123
05-08-08, 06:43
Zapomniałem dodać...
Jest mnĂłstwo gotowych algorytmĂłw sortowania w sieci.

Oto przykłady... (nie moje)

http://edu.i-lo.tarnow.pl/inf/alg/algsort/pages/015.php

A tu bardziej ogĂłlny link:

http://edu.i-lo.tarnow.pl/inf/alg/algsort/index.html

Pomijając pewne błędy w opisie.. (głównie dotyczy to słów opisujących, a nie algorytmów) stronka jest całkiem przyzwoita)
Nawet dodałem ją do moich zakładek... :brawo:

RRybak
12-08-08, 07:47
Nikt nie pomoĹĽe??
1. Zadałeś pytanie podpinając się pod cudzy temat. Raczej nikt, oprócz Doderica i autora pierwotnego problemu, tu nie zagląda. Twój tekst jest traktowany domyślnie jako uzupełnienie wcześniejszego zagadnienia. Nowy problem = nowy temat

2. Nie rozumiem Twojego problemu, nawet jakbym chciał, to nie wiem o co Ci chodzi. Załóż własny wątek i postaraj się wyjaśnić to bardziej po polsku..

szopa123
12-08-08, 10:48
Ale numer... ten NIL to chyba w pascalu jest ok. hahaha
¦ci±gnę sobie TP i sprawdzę, bo aż nie chce mi się w to wierzyć. (!!) :demon09:

A tak po przyjrzeniu się dokładniej... (zakładaj±c, że magiczny NIL jest ok) :)

to w tej linii masz bł±d:

Multi = szukajMultimedii(Szukany_tytul, 'MULTI.DAN');

Chyba powiniene¶ napisać Multi := ...
Czyli przypisać warto¶ć zwrócon± przez funkcję szukajM.. to zmiennej Multi

ps.
pascal to kupa... kupa która co prawda nie ¶mierdzi... ale na pewno ładnie nie wygl±da. :demon09:

yanan
14-08-08, 16:20
No tak niezly smietnik by tu był jakby tak każdy miał zakładać nowe tematy w sprawie tak na prawde jednego programu, ale z jednym masz racje wątek uległ przedawnieniu...