Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Создание программы. Тема: типизированные файлы. Pascal ABC (http://www.tehnari.ru/f41/t106206/)

hedgehod 05.01.2016 20:09

Создание программы. Тема: типизированные файлы. Pascal ABC
 
Задача: Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее значение первых пяти компонент файла f, затем - следующих пяти компонент и т.д. Если в последней группе окажется менее пяти компонент, то последняя компонента файла g должна быть равна наибольшей из компонент файла f, образующих последнюю (неполную) группу.

hedgehod 05.01.2016 20:11

Я, создала файл и нашла в нем максимум, а вот как считывать по 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[i] := random(50) - 20;
for i := 1 to n do
begin
Write(f, A[i]);
Write(' ', A[i]);
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[i] then begin
max := A[i];end; end;
Write(g, max);
Write(' ', max);

close(g);
close(f);
end.

Vladimir_S 05.01.2016 21:30

Пожалуйста, например, так:
Код:

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.

Но мой Вам совет: прежде всего, разберитесь с семантикой языка Паскаль, в частности:
В путях файлов употребляются ОБРАТНЫЕ слэши, причем ОДИНАРНЫЕ!!!

hedgehod 05.01.2016 21:35

Спасибо, Владимир. Я поняла, ход вашей мысли. Вы гений, а я какие варианты только не писала уже ничего не могла сделать . Обязательно воспользуюсь вашим советом)

Vladimir_S 05.01.2016 21:42

Цитата:

Сообщение от hedgehod (Сообщение 1195321)
Вы гений

А, да, я знаю... :D

Vladimir_S 05.01.2016 22:30

Черт, выявил-таки один ляп: если 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;


hedgehod 05.01.2016 23:58

да, я уже исправила . Наверно стоило написать об этом.

hedgehod 06.01.2016 00:01

Спасибо за помощь)))


Часовой пояс GMT +4, время: 07:19.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.