Odczyt wartości z pliku rekordowego i przekazanie do procedury.

0

Witam

Piszę bazę danych na zaliczenie i mam problem, ponieważ nie wiem jak poprawnie przekazać parametr odczytany z pliku rekordowego do funkcji. Zamieszczam problematyczne fragmenty programu:

program hotel;
uses crt;

type bliczba = record
indeks:byte;
end;

type rezerwacja = record
nazwisko:string[35];
ilosc_osob:integer;
dzieci:integer;
ilosc_dni:integer;
termin:string[30];
miesiac:integer;
dzien:integer;
end;

var rezerwacje:array[1..1000] of rezerwacja;
kalendarz_pokoj1:array[1..365] of integer;
kalendarz_pokoj2:array[1..365] of integer;
kalendarz_pokoj3:array[1..365] of integer;
kalendarz_pokoj4:array[1..365] of integer;
kalendarz_pokoj5:array[1..365] of integer;
ilosc_osob, miesiac, ilosc_dni, data, dzien:integer;
a:string[3];
szukaj:string[30];
opcja:string[1];
i,b,n,c:integer; m:byte;
liczba:bliczba;
plik: file of bliczba;
label wyjdz;
var baza: file of rezerwacja;

(.................)

procedure rezerwuj (var bliczba.indeks : real);

        begin
                begin
                clrscr;
                assign (baza,'rezerwacje.dat');
                reset(baza);
                if ioresult<>0 then rewrite(baza);
                Seek(baza, FileSize(baza));
                writeln ('Podaj Nazwisko rezerwujacego: ');
                readln(rezerwacje[bliczba.indeks].nazwisko);
                writeln ('Podaj ilosc dzieci: ');
                readln(rezerwacje[bliczba.indeks].dzieci);
                writeln ('Podaj ilosc osob: ');
                readln(rezerwacje[bliczba.indeks].ilosc_osob);
                writeln ('Podaj ilosc dni: ');
                readln(rezerwacje[bliczba.indeks].ilosc_dni);
                readln(rezerwacje[bliczba.indeks].miesiac);
                readln(rezerwacje[bliczba.indeks].dzien);
                write (baza,rezerwacje[bliczba.indeks]);
                close(baza);
                bliczba.indeks:=bliczba.indeks+1;
                end;
        end;

(................)

begin
clrscr;
        assign(plik,'liczba.txt');
        reset(plik);
        if ioresult<>0 then
                begin
                rewrite(plik);
                write(plik, '0');
                end;
        read(plik,bliczba.indeks);
        close(plik);
        repeat
        writeln('Witaj w programie zarzadzania rezerwacjami w hotelu. Wybierz jedna z dostepnych opcji.');
        writeln ('Dostepne opcje: rezerwuj (r), sprawdz czy sa wolne miejsca (s), odczytaj baze rezerwacji (o), zamknij program (x)');
        opcja:=readkey;
        case opcja of
        'r': rezerwuj;
        's': sprawdz_wolne;
        'o': odczytaj;
        end;
        until (opcja='x');
        assign(plik,'liczba.dtb');
        rewrite(plik);
        write(plik,liczba);
        close(plik);
end.

Proszę o pomoc i z góry dzięki. :)

0

tagi i formatowanie... to raz a dwa kurs podstaw tam znajdziesz odpowiedź.

0

Ok już sobie poradziłem, teraz mam inny problem. W jaki sposób zapisywać wartości do tablicy pochodzącej z pliku rekordowego? Szukałem trochę na ten temat, zastosowałem poniższy sposób przypisania, który nie działa (program nie kompiluje się):

type kalendarz_pokoj1=array[1..365] of integer;
type kalendarz_pokoj2=array[1..365] of integer;
type kalendarz_pokoj3=array[1..365] of integer;
type kalendarz_pokoj4=array[1..365] of integer;
type kalendarz_pokoj5=array[1..365] of integer;
var rezerwacje:array[1..1000] of rezerwacja;
var
pokoj1:kalendarz_pokoj1;
pokoj2:kalendarz_pokoj2;
pokoj3:kalendarz_pokoj3;
pokoj4:kalendarz_pokoj4;

plikpokoj1: file of kalendarz_pokoj1;
plikpokoj2: file of kalendarz_pokoj2;
plikpokoj3: file of kalendarz_pokoj3;
plikpokoj4: file of kalendarz_pokoj4;

procedure decyzja;
        begin
        writeln ('Termin dostepny. Podjac rezerwacje? (tak/nie)');
        readln(a);
        if a='tak' then
        begin
        assign(plikpokoj1, 'pokoj1.dat');
        reset(plikpokoj1);
        assign(plikpokoj2, 'pokoj2.dat');
        reset(plikpokoj2);
        assign(plikpokoj3, 'pokoj3.dat');
        reset(plikpokoj3);
        assign(plikpokoj4, 'pokoj4.dat');
        reset(plikpokoj4);
        CASE ilosc_osob of
        1: for i:=data to ((data)+(ilosc_dni)) do begin
                (kalendarz_pokoj1[i]):=1;
                write(plikpokoj1, pokoj1);
                end;
        2: for i:=data to ((data)+(ilosc_dni)) do begin
                kalendarz_pokoj2[i]:=1;
                write(plikpokoj2, pokoj2);
                end;
        3: for i:=data to ((data)+(ilosc_dni)) do begin
                kalendarz_pokoj3[i]:=1;
                end;
                write(plikpokoj3, pokoj3);
        4: for i:=data to ((data)+(ilosc_dni)) do begin
                kalendarz_pokoj4[i]:=1;
                write(plikpokoj4, pokoj4);
                end;
        end;
        rezerwuj (g);
        end;

Error: Variable indetifier expected na linii (kalendarz_pokoj1[i]):=1

0

Dalej używasz stylu formatowania, który ja nazywam "z d**y", a więc w zasadzie żadnego sensownego. Ja na pewno bym zrezygnował z nawiasów, bo to może powodować błąd i zrobił w stylu tak jak poniżej (nie chodzi o nazwy zmiennych i przebieg pętli, tylk o ideę). Ten kod się kompiluje bez problemów.

//...
var
  I, X : integer;
  Arr : array[1..365] of integer;
begin
  X := 1;
  case X of
    1 :
      begin
        for I := Low(Arr) to High(Arr) do
        begin
          Arr[I] := 1;
        end;
      end;
  end;

end.
0

Pozbycie się nawiasów nic nie daje, poza tym moja procedura wygląda tak samo, a nie chce się kompilować u Ciebie na linii: Arr[I]:=1; Nie można po prostu w ten sposób przypisać tego elementu i właśnie nie mam pojęcia, dlaczego.

0

A którego paskala używasz? Jeżeli TP to on nie ma jeszcze dynamicznych tablic. Przejdź na FPC z Lazarusem.

0

Używam FPC, poza tym to nie jest tablica dynamiczna, a i tak nie chce się kompilować :(

0

Jakie masz komunikaty?

0

Error: Variable identifier expected na liniach z przypisaniem: kalendarz_pokoj1[i]:=1

olesio może u Ciebie działa, ale napisane w ten sam sposób u mnie już nie, przepraszam jeśli nie wyraziłem się jasno.

0

Jeżeli kalendarz_pokoj1 to zmienna tak zadeklarowana, jak pokazałeś w kodzie powyżej to ta linia nie jest błędna i nie wiem skąd taki błąd. Musi coś być nie tak jeszcze z kodem albo jakieś dyrektywy kompilatora może lub przedziwny kompilator, bo pomijając brak tablic dynamicznych to nawet TP 7.0 taki kod skompiluje.

0

Chyba to ma związek z tym, że chcę zapisać tą tablice do pliku i wtedy zamiast var mam type, bo inaczej być nie może i wtedy powinna być inna konstrukcja, tak mi się wydaje, chociaż przyznam się że słabo umiem pascala.

0

Po pierwszę to tę tablicę, jak już. Pokazałeś nam linijkę kodu, który u Ciebie powoduje bład, ale według mnie akutat w tej linijce błędu nie ma. Należalo by dać kod całej procedury. Tylko w odpowiednim tagu i po ludzku sformatowany. Widzę, że nie ogarniasz Pascala jeżeli nie wiesz czym się różni przekazywanie do procedury lub funkcji parametru poprzedzonego const, a var. Także poczytaj sobie o tym w googlach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1