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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2012, 15:18   #1
Julichka1k
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 30
По умолчанию создание и использование файлов на языке паскаль

задание

Создать файл F, компоненты которого являются целыми числами.Записать в файл G квадраты всех четных чисел файла F, а в файл H кубы всех нечетных чисел.

Код:
program example;
uses
crt;
const
_in_name = 'input.dat';
_out_name1 = 'output1.dat';
_out_name2 = 'output2.dat';
var
f, g, h: file of integer;
i, num: integer;
begin
clrscr;
assign (f, _in_name);
assign (g, _out_name1);
assign (h, _out_name2);
{$I-}
Reset(f);
if IOResult <> 0 then
begin
Rewrite(f);
randomize;
for i := 1 to 100 do
begin
num := random(101);
Write(f, num);
end;
close(f);
Reset(f);
Reset(g);
Reset(h);
While not(Eof(f)) do
begin
Read(f, num);
if odd(num) then Write (h, sqr(num)*num)
else Write (g, sqr(num)); 
end;
close(f);
close(g);
close(h);
end
else
begin
Reset(g);
Reset(h);
While not(Eof(f)) do
begin
Read(f, num);
if odd(num) then Write (h, sqr(num)*num)
else Write (g, sqr(num)); 
end;
close(f);
close(g);
close(h);
end;
{$I+}
end.

найдите ошибку, или как проще написать программу к этому заданию



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.03.2012 в 15:47.
Julichka1k вне форума Ответить с цитированием
Старый 22.03.2012, 16:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

остроумно..
подправил...

Код:
program example;
uses
  crt;
const
  _in_name = 'input.dat';
  _out_name1 = 'output1.dat';
  _out_name2 = 'output2.dat';
var
  f, g, h: file of longint;
  i, num: longint;
begin
  clrscr;
  assign(f, _in_name);
  assign(g, _out_name1);
  assign(h, _out_name2);
{$I-}
  Reset(f);
  if IOResult <> 0 then
  begin
    Rewrite(f);
    if IOResult <> 0 then begin
      WriteLn('#Error to create file ' + _in_name);
      Halt(100)
    end;
    randomize;
    for i := 1 to 100 do
    begin
      num := random(101);
      Write(f, num);
    end;
  end;
{$I+}
  close(f);

  Reset(f);
  Rewrite(g);
  Rewrite(h);
  while not (Eof(f)) do
  begin
    Read(f, num);
    if odd(num) then begin
      num := sqr(num) * num;
      Write(h, num)
    end
    else begin
      num := sqr(num);
      Write(g, num);
    end;
  end;
  close(f);
  close(g);
  close(h);

  WriteLn('Done.');
end.
p.s. если хотите использовать файл Integer - тогда ограничьте значение.
random(101) может вернуть число 99 - а куб этого числа = 970299 - это выходит
за рамки допустимого диапазона Integer ( в TurboPasal : Integer -32768..32767 )

Последний раз редактировалось Serge_Bliznykov; 22.03.2012 в 16:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2012, 16:02   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Reset(f);
if IOResult <> 0 then
begin
Rewrite(f);
Второй раз открывать файл без его закрытия... как-бы не совсем правильно)
Код:
Reset(g);
Reset(h);
тут было бы разумнее использовать Rewrite или Append - Reset не ориентирован на изменение текущего размера файла.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 22.03.2012, 16:09   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, пара слов, которые, думаю, TC не пригодятся (чтобы не забивать голову лишним )

DiemonStar, FYI.

Цитата:
Сообщение от DiemonStar
тут было бы разумнее использовать Rewrite или Append - Reset не ориентирован на изменение текущего размера файла.
тут нужно только Rewrite()
Append - вообще не откомпилируется (эта процедура предназначена исключительно для текстовых файлов)
а вот насчёт Reset - вы ошибаетесь - для типизированных файлов он открывает на чтение и на запись - т.е. в файл можно писать и ДОПИСЫВАТЬ данные!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2012, 16:10   #5
Julichka1k
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 30
По умолчанию

почему в ABC выводит ошибку (Ошибка:неизвестный индификатор IOResult)
Julichka1k вне форума Ответить с цитированием
Старый 22.03.2012, 16:12   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Julichka1k А откуда у вас исходный код?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 22.03.2012, 16:14   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

потому что Вы взяли код от TurboPascal (как я понимаю по вашему вопросу - ЧУЖОЙ код) и бездумно вставили его в Pascal ABC.
Но о том, что Вы используете ПаскальABC и какие ошибки получаете, Вы нам решили не сообщать, чтобы было загадочней..
вот и результат...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование .h файлов в описании класса С++ shir994 Помощь студентам 0 03.03.2012 00:02
Использование файлов ресурсов Mixim Общие вопросы .NET 4 13.01.2011 03:39
Использование строк и файлов Allysia Помощь студентам 2 23.02.2010 09:10
Создание процедуры целочисленной матрицы на языке паскаль. Darya Помощь студентам 3 11.05.2009 18:40