TURBO PASCAL

Новости       

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности 

Гостевая книга

Спонсор

От автора

 

Приложение 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)».

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

 

На первую страницу

Rambler's Top100 PROext: Top 1000
Rambler's Top100

(с) Все права защищены.

По всем интересующим вопросам прошу писать электронный адрес

Hosted by uCoz