Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
21
Текст программы.
Var i,s: integer;
Begin
s:=0; //обнуляем счётчик
// перебираем все числа от 1 до 100, если
//число делится на 7 без остатка, то увеличиваем счётчик на 1
for i:= 1 to 100 do if i mod 7=0 then writeln (i);
End.
Задание. Найти сумму ряда 

 

для n и x вве-

дённого с клавиатуры
Текст программы.
Var x,s,sl : real; i,n:integer;
BEGIN
Writeln(‘введите x’);
Readln(x);
Writeln(‘введите n’);
Readln(n);
for i:=1 to n do begin // перебираем все числа от 1 до n sl:=1/(i*x); // формируем очередное слагаемое s:=s+sl; // добавляем слагаемое к сумме
end;
Writeln (‘Сумма ряда =’, s);
END.
Задания для самостоятельной работы
1. Используя оператор Case, составьте следующую программу. Для число-
вой оценки от 1 до 5 вывести соответствующую словесную характеристику (например, 5 – отлично, 3 – удовлетворительно, 7- такой оценки нет).
2. Используя оператор Case, составьте следующую программу. Для вве­дённого символа определить, является ли он большой английской буквой, маленькой английской буквой, цифрой или каким-то другим символом (например, 1 – цифра, Ж – неизвестный символ). Подсказка: нужно ис­пользовать диапазоны символов.
3. Используя оператор Case, составьте следующую программу. По введён­ному номеру месяца определить, время года (например, 1 – зима, 10 – осень, 15 – такого месяца нет).
22
4. Используя оператор Case, составьте следующую программу. По введён­ному количеству дней в месяце вывести список месяцев с данным количе­ством дней (например, 30 – апрель, июнь, сентябрь, ноябрь; 28 – февраль; 5 – ошибка).
5. Используя оператор Case, составьте следующую программу. По номеру дня недели определить, является ли он рабочим или выходным (например, 3 – рабочий, 6 – выходной, 9 – такого дня нет).
6. Подсчитать общее количество двузначных чисел, произведение цифр которых равно 12.
7. Выведите на экран все числа от 20 до 100, оканчивающиеся на 7.
8. Подсчитать общее количество двузначных чисел, у которых первая и
вторая цифра различны.
9. Выведите на экран все числа от -30 до 50, которые делятся на 3 и на 4.
10. Выведите на экран все числа из промежутка от -10 до 10, модуль кото-
рых больше 3, но меньше 7.
11. Вычислите сумму ряда для x и n, введённых с клавиатуры.
       
12. Вычислите сумму ряда для x и n, введённых с клавиатуры.






 
13. Вычислите сумму ряда для x и n, введённых с клавиатуры.
            
14. Вычислите сумму ряда для x и n, введённых с клавиатуры. S = ex+2ex+ 3ex+…+nex
15. Вычислите сумму ряда для x и n, введённых с клавиатуры.

 

 
 
5. МЯГКИЕ ЦИКЛЫ
Оператор цикла for удобно применять, когда заранее известно, сколько раз требуется выполнить тело цикла. Но часто количество интеракций цикла заранее неизвестно (например, цикл может продолжаться пока пользователь не даст команду на его прекращение). В таких случаях используют мягкие циклы – циклы, число повторений которых не определяется программистом. В Паскале предусмотрено две конструкции для реализации мягких циклов.
Мягкий цикл с предусловием
Работа данного цикла начинается с проверки условия (некоторого ло­гического выражения). Если условие истинно, выполняется тело цикла.
23
Условие вычисляется при каждом повторении цикла. Цикл с предусловием продолжает свою работу, пока условие будет истинно. Оператор цикла име­ет следующую схему записи:
while условие do тело цикла;
Если перед началом выполнения оператора while значение условия равно false, тело цикла не будет выполнено ни разу.
Пример.
x:=0;
While x<4 do x:=x+1; // цикл выполнится 4 раза
Пример.
x:= 0;
While x<=4 do begin // цикл выполняется 5 раз x:=x+1; Writeln(‘оборот цикла №’, x);
End;
Поскольку при работе с мягкими циклами контроль количества по­вторений цикла всецело возлагается на программиста, необходимо внима­тельно следить за тем, чтобы не возникла ситуация “отсутствия условия выхода из цикла”, которая неизбежно приводит к зависанию компьютера.
Пример.
x:= 0;
While x<=4 do begin // бесконечный цикл, x всегда будет меньше 4 s:=s*2;
Writeln(‘оборот цикла №’, x);
end;
Задание. Написать программу, определяющую, сколько раз цифра 5 встречается в ведённом числе.
Решение. Переберём все цифры числа справа налево. После анализа каждой цифры, будем исключать её из числа. Процесс продолжим до тех пор, пока введённое число не исчерпает все цифры, то есть, пока не пре­вратится в ноль.
Текст программы.
Var a,s : integer;
Begin
24
s:=0; //обнуляем счётчик
Writeln('Введите число');
Readln(a);
While a>0 do begin // пока число a>0
//выделяем последнюю цифру числа a,
if a mod 10 =5 then s:=s+1; // если она равна 5, то увеличиваем
// счётчик. a:=a div 10; //отбрасываем крайнюю правую цифру числа a. end; Writeln('Количество цифр 5 =',s);
End.
Мягкий цикл с постусловием
Особенность цикла состоит в том, что операторы, образующие его тело выполняются до проверки условия. Таким образом, этот цикл все­гда выполняется, по крайней мере, один раз. После первого выполнения операторов проверяется условие, если оно истинно, то работа цикла прекращается, в противном случае начинается новое повторение цикла. Цикл продолжает свою работу до тех пор, пока условие ложно. Цикл с постусловием реализуется в Паскале в следующей конструкции:
Repeat
Тело цикла
Until условие;
Пример:
Repeat e:=Cos(w) Until e>0;
В отличие от всех остальных операторов Паскаля при использовании оператора Repeat, тело цикла, состоящее из нескольких команд, заключать в логические скобки begin - end не требуется. Границы тела цикла опреде­ляются самими зарезервированными словами Repeat и Until.
Пример:
x:=0;
Repeat
x:=x+1;
Writeln(‘оборот цикла №’, x);
Until x<4; // цикл выполниться только 1 раз.
25
Задание. Вывести на экран все значения функции 
для x
изменяющегося от 2 до 10 с шагом 0,5.
Текст программы.
Var x,y:real;
BEGIN
x:=2;
Repeat
y:=0.4*sqr(x)-1/x;
Writeln('y(', x:1:1 ,')=',y:1:1);
x:=x+0.5;
Until x>10;
END.
В принципе, циклы с предусловием и постусловием являются взаи­мозаменяемыми. Любую задачу, требующую использования мягкого цик­ла, можно решить, используя любой из них.
Команда прерывания цикла
Если тело цикла представляет собой достаточно длинную последова­тельность операторов, то может возникнуть необходимость досрочного прерывания цикла, то есть выхода из цикла до очередной проверки условия. Для немедленного завершения текущего оператора цикла можно использо­вать команду break. Она применима к любому циклу (for, while, repeat). Обычно команда break используется совместно с оператором ветвления.
Задание. Определить, встречается ли в введённом числе хотя бы одна цифра 7.
Решение. Реализуем рассмотренный ранее алгоритм с помощью цик­ла с постусловием. Для хранения информации о наличии (или отсутствии) цифр 7 в слове будем использовать строковую переменную flag. Изначально в ней будет содержаться предположение, что в ведённом числе отсут­ствуют семёрки. При обнаружении первой цифры 7, данное утверждение изменится на противоположное и работа цикла прекратится.
Текст программы.
Var a: integer;
flag: string;
BEGIN
26
Writeln (‘Введите число’); Readln(a); flag:='В числе нет цифр 7';
Repeat
if a mod 10 = 7 then begin flag:='В числе есть цифры 7'; break; end; a:=a div 10; Until a=0; Writeln(flag); END.
Команда продолжения цикла
В Паскале имеется команда, по своему действию противоположная команде прерывания цикла. Она позволяет немедленно продолжить вы­полнение цикла, пропустив все оставшиеся операторы его в теле. Эта ко­манда continue.
Пример:
for i:=1 to 7 do if i=5 then continue else Writeln(i); // На экран выве- дутся числа 1,2,3,4,6,7
Задания для самостоятельной работы
1. Найти сумму цифр 7 и 5 в введённом числе (например, в числе 4755
сумма равна 17).
2. Подсчитать количество чётных цифр в введённом числе (например, в числе 1213 количество чётных цифр равно1).
3. Найти в введённом числе количество всех цифр неравных четырём (например, в числе 4214 таких цифр 2).
4. Подсчитать количество цифр кратных 3 в введённом числе (например, в числе 10195 одна такая цифра).
5. В введённом числе подсчитать сумму всех чётных цифр неравных 4 (например, в числе 1426 сумма равна 8).
6. Определить, встречается ли в ведённом числе хотя бы одна нечётная цифра или хотя бы одна цифра больше 4.
7. Определить, встречается ли в ведённом числе хотя бы одна цифра больше 2, но не равная 5.
8. Определить, встречается ли в ведённом числе хотя бы одна чётная цифра больше 4.
27
9. Определить, встречается ли в ведённом числе хотя бы одна чётная циф- ра неравная 8.
10. Определить, встречается ли в ведённом числе хотя бы одна цифра кратная 2 или кратная 3.
11. Вычислите значения функции y=-Sin(2x)+25x3 в диапазоне от -4 до 2 включительно с шагом 0,6.
12. Вычислите значения функции y=-7Cos2(x)-2=0 в диапазоне от -3 до 2 включительно с шагом 0,2.
13. Вычислите значения функции y=-3x3+10x2-2 в диапазоне от -7 до 3 включительно с шагом 0,5.
14. Вычислите значения функции y=-2x3+5|x|-4=0 в диапазоне от -6 до 0 включительно с шагом 0,4.
15. Вычислите значения функции y=2x3+Cos(x2) - 3 в диапазоне от 5 до 12 включительно с шагом 0,3.
6. ВЛОЖЕННЫЕ ЦИКЛЫ
Среди команд, образующих тело цикла могут оказаться операторы, также являющиеся циклами. В этом случае говорят о вложенных циклах. Количество уровней вложения не ограничивается. В качестве примеров ор­ганизации работы вложенных циклов рассмотрим две задачи.
Задание. Вывести на экран таблицу умножения для чисел от 1 до 9.
Решение. От нас требуется перебрать все числа от 1 до 9. Каждое из этих чисел поочерёдно умножить на числа от 1 до 10. Результаты умножения необходимо вывестись на экран.
Текст программы.
Var a,b: integer;
BEGIN
for a:=1 to 9 do begin
for b:=1 to 10 do Write(' ',a,'*',b,'=',a*b,' '); // Вывод строки таблицы Writeln; // Перевод курсора для вывода следующей строки
end;
END.
Задание. Найти все “счастливые номера” среди четырёхзначных чисел (сумма первых двух цифр, равна сумме двух последних).
Решение. Во вложенных циклах переберём все возможные значения цифр и проверим, будет ли число, состоящее из данных цифр “счастли­вым номером”.
28
Текст программы.
Var a,b,c,d: integer;
BEGIN
for a:=0 to 9 do for b:=0 to 9 do for c:=0 to 9 do for d:=0 to 9 do if a+b=c+d then Writeln(a,b,c,d);
END.
Отметим, что вложенные циклы можно конструировать как с помо­щью жёстких, так и с помощью мягких циклических конструкций.
Задания для самостоятельной работы
1. Вывести на экран все четырёхзначные числа, у которых сумма первых
трёх цифр кратна последней цифре (например, 1225, 6003, 2514).
2. Вывести на экран все четырёхзначные числа, у которых в записи есть цифра 0.
3. Вывести на экран все четырёхзначные числа, у которых сумма первых двух цифр равна числу, образованному последними двумя цифрами (например, 2204, 8715).
4. Вывести на экран все трёхзначные числа, цифры которых расположены в порядке возрастания (123, 124, 125 и т.д.).
5. Вывести на экран все трёхзначные числа, цифры у которых все цифры различны.
6. Вывести на экран все четырёхзначные числа, у которых произведение крайних цифр равно числу, образованному средними цифрами. Например,
5204, 1077.
7. Вывести на экран таблицу Пифагора.
7. ГЕНЕРАТОР СЛУЧАЙНЫХ ЧИСЕЛ
В современной информатике очень большое место уделяется компь­ютерному моделированию случайных событий. Для решения подобного рода задач используют специальный алгоритм, который называется “гене­ратор псевдослучайных чисел”.
Генератор псевдослучайных чисел (ГПСЧ) – это алгоритм, гене­рирующий последовательность чисел, элементы которой практически не­зависимы друг от друга. Обратим внимание на то, что в определении гово­рится не о “случайных”, а о “псевдослучайных” числах. Этим подчёркива-
29
ется, что результаты работы данного алгоритма, в принципе, можно преду­гадать. То есть, используя математические методы, точно определить, ка­кое число будет сгенерировано следующим. Но на качестве моделирования случайных событий данная особенность генератора псевдослучайных чи­сел, как правило, существенного влияния не оказывает.
В Паскале за генерацию случайных чисел отвечают функции:
Random - возвращает вещественное число из диапазона [0, 1); Random (N) - возвращает целое число из диапазона [0, N-1], где N
–целое число.
Также необходимо отметить процедуру Randomize. Она инициализи­рует (запускает) генератор псевдослучайных чисел. Данную процедуру ре­комендуется всегда использовать перед Random.
Используя данные функции и математические операции можно по­лучить случайные числа из любого диапазона.
Пример:
Random*101 – случайное вещественное число из диапазона [0, 100].
Random*101-50 – случайное вещественное число из диапазона [-50, 50].
Random(100)+1– случайное целое число из диапазона [1, 100].
Random(101)+50– случайное целое число из диапазона [50, 150].
Задание. Написать программу, которая загадывает пользователю число от 1 до 100 до тех пор, пока он его не угадает (с подсказками “больше” и “меньше”).
Текст программы.
Var r,n: integer;
BEGIN
Randomize; // инициализируем генератор случайных чисел r:=random(100)+1; // присваеваем r целое случайное число из [1, 100] Repeat // Открываем мягкий цикл Writeln('Угадай число от 1 до 100'); Readln(n); // Запрашиваем у пользователя вариант ответа n if n<r then write('Не угадал, больше'); // сообщаем, если n не равно r if n>r then write('Не угадал, меньше>'); Until r=n; // Продолжаем запрашивать ответ пока r не станет // равным n Writeln('Угадал!');
END.
30
8. МАССИВЫ
Массивом называют совокупность элементов одного типа. Все эле­менты массива пронумерованы. Массивы достаточно часто применяются при обработке небольших объёмов однотипных данных. Как правило, ра­бота с массивом осуществляется в четыре этапа:
описание; заполнение; обработка; вывод на экран.
Данные этапы работы с массивом существенно облегчаются при ис­пользовании циклов. Рассмотрим названные этапы подробнее.
Описание
Перед использованием массива в программе его необходимо опи­сать. Самый простой способ – описать массив как переменную. Для этого используется конструкция.
Var имя массива array[начальный_индекс .. конечный_индекс] of тип данных.
В качестве диапазона индексов может использоваться любой поряд­ковый диапазон. Массив не может содержать более 256 элементов. В ни­жеследующем примере описан массив x, состоящий из 10 целых чисел с индексами от 1 до 10, и массив y, состоящий из 5 вещественных чисел с индексами от b до f.
Пример:
Var x: array [1..10] of integer; y: array [‘b’..’f’] of real;
Заполнение и обработка
К любому элементу массива можно обратиться, указав имя массива и номер элемента в квадратных скобках. Действия с элементами массивов аналогичны действиям с данными соответствующего типа.
Пример: Для массивов, описанных в примере можно выполнить сле­дующие команды:
x[3] : = 25;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]