• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Создание программы. Тема: типизированные файлы. Pascal ABC

  • Автор темы Автор темы hedgehod
  • Дата начала Дата начала

hedgehod

Новые
Регистрация
5 Янв 2016
Сообщения
16
Реакции
1
Баллы
0
Создание программы. Тема: типизированные файлы. Pascal ABC

Задача: Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее значение первых пяти компонент файла f, затем - следующих пяти компонент и т.д. Если в последней группе окажется менее пяти компонент, то последняя компонента файла g должна быть равна наибольшей из компонент файла f, образующих последнюю (неполную) группу.
 
Я, создала файл и нашла в нем максимум, а вот как считывать по 5 элементов и находить конкретно в нем максимум не могу догадаться.
const
n = 15;

var
f, g: file of integer;
A: array[1..n] of integer;
//M: array[1..5] of integer;
max, B: integer;
i: integer;


begin
Assign(f, 'd:/f.dat');
Rewrite(f);
Randomize;
for i := 1 to n do A := random(50) - 20;
for i := 1 to n do
begin
Write(f, A);
Write(' ', A);
end;
Writeln;
close(f);

Assign(f, 'D://f.dat');
Assign(g, 'D://g.dat');

Reset(f); Rewrite(g);

For i:=1 to n do Read(f, B);
max := A[1];
for i := 1 to n do begin
if max < A then begin
max := A;end; end;
Write(g, max);
Write(' ', max);

close(g);
close(f);
end.
 
Пожалуйста, например, так:
Код:
Const
 n = 48;

Var
 f,g: file of integer;
 A: array[1..n] of integer;
 max,B,m: integer;
 i,j: integer;


Begin
 Assign(f, 'd:\f.dat');
 Rewrite(f);
 Randomize;
 for i := 1 to n do
  begin
   B:=-20+random(50);
   write(f,B);
  end;
 close(f);
 Reset(f);
 for i := 1 to n do
  begin
   Read(f,A[i]);
   write(A[i]:4);
  end;
 Close(f);
 Writeln;
 Writeln;

 Assign(g, 'D:\g.dat');
 Rewrite(g);

 m:=n div 5;

 for i:=1 to m do
  begin
   Max:=-100;
   for j:=5*(i-1)+1 to 5*i do
    if A[j]>Max then Max:=A[j];
   write(g,Max);
   write(Max:4);
  end;

 Max:=-100;
 for j:=5*m+1 to n do
  if A[j]>Max then Max:=A[j];
 write(g,Max);
 write(Max:4);

 Close(g);

 Readln
End.

Но мой Вам совет: прежде всего, разберитесь с семантикой языка Паскаль, в частности:
В путях файлов употребляются ОБРАТНЫЕ слэши, причем ОДИНАРНЫЕ!!!
 
Спасибо, Владимир. Я поняла, ход вашей мысли. Вы гений, а я какие варианты только не писала уже ничего не могла сделать . Обязательно воспользуюсь вашим советом)
 
Черт, выявил-таки один ляп: если n кратно 5 (напр. не 48, а 45), то в конце вылезает -100. Поэтому самый последний блок надо так:
Код:
 if (n mod 5)>0 then
  begin
   Max:=-100;
   for j:=5*m+1 to n do
   if A[j]>Max then Max:=A[j];
   write(g,Max);
   write(Max:4);
  end;
 
да, я уже исправила . Наверно стоило написать об этом.
 
Спасибо за помощь)))
 
Назад
Сверху