- •Программирование циклических алгоритмов с заданным количеством итераций в turbo pascal
- •Общие понятия Понятие цикла
- •Цикл с заданным количеством итераций
- •Вложенные циклы
- •Содержание и технология работы
- •Требования безопасности труда
- •Содержание отчета
- •Варианты индивидуальных заданий.
- •Время, отведенное на выполнение работы
- •Вопросы для самоконтроля
- •Список литературы
- •Содержание
- •Программирование циклических алгоритмов с заданным количеством итераций в turbo pascal
Вложенные циклы
Иногда в программе возникает необходимость использования нескольких переменных цикла, зависящих или не зависящих друг от друга. В этом случае используется несколько циклов, вложенных друг в друга, например:
for i:=1 to 3 do begin
for j:=1 to 4 do
<тело цикла>
end;
Для данного примера переменная i является параметром внешнего цикла, а переменная j – параметром внутреннего цикла. Важно помнить правило - переменная внутреннего цикла изменяется быстрее, чем переменная внешнего цикла. Правила изменения переменных для данного примера приведены ниже:
i=1 j=1, 2, 3, 4
i=2 j=1, 2, 3, 4
i=3 j=1, 2, 3, 4
Таким образом, тело цикла выполнится 12 раз.
Графическое представление вложенных циклов приведено на рисунке 2.
Рис. 2. Графическое представление вложенных циклов
В приведенном выше примере переменные внутреннего и внешнего цикла не зависят друг от друга. Далее рассмотрим ситуацию, когда переменная внутреннего цикла зависит от значения переменной внешнего цикла:
for i:=1 to 3 do begin
for j:=i to 4 do
<тело цикла>
end;
Переменные будут изменяться следующим образом:
i=1 j=1, 2, 3, 4
i=2 j=2, 3, 4
i=3 j=3, 4
Или другая ситуация:
for i:=1 to 3 do begin
for j:=1 to i do
<тело цикла>
end;
Тогда переменные будут изменяться следующим образом:
i=1 j=1
i=2 j=1, 2
i=3 j=1, 2, 3
Следует отметить, что внешний и внутренний цикл не всегда начинаются и заканчиваются одновременно.
Содержание и технология работы
Задача 1. Вывести на экран 10 раз слово "Информатика".
Для решения данной задачи необходимо применение оператора вывода Writeln. Для выполнения поставленного условия можно 10 раз в теле программы использовать оператор вывода, а можно задать вывод один раз и поместить его в тело цикла. В этом случае переменная цикла должна измениться 10 раз. Самое удобное будет задать начальное значение переменной цикла равное 1 и конечное значение равное 10. Блок-схема для решения поставленной задачи приведена на рисунке 3.
Рис. 3. Блок-схема алгоритма для решения задачи 1
Программный код для решения поставленной задачи запишется в виде программы 1.
Программа 1:
program zadacha_1;
var i:integer;
begin
for i:=1 to 10 do
writeln ('Informatika');
readln;
end.
Для запуска программы Run-Run. Результат выполнения программы 1 представлен на рисунке 4.
Рис.4. Результат выполнения программы 1
Задача 2. Вывести на экран таблицу квадратов для целых чисел от 10 до 20.
Для решения данной задачи необходимо задать изменение переменной цикла от 10 до 20. В теле цикла переменная должна возводиться в квадрат, и результат вычисления выводится на экран. В теле цикла необходимо будет выполнение следующих действий:
1. Вывод текущего значения переменной цикла на экран.
2. Возведение текущего значения переменной цикла в квадрат.
3. Вывод результата вычислений на экран.
Так как тело цикла состоит из нескольких операций, необходимо применение операторных скобок.
Блок-схема для решения поставленной задачи приведена на рисунке 5.
Программный код для решения поставленной задачи запишется в виде программы 2.
Программа 2:
program zadacha_2;
var i,b:integer;
begin
writeln ('--------------------');
writeln (' i i^2');
writeln ('--------------------');
for i:=10 to 20 do
begin
b:=sqr(i);
writeln (' ',i,' | ',b);
end;
readln;
end.
Рис. 5. Блок-схема алгоритма для решения задачи 1
Для запуска программы Run-Run. Результат выполнения программы 2 представлен на рисунке 6.
Рис.6. Результат выполнения программы 2
Задача 3. Найти факториал заданного числа n.
Для решения данной задачи необходимо ввести с клавиатуры число n. Факториал числа (n!) – это произведение целых чисел от 1 до n. Следовательно, в программе необходимо будет организовать изменение переменной цикла от 1 до введенного числа n. В теле цикла необходимо будет умножать текущее значение переменной, в которой будем накапливать значение факториала (F) на текущее значение переменной цикла. Работу программы можно будет представить следующим образом:
i=1; F=1;
i=2; F=1*2;
i=3; F=1*2*3;
…
i=n; F=1*2*3*…*n.
В теле цикла для получения нового значения переменной F необходимо будет ее предыдущее значение умножить на текущее значение переменной цикла:
F:=F*i;
Для первой итерации (i=1) предыдущего значения F еще не существует, Pascal принимает его условно равным нулю. Это может повлиять на результат выполнения всей программы, так как если нулевое значение умножать на какое-либо число, то результатом произведения будет являться 0. чтобы этого избежать, придется искусственно создать начальное значение переменной F, это значение должно быть таким, чтобы в дальнейшем не могло повлиять на результат вычисления. Таким образом, принимаем начальное значение переменной F равным 1.
Блок-схема для решения поставленной задачи приведена на рисунке 7.
Программный код для решения поставленной задачи запишется в виде программы 3.
Программа 3:
program zadacha_3;
var i,n,F:integer;
begin
writeln ('Vvedite znachenie n');
readln(n);
F:=1;
for i:=1 to n do
F:=F*i;
writeln (n,'!=',F);
readln;
end.
Рис. 7. Блок-схема алгоритма для решения задачи 3
Для запуска программы Run-Run. Результат выполнения программы 3 представлен на рисунке 8.
Рис.8. Результат выполнения программы 3
Задача 4 Составить таблицу умножения для чисел от 1 до 10.
Для решения этой задачи понадобится применение вложенных циклов. Переменная внешнего цикла будет изменяться от 1 до 10 и отвечать за первый множитель, переменная внутреннего цикла будет также изменяться от 1 до 10 но отвечать за второй множитель. Блок-схема для решения данной задачи приведена на рисунке 9.
Программный код для решения поставленной задачи запишется в виде программы 4.
Программа 4:
program zadacha_4;
var i,j:integer;i1,j1,a:real;
begin
write (' ');/1
for i:=1 to 10 do begin/2
i1:=i;/3
write (i1:6:0);/4
end;
writeln;
writeln ('------------------------------------------------------------------');
for i:=1 to 10 do begin
i1:=i;
write (i1:4:0,'|');/5
for j:=1 to 10 do begin
a:=i*j;/6
write (a:6:0);/7
end;
writeln;/8
end;
readln;
end.
Рис. 9. Блок-схема алгоритма для решения задачи 4
В данной задаче применяются достаточно сложные процедуры вывода для построения таблицы умножения. В строке 1 с помощью оператора write (' ') осуществляем отступ для первой строки, в которой будут выведены значения первых множителей. Для того, чтобы вывод всех чисел содержал одинаковое количество знаков, они будут выводиться как вещественные переменные с указанием маски вывода (6:0). Каждое выводимое число будет содержать в себе 6 позиций в записи числа и 0 позиций в дробной части числа. Вывод первых множителей в строку осуществляется в строках программы, отмеченных как 2-4. В строке 5 (write (i1:4:0,'|') осуществляется вывод вторых множителей. В строке 6 (a:=i*j) вычисляется значение произведения, в строке 7 (write (a:6:0) выводим на экран полученное значение произведения, в строке 8 (writeln) осуществляем переход на новую строку для вывода следующей строки таблицы умножения.
Для запуска программы Run-Run. Результат выполнения программы 4 представлен на рисунке 10.
Рис.10. Результат выполнения программы 4
Задача 5. Вывести на экран следующее изображение:
*
**
***
****
******
Для решения данной задачи потребуется использование вложенных циклов, причем значение параметра внутреннего цикла будет зависеть от значения параметра внешнего цикла. Внешний цикл будет отвечать за вывод символа '*' по столбцам, всего в задаче используется 5 столбцов, следовательно, параметр внешнего цикла будет изменяться от 1 до 5. Внутренний цикл будет отвечать за вывод символа '*' по строкам, следовательно, параметр внутреннего цикла будет изменять свое значение от 1 до значения параметра внешнего цикла. Блок-схема для решения данной задачи представлена на рисунке 11.
Программный код для решения поставленной задачи запишется в виде программы 5.
Программа 5:
program zadacha_5;
var i,j:integer;
begin
for i:=1 to 5 do begin
for j:=1 to i do
write ('*');
writeln;
end;
readln;
end.
Рис. 11. Блок-схема алгоритма для решения задачи 5
Для запуска программы Run-Run. Результат выполнения программы 5 представлен на рисунке 12.
Рис.12. Результат выполнения программы 5
Задача 6. Написать программу вычисления функции у=f(x). Заполнить таблицу значений x, f(x), для изменения значения х от a до b с шагом h.
a=1,
b=3,
h=0.25.
Для решения данной задачи необходимо сначала вычислить количество повторений тела цикла как разность между начальным и конечным значением переменной х, деленное на шаг. От полученного значения необходимо взять целую часть с помощью функции trunc. Блок-схема для решения поставленной задачи представлена на рисунке 13.
Рис.13. Блок-схема для решения задачи 6
Программный код для решения поставленной задачи запишется в виде программы 6.
Программа 6.
program zadacha_6;
const a=1; b=3; h=0.25;
var x,f:real; n,i:integer;
begin
n:=trunc((b-a)/h+1);
x:=a;
writeln (' x f(x)');
writeln ('___________');
for i:=1 to n do begin
if (x<2) then f:=sqr(sqr(x))*(x-0.5)/3 + ln(3*x)
else f:=(5*sqr(x)-1)/2*x-1;
writeln (x:7:2,f:7:2);
x:=x+h;
end;
readln;
end.
Результат выполнения программы представлен на рисунке 14.
Рис.14. Результат выполнения программы 6.
