Мегаобучалка Главная | О нас | Обратная связь


Алгоритм выполнения функции F



2020-02-03 184 Обсуждений (0)
Алгоритм выполнения функции F 0.00 из 5.00 0 оценок




1. Сначала функции F присваивается значение TRUE и проверяется b>a.

2. Если условие выполняется, тогда вычисляется значение x1:= b/4.0*a.

3. Иначе проверяется b=a

4. Если да, то х1:=-55.

5. Если же это условие не выполняется , то остается условие b<a, в котором надо проверить на ноль знаменатель a выражения (b-5)/a.

6. Если это условие ( a=0) выполняется (знаменатель в выражении (b-5)/a равен нулю), вычисляется составной оператор после THEN, заключенный в скобки - begin ... end:

¨ В этом случае строковая переменная s1:=inv1+inv2 будет равна:

       ‘Деление на ноль!!!!!!! Повторите ввод’.

¨ Это сообщение выводится на экран.

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

7. В случае, если знаменатель не равен нулю, вычисляется значение x1:=(b-5.0)/a.

8. Далее проверяется, входит ли значение х1 в допустимый диапазон (для переменных типа INTEGER).

9. Если да, то целая переменная получает значение х:=trunc(x1).

10. Если значение х1 выходит за допустимый диапазон, то:

¨ s1:=inv3+inv4 (‘Результат выходит за диапазон [-3268...32767]!!!!’);

¨ значение 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. Вводим с клавиатуры ее значение - READ LN(a L).

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

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

¨ если нет , то переменная 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.

· Записана главная программа, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.



2020-02-03 184 Обсуждений (0)
Алгоритм выполнения функции F 0.00 из 5.00 0 оценок









Обсуждение в статье: Алгоритм выполнения функции F

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (184)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)