Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2010, 16:09   #1
0IceCube0
 
Регистрация: 25.09.2009
Сообщений: 5
По умолчанию Текстовый файл

Здравствуйте помогите исправить одну ошибку

В файле содержатся различные даты. Каждая дата - это число, месяц и год. В новый файл переписать все даты, которые предшествуют заданной. Выдать на печать те даты, которые приходятся на високосные года.

Код:
Const month:array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
var f:text ;
    d,m,y:integer;
function is_v(year:integer):boolean;
var r:boolean;
Begin
    if (year mod 4=0) and
       ((year mod 100<>0) or
       (year mod 400 =0)) then
        r:=TRUE
    else
        r:=FALSE;
End;
function compere(d,m,dd,mm:integer):boolean;
var r:boolean;
    val1,val2:integer;
Begin
    val1:=d+d*(month[m]);
    val2:=dd+dd*(month[mm]);
    if val1<val2 then
        r:=TRUE
    else
        r:=FALSE;
End;
procedure make_file(var f:text );
var yyyy,c,
    m,year,
    d:integer;
Begin
  year:=2009;
    ReWrite(f);
    for yyyy:=year to year+5 do
    for m:=1 to 12 do begin
        if is_v(yyyy) and (m=2) then c:=1 else c:=0;
        for d:=1 to month[m]+c do begin
            write(f,d,m,yyyy);
            writeln(f);
        end;
    end;
End;
procedure poisk (var f: text ;dd,mm,yy:integer);
var nf:text;
    d,m,yyyy:integer;
Begin
    ReSet(f);
    Assign(nf,'Vesokos.txt');
    ReWrite(nf);
    while not Eof(f) do begin
        read(f,d,m,yyyy);
        if compere(d,m,dd,mm) and (yyyy<=yy) then begin
            if is_v(yyyy) then writeln(d,',',m,',',yyyy);
            write(nf,d,m,yyyy);
            writeln(nf);
        end;
        readln(f);
    end;
    Close(nf);
End;
BEGIN
    ASSIGN(f,'Dati.txt');
    make_file(f);
    writeln('‚ўҐ¤ЁвҐ §*¤***го ¤*вг (з.¬.Ј.)');
    read(d,m,y);
    poisk(f,d,m,y);
    CLOSE(f);
    readln;
END.
в файле Vesokos выводит вот это
-1371710939-20133
-1334921115-9957
-317331291219
-308533611-27461
-2067713787-17285
-1050123963-7109
0IceCube0 вне форума Ответить с цитированием
Старый 06.06.2010, 19:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

процедура формирования файла с ошибками.
1-я (и самая большая!), когда Вы пишете число месяц и год в файл dati.txt вы забываете их разделять!
Даже человек не сможет понять, что такое 1112009 (где здесь месяц, где дата.. ;( )

2-я БОЛЬШАЯ ошибка. Все функции написаны неверно!
Нужно же результат действия функции возвращать!
а то, что Вы присвоили переменной R - это, извините, никому не поможет!

ну и из-за того, что не работают функции в файл dati.txt попадают несуществующие даты (например, 29 2 2009 )

попробуйте так:
Код:
const month: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var f: text;
  d, m, y: integer;

function is_v(year: integer): boolean;
begin
  if (year mod 4 = 0) and
    ((year mod 100 <> 0) or
    (year mod 400 = 0)) then
    is_v := TRUE
  else
    is_v := FALSE;
end;

function CompareDate(d, m, dd, mm: integer): boolean;
var
  val1, val2: integer;
begin
  val1 := d + d * (month[m]);
  val2 := dd + dd * (month[mm]);
  if val1 < val2 then
    CompareDate := TRUE
  else
    CompareDate := FALSE;
end;

procedure make_file(var f: text);
var yyyy, c,
  m, year,
    d: integer;
begin
  year := 2009;
  ReWrite(f);
  for yyyy := year to year + 5 do
    for m := 1 to 12 do begin
      if is_v(yyyy) and (m = 2) then c := 1 else c := 0;
      for d := 1 to month[m] + c do begin
        write(f, d, ' ', m, ' ', yyyy);
        writeln(f);
      end;
    end;
end;

procedure poisk(var f: text; dd, mm, yy: integer);
var nf: text;
  d, m, yyyy: integer;
begin
  ReSet(f);
  Assign(nf, 'Vesokos.txt');
  ReWrite(nf);
  while not Eof(f) do begin
    read(f, d, m, yyyy);
    if CompareDate(d, m, dd, mm) and (yyyy <= yy) then begin
      if is_v(yyyy) then writeln(d, '.', m, '.', yyyy);
      write(nf, d,' ', m,' ', yyyy);
      writeln(nf);
    end;
    readln(f);
  end;
  Close(nf);
end;

begin
  ASSIGN(f, 'Dati.txt');
  make_file(f);
  writeln('Введите заданную дату (ч.м.г.)');
  read(d, m, y);
  poisk(f, d, m, y);
  CLOSE(f);
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2010, 21:51   #3
0IceCube0
 
Регистрация: 25.09.2009
Сообщений: 5
По умолчанию

Спасибо вам большое очень выручили
0IceCube0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
Текстовый файл Elllektra Помощь студентам 3 23.01.2010 20:09
текстовый файл Siluet Паскаль, Turbo Pascal, PascalABC.NET 5 22.09.2009 22:51
Текстовый файл Mashul'ka Помощь студентам 2 22.05.2009 00:07
Текстовый файл в текстовый массив Kimimaru Общие вопросы C/C++ 1 02.12.2007 11:55