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

Варианты заданий на лабораторную работу № 6.

Варианты заданий на работу №6 полностью совпадают с вариантами заданий на предыдущую работу №5

Пример решения типовой задачи лабораторной работы № 6.

Рассмотрим решение поставленной в шестой лабораторной работе задачи на примере аналогичного варианта задания для пятой лабораторной работы:

Написать программу, в которой:

  • пользователь вводит два целых числа «a» и «b»;

  • специальная функция вычисляет сумму квадратов всех целых чисел, расположенных от «a» до «b», включая и «a» и «b».

  • ввод данных должен быть также реализован через функцию;

  • программа должна обеспечивать «нормальный» диалог с пользователем.

  • не использовать в функциях параметры-переменные.

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

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

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

  • Заменить слово «Procedure» на слово «Function».

  • Удалить из заголовка параметр «Z».

  • Добавить тип возвращаемого значения функции.

  • Присвоить вычисленный результат самой функции.

  • Присвоить полученное значение нужной переменной в главной части программы.

Исходная процедура:

Procedure Calc(x,y : integer; var z : integer);

Var I : 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;

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;

Изменение главной части программы:

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

Этап второй. Преобразование процедуры ввода исходных данных в функцию, возвращающую значение ввода без использования параметров-переменных.

Рассмотрим исходную процедуру ввода данных:

Procedure Vvod(var p1, p2 : integer);

Var X : integer;

Begin

Write('Введите начало диапазона. a='); Readln(p1);

Write('Введите окончание диапазона. b='); Readln(p2);

if p1>p2

then Begin

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

x:=p1;

p1:=p2;

p2:=x;

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

End;

End;

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

Кроме того. В этом случае мы не сможем проверить корректность границ внутри функции. Эту проверку придётся вынести в главную часть программы.

В результате функция ввода будет выглядеть так:

Function Vvod : integer;