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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2020, 16:31   #1
Marina22126
Новичок
Джуниор
 
Регистрация: 20.12.2020
Сообщений: 2
По умолчанию Программа на паскале, помогите пожалуйста

Написать программу, которая формирует новый файл последовательного доступа, компонентами которого являются значения произведений двух соседних компонент исходного файла.
Нужно на паскале abc, без использования массивов.
С файлами я разобралась, не могу понять как без массивов поэлементно перемножать...
у меня получаются квадраты чисел первого файла

Код:
begin
  Assign(f1, 'data.txt'); Rewrite(f1);

  write('n=');readln(n);
  for i := 1 to n do
  begin
    k := random(10);
    write(f1, k);
    write(k:4);
  end;
  writeln;
  
  Assign(g1,'data1'); Rewrite(g1);
reset(f1);
 
  a1:=1;
while not eof(f1) do begin
read(f1,k);

for i:= 1 to n do begin
if (i mod 2=0) then  x:=k;
for j:=i to n do
if (j mod 2 <>0) then a1:=k*x;
end;
write(g1,a1);
write(a1:4);
end;
close(g1);
close(f1);
end.

Последний раз редактировалось Marina22126; 20.12.2020 в 19:22. Причина: добавила свой код
Marina22126 вне форума Ответить с цитированием
Старый 20.12.2020, 18:50   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Не знаю какая версия Паскаля вас интересует, но после записи в файл, когда вы формируете тестовый файл, его необходимо закрывать:
Код:
Close(f1);
Хотя вы далее и используете файл, но будет лучше, если его закрыть и вновь открыть только на чтение.

В цикле чтения файла сделайте последовательно чтение двух строк. Используйте две переменные.
Перемножайте полученные значения и сохраняйте в новом файле.
Понятно, что при таком режиме чтения необходимо контролировать попадание на конец файла, если число элементов файла нечётное.
Для этого можно воспользоваться директивами компилятора и перехватывать сообщение об ошибке ввода/вывода.
Предлагаю любимую мной книжку Т.А. Павловская, Программирование на ЯВУ. Паскаль.
Электронная версия этой книги есть в соответствующем разделе. Там вы найдёте и примеры с использованием директив при работе с файлом.

PS: Копируйте код на форум, выделите его и нажмите на кнопку [CODE], которая есть над формой ввода. Это позволит лучше форматировать код и он будет более читаемым.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.12.2020, 19:29   #3
Marina22126
Новичок
Джуниор
 
Регистрация: 20.12.2020
Сообщений: 2
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение

В цикле чтения файла сделайте последовательно чтение двух строк. Используйте две переменные.
Перемножайте полученные значения и сохраняйте в новом файле.
Паскаль abc.
чтение каких двух строк? у меня же компоненты - это числа, записанные в исходный файл случайным образом.
Marina22126 вне форума Ответить с цитированием
Старый 20.12.2020, 20:22   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Цитата:
Паскаль abc.
Оба-на. Я игнорирую это ..., но если вам известны методы работы с файлами, то вы сможете понять, как это сделать в этом Паскале.

Запишите числа с добавлением разделителя, например пробела или используйте writeln().
В этом случае одно число будет в одной строке.
Думаю, что нисколько не противоречя условию задачи, можно записать в строке по два числа, разделив их пробелом. А потом по два и читать. Это упростит проверку на конец файла.

Ваши компоненты - это числа в ASCII формате. При записи в файл они преобразуются к ASCII формату, а при чтении, если верно указан тип переменной - обратно, в число.
Числа записаны не случайным образом, как пишите вы, а последовательно. Сами числа имеют псевдослучайное значение.

Из текстового файла числа можно читать по одному (или два - в предложенной выше версии).

PS: Подготовьте файл с данными. Закройте его нормально и откройте в Блокноте.
Там всё будет видно.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.12.2020, 21:42   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,552
По умолчанию

А разве сказано, что представление чисел в файле ASCII ? Я этого в вопросе не увидел. А если
file of real ?
Впрочем, кто знает, как у них там в АВС, простите за выражение...
digitalis вне форума Ответить с цитированием
Старый 20.12.2020, 22:04   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Цитата:
Написать программу, которая формирует новый файл последовательного доступа
Одним из файлов с последовательным доступом и есть текстовый.
Выделяют бестиповые - записываем слепки ОЗУ и компонентные - для хранения однотипных элементов, например записи, массив.
Эти два типа записываются и читаются блоками. Можно читать и изменять любой элемент блока.
Выбрали блок, прочитали, обработали.
С текстовыми (последовательного доступа) так поступать нельзя.
Данные читаются последовательно и при необходимости, переписываются в новый файл.
В новый файл можно вносить изменения и дополнять данными из обрабатываемого.

В последовательном файле нельзя прочитать, например, 13-ю строку, не прочитав предыдущие.
Это как работа с магнитной лентой.

PS: Это больше для ТС.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите в паскале решить пожалуйста Gogol Помощь студентам 18 27.01.2009 21:36
привет всем! помогите пожалуйста решить две задачи на паскале. я в паскале полный ноль. Пищенок Саша Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 13:46
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! VisTBacK Помощь студентам 6 19.09.2008 13:44