Составить подпрограмму,заменяющую все элементы одномерного массива,меньшие заданной...

0 голосов
75 просмотров

Составить подпрограмму,заменяющую все элементы одномерного массива,меньшие заданной величины Т,на значение этой величины и считающую число таких замен.
используя эту подпрограмму,изменить каждый из двух заданных массивов Р и С и вывести на печать тот массив,в кот. Окажется большим число замен.Если же эти числа замен будут равны,отпечатать число замен.задать Т=0.005,Р= (0.001;1.54; -2.75; 0.002; -0.1; 1.2; -0.47) ; С= ( -5.74; 0.0001; 4.1; 7.24; -1.5; 2.9; 0.004 ) элементы массива P C брать из файлов


Информатика (68 баллов) | 75 просмотров
0

а что в файле должно находиться?

Дан 1 ответ
0 голосов
Правильный ответ

Const
  n=7;

type
  V=array[1..n] of real;
 
procedure InitMas(var a:V; fn:string);
{ инициализция массива из файла }
var
  i:integer;
  f:Text;
begin
  Assign(f,fn);
  Reset(f);
  for i:=1 to n do
    if not Eof(f) then Read(f,a[i]) else a[i]:=0;
  Close(f)
end;

procedure MyProc(var a:V; t:real; var k:integer);
{ замена значением t элементов массива, меньших t }
var
  i:integer;
begin
  k:=0;
  for i:=1 to n do
    if a[i]end;

procedure OutMas(var a:V; an:string);
{ вывод элементов массива }
var
  i:integer;
begin
  Writeln('Массив '+an);
  for i:=1 to n do Write(a[i],' ');
  Writeln
end;

procedure Work(var a:V; fn,an:string; t:real; var k:integer);
{ полный цикл обработки массива по заданию }
begin
  InitMas(a,fn);
  MyProc(a,t,k)
end;

var
  P,C:V;
  k1,k2:integer;
  t:real;
begin
  Writeln('Введите значение T: '); Read(t);
  Work(P,'p.dat','P',t,k1);
  Work(C,'c.dat','C',t,k2);
  if k1=k2 then Writeln('Число замен равно ',k1)
  else
    if k1>k2 then OutMas(P,'P') else OutMas(C,'C')
end.

Тестовое решение:
Введите значение T:
0.005
Массив P
0.005 1.54 0.005 0.005 0.005 1.2 0.005


(142k баллов)
0

В каждом файле ваши данные через пробел в строку. Например, для массива Р это будет строка 0.001 1.54 -2.75 0.002 -0.1 1.2 -0.47

0

у меня ошибку Program2.pas(14) : Ошибка времени выполнения: Файл 'C:\Users\USER\Desktop\c.dat' не найден. а он создан

0

Или укажите ПОЛНЫЙ ПУТЬ у файлу, или положите его в ту же директорию, где будет находится исполняемый файл, а находится он будет по умолчанию там же. где исходный текст программы.

0

Я вижу, что у Вас файл лежит на Вашем рабочем столе, естественно, программа его не находит. Хотите именно с таким расположением - пишите в вызове Work(P,'C:\Users\USER\Desktop\c.dat','P',t,k1);

0

Хотя... похоже наоборот, Ваша программа ХОЧЕТ по этому пути видеть файл, а там его нет. Вы, надеюсь поняли, что файлов два должно быть?

0

да я понял что должно быть 2 файла

0

Reset(f); у меня вот этой строчке выдаёт ошибку в 14 строчке

0

Значит не находит файл. У меня все нормально с файлами работает, раз тестовое решение приложено. Идет в Reset ошибка - это как раз не находит файл, потому что в Assign обращение к файлу еще не идет. Еще раз - можете ничего не исправлять в тексте программы, а файлы с именем p.dat и c.dat поместить по тому пути, который пишется Вам в этом сообщении.

0

Я сейчас сюда закину программу, которая Вам эти файлы создаст, раз руками сделать у Вас проблемы.

0

const
n=7;
a1:array[1..n] of real=(0.001,1.54,-2.75,0.002,-0.1,1.2,-0.47);
a2:array[1..n] of real=(-5.74,0.0001,4.1,7.24,-1.5,2.9,0.004);
var
i:integer;
f1,f2:Text;
begin
Assign(f1,'ac.dat'); Rewrite(f1);
Assign(f2,'ap.dat'); Rewrite(f2);
for i:=1 to n do
begin Writeln(f1,a1[i]); Writeln(f2,a2[i]) end;
Close(f1); Close(f2)
end.