Помощь - Поиск - Пользователи - Календарь
Полная версия: файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vi-rus
задание : Дан файл, содержащий различные даты. Каждая дата – это число месяц и год. Найти самую раннюю дату.
Программа не работает. Помогите ,ПОЖАЛУЙСТА, найти ошибку.
На всякий случай прикреплю файл.


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;{Ї(r)бзЁв «Ё Ј(r)¤л}
   { бзЁв Ґ¬ ¬Ґбпжл }
    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;
      {Є(r)­Ґж}
   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.
 
volvo
Цитата
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;
vi-rus
Не помогает. Почему-то все элементы массива становятся нулями
-Seln-

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.
Seln
Не знаю, может тебе надо было другим способом делать, но я сделал так.
volvo
Вот так работает - проверено.
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.
Seln
А чё файл не закрыл. Так не бывает smile.gif , надо закрывать.
А вообще у меня вроде меньше прога.
volvo
Срочно читать доки: я не обязан закрывать файл:

1) если он был открыт для чтения - потери данных не будет
2) при корректном завершении программы файл будет закрыт автоматически...

Насчет "меньше": это не значит "быстрее" - твой Val будет выполняться гораздо дольше.
Seln
Ну ты кабан!
Насчёт закрытия я шутил. cool.gif
мисс_граффити
lol.gif это был комплимент?
Seln
Цитата(мисс_граффити @ 27.05.2007 18:20) *

lol.gif это был комплимент?


Да, мисс, это был комплимент.



Добавлено через 6 мин.
Цитата(volvo @ 27.05.2007 18:10) *

Насчет "меньше": это не значит "быстрее" - твой Val будет выполняться гораздо дольше.


Интересно, чё у тебя за комп.
Насколько дольше, братан?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.