Определение положения в сформированном массиве наибольшего положительного элемента - Pascal ABC
Формулировка задачи:
Файл исходных данных содержит значения величин N, M и элементов массива VEC[1]... VEC[8]. Написать, отладить и протестировать программу, выполняющую:
1. Чтение данных из файла.
2. Формирование нового массива NEWVEC, первый элемент которого равен полусумме первого и второго элемента массива VEC, второй - полусумме третьего и четвёртого и Т. Д.
3. Суммирование первых M элементов сформированного массива.
4. Печать сформированного массива и значения суммы.
5. Определение положения в сформированном массиве наибольшего полодительного элемента из первых N, печать номера и значения этого элемента.
Алгоритм должен быть параметризован.
Решение задачи: «Определение положения в сформированном массиве наибольшего положительного элемента»
textual
Листинг программы
const k=8;
type mas=array[1..k] of real;
procedure readfile(var f:text;var VEC:mas; var n,m:byte);
var i:byte;
begin
if not fileexists('input.txt') then
begin
writeln('Данный файл не найден');
readln;
exit
end;
assign(f,'input.txt');
reset(f);
read(f,n,m);
writeln('Массив VEC');
for i:=1 to k do
begin
read(f,VEC[i]);
write(VEC[i]:0:2,' ');
end;
writeln;
close(f);
end;
procedure form(VEC:mas;var NEWVEC:mas;var k1:byte);
var i:byte;
begin
k1:=0;
for i:=1 to k div 2 do
begin
inc(k1);
NEWVEC[k1]:=vec[2*i-1]+VEC[2*i];
end;
end;
function summa(NEWVEC:mas;m:byte):real;
var i:byte;
begin
result:=0;
for i:=1 to m do
result:=result+NEWVEC[i];
end;
procedure print(NEWVEC:mas;k1,m:byte);
var i:byte;
begin
writeln('Массив NEWVEC');
for i:=1 to k1 do
write(NEWVEC[i],' ');
writeln;
writeln('Сумма первых ',m,' элементов=', summa(NEWVEC,m):0:2);
end;
procedure max(NEWVEC:mas;k1,n:byte;var mx:real; var imx:byte);
var i:byte;
begin
mx:=0;
for i:=1 to n do
if(NEWVEC[i]>0)and(NEWVEC[i]>mx) then
begin
mx:=NEWVEC[i];
imx:=i;
end;
if mx=0 then writeln('В массиве среди первых ',n,' элементов нет положительных')
else writeln('Максимальный положительный среди первых ',n,' элементов=',mx,' его номер=',imx);
end;
var f:text;
VEC,NEWVEC:mas;
n,m,k1,imx:byte;
mx:real;
begin
readfile(f,VEC,n,m);
form(VEC,NEWVEC,k1);
print(NEWVEC,k1,m);
max(NEWVEC,k1,n,mx,imx);
end.
Объяснение кода листинга программы
- В начале кода объявляются необходимые переменные и константы.
- Функция
readfileсчитывает файл 'input.txt' и записывает его содержимое в переменнуюVEC. Также считывается информация о количестве элементов в массивеnи их размерностиm. - Функция
formвычисляет среднее значение элементов массиваVECи сохраняет его в новом массивеNEWVEC. Здесь также используется формула для вычисления среднего значения. - Функция
printвыводит содержимое массиваNEWVECи сумму первыхmэлементов. - Функция
maxнаходит максимальный положительный элемент в массивеNEWVEC. Если такого элемента нет, выводится сообщение об этом. - Завершается программа вызовом функций
readfile,form,printиmaxс соответствующими аргументами.