Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Programmirovanie_1_Kurs_1_Sem_Anosov_Yu...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Var X : integer;

Begin

Write('Введите число. x=');

Readln(x);

Vvod:=x;

End;

А в главной части, вместо вызова процедуры появится такой фрагмент:

a:=Vvod; // Вызов функции ввода исходных данных.

b:=Vvod; // Вызов функции ввода исходных данных.

if a>b

then Begin Writeln('Нижняя граница выше верхней');

c:=a;

a:=b;

b:=c;

Writeln('Значение границ изменено: a=', a,' b=', b);

End;

Кроме того, потребуется дополнительная переменная «с» для операции обмена значений некорректных границ диапазона вычислений:

c : integer; // Дополнительная переменная для обмена значений

границ.

В результате внесённых изменений наша программа примет следующий вид:

//-------------------------------------------------------

// Процедура приветствия.

Procedure Hello;

Begin

Writeln('Данная программа предназначена');

Writeln('для вычисления суммы квадратов всех чисел,');

Writeln('расположенных в указанном Вами диапазоне.');

Writeln;

End;

//-------------------------------------------------------

// Функция ввода исходных данных.

Function Vvod : integer;

Var X : integer;

Begin Write('Введите число. x=');

Readln(x);

Vvod:=x;

End;

//-------------------------------------------------------

// Функция вычисления суммы квадратов.

Function Calc(x,y : integer) : integer;

var i : integer; // Счётчик цикла

Z : integer; // Вычисляемый результат

Begin

z:=0;

for i:=x to y do

if (z > (2147483647 - i*i))

then begin z:=-1;

break; // Оператор досрочной остановки цикла.

End

else z:=z + i*i;

Calc:=Z; // Вычисленный результат возвращается из функции.

End;

//-------------------------------------------------------

// Процедура вывода результатов вычисления.

Procedure Print(R : integer);

Begin

if R<0

then Writeln('При вычислении произошло переполнение')

else Writeln('Сумма квадратов всех целых чисел в указанном

диапазоне равна - ', R);

End;

//-------------------------------------------------------

// Главная часть программы

Var a,b : integer; // Числа, вводимые пользователем

c : integer; // Дополнительная переменная для обмена

// значений границ.

Rez : integer; // Результат вычислений

Begin

Hello; // Вызов процедуры приветствия.

a:=Vvod; // Вызов функции ввода исходных данных.

b:=Vvod; // Вызов функции ввода исходных данных.

if a>b

then Begin

Writeln('Нижняя граница выше верхней');

c:=a;

a:=b;

b:=c;

Writeln('Значение границ изменено: a=', a,' b=', b);

End;

Rez:=Calc(a,b); // Вызов функции вычисления.

Print(Rez); // Вызов процедуры печати результата

// вычислений.

End.

Результат работы этой программы представлен на следующем рисунке:

Этап третий. Тестирование и доработка программы, если это необходимо.

Так как данная программа разрабатывалась на основе уже существовавшей, оттестированной и оптимизированной программы из предыдущей лабораторной работы – то, следовательно, тестирование и оптимизация основного алгоритма этой программы нам не требуется.

Однако, в результате преобразования процедуры ввода границ вычисления на функцию ввода, диалог с пользователем потерял часть своей смысловой нагрузки.

Вместо информативного приглашения:

Введите начало диапазона. a=

Введите окончание диапазона. b=

На экране теперь отображается:

Введите число. x=

Введите число. x=

Можно ли доработать нашу функцию ввода так, что бы она выдавала на экран сообщения, соответствующие смыслу вводимых данных?

Да. Для этого необходимо передавать в эту функцию при вызове ту текстовую строку, которую она будет отображать на экране перед вводом.

Что бы это осуществить – нам потребуется добавить в описание заголовка функции один параметр строкового типа. А при вызове функции – передавать в этом параметре нужную строку.

Изменённая функция:

Function Vvod(s : string) : integer;