- •Программирование Методические указания по выполнению лабораторных работ (для студентов заочной формы обучения, обучающихся по направлению «Информатика и вт»)
- •Оглавление
- •1. Программа дисциплины
- •Требования к уровню освоения содержания дисциплины
- •Перечень лабораторных работ Таблица 2
- •Рекомендуемая литература
- •2. Методика выполнения лабораторных работ и задания к ним
- •2.1. Лабораторная работа 1. Разветвляющийся вычислительный процесс
- •2.1.1. Пример выполнения лабораторной работы
- •Р ис. 1. Блок-схема алгоритма
- •2.1.2. Варианты заданий к лабораторной работе
- •2.1.3. Контрольные вопросы и задания
- •2.2. Лабораторная работа 2. Циклический вычислительный процесс
- •2.2.1. Теоретические сведения, необходимые для выполнения работы
- •2.2.2 Варианты заданий к лабораторной работе
- •2.2.3. Контрольные вопросы и задания
- •2.3. Лабораторная работа 3. Работа с массивами и матрицами
- •2.3.1. Теоретические сведения, необходимые для выполнения работы
- •Объявление массива в Паскале.
- •Примеры работы с одномерными массивами
- •Работа с матрицами
- •2.3.2. Варианты заданий к лабораторной работе Задания на «Одномерные массивы»
- •Задания на «Матрицы»
- •2.3.3. Контрольные вопросы и задания
- •2.4. Лабораторная работа 4. Обработка текстовой информации
- •2.4.1. Теоретические сведения, необходимые для выполнения работы Тип данных String
- •Сравнение строк
- •Стандартные процедуры и функции для обработки строк
- •2.4.2. Задания к лабораторной работе Общая постановка задачи для всех вариантов
- •Индивидуальные задания на строки
- •2.4.3. Контрольные вопросы и задания
- •2.5. Лабораторная работа 5. Использование процедур и функций
- •2.5.1. Теоретические сведения, необходимые для выполнения работы Модульное программирование
- •Нисходящее проектирование
- •Общая структура подпрограммы
- •Процедуры и функции
- •Локальные и глобальные определения данных
- •Параметры подпрограмм
- •Программирование и отладка модульных программ
- •Пример применения модульного программирования
- •2.5.2. Задания к лабораторной работе
- •Индивидуальные задания на процедуры и функции
- •2.5.3. Контрольные вопросы и задания
- •Библиографический список
- •Приложение 1
- •Отчет о лабораторной работе № ___ (вариант №__)
- •«Программирование»
- •Иркутск 20__
2.1.3. Контрольные вопросы и задания
1) Какие операторы реализуют развилку в языке Паскаль?
2) Какую конструкцию следует добавить, чтобы при выполнении (невыполнении) условия выполнялись несколько операторов?
3) Как реализовать вложенную развилку?
2.2. Лабораторная работа 2. Циклический вычислительный процесс
Цель работы – приобретение навыков:
проектирования циклических алгоритмов;
применения операторов цикла;
отладки и тестирования программ.
2.2.1. Теоретические сведения, необходимые для выполнения работы
Для программирования циклических алгоритмов используются операторы цикла. Каждой базовой циклической конструкции в языке Паскаль соответствует свой оператор цикла.
Оператор цикла
с постусловием (Repeat).
В
данном операторе оператор(ы) тела цикла
располагаются между ключевыми словами
Repeat
и Until
:
Repeat
операторы тела цикла
Until выражение;
О
Рис. 4.
Цикл Repeat
ние True, тело цикла продолжает выполняться. Цикл завершается, как только значение выражения станет True. Последовательность операторов выполнится по крайней мере один раз.
Пример 1. Применение оператора цикла Repeat в программе ввода с контролем значения действительной переменной:
Program inprealkont;
{ввод real с контролем в интервале [n1,n2]}
const n1=-300; n2=5000;
Var p:real; { вводимая переменная }
f:integer; { рабочая переменная }
begin
repeat
{$I-} readln(p); f:=IOResult; {$I+}
if (f<>0)or(p<n1)or(p>n2) then
writeln(' недопустимое число! ');
until (f=0)and(p>=n1)and(p<=n2);
writeln('p=',p);
end.
Цикл ввода переменной P будет повторяться до тех пор, пока не будет введено правильное значение.
О
ператор
цикла с предусловием (While).
Оператор цикла с предусловием начинается
ключевым словом While
и содержит выражение-условие, которое
управляет повторным выполнением тела
цикла. Общий вид оператора
While выражение L do оператор S.
П
Рис. 5.
Цикл While
Оператор While действует только на один оператор, поэтому если тело цикла состоит из нескольких операторов, то следует их заключить в операторные скобки, то есть применить составной оператор.
Пример 2. Применение оператора While для печати таблицы значений y=sinx на интервале [a,b] с шагом h :
Program Table_While;
VAR a,b,h, X,y:real;
BEGIN
Writeln('Введите A, B, H ');
readln(a,b,h);
Writeln(' x y=sinx ')
x:=a; { инициализация x }
WHILE x<b do
begin {начало тела цикла }
y:=sin(x);
Writeln(x:5:1,y:8:5);
x:=x+h; {модификация x}
end; { конец тела цикла }
End.
Переменной x до начала цикла присваивается значение a. Пока выражение x < b имеет значение TRUE, будут выполняться операторы тела цикла. При a = 0, b = 1, h = 0.2 параметр цикла x примет значения 0, 0.2, 0.4, 0.6, 0.8, 1, то есть цикл выполнится 6 раз.
Оператор цикла FOR с параметром.
Если число повторений цикла заранее известно и параметр цикла меняется по закону арифметической прогрессии с шагом, равным 1, то подходящей конструкцией является оператор For.
Оператор For имеет два вида записи:
For x := x1 to x2 do оператор;
For x := x1 downto x2 do оператор;
Использованы обозначения: x – параметр, или счетчик цикла, x1 и x2 – исходное и конечное значения параметра.
Параметр цикла должен иметь порядковый тип: char, boolean, целые типы. Начальное и конечное значения вычисляются до начала цикла и сохраняются на все время выполнения оператора For. Перед началом цикла параметру X присваивается начальное значение х1. После каждого выполнения операторов тела цикла значение параметра автоматически меняется на 1: если использовано ключевое слово to и x1 <= x2, параметр увеличивается, если использовано слово downto и x1 >= x2, параметр цикла уменьшается.
Пример 3. Демонстрация работы оператора For:
For x:=1 TO 5 do Write(x:5);
writeln;
For x:=5 DOWNTO 1 do write(x:5);
readln;
На экран будут выведены вначале значения X : 1 2 3 4 5
Затем эти же числа по убыванию : 5 4 3 2 1
Пример 4. Применение оператора цикла FOR для печати таблицы:
Program Table_for;
Var
A,b,h, X,Y :real;
I, n:integer;
BEGIN
Writeln('Введите A, B, H '); readln(a,b,h);
N:=round((b-a)/h);
Writeln(' x y=sinx ')
For i:=0 to n do
begin {начало тела цикла }
x:=a+i*h;
y:=sin(x); Writeln(x:5:1,y:8:5);
end; { конец тела цикла }
end.
Пример 5. Для вводимой последовательности целых чисел запрограммировать элементарные схемы вычислений: сумма, среднее арифметическое, произведение. Все вычисления выполняются при вводе, без запоминания последовательности.
program Shems_3;
Var
i,sum,prod,n:integer;
Begin
writeln('Вычисление суммы, среднего арифметического и произведения
');
writeln('целых чисел из входной последовательности');
writeln('вводите по одному числу, последовательность завершите
нулем');
readln(i);
if i=0 then begin
writeln('пустая последовательность');
readln; Halt
end;
sum:=0; n:=0; prod:=1;
while i<>0 do
begin
sum:=sum+i; {к сумме прибавляется очередное слагаемое}
prod:=prod*i; {произведение умножается на очередной множитель}
n:=n+1; {счетчик увеличивается на 1}
readln(i) {чтение следующего числа}
end; {конец ввода чисел}
writeln('сумма равна ', sum);
writeln('среднее арифметическое равно ', sum/n:10:5);
writeln('произведение равно ',prod);
readln;
end.
В наборе тестов для данного примера должно быть по крайней мере три теста:
а) входной поток состоит из одного числа, равного 0,
ожидаемый ответ: 'пустая последовательность';
б) входной поток состоит из двух чисел: 1 0,
ожидаемые ответы: 1 1.00000 1;
в) входной поток состоит из четырех чисел: 1 2 3 0,
ожидаемые ответы: 6 2.00000 6 1.
Пример 6. Логической переменной P присвоить значение TRUE, если целое N (n>1) простое число, и значение False в противном случае.
{ У составного числа N обязательно есть делитель K из отрезка [2,n ], он и ищется }
Program Simple_n;
Var
K,n: integer;
P:boolean;
Begin
Writeln('введите N>1'); readln(n);
P:=true; k:=2;
While p and (k*k<=n) do
If n mod k=0 then p:=false else k:=k+1;
Writeln('число ',n,' простое?',p );
Readln;
End.
В наборе тестов для данного примера должно быть, по крайней мере, одно простое и одно составное. Среди четных чисел единственное простое число 2 должно обязательно входить в набор тестов, затем любое четное число как составное. Среди нечетных чисел взять хотя бы два простых числа и составное. Окончательный набор тестов мог бы выглядеть следующим образом:
a) n = 2 – простое, б) n = 3 – простое, в) n = 6 – составное, г) n = 11 – простое, д) n = 99 – составное.
Пример 7. Найти наибольший общий делитель и наименьшее общее кратное двух заданных натуральных чисел X и Y.
program nod_nok;
var
x,y,u,v:longint;
d,nod:longint;
begin
write('X=');readln(x);
write('y=');readln(y);
u:=x; v:=y;
repeat
writeln('u=',u,' v=',v);
d:=u mod v; {остаток от деления u/v}
u:=v;
v:=d;
until v=0;
nod:=u;
writeln('nod=',nod);
writeln('NOK=',x*y div nod);
readln;
end.
В наборе тестов для данного примера должны быть следующие тесты:
a) числа X и Y равны между собой;
б) Y кратно X;
в) X кратно Y;
г) X и Y не кратны и не имеют общих множителей;
е) X и Y не кратны, но имеют общие множители.
Пример 8. Подсчитать количество цифр в десятичной записи целого неотрицательного числа N.
program Count_number;
var
n, r:longint;
k: byte;
begin
repeat
write('Введите целое неотрицательное число n ');readln(n);
until n>=0;
r:=n; k:=0;
repeat
r:=r div 10; { убираем младшую цифру в записи числа }
k:=k+1;
until r=0;
write('количество цифр в десятичной записи числа ', n);
writeln(' равно ',k);
end.
Набор тестов для данного примера может выглядеть следующим образом:
а) число n = 0 ->'количество цифр в десятичной записи равно 1';
б) число n = 1 ->'количество цифр в десятичной записи равно 1';
в) число n = 12090 ->'количество цифр в десятичной записи равно 5'.
