173970_Занятие_10_практика решени задач Цикл

advertisement
ЗАНЯТИЕ 10
Лекция
Тема: Практика решения задач. Нахождение суммы, произведения,
количества чисел в последовательности, введенной с
клавиатуры. Цикл-счетчик.
Рассмотрим следующую задачу. Пусть с клавиатуры вводится
последовательность чисел. Признаком конца ввода является ввод числа 0.
Требуется написать программу, которая считает количество введенных
чисел и их сумму.
Напишем алгоритм решения этой задачи.
Обнуляем сумму Sum
Обнуляем количество Коl
Повторяем
Ввести число А
Увеличить количество Коl на 1
Увеличить сумму Sum на число А
до тех пор, когда введенное число А станет О
Вывести результат Sum и Коl.
Обращаем ваше внимание на то, что при подсчете суммы или
количества чисел, переменные, в которые мы будем накапливать сумму
или количество, необходимо обязательно обнулить, т. е. положить туда
значение 0, т. к., если этого не сделать, то сумма или количество
элементов будут отличаться от истинного значения на ту величину,
которая лежит изначально в данной ячейки.
Подумайте, что нужно положить в ячейку, в которую накапливается
произведение чисел.
Теперь переведем наш алгоритм на язык программирования
Паскаль, заметив, что в алгоритме есть все необходимые нам для
решения задачи переменные.
VAR
А, Sum, Коl : INTEGER ;
BEGIN
Sum:=0;
Коl:= 0;
RЕРЕАТ
VVОD(А);
Sum:=Sum+А;
Коl:=Коl+1;
UNTIL А=0;
WRITELN('Сумма введеных чисел= ', Sum, ' а количество = ', Коl);
END.
Осталось только объявить процедуру VVОD в блоке объявления
нашей программы. Надеемся, что вы понимаете, что процедура
будет выглядеть следующим образом:
PROCEDURE VVOD (Var num: Integer);
Begin
WRITELN ('Ввести целое число');
READLN (num);
END;
На одном из предыдущих занятий мы рассмотрели циклические
конструкции, которых в природе существует две — с предусловием и
постусловием, а также конструкции языка Паскаль им
соответствующие. Но в языке программирования Паскаль есть еще
одна конструкция, которая введена для удобства пользователей. Это
цикл-счетчик, он назван так потому, что выполняется определенное
количество раз. Цикл как будто «считает» сколько раз он выполняет
необходимые действия.
Формат описания:
FOR <переменная цикла> := < начальное значение> ТО < конечное значение> DO
<инструкция> ;
или
FOR <перем.цикла> := <нач. значение> DOWNTO <кон. значение> DО
<инструкция> ;
где <переменная цикла> — переменная типа INTEGER,
принимающая значение с начального до конечного с шагом +1 — в
случае ТО, -1 — в случае DOWNТО. Значение переменной цикла
изменяется автоматически. Изменение ТО на DOWNTO в среде
Микропаскаль происходит при нажатии на клавишу пробел;
<начальное значение> — любое целочисленное
арифметическое выражение, значение которого является начальным
значением переменной цикла;
<конечное значение> — любое целочисленное арифметическое
выражение, значение которого является конечным значением
параметра цикла;
<инструкция> — действие, повторяемое до тех пор, пока
начальное значение переменной цикла не станет больше — в случае
ТО (меньше — в случае DOWNТО) конечного значения. Если в цикле
необходимо выполнить несколько инструкций, то после служебного
слова DО используются операторные скобки ВЕGIN...ЕND.
Значения арифметических выражений вычисляются только один
раз при входе в цикл.
Значение переменной цикла нельзя изменять в теле цикла.
Несоблюдение этого правила приводит к непредсказуемым
последствиям.
Инструкция FOR соответствует циклу с предусловием.
Рассмотрим пример: Нарисуем на экрана компьютера 15
вертикальных разноцветных линий. Расстояние между линиями
зададим с клавиатуры (значение в пределах от 10 до 40).
program ex1 ;
const N = 15 ;
var
STEP : INTEGER ;
procedure IN_DATA ( var PIX : integer ) ;
begin
REPEAT
WRITE( ‘Введите число пикселей
между линиями от 10 до 40: ’ ) ;
READLN( PIX ) ;
IF not((PIX>=10) and (PIX<=40)) THEN
WRITELN(‘Ошибка при вводе данных’);
UNTIL (PIX>=10) and (PIX<=40) ;
end;
procedure PICTURE ( PIX : integer ) ;
var K : integer ;
begin
FOR K := 1 TO N DO
LINE( KPIX, 0, KPIX , 349, K );
end ;
begin
IN_DATA ( STEP ) ;
INITGRAPH ;
PICTURE ( STEP ) ;
READKEY ;
CLOSEGRAPH ;
end.
program ex1 ;
const N = 15 ;
var
STEP : INTEGER ;
procedure IN_DATA ( var PIX : integer ) ;
begin
REPEAT
WRITE( ‘Введите число пикселей
между линиями от10 до 40: ’ ) ;
READLN( PIX ) ;
IF not((PIX>=10) and (PIX<=40)) THEN
WRITELN(‘Ошибка при вводе данных’);
UNTIL (PIX>=10) and (PIX<=40) ;
end;
procedure PICTURE ( PIX : integer ) ;
var K : integer ;
begin
K := 1 ;
WHILE K <= N DO
begin
LINE( KPIX, 0, KPIX , 349, K ) ;
K := K + 1 ;
end ;
end ;
begin
IN_DATA ( STEP ) ;
INITGRAPH ;
PICTURE ( STEP ) ;
READKEY ;
CLOSEGRAPH ;
end.
Семинар — практическое занятие
ЗАДАНИЯ
Задание 1.
Изобразить на экране компьютера решетку, состоящую из п
вертикальных и т горизонтальных линий. Расстояние между линиями
задать, равное 10 пикселям.
Задание 2.
Вычислить сумму четных и сумму нечетных целых чисел от 1 до
100.
Задание 3.
Вывести на экран таблицу умножения на число М, введенное с
клавиатуры.
Задание 4.
Напишите программу, позволяющую получить на экране
изометрическое изображение цилиндра. Высота цилиндра, его
радиусы по осям и количество отрезков в пунктирной линии
основания задаются с клавиатуры.
Задание 5.
Напишите программу, позволяющую получить на экране
изометрическое изображение цилиндра с закрашенной фронтальной
поверхностью. Высота цилиндра, его радиусы по осям и количество
отрезков в пунктирной линии основания задаются с клавиатуры.
Задание 6*.
Напишите программу, позволяющую получить на экране
следующую картинку:
Download