Смекни!
smekni.com

Методические рекомендации по выполнению контрольных и лабораторных работ (стр. 5 из 7)

¨ значение S1 выводится на экран - Writeln(s1);

¨ выводится на экран полученное значение Х1 - Writeln(x1);

¨ и новое приглашение - Writeln(Inv1) (‘Повторите ввод’).

¨ Функция F принимает значение FALSE и управление по EXIT передается в главную программу.

Далее описана процедура ввода исходного значения переменной А с проверкой на область допустимых значений. Имя процедуры - Input. В заголовке описаны формальные параметры A:integer и inv:string (имя переменной). В теле процедуры используются локальные переменные al:real и s1:string, в поле описания меток определена метка L.

Алгоритм выполнения процедуры Input

1. На экран сообщаем о вводе переменной А - Write(‘Введите значение ’+ inv,'===>'). При выполнении этого оператора на экране появляется сообщение: Введите значение А===>.

2. Вводим с клавиатуры ее значение - READLN(aL).

3. Проверяем входит ли это значение в допустимый диапазон:

¨ если да, то A:=TRUNC(aL),

¨ если нет , то переменная s1получает значение s1:=inv5+inv4

(‘Вводимое значение выходит за диапазон [-32768...32767]!!!’).

¨ На экран выводится значение inv1 (‘Повторите ввод’).

¨ Управление передается на метку L для повторного ввода значения А.

Эта процедура может быть использована для ввода и контроля диапазона любой целочисленной переменной типа INTEGER.

Описание главной программы

1. В цикле REPEAT ... UNTIL очищается экран (ClrScr), выводится на экран вид исходного задания, через процедуру INPUT вводятся переменные a и b, через функцию F вычисляется искомое значение x.

¨ Если значение функции F равно False, управление передается на метку L1 для повторного ввода переменных а и b .

¨ Если значение функции F равно TRUE, - выводится результат (переменная х).

2. На экране появляется ‘Опять? (Y/N)’.

3. Переменной ch:=ReadKey и в зависимости от ответа управление передается на начало цикла (ch:=Y’) или программа заканчивает выполнение (ch:= ‘N’).

ПРИЛОЖЕНИЕ 4

пример выполнения контрольной работы № 3

ЛИСТИНГ ПРОГРАММЫ Work3.pas

program 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)».