program Work3;
{$N+,E+}
{ Варіант 60 - елементів масиву типу LONGINT.
Знайти суму перших K від’ємних елементів масиву A.
}
Uses CRT;
Const NN=20; {Максимальна довжина вектора}
inv=' N';
inv=' К';
inv1='Повторіть введення';
inv4='виходить за діапазон [-2147483648..2147483647]!!!!';
inv5=' значення, що вводиться, ';
Type ArrayA=Array [1..NN] of LongInt;
Var k,N:integer;
A:Array;
ch:char;
{введення значення N, 1<=N<=NN }
Procedure Input(inv:String; NN:Integer; Var N:integer);
Begin
Repeat
Write('введіть значення'+inv,'=====>');
Readln(N);
Until (N<=NN) and (N>=1);
End;
{введення N значень компонентів вектора A[i], -2147483648<=A[i]<= 2147483647 }
Procedure InputVector(N:integer;Var A:arrayA);
Label L;
Var i:integer;
Ra:Real;
s1:String;
Begin
for i:=1 to N do
Begin
L:
Write('введіть значення елемента вектора A[',і,']=====>');
Readln(Ra);
if (Ra>=-2147483648.0)and(Ra<=2147483647.0) then A[i]:=trunc(Ra)
else
Begin
s1:=inv5+inv4;
Writeln(s1);
Writeln(inv1);
goto L;
End
End;
End;
{Висновок значень компонентів вектора A пострічно}
Procedure OutputVector(N:integer; A:arrayA);
Var i:integer;
Begin
Writeln(' -і-і-і- Вихідний вектор -і-і-і-');
for i:=1 to N do
Write(A[i]:11,' ');
Writeln;
End;
{Перебування суми перших K від’ємних елементів масиву A довжиною N }
Function Summa(k,N:Integer; A:ArrayA):Extended;
|
|
Var i,Kk:integer;
S:Extended;
Begin
Kk:=1; {Лічильник від’ємних елементів масиву}
S:=0;
for i:=1 to N do
if (A[i]<0) and (Kk<=k) then
Begin
S:=S+A[i];
Kk:=Kk+1
End;
Summa:=S
End;
{Головна програма}
Begin
Repeat
ClrScr;
Input(inv,NN,N); {введення конкретної довжини масиву N<=NN }
{введення числа від’ємних елементів масиву K<=N, що треба підрахувати}
Input(invK,N,K);
InputVector(N,A);
OutputVector(N,A);
Writeln('Сума перших K від’ємних елементів масиву A=',
Summa(k,N,A):15:0);
Writeln('Повторити? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
End.
Для одержання результату в контрольній роботі №3 (варіант 60) необхідно ввести фактичне значення довжини масиву N (1<=N<=NN), значення числа від’ємних елементів масиву ДО (K<=N), що треба підрахувати, і
значення елементів вихідного масиву A[i], i=1,...,N (з перевіркою на діапазон LONGINT).
Ім'я програми - WORK3.
· У фігурні дужки включені директиви компілятора (див. Дод. 8) для обробки дійсної суми типу EXTENDED:
¨ $N+ - використовувати числовий співпроцесор (реалізувати операції з крапкою, що плаває, апаратно);
¨ $E+ -включити режим програмної эмуляції співпроцесора.
· У поле опису бібліотек, констант і змінних завдань стандартний модуль CRT, визначені константи: NN, inv, inv, inv1, inv4, inv5.
· Описано власний тип даних Array для опису масиву довжиною NN, елементи якого мають тип LongInt, - Type Array=Array[1..NN] of Longint;
· Описано змінні k, N:Integer і масив A:Array; задана символьна змінна ch.
Далі йдуть описи процедур Input, InputVector, OutputVector, і функції Summa.
· Записано головну програму, що викликає потрібні процедури і функції, відповідно до алгоритму рішення задачі.
Опис процедури Input
¨ У заголовку процедури описані формальні змінні:
|
|
вхідні: inv, NN (значення яких передаються з основної програми);
вихідне N (значення визначається в процедурі і передається в основну програму).
¨ У циклі Repeat...Until (N<=NN) and (N>=1) вводиться значення змінної N - Readln(N) з перевіркою (тобто що N повинно бути більше або дорівнює одиниці і менше або дорівнює NN - заданому за умовою завдання значенню розміру масиву). Потім керування передається в основну програму.