Błąd w prostym programie- proszę o pomoc


(Mateusz Antoniewski) #1

Napisałem mały program ale wywala mi błąd "Exitcode 103". Nie mogę znaleźć błędu :confused: Program jest krótki. Proszę o pomoc. Oto kod(lub: http://wklej.org/id/566651/ - lepsze formatowanie):

Program Losowe_R;


Uses Crt;


Type

 f = file of real;


var

 plik: f;

 nazwa: string;


Function IleLiczb: byte;


var

 min, x: real;


begin

 Randomize;

 IleLiczb:= Random(50)+1;

end;


Procedure ZapiszPlik(var plik: f; var nazwa: string);


var

 i: byte;

 x: real;

begin

 WriteLn('Podaj nazwe pliku');

 ReadLn(nazwa);

 Assign (plik, nazwa);

 Rewrite(plik);

  Randomize;

  for i:= 1 to IleLiczb do

   begin

    x:= Random + Random(20)+1;

    Write(plik, x);

   end;

 Close(plik);

end;


Function LiczMinimum(var plik: f; nazwa: string): real;


var

 min, x: real;


begin

 Read(plik, x);

  min:= x;

  while not EoF(plik) do

  begin

   Read(plik, x);

   if x < min then min:= x;

  end;

 Close(plik);

 LiczMinimum:= min;

end;


Function Srednia(var plik: f; nazwa: string): real;


var

 x,s: real;


begin

 s:=0;

 while not EoF(plik) do

  begin

   Read(plik,x);

   s:= s+x;

  end;

 Srednia:= s/FileSize(plik);

end;


Procedure CzytajZpliku(var plik: f; nazwa: string);


begin

 Assign(plik, nazwa);

 Reset(plik);

  WriteLn('Ilosc liczb w pliku ',nazwa,': ',FileSize(plik));

  WriteLn('Najmniejsza liczba zapisana w pliku to ',LiczMinimum(plik, nazwa):5:2);

  Seek(plik, 0);

  WriteLn('Srednia arytmetyczna liczb zapisanych w pliku to ',Srednia(plik, nazwa):5:2);

 Close(plik);

end;


 begin

 ClrScr;

 IleLiczb;

 ZapiszPlik(plik, nazwa);

 LiczMinimum(plik, nazwa);

 Srednia(plik, nazwa);

 CzytajZpliku(plik, nazwa);

 WriteLn;

 WriteLn('Aby zakonczyc prace programu nacisnij dowolny klawisz...');

 ReadKey;

end.

(Simplex111) #2

Exitcode 103: File not open (plik nie jest otwarty). Nic Ci nie mówi ten komunikat?

W programie głównym wywołujesz poszczególne procedury. W procedurze ZapiszPlik otwierasz plik do zapisu, zapisujesz w nim liczby, a na koniec go zamykasz. Następnie w procedurach LiczMinimum i Srednia próbujesz odczytać dane z tego pliku, który nie jest otwarty, stąd ten błąd.

Każda próba dostępu do danych w pliku powinna wyglądać w taki sposób:

  1. Skojarzenie zmiennej plikowej z fizycznym zbiorem (plikiem) - Assign (plik, nazwa)

  2. Otwarcie pliku - Reset , Rewrite , Append (zależnie od tego co chcemy zrobić z danymi w pliku)

  3. Odczyt lub zapis danych do pliku - Read , Write

  4. Zamknięcie pliku - Close