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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 10:42   #1
lubov_morkov
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 37
По умолчанию Работа с файлами

написать программу на языке pascal. из компонентов исходного файла целых чисел сформировать массв нечетных чисел. Подскажите где ошибка и какая

program zadacha;
uses crt;
const n=3;
var a:array[1..n] of real;
b:array[1..n] of real;
i,k:integer; f:file of real;
begin
assign (f, 'd:\abc.txt');
rewrite(f);

for i:=1 to n do
write('a=');
read(a[i]);
write(f,a[i])
;
close(f);
reset(f);
for i:=0 to n do
read (f, a[i]);
close(f);

if a[i] mod 2<>0 then
begin
k:=k+1;
b[k]:=a[i];
end;
for i:=1 to k do
writeln(b[i]);
end.
lubov_morkov вне форума Ответить с цитированием
Старый 10.06.2010, 10:53   #2
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Если в цикле несколько строк программы нужно пользоваться:
begin
...
end;
и ещё
Код:
if a[i] mod 2<>0 then
здесь проверяется следующий эл-т!
Ol'ga_new вне форума Ответить с цитированием
Старый 10.06.2010, 10:53   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Вы неверно прочитали условие
Цитата:
исходного файла целых чисел
Вам нужен файл file of Integer (ну, или file of LongInt)
и, соответственно, переменные того же типа.
Кстати, в математике для вещественных чисел вообще не определенно понятие чётности/нечётности!


2) код надо оформлять специальным тэгом (кнопочка с решёточкой #)

3) чтение лучше производить в цикле while Not Eof(f) do begin ...
и, разумеется, контролировать, чтобы число прочитанных чисел не превысило N
да и N сделайте хотя бы N = 100, что Вам, 300 байт лишних жалко?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.06.2010, 11:12   #4
lubov_morkov
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 37
По умолчанию

спасибо........только чет не получается, вроде все исправила (((
lubov_morkov вне форума Ответить с цитированием
Старый 10.06.2010, 11:23   #5
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Выложи новую версию, мы проверим!
Ol'ga_new вне форума Ответить с цитированием
Старый 10.06.2010, 11:30   #6
lubov_morkov
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 37
По умолчанию

program zadacha;
uses crt;
const n=100;
var a:array[1..n] of integer;
b:array[1..n] of integer;
i,k:integer; f:file of integer;
begin
assign (f, 'd:\abc.txt');
rewrite(f);
while not eof(f) do begin
for i:=1 to n do
write('a=');
read(a[i]);
write(f,a[i])
end; ;
close(f);
reset(f);
for i:=0 to n do
read(f,a[i]);
close(f);

if a[i] mod 2<>0 then
begin
k:=k+1;
b[k]:=a[i];
end;
for i:=1 to k do
writeln(b[i]);
end.
lubov_morkov вне форума Ответить с цитированием
Старый 10.06.2010, 11:50   #7
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Вот код явные ошибки исправили, попробуй:
Код:
program zadacha;
uses crt;
const n=100;
var a:array[1..n] of integer;
b:array[1..n] of integer;
i,k:integer; f:file of integer;
begin
assign (f, 'd:\abc.txt');
rewrite(f);
i:=1;
while not eof(f) do
begin
{for i:=1 to n do}
write('a=');
read(a[i]);
write(f,a[i])
i:=i+1;
end; 
close(f);
reset(f);
n:=i-1;
for i:=1 to n do
read(f,a[i]);
close(f);
for i:=1 to n do
if (a[i] mod 2)<>0 then
begin
k:=k+1;
b[k]:=a[i];
end;
for i:=1 to k do
writeln(b[i]);
end.
Ol'ga_new вне форума Ответить с цитированием
Старый 10.06.2010, 11:53   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

to lubov_morkov,

уф.. всё не так... я же говорил while Not eof(f) для ЧТЕНИЯ!
что же Вы его в запись вставили?! да и тебовать каждый раз вводить 100 чисел - это жестоко!
тогда уже надо случайными числами заполнять файл...
ладно.
ловите готовый код:
Код:
program zadacha;
uses crt;
const n = 100;
var
  b: array[1..n] of integer;
  a, i, k: integer;
  f: file of integer;

begin

  {запись файла}
  assign(f, 'd:\abc.txt');
  rewrite(f);
  WriteLn('Введите, сколько чисел будет в файле');
  Readln(k);
  if K>n then begin
    WriteLn('Больше ',n:1,' нельзя! Прощайте...');
    Readln;
    Halt(1);
  end;
  for i:=1 to k do begin
    write('a',i:1,'=');
    readln(a);
    write(f, a)
  end; ;
  close(f);

  {теперь чтение файла}
  reset(f);
  k:=0;
  while Not eof(f) do begin
    read(f, a);
    if ((a mod 2) <> 0) and (k<n) then begin
      {нашли нечётное число}
      inc(k);
      if k>n then WriteLn('В исходном файле нечётных чисел больше ',n:1)
      else b[k] := a
    end;
  end;
  Close(f);

  {вывод массива с нечётными числами}
  Writeln('Нечетный числа (массив B)');
  for i := 1 to k do
    writeln(b[i]);

  Readln; {пауза до нажатия Enter, чтобы можно было насладиться результами}
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.06.2010, 11:59   #9
lubov_morkov
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 37
По умолчанию

спасибо болшое)))
lubov_morkov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РАБОТА С ФАЙЛАМИ tanek Помощь студентам 5 01.02.2011 17:00
С++ю Работа с файлами maloy-rom Помощь студентам 1 03.06.2009 16:18
Работа с файлами basss Помощь студентам 2 22.12.2008 01:07
Работа с файлами Dim@ Помощь студентам 1 26.12.2007 22:43