задание : Дан файл, содержащий различные даты. Каждая дата – это число месяц и год. Найти самую раннюю дату.
Программа не работает. Помогите ,ПОЖАЛУЙСТА, найти ошибку.
На всякий случай прикреплю файл.
program zadanie2;
uses crt;
const god:array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
godvisok: array [1..12] of integer =(31,29,31,30,31,30,31,31,30,31,30,31);
type zap = record
year,month,day:integer;
end;
tf= file of zap;
var f:tf;
minindex,i,n,k:integer;
result:file of longint;
min,y,sum,z: longint;
t:text;
data:array[byte] of zap;
massiv:array [1..100] of longint;
begin
clrscr;
sum:=0;
assign(t,'labfile\date.txt');
reset(t);
while not eof(t) do
begin
for i:=1 to 3 do
with data[i] do
begin
read(t, year);
read(t, month);
read(t, day);
z:=trunc(year div 4)*366+(year-trunc(year div 4))*365;{Ї®бзЁв «Ё Ј®¤л}
{ бзЁв Ґ¬ ¬Ґбпжл }
if year mod 4 = 0 then {if year visokosny}
for k:= 1 to month do
begin
sum:=sum+godvisok[k];
end
{end}
else {if year not visokosny}
for k:=1 to month do
begin
sum:=sum+god[k];
end;
{Є®Ґж}
y:= z+sum+day;
massiv[i]:=y;
sum:=0;
writeln(massiv[i]:10);
end;
end;
readln;
close(t);
for i:=1 to 3 do
begin
min:=massiv[1];
for k:=1 to 3 do if min>=massiv[k] then minindex:=k;
end;
writeln(minindex);
with data[minindex] do begin
writeln(year);
writeln(month);
writeln(day);
end;
readln;
end.
if min>=massiv[k] then minindex:=k;
min:=massiv[1]; { Перед циклом }
for i:=1 to 3 do
if min>=massiv[i] then begin
minindex:=i;
min := massiv[i];
end;
Не помогает. Почему-то все элементы массива становятся нулями
var
f: text;
day,month,year: array [1..100] of integer;
date: array [1..100] of longint;
tmp,date_st: string;
i,datescount,ei,code: integer;
earliest: longint;
begin
assign(f,'date.txt');
reset(f);
i:=1;
while not eof(f) do
begin
readln(f,year[i],month[i],day[i]);
str(year[i],tmp); date_st:=tmp;
str(month[i],tmp);
if month[i]<10 then tmp:='0'+tmp; date_st:=date_st+tmp;
str(day[i],tmp);
if day[i]<10 then tmp:='0'+tmp; date_st:=date_st+tmp;
val(date_st,date[i],code);
inc(i);
end;
datescount:=i-1;
earliest:=date[1]; ei:=1;
for i:=2 to datescount do
if date[i]<earliest then begin earliest:=date[i]; ei:=i end;
writeln('Earliest date: ',day[ei],' ',month[ei],' ',year[ei]);
close(f);
end.
Не знаю, может тебе надо было другим способом делать, но я сделал так.
Вот так работает - проверено.
program zadanie2;
uses crt;
type
zap = record
year, month, day: integer;
end;
var
i, n: integer;
t: text;
data: array[byte] of zap;
min: zap;
begin
clrscr;
assign(t,'labfile\date.txt'); reset(t);
n := -1;
while not eof(t) do begin
inc(n);
with data[n] do begin { главное - чтобы у тебя в файле числа шли точно в таком же порядке: ГГ ММ ДД }
read(t, year);
read(t, month);
read(t, day);
readln(t);
end;
end;
min := data[0];
for i := 1 to n do
if (data[i].year < min.year) or
((data[i].year = min.year) and (data[i].month < min.month)) or
((data[i].year = min.year) and (data[i].month = min.month) and (data[i].day < min.day))
then min := data[i];
with min do begin
writeln(year);
writeln(month);
writeln(day);
end;
readln;
end.
А чё файл не закрыл. Так не бывает , надо закрывать.
А вообще у меня вроде меньше прога.
Срочно читать доки: я не обязан закрывать файл:
1) если он был открыт для чтения - потери данных не будет
2) при корректном завершении программы файл будет закрыт автоматически...
Насчет "меньше": это не значит "быстрее" - твой Val будет выполняться гораздо дольше.
Ну ты кабан!
Насчёт закрытия я шутил.
это был комплимент?