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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2014, 09:24   #1
ALEXandr20333
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 76
По умолчанию Как заменить код На Pascal ABC (обработка типизированного файла записей)

Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах
Код:
сonst FName = 'имя файла';
type
  str20 = string[20];
  tSports = record
    Fam : str20;
    num : str20;
    kol : word;
  end;
 
  function wwod(var ns : tSports): boolean;
  begin
    writeln('----'); wwod:=false;
    with ns do begin
      write('Familiq : '); readln(fam); if fam='' then exit;
      write('Nomer   : '); readln(num); if num='' then exit;
      write('Kol o4kov : '); readln(kol);
    end;
    wwod:=true;
  end;
 
var
  f : file of tSports;
  S,s1 : tSports;
Begin
  assign(f,Fname);
  {$I-} reset(f); {$I+}
  if ioresult<>0 then begin
    writeln('fail ne nayden. wwedite dannye.');
    rewrite(f);
    while wwod(s) do write(f,s);
    close(f); reset(f);
  end;
 
  writeln('sportcmeny:');
  while not eof(f) do begin
    read(f,s);
    writeln(s.fam:20,s.num:20,s.kol:10);
  end;
 
  if filesize(f)<2 then begin  // проверка количества записей в файле
     writeln('w ffaile nedostato4no zapisey');
     close(f); exit;
  end;
 
  reset(f); read(f,s); read(f,s1);  // указатель на начало, читаем первые 2 записи
  reset(f); write(f,s1); write(f,s);  // указатель на начало, пишем первые 2 записи
  close(f);                               // сохраняем изменения
  reset(f);                               // указатель на начало
  writeln('sportcmeny posle smeny lidera:');
  while not eof(f) do begin
    read(f,s);
    writeln(s.fam:20,s.num:20,s.kol:10);
  end;
  close(f);
  readln;
End.
и как вот эту строку заменить чтобы работала программа в PascalABS (бьет ошибку)
if ioresult<>0 then begin
writeln('fail ne nayden. wwedite dannye.');

Последний раз редактировалось Stilet; 22.05.2014 в 11:05.
ALEXandr20333 вне форума Ответить с цитированием
Старый 22.05.2014, 09:34   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

FileExists() вам поможет.
Код:
const
  FName = 'имя файла';
type
  str20 = string[20];
  tSports = record
    Fam : str20;
    num : str20;
    kol : word;
  end;
var
  f : file of tSports;
  S,s1 : tSports;

function wwod(var ns : tSports): boolean;
begin
  writeln('----'); 
  wwod:=false;
  with ns do 
    begin
      write('Familiq : '); 
      readln(fam); 
      if fam='' then 
        exit;
      write('Nomer : '); 
      readln(num); 
      if num='' then 
        exit;
      write('Kol o4kov : '); 
      readln(kol);
  end;
  wwod:=true;
end;

Begin
  assign(f,Fname);
  if not FileExists(fname) then 
    begin
      writeln('fail ne nayden. wwedite dannye.');
      rewrite(f);
      while wwod(s) do 
        write(f,s);
      close(f); 
  
    end;
  reset(f);  
  writeln('sportcmeny:');
  while not eof(f) do 
    begin
      read(f,s);
      writeln(s.fam:20,s.num:20,s.kol:10) ;
    end;
  if filesize(f)<2 then 
    begin // проверка количества записей в файле
      writeln('w ffaile nedostato4no zapisey');
      close(f); 
      exit;
    end;
  reset(f); read(f,s); read(f,s1); // указатель на начало, читаем первые 2 записи
  reset(f); write(f,s1); write(f,s); // указатель на начало, пишем первые 2 записи
  close(f); // сохраняем изменения
  reset(f); // указатель на начало
  writeln('sportcmeny posle smeny lidera:');
  while not eof(f) do 
    begin
      read(f,s);
      writeln(s.fam:20,s.num:20,s.kol:10) ;
    end;
  close(f);
  readln;
End.

Последний раз редактировалось ZX Spectrum-128; 22.05.2014 в 10:21.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 22.05.2014, 12:17   #3
ALEXandr20333
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 76
По умолчанию

выбивает ошибку ""формат вывода :n неприменим к данным типа word
ALEXandr20333 вне форума Ответить с цитированием
Старый 22.05.2014, 12:22   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

У меня отработало нормально. В какой строке у вас ошибка?
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 22.05.2014, 13:55   #5
ALEXandr20333
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 76
По умолчанию

вот в этой
writeln(s.fam:20,s.num:20,s.kol:10) ;
ALEXandr20333 вне форума Ответить с цитированием
Старый 22.05.2014, 14:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

потому как Ваш уродец Pascal ABC - это не Паскаль, а сатира на него!

значит,
либо выкиньте :20 после s.kol

либо тип word в описании типа замените на Integer

либо сделайте так:
Код:
var ikol : longint;
Begin
  assign(f,Fname);
  if not FileExists(fname) then
    begin
      writeln('fail ne nayden. wwedite dannye.');
      rewrite(f);
      while wwod(s) do
        write(f,s);
      close(f);

    end;
  reset(f);
  writeln('sportcmeny:');
  while not eof(f) do
    begin
      read(f,s);
      ikol := s.kol;
      writeln(s.fam:20,s.num:20, ikol:20);
    end;
  if filesize(f)<2 then
    begin // проверка количества записей в файле
      writeln('w ffaile nedostato4no zapisey');
      close(f);
      exit;
    end;
  reset(f); read(f,s); read(f,s1); // указатель на начало, читаем первые 2 записи
  reset(f); write(f,s1); write(f,s); // указатель на начало, пишем первые 2 записи
  close(f); // сохраняем изменения
  reset(f); // указатель на начало
  writeln('sportcmeny posle smeny lidera:');
  while not eof(f) do
    begin
      read(f,s);
      ikol := s.kol;
      writeln(s.fam:20,s.num:20, ikol:20);
    end;
...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.05.2014, 14:58   #7
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
У меня отработало нормально. В какой строке у вас ошибка?
У меня пабц.нет оказывается
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 23.05.2014, 00:14   #8
ALEXandr20333
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 76
По умолчанию

Код:
const
  FName = '1.txt';
type

int=integer;
  str20 = string[20];
  tSports = record
    Fam : str20;
    num : str20;
    kol : int;
  end;
var
  f : file of tSports;
  S,s1 : tSports;
ikol : longint;
function wwod(var ns : tSports): boolean;
begin
  writeln('----');
  wwod:=false;
  with ns do
    begin
      write('Familiq : ');
      readln(fam);
      if fam='' then
        exit;
      write('Nomer : ');
      readln(num);
      if num='' then
        exit;
      write('Kol o4kov : ');
      readln(kol);
  end;
  wwod:=true;
end;

Begin

 assign(f,Fname);
  if not FileExists(fname) then
    begin
      writeln('fail ne nayden. wwedite dannye.');
      rewrite(f);
      while wwod(s) do
        write(f,s);
      close(f);

    end;
  reset(f);
  writeln('sportcmeny:');
  while not eof(f) do
    begin
      read(f,s);
      ikol := s.kol;
      writeln(s.fam:20,s.num:20, ikol:20);
    end;
  if filesize(f)<2 then
    begin // проверка количества записей в файле
      writeln('w ffaile nedostato4no zapisey');
      close(f);
      exit;
    end;
  reset(f); read(f,s); read(f,s1); // указатель на начало, читаем первые 2 записи
  reset(f); write(f,s1); write(f,s); // указатель на начало, пишем первые 2 записи
  close(f); // сохраняем изменения
  reset(f); // указатель на начало
  writeln('sportcmeny posle smeny lidera:');
  while not eof(f) do
    begin
      read(f,s);
      ikol := s.kol;
      writeln(s.fam:20,s.num:20, ikol:20);
    end;
    end.
вот сделал но МЕСТАМИ ЗАПИСИ НЕ МЕНЯЕТ. ПОЧЕМУ????



___________
Форматируйте код не тегами цитирования, а специальными тегами для кода::
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)

Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.05.2014 в 09:46.
ALEXandr20333 вне форума Ответить с цитированием
Старый 23.05.2014, 00:17   #9
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Указывайте прямо номер позиции в файле
Seek(f, number); потом записывайте
Нумерация с нуля
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 25.05.2014, 19:49   #10
ALEXandr20333
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 76
По умолчанию

а на примере как будет выглядеть
ALEXandr20333 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка типизированного файла (Подскажите, что не так с программой в Delphi?) vladimir412 Общие вопросы Delphi 5 06.05.2014 11:13
Обработка типизированного файла microlab Паскаль, Turbo Pascal, PascalABC.NET 3 20.05.2012 17:36
Обработка типизированного файла со сведениями о книгах (язык C) Светлана18 Помощь студентам 1 26.04.2011 09:00
Удаление записей из типизированного файла whiskey Общие вопросы Delphi 6 30.10.2010 15:05
Типизированные файлы.Создание, удаление, редактирование, сортировка записей типизированного файла.Паскаль Студент Шиза Помощь студентам 6 08.12.2007 13:41