Главная страница
Навигация по странице:

  • Оператор цикла с параметром

  • Пример. Циклы с параметром. var n, k: integer; s:Real; f:Extended; begin {цикл вычисления суммы ряда 1+1/2+1/3+…+1/n, n=1,…, 10} s := 0; 357

  • Оператор цикла с предусловием

  • Оператор цикла с постусловием

  • Практика Задача

  • Проект формы Текст модуля

  • Один из возможных результатов работы программы Задача

  • Проект формы Текст модуля unit Unit1; 370

  • Практикум по информатике


    Скачать 7.84 Mb.
    НазваниеПрактикум по информатике
    АнкорPraktikum_2008.pdf
    Дата21.09.2017
    Размер7.84 Mb.
    Формат файлаpdf
    Имя файлаPraktikum_2008.pdf
    ТипКнига
    #8906
    страница17 из 21
    1   ...   13   14   15   16   17   18   19   20   21
    §4. Циклы
    В данном параграфе рассматриваются следующие вопро-
    сы
    : операторы цикла (For do, While do, Repeat Until), компонент
    Memo.
    Теория
    Операторы цикла
    Операторы цикла используются для организации циклов (по- второв). Цикл представляет собой последовательность операто- ров, которая может выполняться более одного раза. Группу по-

    356
    вторяемых операторов называют телом цикла. Всего имеется три вида операторов цикла:
    — с параметром;
    — с предусловием;
    — с постусловием.
    Обычно, если количество повторов известно заранее, приме- няется оператор цикла с параметром, в противном случае — опе- раторы с пост или предусловием (чаще используется оператор с предусловием).
    Операторы циклов могут быть вложенными друг в друга.
    Оператор цикла с параметром
    Оператор цикла с параметром имеет два следующих формата:
    for <Параметр> := <Выражение1> to <Выражение2> do <Оператор>;
    и
    for <Параметр> := <Выражение1> downto <Выражение2> do <Оператор>;
    Параметр цикла представляет собой переменную порядково- го типа, которая должна быть определена в том же блоке, где на- ходится оператор цикла, выражение1 и выражение2 являются со- ответственно начальным и конечным значениями параметра цик- ла и должны иметь тип, совместимый с типом параметра цикла.
    Оператор цикла обеспечивает выполнение тела цикла, которым является оператор после слова do, до полного перебора всех зна- чений параметра цикла от начального до конечного с соответст- вующим шагом. Шаг параметра всегда равен 1 для первого фор- мата цикла и –1 — для второго формата. То есть значение пара- метра последовательно увеличивается (for… to) или уменьшается
    (for.. .downto) на единицу при каждом повторении цикла. Цикл может не выполниться ни разу, если для цикла for . . . to значение начального выражения больше конечного, а для цикла for..
    .downto, наоборот, значение начального выражения меньше ко- нечного.
    Пример.
    Циклы с параметром. var n, k: integer; s:Real; f:Extended; begin
    {цикл вычисления суммы ряда 1+1/2+1/3+…+1/n, n=1,…, 10} s := 0;

    357
    for n := 1 to 10 do s := s + 1/n; f :=1;
    { цикл вычисления произведения членов ряда 1*1/2*1/3*…*1/k, k=1,…, 20} for к := 1 to 20 do begin f :=f*1/k end;
    Оператор цикла с предусловием
    Оператор цикла с предусловием целесообразно использовать в случаях, когда число повторений тела цикла заранее неизвест- но. Тело цикла может не выполняться, если условие цикла явля- ется ложью.
    Формат оператора цикла с предусловием: while <Условие> do <Оператор>;
    Оператор тела цикла выполняется до тех пор, пока логическое выражение не примет значение False, то есть в отличие от цикла с постусловием, цикл выполняется при значении логического вы- ражения True.
    Пример.
    Оператор цикла с предусловием.
    Рассмотрим расчет суммы натуральных чисел от 1 до n с шагом 3 var i,n: integer; sum: integer; begin sum := 0; i:=1; while i <= n do begin sum := sum + i; i := i + 3; end; end;
    Если перед первым выполнением цикла условие не выполня- ется (значение логического выражения равно False), то тело цик- ла не выполняется ни разу и происходит переход на следующий за оператором цикла оператор.
    Оператор цикла с постусловием

    358
    Во многом этот оператор аналогичен оператору цикла с пре- дусловием, но проверка условия выполняется в конце оператора.
    Выход из цикла происходит при равенстве условия константе
    True (Истина).
    Формат оператора цикла с постусловием: repeat <Оператор>; until <Условие>;
    Пример.
    Найдем сумму

    =

    10 1
    )
    (
    n
    n
    x
    n
    с шагом 2, при x–n≠0. n:=1;
    Sum : =0;
    Repeat
    Sum := Sum + n/(x–n); n:=n+2;
    Until (n>10) or (x–n=0);
    В операторе Repeat Until условие проверяется после выполнения операторов тела цикла. Следовательно, операторы цикла в любом случае выполнятся хотя бы один раз. В этом примере, если в про- грамме заранее не определено, что x≠1, при попадании в цикл произойдет ошибка выполнения (деление на ноль).
    Компонент Memo
    TMemo ― иная форма компонента TEdit. Memo находится на вкладке Standard. Подразумевает работу с большими тек- стами и может выполнять основные функции редактора (ввод и редактирование текста). Memo имеет ограничения на объем тек- ста в 32Кб, это составляет 10-20 страниц.
    Главные свойства компонента Memo
    Свойство
    Назначение
    Name
    Имя компонента
    Text
    Текст, находящийся в поле
    Memo. Рассматривается как единое целое
    Lines
    Текст, находящийся в поле
    Memo. Рассматривается как со- вокупность строк. Доступ к строке осуществляется по но- меру

    359
    Lines.Count
    Количество строк в поле Memo
    Например, присвоить переменной ST весь текст, находящий- ся в компоненте Memo можно так:
    ST:=Memo1.Text;
    Добавить строку:
    Memo1.Lines.Add(
    ′Еще одна строка′);
    Переменной можно присвоить содержимое одной строки:
    Stroke:=Memo1.Lines[i];
    Практика
    Задача
    Составить программу для вычисления таблиц значений квадра- тов, кубов, квадратных и кубических корней,
    πn, π/(4n
    2
    ),1/n.
    Компоненты
    Имя компонента
    Свойства компонента
    Значение
    Назначение
    Form1 Caption
    Квадраты, кубы, кв. и куб. корни, пи*n, пи/4*(n в кв.),
    1/n
    Заголовок формы
    Label1 Caption
    Программа вычисляет по вашему желанию таблицы значений в заданном ин- тервале натуральных чи- сел n
    Справочная ин- формация для пользователя про- граммы
    Label2 Caption
    Задайте интервал значе- ний натурального числа n
    Подсказка пользо- вателю
    Label3 Caption
    Поле для вывода результатов
    Edit1 Text
    Поле для ввода начального значе- ния n
    Edit2 Text
    Поле для ввода конечного значе- ния n
    ComboBox1 Text
    Items
    Выберите нужное матема- тическое выражение
    Квадраты
    Кубы
    Квадратные корни
    Кубические корни
    Пи*n
    Пи/[4*(n в кв.)]
    1/n
    Текст в заголовке списка
    Значения строк в списке
    Button1 Caption Вычислить
    Кнопка для вычис- ления
    Button2 Caption Выход
    Кнопка закрытия

    360
    формы и выхода из программы
    Переменные
    Обозначение в программе Содержание
    Тип n
    Текущее значение числа
    Целый n1
    Начальное значение интервала натураль- ных чисел
    Целый n2
    Конечное значение ин- тервала натуральных чисел
    Целый
    Проект формы
    Текст модуля
    unit Unit1;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls, Math;
    // обязательно к стандартному списку подключить библиотеку
    // математических функций Math
    ………………………
    var
    Form1: TForm1;
    n1,n2:Integer;{начальное и конечное значения интервала натуральных чисел}

    361
    n:integer; // текущее значение числа
    implementation
    {$R *.dfm}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    // процедура закрывает форму и осуществляет
    // выход из программы
    Form1.Close
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    // ввод начального и конечного значений интервала
    // натуральных чисел n1:=StrToInt(Edit1.Text); n2:=StrToInt(Edit2.Text);
    Case ComboBox1.ItemIndex of
    0: begin
    // очистка поля ввода от предыдущих значений label3.Caption:=' ';
    // если в поле со списком выбрано значение Квадраты
    // в цикле от n1 до n2 с шагом 1 вычисляются значения
    // квадратов чисел
    For n:=n1 To n2 Do
    Begin
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+' '+IntToStr(Sqr(n)); end; end;
    1:begin
    // очистка поля ввода от предыдущих значений label3.Caption:=' ';
    // если в поле со списком выбрано значение Кубы
    // в цикле от n1 до n2 с шагом 1 вычисляются значения
    // кубов чисел
    For n:=n1 To n2 Do
    Begin
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+ ' ' + IntToStr(n*n*n); end; end;
    2:begin label3.Caption:=' ';
    // если в поле со списком выбрано значение Квадратные корни

    362
    // в цикле от n1 до n2 с шагом 1 вычисляются значения
    // квадратных корней чисел
    For n:=n1 To n2 Do
    Begin
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+' ' + FloatToStrF(Sqrt(n),Fffixed,10,6); end; end;
    3:begin label3.Caption:=' ';
    // функция логарифм не определена при нуле,
    // поэтому сдвигаем интервал значений на единицу
    If n1=0 Then begin label3.Caption:='0';n1:=n1+1; end;
    // если в поле со списком выбрано значение Кубические корни
    // в цикле от n1 до n2 с шагом 1 вычисляются значения
    // кубических корней чисел
    For n:=n1 To n2 Do
    Begin
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+' ' + FloatToStrF(exp(1/3*ln(n)),Fffixed,10,6); end; end;
    4:begin label3.Caption:=' ';
    For n:=n1 To n2 Do
    Begin
    // если в поле со списком выбрано значение пи*n
    // в цикле от n1 до n2 с шагом 1 вычисляются значения
    // пи*n чисел
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+' '+ FloatToStrF((pi*n),Fffixed,10,6); end; end;
    5:begin label3.Caption:=' ';
    // если в поле со списком выбрано значение пи/[4*(n в кв.)]
    // в цикле от n1 до n2 с шагом 1 вычисляются значения
    // пи/[4*(n в кв.)]
    If n1=0 Then begin
    Label3.Caption:='Бесконечность'; n1:=n1+1
    End;
    For n:=n1 To n2 Do
    Begin
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+' '+ FloatToStrF((pi/(4*n*n)),Fffixed,10,6); end;

    363
    end;
    6:begin label3.Caption:=' ';
    If n1=0 Then begin
    Label3.Caption:=' Бесконечность'; n1:=n1+1 end;
    // если в поле со списком выбрано значение 1/n
    // в цикле от n1 до n2 с шагом 1 вычисляются значения 1/n
    For n:=n1 To n2 Do
    Begin
    Label3.Caption:= Label3.Caption+ #13+
    IntToStr(n)+' '+ FloatToStrF(1/n,Fffixed,10,6); end; end;
    Else Exit; end;
    end;
    end.
    Задача
    Составить программу для вычисления таблицы уклонов ме- стности. Уклоны местности определяют при проектировании ка- налов, дорог, направления движения тракторных агрегатов на пашне, изучении эрозии почв. Уклоном i называют отношение превышения h между точками к горизонтальному проложению S между ними. Для вычислений воспользоваться следующими формулами:
    ).
    60
    *
    .)
    ((
    ),
    (
    ,
    180
    *
    /
    )
    tan(
    ,
    /
    гр
    в
    i
    i
    округление
    мин
    в
    i
    i
    часть
    целая
    гр
    в
    i
    i
    Arc
    i
    s
    h
    i
    o
    o
    o

    =
    =
    =
    =
    π
    Компоненты
    Имя компонента
    Свойства компонент
    Значение
    Назначение
    Form1 Caption Таблица уклонов
    Заголовок формы
    Label1 Caption При проектировании кана- лов, дорог, направления движения тракторных агре- гатов на пашне, изучении эрозии почв определяют уклоны местности. Уклоном i называют отношение пре-
    Справочная ин- формация для пользователя про- граммы

    364
    вышения h между точками к горизонтальному проложе- нию S между ними.
    Label2 Caption Интервал изменения пре- вышений
    Подсказка пользо- вателю
    Edit1 Text
    Нижняя граница интервала превы- шений
    Edit2 Text
    Верхняя граница интервала превы- шений
    Label3 Caption Шаг изменения превыше- ний
    Подсказка пользо- вателю
    Edit3 Text
    Поле для ввода шага изменения превышений
    Label4 Caption Интервал изменения гори- зонтальных проложений
    Подсказка пользо- вателю
    Edit4 Text
    Нижняя граница интервала горизон- тальных проложе- ний
    Edit5 Text
    Верхняя граница интервала горизон- тальных проложе- ний
    Label5 Caption Шаг изменения горизон- тальных проложений
    Подсказка пользо- вателю
    Edit6 Text
    Поле для ввода шага изменения горизонтальных проложений
    Label6 Caption
    В это поле про- грамма выводит шапку таблицы ук- лонов
    Memo1 Lines
    ScrollBars
    ….. ssBoth
    Компонент для вы- вода значений таб- лицы уклонов
    Выводить обе по- лосы прокрутки
    (вертикальную и горизонтальную)
    Button1 Caption ВЫЧИСЛИТЬ
    Кнопка для выпол- нения
    Button2 Caption ВЫХОД
    Кнопка для завер- шения работы про- граммы
    Переменные

    365
    Обозначение в программе
    Содержание
    Тип h
    Текущее значение пре- вышения
    Вещественный расши- ренный h1
    Нижняя граница интер- вала превышений
    Вещественный расши- ренный h2
    Верхняя граница интер- вала превышений
    Вещественный расши- ренный s
    Текущее значение гори- зонтального проложения
    Вещественный расши- ренный s1
    Нижняя граница интер- вала горизонтальных проложений
    Вещественный расши- ренный s2
    Верхняя граница интер- вала горизонтальных проложений
    Вещественный расши- ренный
    Dh
    Шаг изменения превы- шений
    Вещественный расши- ренный
    Ds
    Шаг изменения горизон- тальных проложений
    Вещественный расши- ренный i
    Текущее значение укло- на в тангенсах
    Вещественный расши- ренный ig
    Градусная часть уклона
    Целый im
    Минутная часть уклона
    Целый
    Ari
    Текущее значение укло- на в градусах
    Вещественный расши- ренный

    366
    Проект формы
    Текст модуля
    unit Unit1;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Math;
    // библиотека математических функций Math
    // подключается программистом
    ……………
    var
    Form1: TForm1;
    h1,h2: Extended; // границы интервала изменения превышений
    Dh:Extended;// шаг изменения превышений s1,s2:Extended;// интервал изменения горизонтальных проложений
    Ds: Extended; // шаг изменения горизонтальных проложений
    implementation
    {$R *.dfm}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Form1.Close

    367
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    Var i:Extended;// текущее значение уклона в тангенсах ig:Integer; // градусная часть уклона im:Integer; // минутная часть уклона h,s:Extended;// текущее значение превышения и
    // горизонтального проложения
    ARi:Extended;// текущее значение уклона в градусах
    begin
    // ввод исходных данных для программы h1:=StrToFloat(Edit1.Text); h2:=StrToFloat(Edit2.Text);
    Dh:=StrToFloat(Edit3.Text); s1:=StrToFloat(Edit4.Text); s2:=StrToFloat(Edit5.Text);
    Ds:=StrToFloat(Edit6.Text);
    // вывод шапки таблицы уклонов
    Label6.Caption:='Превышение Горизонтальное проложение Уклон в тангенсах'
    + ' Уклон в гр., мин.';
    // текущее значение превышения принимает значение нижней границы h:=h1;
    { цикл выполняется, пока текущее значение превышения не превысит значение правой верхней границы}
    While h <= h2 Do
    Begin
    // текущее значение горизонтального проложения принимает значение
    // нижней границы s:=s1;
    { цикл выполняется, пока текущее значение горизонтального проложения не превысит значение правой верхней границы}
    While s <= s2 Do begin
    // вычисление текущего значения уклона в тангенсах i:=h/s;
    // перевод уклона в градусную меру
    ARi:=ArcTan(i)/pi*180;
    // выделение целой части — градусная часть уклона ig := Trunc(ARi);
    // вычисление минутной части значения уклона im:=Round((ARi-ig)*60);
    // вывод строки таблицы уклонов
    Memo1.Lines.Add(' '+ FloatToStrF(h,Fffixed,6,1) +
    ' | '

    368
    + FloatToStrF(s,Fffixed,15,2) + ' | '
    + FloatToStrF(i,Fffixed,15,5) + ' | ' +
    ' ' + IntToStr(ig) + ' ' + IntToStr(im));
    // увеличение горизонтального проложения на величину шага s:=s+Ds; end;
    // увеличение превышения на величину шага h:=h+Dh; end;
    end;
    end.
    Один из возможных результатов работы программы
    Задача
    Составить программу для вычисления числа е.
    Известно, что сумма ряда 1+1/1!+1/2!+...+1/n! стремится к числу е. Число е=2,71828 играет важную роль в качестве основа- ния натуральных логарифмов.
    Компоненты
    Имя компонента
    Свойства компонента
    Значение
    Назначение
    Form1 Caption Число е
    Заголовок формы

    369
    Label1 Caption Известно, что сумма ряда
    1+1/1!+1/2!+...+1/n! стре- мится к числу е. Число е=2,71828 играет важную роль в качестве основания натуральных логарифмов
    Справочная ин- формация для пользователя про- граммы
    Label2 Caption Точность вычисления чис- ла е
    Подсказка пользо- вателю
    Edit1 Text
    Поле для ввода точности вычисле- ния числа е
    Button1 Caption Вычислить
    Кнопка для вычис- ления
    Button2 Caption Новые данные
    Кнопка для очистки введенного значе- ния точности
    Button3 Caption Выход
    Кнопка для завер- шения работы про- граммы
    Label3 Caption
    Поле, в которое программа выводит вычисленное зна- чение числа е
    Переменные
    Обозначение в программе
    Содержание
    Тип n
    Номер члена ряда -1
    Целый e
    Число е
    Вещественный, расширенный z
    Знаменатель члена ряда
    Длинный целый element
    Текущий элемент ряда
    Вещественный, расширенный
    T
    Точность вычисления числа е
    Вещественный, расширенный
    Проект формы
    Текст модуля
    unit Unit1;

    370
    ……………………………
    var
    Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Edit1.Clear
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Form1.Close
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    Var e: Extended; // число е element:Extended; // текущий элемент ряда
    T: Extended;// точность вычисления числа е n:Integer; // номер члена ряда -1 z:LongInt; // знаменатель члена ряда
    begin
    // инициализируем числом 1 значения переменных e, z, n e:=1; z:=1; n:=1;
    // ввод точности вычисления числа e
    T:=StrToFloat(Edit1.Text);
    //цикл вычисления суммы ряда для числа e
    Repeat z:=Z*n; element:=1/z ; e:=e+element; n:=n+1;
    { выход из цикла происходит, когда очередной член ряда меньше или равен точности вычисления числа е}
    Until T >=element ;
    // вывод вычисленного числа e
    Label3.Caption:='число е равно: '+FloatToStrF(e,Fffixed,10,8)
    end;
    end.

    371
    Задачи для самостоятельного решения
    Циклы с условием
    № 4.1. Написать программу для вычисления значений Y= Z
    2
    при изменении Z от N1 до N2 с шагом K, где K, N1, N2 — натураль- ные числа.
    № 4.2. Написать программу для вычисления суммы нечетных чи- сел натурального ряда в интервале от N1 до N2, , где N1, N2 — натуральные числа.
    № 4.3. Написать программу для вычисления значений
    Y
    Q
    =
    при изменении Y от N1 до N2 с шагом K, где K, N1, N2 — натураль- ные числа.
    № 4.4. Написать программу для вычисления суммы обратных ве- личин чисел от N1 до N2 с шагом K, где K, N1, N2 — натураль- ные числа.
    № 4.5. Написать программу для вычисления выражения S=
    π*R*R при изменении R в интервале от 1 до N с шагом K где K, N — на- туральные числа.
    № 4.6. Составить программу для вычисления членов последова- тельности:
    )
    1
    (
    1 3
    2 1
    2 1
    1
    +

    +
    +

    +

    =
    n
    n
    S
    n
    , где nнатуральное число.
    Члены последовательности вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа
    ε
    (0<
    ε<0,0001).
    № 4.7. Составить программу для вычисления суммы ряда:

    372
    3 3
    3 3
    1 3
    1 2
    1 1
    1
    n
    +
    +
    +
    +
    , где nнатуральное число.
    Сумму ряда вычислять до тех пор, пока текущий член последова- тельности не станет меньше заданного числа
    ε (0<ε<0,0001).
    № 4.8. Составить программу для вычисления суммы ряда:
    6 1
    5 1
    4 1
    3 1
    2 1
    1
    +

    +

    +

    Сумму ряда вычислять до тех пор, пока текущий член последова- тельности не станет меньше заданного числа
    ε (0<⏐ε⏐<0,0001).
    № 4.9.Составить программу для вычисления члена a n
    последова- тельности a
    1
    , a
    2
    , …, образованной по закону для которого выполняется условие
    ⏐a n
    –a n-1
    ⏐<ε, причем n — номер члена последовательности (n
    ≥2),
    ε — заранее заданное положительное число.
    № 4.10. Написать программу для вычисления члена b n последова- тельности b
    1
    , b
    2
    , …, образованной по закону
    ),
    1 1
    1
    )...(
    3 1
    1
    )(
    2 1
    1
    (
    +



    =
    n
    b
    n
    для которого выполняется условие
    ⏐b n
    –b n-1
    ⏐<ε, где n — номер элемента последовательности (n
    ≥2);
    ε — заданное положительное число.
    Циклы с параметром
    № 4.11. Написать программу для вычисления суммы S=S+1/i, где i=1, 2,..., N.
    № 4.12. Написать программу для вычисления произведения пер- вых N натуральных чисел.
    № 4.13. Написать программу для вычисления dx=h*h/(2*S), при значениях: 100
    ≤ S ≤ 1000 м.
    № 4.14. Написать программу для вычисления суммы S из значе- ний Y=X*X*X, где X задан в интервале от N1 до N2, где N1 и N2
    — натуральные числа.
    ,
    1 1
    2 2


    +
    =
    n
    n
    n
    a
    n

    373
    № 4.15. Написать программу для вычисления выражения Y=N!.
    1   ...   13   14   15   16   17   18   19   20   21


    написать администратору сайта