Perykles Napisano Listopad 16, 2009 Zgłoś Share Napisano Listopad 16, 2009 Witam, Żeby poćwiczyć trochę pisanie programów w pascalu ( to nie jest praca domowa, nie chcę żebyście robili za mnie prace domową, po prostu chcę trochę poćwiczyć robienie trochę bardziej skomplikowanych programów niz kalkulator )postanowiłem zrobić taką bazę danych, do której wprowadza się nazwę przedmiotu i oceny. Chciałem, żeby to wyglądało jakoś tak: 1. Wprowadz dane 2.Wyswietl dane 3.Zapisz do pliku 4.Wczytaj z pliku 5.Zakończ Dane można by wprowadzać 15 razy (tyle przedmiotów), a potem jak by się wzięło wyświetl, to była by opcja write('Nazwa przedmiotu: ');, i wtedy wczytywało by dane z procedury Wprowadz dane, wyświetlało oceny i liczyło ich średnią arytmetyczną. No i chciałem, żeby można było zapisać/wczytywać dane z pliku. Umiem zrobić taki program: Uses CRT; Var przedmiot:array[1..30] of string; oceny,srednia:shortint; c,c2:char; iloscprzedmiotow:byte; numerprzedmiotu:byte; plik:text; PROCEDURE Wprowadz; Begin ClrScr; Iloscprzedmiotow:=iloscprzedmiotow+1; Write('Przedmiot: '); Readln(przedmiot[iloscprzedmiotow]); Write('Oceny: '); Readln(oceny[iloscprzedmiotow]); End; End; PROCEDURE Wyswietl; ClrScr; Write('Numerprzedmiotu ? (1..', iloscprzedmiotow ,') :'); ReadLn(numerprzedmiotu); WriteLn('Przedmiot : ',przedmiot[numerprzedmiotu] ); WriteLn; Write('Wcisnij jakis klawisz...'); c2:=readkey; End; PROCEDURE Zapisz; Begin Assign(plik,'BAZA.DAN'); ReWrite(plik); WriteLn(plik,iloscprzedmiotow); t1:=0; Repeat t1:=t1+1; WriteLn(plik,przedmiot[numerprzedmiotu] ); Until t1=iloscprzedmiotow; Close(plik); End; PROCEDURE Czytaj; Begin Assign(plik,'BAZA.DAN'); Reset(plik); ReadLn(plik,iloscprzedmiotow); t1:=0; Repeat t1:=t1+1; ReadLn(plik,przedmiot[numerprzedmiotu] ); Until t1=iloscprzedmiotow; Close(plik); End; Begin Iloscosob:=0; Repeat ClrScr; WriteLn('1. Nowy wpis'); WriteLn('2. Wyswietlenie wpisu'); WriteLn('3. Odczyt z pliku'); WriteLn('4. Zapis do pliku'); WriteLn('5. Koniec programu'); Repeat c:=readkey; Until (c>='1') AND (c<='5'); If c='1' Then Wprowadz; If c='2' Then Wyswietl; If c='3' Then Czytaj; If c='4' Then Zapisz; Until c='5'; End. I teraz mam kilka pytan: 1) Co mam zrobić, żeby w procedurze Wyswietl zamiast wpisywac numer, móc wpisać nazwę przedmiotu, żeby potem wyświetlały się oceny i średnia z przedmiotu którego nazwę wpisałem? 2) Jak zrobić, żeby po wyświetleniu ocen, program obliczał ich średnią? Znalazłem w googlach jakiś algorytm na obliczanie średniej, ale nie wiem jak go użyć w tym programie. Jak to zrobić? 3) Nie wiem, czy da się tak zrobić, ale przydało by się jeszcze dać opcję, która otwierała by plik z bazą danych. Można tak zrobić? Jeśli tak, to w jaki sposób? Pomożecie? Z góry dzięki za odpowiedź. Link do komentarza Udostępnij na innych stronach More sharing options...
jozekkg Napisano Listopad 17, 2009 Zgłoś Share Napisano Listopad 17, 2009 Trochu sobie namieszałeś. Ja proponuję zrobić to na dwóch plikach. W jednym przechowuj rekordy: przedmiot: record numer: byte; nazwa: string[20]; end;OSkŚh&Źś+rrkfpjW oceny: record numer:byte; {numer ocenianego przedmiotu} ocena:byte; end; Każda ocena to osobny rekord, numery będą się powtarzać. Aby znaleźć szukany przedmiot po nazwie, przeszukujesz plik z rekordami "przedmiot" i jeśli znajdziesz szukany, wtedy przeszukujesz plik z ocenami. Jeśli znajdziesz szukany mumer, wtedy wyświetl jego ocenę. Ocenę średnią możesz obliczać na bieżąco. Link do komentarza Udostępnij na innych stronach More sharing options...
Perykles Napisano Listopad 17, 2009 Autor Zgłoś Share Napisano Listopad 17, 2009 Dzięki, spróbuje tak zrobić. A tak przy okazji, co oznacza coś takiego?: Write(#8,....), chodzi mi o to #8. Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Listopad 17, 2009 Zgłoś Share Napisano Listopad 17, 2009 To znaczy wypisz znak o kodzie ASCII 9, w tym przypadku jest to tabulator. Na przykład Write(#97) wypisze "a". Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.