
- •Учебно-методическое пособие по изучению теоретического материала и самостоятельному выполнению лабораторных заданий
- •1. Введение
- •2. Общие методические рекомендации по изучению курса
- •3. Методические рекомендации по изучению теоретического материала курса
- •3.1 Содержание разделов дисциплины
- •Тема 1. «Структура программы на языке «Паскаль». Основные типы данных. Правила записи имён в языке Паскаль. Линейные вычислительные процессы.»
- •Тема 2. «Базовые конструкции языка «Паскаль». Ветвящиеся вычислительные процессы.»
- •Тема 3. «Одномерные и многомерные массивы. Циклические вычислительные процессы.»
- •Тема 4. «Обработка символьной информации»
- •Тема 5. «Процедуры в языке Паскаль»
- •Тема 6. «Функции в языке Паскаль»
- •Тема 7. Рекурсивные функции. Явная и неявная рекурсия.
- •Тема 8. Многомодульные приложения (дополнительная тема).
- •4. Методические рекомендации по выполнению лабораторных работ
- •4.1 Лабораторная работа №1 «Структура программ на языке Паскаль, основные типы данных, основные операции, линейные вычислительные процессы»
- •Варианты заданий на лабораторную работу № 1.
- •Var a,b,c,r : real;
- •Var a,b,c,r : real;
- •Var a,b,c,r : real;
- •4.2 Лабораторная работа №2 «Условные операторы. Правила записи условий простые и сложные условия, ветвящиеся вычислительные процессы»
- •Варианты заданий на лабораторную работу № 2.
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •4.3 Лабораторная работа №3 «Массивы и циклы в языке Паскаль»
- •Варианты заданий на лабораторную работу № 3.
- •4.4 Лабораторная работа №4 «Обработка символьной и строковой информации в языке Паскаль»
- •Варианты заданий на лабораторную работу № 4.
- •4.5 Лабораторная работа №5 «Процедуры в языке Паскаль»
- •Варианты заданий на лабораторную работу № 5.
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var X : integer;
- •Var I : integer; // Счётчик цикла
- •4.6 Лабораторная работа №6 «Функции в языке Паскаль»
- •Варианты заданий на лабораторную работу № 6.
- •Пример решения типовой задачи лабораторной работы № 6.
- •Var I : integer; // Счётчик цикла
- •Var X : integer;
- •Var X : integer;
- •В результате внесённых изменений наша программа примет следующий вид:
- •Var X : integer;
- •Результат работы этой программы представлен на следующем рисунке:
- •Var X : integer;
- •4.7 Лабораторная работа №7 «Рекурсия и рекурсивные функции в языке Паскаль»
- •Варианты заданий на лабораторную работу № 7.
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var r : real ; // Граница вычислений, вводимая пользователем
- •Var x1, x2, Xn : real ; // Вычисляемые числа
- •I : integer; // Число итераций цикла
- •Var r : real ; // Граница вычислений, вводимая пользователем
- •Var Xn : real; // Вычисляемые числа
- •Var Xn : real; // Вычисляемые числа
- •5. Вопросы для подготовки к зачёту
- •6. Список рекомендуемой литературы
- •7. Программное обеспечение и Интернет-ресурсы
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;