TURBO PASCAL |
Новости |
Приложение 4пример выполнения контрольной работы № 3ЛИСТИНГ ПРОГРАММЫ Work3.pasprogram
Work3; {$N+,E+} { Вариант 60 - элементы массива типа LONGINT. Найти сумму первых K отрицательных элементов массива A. } Uses CRT; Const NN=20; {Максимальная длина вектора}
invN=' N';
invK=' K'; inv1='Повторите ввод'; inv4='выходит за диапазон [-2147483648..2147483647]!!!!'; inv5='Вводимое значение '; Type
ArrayA=Array [1..NN] of LongInt; Var
k,N:integer;
A:ArrayA;
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[',i,']=====>');
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(invN,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, invN, invK, inv1, inv4, inv5. · Описан собственный тип данных ArrayA для описания массива длиной NN, элементы которого имеют тип LongInt, - Type ArrayA=Array[1..NN] of Longint; · Описаны переменные k, N:Integer и массив A:ArrayA; задана символьная переменная ch. ·
Далее идут описания
процедур Input,
InputVector, OutputVector, и функции Summa. · Записана главная программа, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи. Описание процедуры
Input ¨ В заголовке процедуры описаны формальные переменные: входные: inv, NN (значения которых передаются из основной программы); выходное N (значение определяется в процедуре и передается в основную про грамму). ¨ В цикле Repeat ...Until (N<=NN) and (N>=1) вводится значение переменной N - Readln(N) с проверкой (т.е. вводимое N должно быть больше либо равно единице и меньше либо равно NN - заданному по условию задания значению размера массива). Затем управление передается в основную программу. Описание процедуры InputVector ¨ В заголовке процедуры описаны параметры: N, передаваемый из основной программы; A - массив вводимых элементов матрицы. ¨ Описаны локальные переменные:
i :
integer- параметр цикла for; Ra : Real - рабочая переменная (вводимый элемент массива); s1 : String - строка, формируемая для аварийного вывода. ¨ В цикле for вводятся значения элемента матрицы через рабочую переменную Ra и проверяются на допустимые значения (в данном случае взяты пределы изменения для переменных типа longint). ¨ Если вводимое значение удовлетворяет заданному условию, то элементам матрицы присваивается значение A[i]:=trunc(ra). ¨ Иначе 1) строковой переменной присваивается значение s1:=inv5+inv4; (‘вводимые значения выходят за диапазон [- 147483648...2147483647]!!!!!!’). 2) это сообщение выводится на экран; 3) также на экран выводится сообщение «Повторите ввод»; 4) управление передается на метку L и снова вводим значения элементов матрицы с проверкой на допустимые значения. ¨ Управление передается в основную программу, когда закончится цикл for . Описание процедуры OutputVector ¨ В заголовке процедуры описаны параметры: N, передаваемый из основной программы; A - массив выводимых элементов матрицы. ¨ Описана локальная переменная i : integer- параметр цикла for. ¨ В процедуре в цикле for выводятся значения элементов массива А. В операторе вывода Write(A[i]:11,’ ’) задан формат для выводимого элемента массива: A[i]:11, который показывает, что для вывода значения элемента массива А отводится 11 позиций. ¨ Затем управление передается основной программе. Описание функции Summa ¨ В заголовке функции описаны параметры: k - число считываемых отрицательных элементов массива к<=N; N - размерность массива, А - массив элементов. Функция Summa описана, как Extended. ¨
В теле функции задается счетчик
отрицательных элементов массива
Кк, ему присваивается начальное значение 1
( Kk:=1).
Начальное значение суммы равно
0 (s:=0). ¨ В цикле for от единицы до N считается сумма первых K отрицательных элементов массива: 1) проверяется A[i]<0 (отрицательное число) и одновременно проверяется значение счетчика Кк<=K (не превышает числа считываемых отрицательных элементов массива K); 2)
S:=S+A[i]; 3) счетчик отрицательных чисел увеличивается на единицу Кк:=Кк+1. ¨ После окончания цикла функции Summa присваивается значение полученной суммы всех отрицательных чисел - Summa:=S. ¨ Управление передается в основную программу. Описание главной программы 1. В теле основной программы в цикле Repeat ... Until очищается экран (ClrScr). 2. Производится решение задачи для одного комплекта входных данных N, K, A: ¨ Через вызов процедуры Input(invN,NN,N) осуществляется ввод длины массива N<=NN (переменные invN, NN являются входными, переменная N - результат работы процедуры). ¨ Через эту же процедуру Input(invK,N,K) осуществляет ввод числа считываемых отрицательных элементов массива К<=N (переменные invК, N передаются из основной программы в процедуру, значение переменной K возвращается из процедуры в основную программу). ¨ Процедура InputVector(N,A) осуществляет ввод элементов массива А (значение переменной N передается из основной программы, значение элементов массива А передается из процедуры). ¨ Процедура OutputVector(N,A) осуществляет вывод элементов массива А ( значение переменной N и значения элементов массива А передаются из основной программы). ¨
Выводится значение суммы через
функцию Summa(k,N,A) (значение
параметров К, N, A
передается из основной программы); ¨ На экране появляется сообщение «Опять? (Y/N)». Переменной ch присваивается значение нажатой клавиши ch:=ReadKey и в зависимости от ответа управление передается на начало цикла (ch:=’Y’) или программа заканчивает выполнение (ch:= ‘N’).
|
(с) Все права защищены. По всем интересующим вопросам прошу писать электронный адрес |