Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 05.01.2016, 20:09   #1 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию Создание программы. Тема: типизированные файлы. Pascal ABC

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

Старый 05.01.2016, 20:09
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посоветую уделить немного времени прочтению схожих постов

Создание программы на языке С++
Типизированные файлы, Паскаль
Типизированные файлы
Помогите решить задачу по Pascal. Тема - массивы

Старый 05.01.2016, 20:11   #2 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию

Я, создала файл и нашла в нем максимум, а вот как считывать по 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.
hedgehod вне форума   Ответить с цитированием
Старый 05.01.2016, 21:30   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Пожалуйста, например, так:
Код:
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.
Но мой Вам совет: прежде всего, разберитесь с семантикой языка Паскаль, в частности:
В путях файлов употребляются ОБРАТНЫЕ слэши, причем ОДИНАРНЫЕ!!!
Vladimir_S вне форума   Ответить с цитированием
Старый 05.01.2016, 21:35   #4 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию

Спасибо, Владимир. Я поняла, ход вашей мысли. Вы гений, а я какие варианты только не писала уже ничего не могла сделать . Обязательно воспользуюсь вашим советом)
hedgehod вне форума   Ответить с цитированием
Старый 05.01.2016, 21:42   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от hedgehod Посмотреть сообщение
Вы гений
А, да, я знаю...
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 05.01.2016, 22:30   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Черт, выявил-таки один ляп: если 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;
Vladimir_S вне форума   Ответить с цитированием
Старый 05.01.2016, 23:58   #7 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию

да, я уже исправила . Наверно стоило написать об этом.
hedgehod вне форума   Ответить с цитированием
Старый 06.01.2016, 00:01   #8 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию

Спасибо за помощь)))
hedgehod вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.