Вторник, 08.10.2024, 22:19
Информатика и математика в Плесской школе
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Программирование циклических алгоритмов

В теме программирование циклов можно выделить несколько разделов. Я рассмотрю три, на мой взгляд, основных раздела. На основе изучения, которых формируется понятие циклического алгоритма. К этим разделам относятся:
1. Создание геометрических орнаментов при помощи циклов.
2. Построение таблицы значений функции на интервале.
3. Вычисление суммы (произведения) нескольких слагаемых (множителей).

Для изучения данной темы скачайте презентацию "Программирование циклических алгоритмов" с "Учительского портала" http://www.uchportal.ru/load/18-1-0-25427

Создание геометрических орнаментов при помощи циклов

    Рассмотрим задачи, относящиеся к группе геометрических орнаментов. На подобных задачах проще всего объяснить понятие цикла, виды цикла и вложенные циклы. К задачам группы А, я отношу те задачи,  в которых изменяется только одна переменная. При их решении можно использовать любой из трех видов циклов. Хотя чаще всего я предлагаю решить эту задачу, используя все три вида циклов.  Это позволяет лучше понять, как работает тот или иной цикл и изучить его особенности. 
 При решении данной задачи требуется определить, какая переменная будет изменяться, какое начальное значение будет у этой переменной, какое конечное, с каким шагом будет происходить изменение.
Задание А. Построить геометрический орнамент.

Program n1;

Uses Crt, GraphABC;
var x,i:Integer;
begin
  x:=1;
  For i:=1 to 64 do begin
                     line(320,400,x,1);
                     x:=x+10;
                     end;
end.

К группе B я отношу задачи, в которых изменяются две переменные. В этих задачах усложнение зависит от того, сколько переменных будет изменяться,  и с каким шагом будут изменяться переменные, так как экран имеет форму прямоугольника. В следующей задаче внутри одного цикла происходит изменение двух переменных X и Y.
Задание В. Построить геометрический орнамент.

Program n2;

Uses Crt, GraphABC;
var x,y:Integer;
begin
     x:=1;
     y:=1;
    repeat
       Line (x, 0 , 0 , y);
       x:=x + 16;
       y:=y + 10;
    until (x>640);
end.

К заданиям С, я отношу задачи в которых при создании орнамента используются вложенные циклы. В этих задачах необходимо так построить алгоритм, что бы внутри одного цикла находился другой цикл. Усложняя задачу, можно предложить орнамент, в котором количество элементов в каждом ряду неодинаково. Такие задачи позволят в дальнейшем легче перейти к программированию двумерных массивов.

Задание С. Построить геометрический орнамент.

Program n3;

Uses Crt, GraphABC;
var x,y:Integer;
begin
  y:=10;
  while (y<350) do begin
                   x:=10;
                   y:=y + 25;
                   while (x<620) do begin
                                    circle(x,y,10);
                                    x:=x+25;
                                    end;
                   end;
end.

Построение значений функции на интервале

Алгоритм решения данных задач достаточно простой, поэтому усложнение  заданий идет  в сторону математики. 
Для задач группы А, предлагается построить таблицу непрерывной на данном интервале функции. В этом случае используется только оператор цикла, чаще всего Repit Until. Цикл For to do  в Паскале не совсем  подходит, так как  в нем отсутствует параметр шаг, а точное количество итераций часто подсчитать достаточно сложно. 
    Задание А.Построить таблицу значений функции y = 3 sin x + cos 2x на интервале [ -Pi/6 ; Pi/6] с шагом Δх = 0,1.
Program n4;
Uses Crt;
var x,y,dx:real;
begin
   ClrScr;
   x:=-Pi/6;
   dx:=0.1;
   writeln ('    x           y');
   repeat
      y:= 3* sin(x) + cos(2*x);
      writeln (x:10:5,y:10:5);
      x:=x+dx;
   until (x>pi/6);
end.

В группе задач В подбираются такие функции, что бы они имели разрыв на области определения. Это может быть тангенс, котангенс или дробь. Здесь требуется добавить условие, которое не даст вычислять значение функции в определенных точках. Дополнительная сложность здесь появляется в выражении функций, которых нет в стандартном наборе языка Pascal.     

Задание В. Построить таблицу значений функции y = сtg x, на интервале [-1 ; 1] с шагом Δх = 0,1.
Program n5;
Uses Crt;
var x,y,dx:real;
begin
 ClrScr;
 x:=-1;
 dx:=0.1;
 writeln ('    x           y');
 repeat
   if (x<>0) then begin
    y:= cos(x)/sin(x);
    writeln (x:10:5,y:10:5);
                                                  end;
                          x:=x+dx;
 until (x>=1);
end.

 
В том месте, где должен быть пропущен 0, стоит какое то странное число. Это связано с особенностью работы системы программирования PascalABC с десятичными дробями. Поэтому внесем в программу такие изменения, если число по модулю меньше 0.000000000001 будем считать что это 0.
Program n5;
Uses Crt;
var x,y,dx:real;
begin
   ClrScr;
   x:= -1;
   dx:=0.1;
   repeat
        if (abs(x)>1e-12) then begin
                                  y:= cos(x)/sin(x);
                                  writeln ('x= ',x:10:5,'   y= ',y:10:5);
                               end;
        x:=x+dx;
   until (x>=1);
end.

    Наиболее сложно задание - построить таблицу значений функции заданной кусочно. Здесь требуется внутри цикла организовать вычисление значений различных функций на трех или более интервалах.
    Для тех кто забыл что это такое, рекомендую посмотреть № 46, 51, 55 учебника «Алгебра и начала анализа 10-11 класс» (Под редакцией А.Н. Колмогорова). В этих номерах приводятся примеры таких функций и их графиков.
Задание С. Построить таблицу значений функции на интервале [-2; 2] с шагом Δх = 0,1 если функция имеет вид
                                                           x+1, при  x<-1
                                                  Y=    x2   , при  -1<=x<=1
                                                           x -2, при  x>1 
Program n6;
Uses Crt;
var x,y,dx:real;
begin
 ClrScr;
 x:=-2;
 dx:=0.1;
 writeln ('    x           y');
 repeat
   if (x<-1) then y:=x+1;
   if (x>=-1) and (x<=1) then y:=x*x;
   if (x>1) then y:=x-2;
   writeln (x:10:5,y:10:5);
   x:=x+dx;
 until (x>=2+dx);
end.

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

Вычисление суммы (произведения) нескольких слагаемых (множителей)

    Вычисление суммы или произведения, наверное, самая большая по количеству и качеству задач. Здесь рассматриваются задачи на нахождение суммы конечного и бесконечного ряда, задачи эксперименты в которых высчитывается сумма того, что заранее неизвестно, нахождение площади фигуры ограниченной кривой линией и т.д. В этой работе я покажу, как меняется сложность задач на примере нахождения суммы конечного ряда и нахождение площади криволинейной трапеции. 
Самые простые задачи в которых меняется параметры в цикле. Как правило подобные задачи очень похожи друг на друга.
Задание А. Даны два целых числа А и В (А < В). Найти сумму всех целых чисел от А до В включительно.
Program n7;
Uses Crt;
var s,a,b,i:integer;
begin
 ClrScr;
 s:=0;
 write('Введи а= ');Readln (a);
 write('Введи b= ');Readln (b);
 for i:=a to b do s:=s + i;
 writeln('s= ',s:5);
end.

В этой задаче все четыре переменные могут быть целого типа. Требуется ввести необходимые значения с клавиатуры и правильно организовать цикл.
Задание В. Дано целое число N (N>0). Используя один цикл найти сумму   S=1+1/2!+1/3!+...+1/N!. 
Program n8;
Uses Crt;
var s,f:real;
    i,n:integer;
begin
 ClrScr;
 write('ВВеди N= ');readln(n);
 s:=1;f:=1;
 for i:= 2 to n do begin
                   f:=f*i;
                   s:=s+1/f;
                   end;
 writeln('Сумма = ',s:10:9);
end.

    В этой задаче в одном цикле приходится объединять нахождение суммы и вычисление факториала очередного слагаемого. Кроме того, необходимо помнить, что в операторе For To Do переменные i  и n должны быть целого типа, а сумма будет выражаться десятичной дробью. Это должно быть отражено в разделе описания переменных. 
В задания С  хорошо рассматривать на задачах нахождение площади криволинейной трапеции. Если к этому моменту вы не знакомы  с интегрированием, советую посмотреть хотя бы в интернете геометрическую интерпретацию интеграла. Идея разбиения криволинейной трапеции на отдельные полоски прямоугольной формы достаточно проста. 
Задание С. Вычислить площадь фигуры ограниченной линиями: X=1, X=4, Y=0, Y=1/X .
Program n9;
Uses Crt;
Var x,h,s:Real;
Begin
 ClrScr;
 h:=(4-1)/1000;
 x:=1;
 Repeat
  s:=s+h*1/x;
  x:=x+h;
 Until x>4;
 writeln('Площадь = ',S:10:5);
end.

В этой задаче уже нельзя использовать цикл с параметром. Нужно сначала определить шаг (ширину полоски) а затем в операторе цикла с постусловием находить сумму площадей этих полосок.

 

Поиск
Календарь
«  Октябрь 2024  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Учительский портал
    Copyright MyCorp © 2024