Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Или

Операторы циклов.

Ветвления в алгоритмах. Логические выражения.

Лабораторная работа № 2

Операторы сравнения и перехода. Оператор варианта.

1.Цель работы :

Разработка алгоритмов и программ, использующих операторы сравнения, варианта, перехода и операторы циклов.

2.Краткая теория:

Понятие алгоритма – одно из фундаментальных понятий информатики.

Алгоритмы, при выполнении которых порядок следования команд определяется в зависимости от результатов проверки некоторых условий, называются разветвляющимися. Для их описания в блок-схеме используется следующая конструкция – рис.6:

Рис.6. Ветвление в блок-схемах

 

В языке Паскаль ветвления реализуются оператором сравнение - IF.

Его формат:

If < условие > Then < оператор 1 > Else < оператор 2 >;

If < условие > Then < оператор 1 >;

< условие > - выражение логического типа. Может содержать логические операции и операции сравнения (операции отношений).

К операциям сравнения относятся следующие - >, <, =, <>. Эти операции используются для сравнения числовых величин. Для сравнения символьных и строковых значений используются в основном операции = и <>. Сравнение строк выполнятся по байтно. При этом сравниваются коды символов, поэтому большей считается строка у которой код символа больше.

К логическим операциям относятся операции логического сложения – OR, логического умножения - AND, сложение по модулю 2 (отрицания OR) - XOR и логического отрицания - NOT. Логическая операция AND обычно используют в случаях когда должны выполняться одновременно несколько условий. Операция OR – когда должно выполняться хоты бы одно из условий. Операция NOT используется для отрицания некоторого условия. Операция XOR – если условия не должны совпадать.

Порядок выполнения оператора IF:

Если < условие > истинно, то выполняется < оператор 1 > в противном случае

< оператор 2 >.

В случае если вместо < оператор 1> или < оператор 2 > должны выполняться несколько операторов применяют операторные скобки

BEGIN < операторы > END;

В Паскале допускается вложенность операторов сравнения. В этом случае Then и Else относятся к ближайшему If:

If < условие > Then If < условие > Then < оператор 1 > Else < оператор 2 > Else If < условие > Then < оператор 1 > Else < оператор 2 >;

Допускается 3 уровня вложенности оператора If.

Пример 1: Для заданного значения Х вычислить значение функции, которая определяется следующим образом:

В этом алгоритме для организации ветвления можно использовать условие Х >=0. Если это условие верно, то Y = 4X, если не верно, то Y = 0.

На языке Паскаль этот алгоритм может быть записан следующим образом:

PROGRAM vetvlen;

{ Эта программа демонстрирует ветвление }

VAR

х,у: real;

BEGIN

Writeln (' введите значение х’);

Readln(x);

IF х >= 0 THEN y:=4*x

ELSE y:=0;

Writeln('y=’,y:6:3);

END.

В качестве операторов каждой из альтернатив THEN и ELSE может использоваться оператор перехода на метку GOTO.

Формат оператора имеет вид:

GOTO <метка>;

Оператор GOTO используется для передачи управления тому оператору перед которым стоит <метка>. Все метки используемые в программе должны быть описаны в разделе описания меток:

LABEL <метка1>,<метка2>,…,<меткаN>;

Для пояснения использования меток в программе рассмотрим следующий пример.

Пример 2:Пусть требуется найти значение

PROGRAM METKI;

{ Эта программа демонстрирует использование меток }

LABEL M;

VAR х,у: real;

BEGIN

Writeln (' введите значение х’);

Readln(x);

IF х = 0 THEN BEGIN y:=4; GOTO M; END;

IF x>0 THEN y:=4*x ELSE y:=x/4;

M: Writeln (‘Значение у=’, у:5:2);

END.

Замечание: Использование меток в ТР не приветствуется, так как этом язык является языком структурного программирования и его возможностей достаточно для того, чтобы не использовать метки.

Оператор выбора (варианта) имеет следующий общий вид:

CASE <выражение> OF

<конст. 1>: <оператор 1>:

<конст. 2>: <оператор 2>;

<конст. N>: <оператор N>

ELSE <оператор>

END;

Значение выражения в операторе CASE не может быть вещественного и строкового типов.

Оператор выбора позволяет организовать несколько альтернативных ветвей.

Блок-схема оператора CASE имеет вид (рис. 7):

Рис. 7. Блок-схема оператора CASE

 

Порядок выполнения оператора CASE:

• Вычисляется выражение.

• Последовательно просматриваются <конст.1>, < конст.2>,..., < конст. N> и отыскивается та, которая совпадает со значением выражения;

• выполняется соответствующий оператор.

• Если среди < конст.1>,< конст.2>,...,< конст. N> не будет найдено константы совпадающей со значением выражения, то выполняется <оператор N+1>.

Пример 3: Пусть с клавиатуры вводят номер дни недели, а на экран нужно вывести название дня недели.

Алгоритм представлен на рис. 8.

Текст программы:

PROGRAM Variant;

VAR N:Byte;

BEGIN

Writeln (' введите значение номер дня недели’);

Readln(N);

CASE N OF

1: Writeln(‘Понедельник’);

2: Writeln(‘Вторник’);

3: Writeln(‘Среда’);

4: Writeln(‘Четверг’);

5: Writeln(‘Пятница’);

6: Writeln(‘Суббота’);

7: Writeln(‘Воскресенье’);

ELSE Writeln(‘Нет такого дня недели’)

END;

END.

 

Рис. 8. Блок-схема к примеру 3

 

Часто для решения задач одна и та же последовательность действий выполняется несколько раз. Например, при поступлении в институт абитуриент сдает 3 экзамена, при этом подсчитываются набранные им баллы (переменная S; ее начальное значение S:=0;). За каждый экзамен он получает оценку N. Если оценка больше 2, то S:= S + N; иначе — прекратить вычисления (выход из цикла).

Цикл — это последовательность операторов, которая может быть выполнена более одного раза.

Существует три типа операторов цикла:

— циклы со счетчиком;

— циклы с предусловием;

— циклы с постусловием.

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

Оператор цикла состоит из двух частей:

- в первой, называемой заголовком, указывают — счетчик цикла, задаются ее начальное значение, конечное значения и шаг изменения;

- во второй части, называемой телом цикла, задают операторы, которые должны циклически повторяться.

Формат цикла со счетчиком:

FOR <счетчик цикла>:= <начальное значение> ТО <конечное значение> DO <оператор>;

Здесь

- FOR, TO, DO — зарезервированные слова (англ.: для, до, выполнить);

- <счетчик (параметр) цикла> — переменная типа INTEGER, которая изменяется от <начального значения>, увеличиваясь на единицу после очередного выполнения тела цикла;

- <оператор> — любой (чаще составной) оператор.

Существует другая форма этого оператора:

FOR <счетчик цикла>:= <начальное значение> DOWNTO <конечное значение> DO <оператор>;

Замена ТО на DOWNTO (англ.: вниз до) означает, что шаг изменения параметра цикла равен - 1, т. е. происходит пошаговое уменьшение счетчика на единицу.

Цикл со счетчиком обозначается в схемах алгоритма так как показано на рис. 9.

Рис.9. Обозначение цикла со счетчиком в логических схемах

 

Циклы с предусловием используют тогда, когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.

WHILE <условие> DO <оператор>;

Здесь

  • WHILE, DO — резервированные слова (англ.: пока, делать);
  • <условие> — выражение логического типа;
  • <оператор> — произвольный (возможно составной) оператор.

При использовании цикла с предусловием необходимо знать следующее:

1) начальное значение переменных, участвующих в условии выполнения цикла должно быть определено до начала цикла;

2) если условие истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла;

3) хотя бы один из операторов, входящих в тело цикла, должен влиять на значение переменных, участвующих в условии выполнения цикла, иначе цикл будет повторяться бесконечное число раз.

Графическое изображение цикла с предусловием представлено на рис.10.

Рис. 10. Графическое изображение цикла с предусловием

 

Цикл с постусловием схож с предыдущим циклом, но условие в них указывают после тела цикла.

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

Один из операторов тела цикла должен влиять на значение условия выполнения цикла, иначе цикл будет повторяться бесконечное число раз.

Если условие истинно, то происходит выход из цикла, иначе операторы цикла выполняется еще раз.

Этот оператор имеет вид:

REPEAT <тело цикла> UNTIL <условие>;

Здесь

- REPEAT, UNTIL — резервированные слова (англ.: повторять, пока не);

- <условие> — выражение логического типа, если его значение истинно, то происходит выход из цикла.

Следует отметить, что в данной конструкции последовательность операторов, определяющих тело цикла, не заключается в операторные скобки BEGIN... END, поскольку ими служит пара REPEAT... UNTIL.

Графическое изображение цикла с постусловием представлено на рис. 11.

Рис. 11. Обозначение цикла с постусловием в блок-схемах

Пример 4: Вычислить сумму п членов последовательности{1/ i }:

l+l/2+1/3+...+l/ n.

При решении данной задачи удобно использовать цикл со счетчиком, так как число шагов суммирования точно определено. Для вычисления значения суммы в этой программе используют переменную S. которой предварительно присваивается нулевое значение (S:=0). На каждом шаге к ранее вычисленному значению S прибавляется i -ый член последовательности, поэтому в теле цикла должен присутствовать оператор S:= S+ 1/i;.

Program SUMMA1;

{ Вычисление суммы первых n членов последовательности (1/i) }

Var

i, N: Integer;

S: Real;

Begin

S=0;

Write('ввeдитe N: ');

Readln(N);

For i: = 1 to N do S=S+l/i; { тело цикла }

Writeln('Cyммa равна=',3:6:3);

End.

Пример 5: Найти сумму заранее неопределенного количества членов числовой последовательности. Признаком окончания последовательности является 0.

Так как в данной задаче количество элементов неопределенно заранее, то в программе естественно использовать цикл с предусловием.

Program SUMMA2;

{ Вычисление суммы элементов вводимой последовательности }

Var

S, a: integer;

Begin

S:=0;

Writeln('Введите элемент последовательности — '):

Read(a);

While a <> 0 do

begin

S:=S+a;

Writeln('Введите элемент последовательности — ');

Read(a);

end:

Writeln(‘Сумма равна=',3:6);

End.

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

Пример 6: Найти минимальное число элементов последовательности, сумма которых превышает введенное с клавиатуры значение предельной суммы.

Аналогично задаче 5 количество вводимых элементов последовательности неизвестно. В нижеприведенной программе предельная сумма заносят в переменную SP, а элемент последовательности в переменную А. В теле цикла мы накапливаем число введенных элементов последовательности в переменной i (i:= i + 1), а их сумму — в переменной S (S:= S + а). Так как суммирование должно выполниться хотя бы один раз, естественно использовать цикл с постусловием.

Program SUMMA3;

{ Нахождение минимального числа элементов последовательности, сумма которых превышает значение предельной суммы }

Var

SP: Integer; { предельная сумма }

S: Integer; { сумма }

i: Integer; { число введенных элементов }

а: Integer; { текущий вводимый элемент }

Begin

S:=0;

i:=0;

Writeln('Введите предельную сумму: ');

Readln(SP):

Repeat

Write('Введите элемент: ');

Readln(a).

S:=S + a,

I:=I+1;

Until S > SP; { условие конца цикла }

Writeln('Число элементов равно ', i:6);

End.

3.задание

Составить алгоритм с ветвлениями и программу для решения задачи.

Составить алгоритмы и программы для каждой из разновидностей циклов.

Варианты заданий

1. Найти минимальное из двух чисел.

2. Найти минимальное из трех чисел.

3. Определить принадлежит ли число Х отрезку [ а; b ].

4. Найти минимум функции на отрезке [ а; b ].

5. Найти значение функции

6. Даны две точки А(x1, y1) и B(x2, y2). Определить которая из точек находится ближе к началу координат.

7. Определить правильность даты, введенной с клавиатуры (число – от 1 до 31, месяц - от 1 до 12). Если введены некорректные данные, то сообщить об этом.

8. Даны три числа a, b, c. Определить, какое из них равно d. Если ни одно не равно d, то найти max (d-a, d-b, d-c).

9. Дано натуральное число n. Вычислить:

10. Дано натуральное число N. Вычислить произведение первых N сомножителей. .

11. Вычислить значения функции F(x) на отрезке [ a,b ] с шагом h. Результат представить в виде таблицы, первый столбец которой – значения аргумента, второй – соответствующие значения функции. F(x) = x – sin x.

 

 




Поделиться с друзьями:


Дата добавления: 2014-12-17; Просмотров: 4429; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.