Помощь - Поиск - Пользователи - Календарь
Полная версия: прога на работу с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Иринка
тут вообще 2 проги:
1)
 program sss;
const n=10; 
type birthday=record 
      name:string[10];
      year:1900..2005;
      month:1..12;
      day:1..31;
      end;
var
      man:birthday;
      filename:string[10];
      i:byte;
      f:file of birthday;
begin
writeln('введите имя файла ');
readln(filename); 
assign(f, filename);
rewrite(f);
writeln(' ',n,'введите дату рождения (день, мес, год');
with man do
begin
for i:=1 to n do
  begin
  write('имя:'); readln(name);
  write('день:'); readln(day);
  write('мес:'); readln(month);
  write('год:'); readln(year);
  write(f, man) 
  end;
  end;
  writeln('сведения  сохранились в birthday.dat');
  close(f);
  end.


и вторая:
program super_2;
const n=6;
Type   birthday=record
       name:string[10];
       year:1900..2005;
       month:1..12;
       day:1..31;
       end;
procedure sort( var a:friends;
                    m:byte);
var i, j:byte;
    temp:birthday;
  begin
   for i:=1 to m-1 do
      for j:=1 to m-i do
      if a[j].name>a[j+1].name then
         begin
  temp:=a[j];
  a[j]:=a[j+1];
  a[j+1]:=temp;
         end;
   end;
  function closest_birthday( var a:friends;
                                  m:byte;
                                  man:birthday):byte;
   var i, j:byte;
       min, nmin:byte;
   begin
    nmin:=1; min:=a[1].month;
    for i:=1 to m do
    with a[i] do
         begin
         if (month>=man.month) and (month<=min)
   then
         if (month<min) or (month=min)
         and (day<a[nmin].day)
    then begin min:=month; nmin:=i; end;
         end;
     closest_birthday:=nmin;
    end;
       var w:friends;
       fname1, fname2:string[15];
       strNN:string[2];
       i, count:byte;
       f1: file of birthday;
       f2:text;
       man1, man2:birthday;
   begin
     writeln('введите имя файла');
     readln(fname1); 
     assign(f1, fname1);
      reset(f1);
     writeln('введите дату'); 
     write('день '); readln(man1.day);
     write('мес '); readln(man1.month);
     write('год: '); readln(man1.year);
   count:=0;
   while not eof(f1) do
   begin
     read(f1, man2);
     if man2.month=man1.month then
       begin
         count:=count+1;
      w[count]:=man2;
       end;
    end;
    close(f1);
    if count>1 then sort(w,count);
        str(man1.month,strNN);
    if man1.month<10 then strNN:='0'+strNN;
    fname2:='Birth_'+strNN+'txt';
        assign(f2,fname2);
    rewrite(f2);
     for i:=1 to count do
     with w[i] do
     begin
     write(f2,name,'  '); write(f2,day,'.');
     write(f2,month,' '); writeln(f2,year);
     end;
    close(f2);
        reset(f1);
    count:=0;
    while not eof(f1) do
    begin
      count:=count+1;
      read(f1, w[count]);
           if (w[count].month<man1.month)
      then w[count].month:=w[count].month+12;
          if (w[count].month=man1.month) and (w[count].day<man1.day)
      then w[count].month:=w[count].month+12;
    end;
    count:=closest_birthday(w,count,man1);
          if (w[count].month>12) then
      w[count].month:=w[count].month-12;
        writeln(w[count].name,'ближайшее день рождение в', w[count].day,
        '/', w[count].month);
     close(f1);
     end.


(тут типа первая прога создает файл, а вторая его коректирует, но во второй он выдаёт ошибку! помогите мне её найти pleas)

give_rose.gif
volvo
To: Иринка
После описания
Type
  birthday=record
    name:string[10];
    year:1900..2005;
    month:1..12;
    day:1..31;
  end;

во второй программе добавь:
Type
  friends = array[1 .. n] of birthday;

Это раз... Второе - у тебя некорректно задается имя текстового файла. Вот так правильно:
    fname2:='Birth_'+strNN+'.txt'; { обрати внимание на точку !!! }


А все остальное работает... good.gif
Иринка
Вау! Супер! Спасибо 1000 раз! Ты меня спас! я над эти все каникулы думала...
give_rose.gif
Иринка
ой! знаешь, я сделала как ты сказал, но он мне выдал ошибку: error 103 File not open . mega_chok.gif
volvo
To: Иринка
У тебя не создался файл "birthday.dat", а создался "birthday.d"... Для этого имени просто не хватило места в строке (строка для хранения имени файла должна быть КАК МИНИМУМ 12 символов длиной: 8 на имя, 1 на точку, и 3 на расширение; это не включая путь к файлу...).
var
      ...
      filename:string[10];

в первой программе поменяй на
var
      ...
      filename:string[15];


:smile: Просто я когда тестировал программу, ввел имя "out.out", оно поместилось полностью, и я этого бага не заметил....
Иринка
теперь мне всё панятно! Спасибочки за помощь... wub.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.