Mam problem w programiku:
program ObliczSredniaZOcen;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
var
petlawyjscie : byte;
wybortryb, wyborlol : byte;
iloscocen : Integer;
ocena, sumaocen : Integer;
sredniazocen : Extended;
i, n : byte;
TF : TextFile;
begin
petlawyjscie := 0;
While petlawyjscie < 1 do
begin
sumaocen := 0;
n := 0;
Writeln('Wybierz sposob wprowadzenia ocen/opcje:');
Writeln(' 1)Reczne wprowadzenie przez uzytkownika');
Writeln(' 2)Wczytanie ocen oddzielonych spacjami z pliku tekstowego');
Writeln(' Nazwa Pliku: "Oceny.txt" ');
Writeln(' 3)Wyjdz z programu');
Readln(wybortryb);
If wybortryb <> 1 then
begin
If wybortryb <> 2 then
begin
If wybortryb <> 3 then
begin
Writeln('Wprowadzono bledne dane!');
Writeln('Wcisnij [ENTER] aby kontynuowac!');
Readln;
end;
end;
end;
If wybortryb = 3 then
begin
petlawyjscie := 1;
end;
If wybortryb = 1 then
begin
Writeln('Podaj ilosc ocen');
Readln(iloscocen);
For i := 1 to iloscocen do
begin
n := n+1;
Writeln('Podaj ocene z przedmiotu nr ', n);
Read(ocena);
sumaocen := sumaocen+ocena;
end;
sredniazocen := sumaocen/iloscocen;
Writeln('Srednia z ocen wynosi: ', sredniazocen);
Writeln('Zaokraglona srednia z ocen wynosi: ', sredniazocen:0);
Writeln('Bardziej zaokraglona srednia z ocen wynosi: ', sredniazocen:0:0);
Writeln('Wcisnij [ENTER] aby kontynuowac');
Readln;
end;
If wybortryb = 2 then
begin
Writeln('Podaj nr. wersji, zgodnie z ktora zapisany jest plik "Oceny.txt":');
Writeln('1) Wersja 1:');
Writeln(' 1. linia - Ilosc ocen');
Writeln(' 2. Linia - Oceny oddzielone spacjami');
Writeln('2) Wersja 2:');
Writeln(' 1. Linia - Oceny oddzielone spacjami');
Readln(wyborlol);
If wyborlol <> 1 then
begin
If wyborlol <> 2 then
begin
Writeln('Wprowadzono bledne dane!');
Writeln('Wcisnij [ENTER] aby kontynuowac!');
Readln;
end;
end;
AssignFile(TF, 'Oceny.txt');
If not FileExists('Oceny.txt') then
begin
Writeln('Plik nie istnieje!');
Readln;
end;
If FileExists('Oceny.txt') then
begin
Reset(TF);
If wyborlol = 1 then
begin
Readln(TF, iloscocen);
For i := 1 to iloscocen do
begin
Read(TF, ocena);
sumaocen := sumaocen+ocena;
end;
CloseFile(TF);
sredniazocen := sumaocen/iloscocen;
Writeln('Srednia z ocen wynosi: ', sredniazocen);
Writeln('Zaokraglona srednia z ocen wynosi: ', sredniazocen:0);
Writeln('Bardziej zaokraglona srednia z ocen wynosi: ', sredniazocen:0:0);
end;
If wyborlol = 2 then
begin
sumaocen := 0;
iloscocen := 0;
While not EoF(TF) do
begin
Read(TF, ocena); // O TU <-- <-- <-- <-- <-- Jakby ignoruje to TF, wczytuje do zmiennej ocena z klawiatury i przesuwa kursor w pliku(bo kończy wczytywać po wprowadzeniu identycznej ilości ocen jak w pliku).
sumaocen := sumaocen+ocena;
iloscocen := iloscocen+1;
end;
sredniazocen := sumaocen/iloscocen;
Writeln('Srednia z ocen wynosi: ', sredniazocen);
Writeln('Zaokraglona srednia z ocen wynosi: ', sredniazocen:0);
Writeln('Bardziej zaokraglona srednia z ocen wynosi: ', sredniazocen:0:0);
end;
end;
Writeln('Wcisnij [ENTER] aby kontynuowac');
Readln;
end; // koniec wybortryb = 2
end // koniec petla while petlawyjscie
end.
W miejscu Read(TF, ocena) w petli while not EoF program przy wykonywaniu zamiast odczytywać z pliku TF, odczytuje dane z klawiatury. Dlaczego i jak to naprawić? Z góry dzięki za pomoc.
EDIT. Przy okazji: próbowałem zrobić tak, aby najpierw była wczytywana z klawiatury do stringa lokalizacja pliku z klawiatury, ale nie bardo kompilator zgadzał się z moją wizją otworzenia pliku AssignFile(TF, stringzlokalizacja);