Skocz do zawartości


Zdjęcie

[Turbo pascal] Listy


  • Zamknięty Temat jest zamknięty
3 odpowiedzi w tym temacie

#1 kobragsm

kobragsm

    Obserwator

  • 8 postów

Napisano 24 05 2008 - 13:13

Zadanie 1: Operacje na stosie: wprowadzanie do magazynu towarów w malejącej kolejności ich wielkości.
W poniższym programie przyjęto, że stos symuluje magazyn towarów. Magazyn przyjmuje towary zapakowane w paczkach o dwóch rozmiarach. Magazynowanie jest realizowane zgodnie z zasadą, że najpierw umieszczane są w magazynie towary w większych paczkach, potem w mniejszych. Za pomocą generatora liczb pseudolosowych są generowane następujące dane o towarze:
? Liczba paczek przybywających do magazynu;
? Wielkości paczek: 0-paczka mniejsza; 1-paczka większa;
? Wartość towaru w każdej paczce; przyjęto, że ta wartość nie przekracza kwoty 1000zł.
Informacja o ładunku jest zapisywana w pliku po każdorazowym uruchomieniu programu.
Polecenie: Uzupełnić program tak, aby dokonał rozładowania towaru do magazynu wg podanych reguł, a następnie wyświetlił stan magazynu oraz sumaryczną wartość znajdujących się tam towarów.
Wskazówki:
? Rozładowywanie towarów należy zaprogramować w postaci procedury;
? W procedurze należy zadeklarować lokalną zmienną dynamiczną o strukturze stosu np. o nazwie przechowalnia;
? Informacja o kolejnym towarze odczytywana z pliku, a następnie zapisywana do stosu magazyn, jeśli towar jest w większej paczce, w przeciwnym wypadku informacja ta jest wprowadzana na stos przechowalnia. Plik należy przeglądać w taki sposób do końca.
? Po zakończeniu odczytywania pliku wszystkie towary ze stosu przechowalnia muszą być przeniesione na stos magazyn. Oznacza to, że przenoszone dane są sukcesywnie usuwane ze stosu przechowalnia.

uses crt;type    opis_towaru=record         wielkosc:word;         wartosc:real;         end;kontener=file of opis_towaru;adres_stosu=^element_stosu;element_stosu=record    towar:opis_towaru;    nastepny:adres_stosu;         end;varplik:kontener;magazyn:adres_stosu;max_obj_towaru:word;procedure na_stos(element:opis_towaru;          var szczyt_stosu:adres_stosu);{przy tworzeniu pierwszego elementu stosu konieczne jest, aby argument odpowiadajacy parametrowi 'szczyt_stosu' mial wartosc nil}varpom:adres_stosu;begin pom:=szczyt_stosu; New(szczyt_stosu); szczyt_stosu^.towar:=element; szczyt_stosu^.nastepny:=pom;end;procedure ze_stosu(var element:opis_towaru;          var szczyt_stosu:adres_stosu);var pom:adres_stosu;begin if szczyt_stosu<>nil then begin      element:=szczyt_stosu^.towar;      pom:=szczyt_stosu^.nastepny;      dispose(szczyt_stosu);      szczyt_stosu:=pom; end;end;procedure przybycie_towaru(var plik:kontener; n:word);var i,l_towaru:word;buf:opis_towaru;begin randomize; {zadaniem petli jest pominiecie wynikow poczatkowych generatora} for i:=1 to 10 do l_towaru:=random(n); assign(plik,'towary.dat'); rewrite(plik); for i:=1 to l_towaru do     begin       buf.wartosc:=random(10)*100+random(10)*10+random(10)+random(10)/10+random(10)/100;       buf.wielkosc:=random(2);       write(plik,buf);     end; close(plik);end;procedure odczyt_pliku(var plik:kontener);var bufor:opis_towaru;begin     writeln('towary do rozladowania');     assign(plik,'towary.dat');     reset(plik);     while not eof(plik) do      begin        read(plik,bufor);        writeln(bufor.wielkosc,' ',bufor.wartosc:8:2);      end;close(plik);end;procedure rozladunek(var plik:kontener; var magazyn:adres_stosu);var przechowalnia:adres_stosu;begin{tu nalezy rozwiazac zadanie}end;procedure stan_magazynu(magazyn:adres_stosu);begin{tu nalezy wyznaczyc stan magazynu}end;begin clrscr; write('Podaj maksymalna liczbe jednostek towaru do rozladowania:'); readln(max_obj_towaru); writeln; przybycie_towaru(plik,max_obj_towaru); odczyt_pliku(plik); magazyn:=nil; rozladunek(plik,magazyn); stan_magazynu(magazyn); dispose(magazyn); readln;    end.


Zadanie 2: Dodatkowe: Kolejka: symulacja pracy punktu radiologicznego
Program symuluje w uproszczony sposób pracę punktu radiologicznego. Przyjęto, że liczba pacjentów zgłaszających się na prześwietlenie jest liczbą pseudolosową, nie większą niż zadana przez użytkownika programu maksymalna przepustowość punktu prześwietleń. Do okienka zgłaszają się kolejno pacjenci, których dane należy zarejestrować, tworząc w ten sposób kolejkę pacjentów do prześwietlenia.
Polecenie: Uzupełnij program tak, aby symulował prześwietlenia pacjentów zgodnie z następującym reżimem obsługi:
? mężczyźni i kobiety są prześwietlani oddzielnie ? należy utworzyć dwie kolejki: mężczyzn i kobiet;
? w jednej sesji może być obsłużonych co najwyżej 5 osób;
? grupy kobiet i mężczyzn są prześwietlane w sesjach naprzemiennych;
? w danym dniu są prześwietlane wszystkie osoby;
Program ma wyświetlać informacje o osobach prześwietlanych w kolejnych sesjach.
Uzupełnić program o wyznaczanie średniego wieku mężczyzn i kobiet prześwietlanych w danym dniu.


uses crt;type    osoba=record         imie:string[15];         nazwisko:string[20];         plec:(m,k);         wiek:integer;         end;adres_kolejki=^element_kolejki;element_kolejki=record    pacjent:osoba;    nastepny:adres_kolejki;         end;varpoczatek_kolejki, koniec_kolejki:adres_kolejki;pocz_m, pocz_k, kon_m, kon_k:adres_kolejki;procedure do_kolejki(kto:osoba;          var koniec:adres_kolejki);varpom:adres_kolejki;beginpom:koniec;new(koniec);koniec^.pacjent:=kto;koniec^.nastepny:=nil;if pom <>nil then pom^.nastepny:=koniec;end;{przy tworzeniu pierwszego elementu kolejki konieczne jest, aby argument odpowiadajacy parametrowi 'koniec' mial wartosc nil}procedure z_kolejki(var kto:osoba;          var poczatek:adres_kolejki);var pom:adres_kolejki;begin if poczatek<>nil then begin      kto:=poczatek^.pacjent;      pom:=poczatek^.nastepny;      dispose(poczatek);      poczatek:=pom; end;end;procedure podaj_dane(jaka_plec:word; var element:osoba);var pom:string[10];begin if jaka_plec=0 then begin pom:='kobiety'; element.plec:=k; end elsebeginpom:='mezczyzny';element.plec:=m;end;writeln('Podaj dane osobowe',pom);with element dobeginwrite('  Imie:');readln(imie);write('  Nazwisko:');readln(nazwisko);write('  Wiek:');readln(wiek);end;end;procedure tworz_kolejke(var poczatek,koniec:adres_kolejki);var i,n,plec:word;    buf:osoba;begin     write('Podaj maksymalna przepustowosc punktu przeswietlen');     readln(i);     koniec:=nil;     poczatek:=nil;     randomize;     n:=random(i);     writeln;     writeln('Liczba zgloszen do przeswietlenia:',n);     writeln;     for i:=1 to n do     begin     podaj_dane(random(2),buf);     do_kolejki(buf,koniec);     if i=1 then poczatek:=koniec;     end;     if n<>0 then writeln('Kolejka pacjentow utworzona');     write('Nacisnij klawisz ENTER');     readln;     end;procedure pokaz_kolejke(poczatek:adres_kolejki);beginwriteln('Lista pacjentow oczekujacych na przeswietlenie');while poczatek<>nil dobeginwith poczatek^ dowriteln(pacjent.nazwisko:21,pacjent.imie:16,pacjent.wiek:10);poczatek:=poczatek^.nastepny;end;writeln('Koniec listy pacjentow');end;procedure dwie_kolejki(var kob_p, kob_k, mez_p, mez_k: adres_kolejki;var zgloszenia:adres_kolejki);varbuf:osoba;nr_k,nr_m:word;begin{tu nalezy utworzyc dwie kolejki: kobiet i mezczyzn}readln;end;procedure przeswietlenie(var kob_p, mez_p:adres_kolejki);{tu nalezy oprogramowac przeswietlenie wg warunkow podanych w zadaniu}]end;function sredni_wiek(poczatek:adres_kolejki):real;{tu nalezy wyznaczyc sredni wiek w grupie pacjentow}end;begin clrscr; poczatek_kolejki:=nil; koniec_kolejki:=nil; pocz_k:=nil; pocz_m:=nil;{od tego miejsca uzupelnic program} readln;end.


  • 0

#2 Ziele

Ziele

    Biblioteka Zielińskiego

  • 1 812 postów

Napisano 28 05 2008 - 17:52

/Turbo-pascal-Listy-t21673/
Może to ci pomoże ;)

  • 0

#3 kobragsm

kobragsm

    Obserwator

  • 8 postów

Napisano 28 05 2008 - 18:16

Przecież sam tamten temat założyłem :)

Poradziłem sobie sam z powyższymi programami ponieważ pomocy od nikogo nie uwyskałem :)

pozdrawiam

temat można zamknąć
  • 0

#4 Ziele

Ziele

    Biblioteka Zielińskiego

  • 1 812 postów

Napisano 28 05 2008 - 18:30

Nie patrzyłem kto założył tylko co w nim jest :)

  • 0

Zobacz więcej tematów z tagiem: Turbo Pascal



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych