Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_циклических_алгоритмов_с_задан...doc
Скачиваний:
0
Добавлен:
08.09.2019
Размер:
253.44 Кб
Скачать

Вложенные циклы

Иногда в программе возникает необходимость использования нескольких переменных цикла, зависящих или не зависящих друг от друга. В этом случае используется несколько циклов, вложенных друг в друга, например:

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.