Линейные и разветвленные алгоритмы. (Лекция 6) презентация

Содержание

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ Программы бывают линейными, разветвленными, циклическими и сложными. Большинство программ являются сложными. Любую программу можно разбить на линейные, разветвленные и циклические фрагменты.

Слайд 1
ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ

Лекция № 6


Слайд 2

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Программы бывают линейными, разветвленными, циклическими и сложными. Большинство

программ являются сложными.

Любую программу можно разбить на линейные, разветвленные и циклические фрагменты.

Наиболее простыми являются линейные программы или линейные фрагменты сложных программ.

Слайд 3

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Линейные алгоритмы
Линейными называются программы, в которых операторы выполняются

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

Слайд 4

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Основные математические функции языка C++
Заголовочный файл, необходимый для

работы этих функций:
или

Слайд 5

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.1. Составить программу для вычисления объема V

и площади поверхности S полого шара по заданным внешнему и внутреннему радиусам R и r, если известно, что S = 4π(R2 + r2), V = 4/3π(R3 - г3).

#include
using namespace std;
#include
const double Pi = 3.1415926; // опредепение числа π
int main()
{ double S,V, R, r;
cout << "Введите внешний радиус";
cin >> R;
cout << "Введите внутренний радиус ";
cin >> r;
S = 4Pi(R*R - r*r);
V = 4.0/3*Pi*(pow(R,3)-pow(r,3));
cout << "S = " S << endl;
cout << "V = " << V << endl;
return 0; }

Слайд 6

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.2. Ввести координаты точек (xl, yl) и

(х2, у2). Определить расстояние между этими точками.

#include
using namespace std;
#include
#include
int main() {int x1,x2,y1,y2;
double dist;
cout << "Введите х1 ->";
cin >> x1;
cout << "Введите х2 ->";
cin >> x2;
cout << "Введите у1 ->";
cin >> y1;
cout << "Введите у2 ->";
Cin >> у2;
dist = sqrt(pow((x1-x2),2)+pow((y1-y2),2));
cout << "Расстояние равно " << dist << endl;
getch(); // подключается с помощью заголовочного файла conio.h, останавливает выполнение программы до нажатия любой клавиши return 0;
}

Слайд 7

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.3. Поменять местами значения переменных х и

у.
#include using namespace std; #include #include int main() {int x, y, wrk; // wrk - рабочая переменная
cout << "Введите х и у ->";
cin >> x >> у);
cout << "x = " << x << " у = " << у << endl;
wrk = x; // запомнить в wrk значение переменной х
x = у; // поместить в х значение у
у = wrk; // поместить в у значение х, хранящееся в wrk
cout << "x = " << х << " у = " << у << endl;
getch();
return 0; }

Слайд 8

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Помимо потоковых операций ввода-вывода cin и cout часто

используются функции, применяемые в языке С: printf() и scanf(), которые предназначены для реализации форматного вывода и ввода данных.

Функция printf() имеет следующий синтаксис:
printf ("управляющая_строка", [список_аргументов])

Список аргументов - это последовательность констант, переменных или выражений, значения которых выводятся на экран дисплея в соответствии с форматом управляющей строки.
Список аргументов в функции printf() может отсутствовать.


Слайд 9

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Управляющая строка содержит объекты трех типов:

обычные символы,

выводимые на экран без изменений;

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

управляющие символьные константы.

Слайд 10

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Каждая спецификация преобразования начинается с символа % и

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

знак минуса (-), указывающий на то, что выводимый текст выравнивается по левому краю, по умолчанию выравнивание происходит по правому краю;
строка цифр, задающая минимальный размер поля вывода;
точка, являющаяся разделителем;
строка цифр, задающая точность вывода;
символ 1, указывающий на то, что соответствующий аргумент имеет тип long.

Слайд 11

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Символ преобразования может быть следующим:

d - аргумент

преобразуется в десятичное представление;
о - аргумент преобразуется в восьмеричное представление;
х - аргумент преобразуется в шестнадцатеричное представление;
с - значением аргумента является символ;
s - значением аргумента является строка символов;
е - значением аргумента является величина типа float или double в экспоненциальной форме записи;
f - значением аргумента является величина типа float или double в форме записи с десятичной точкой;
g - один из форматов f или е;
u - значением аргумента является целое беззнаковое число;
р - значением аргумента является указатель (адрес).

Таким образом, «управляющая_строка» определяет количество и тип аргументов

Слайд 12

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Среди управляющих символов наиболее часто используются следующие:

\а -

кратковременный звуковой сигнал;
\n - перевод строки;
\t - горизонтальная табуляция;
\b - возврат курсора на один шаг назад;
\r - возврат каретки.

Слайд 13

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Функция scanf описывается аналогично функции printf:
scanf ("управляющая_строка",

[список_аргументов]);
но список аргументов здесь является обязательным и не может отсутствовать.

Аргументы функции scanf() должны быть указателями на соответствующие значения, для этого перед именем переменной записывается символ &. Управляющая строка содержит спецификации преобразования и используется для определения количества и типов аргументов, аналогично функции printf().

Слайд 14

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.4:
printf ("i=%d,\n j=%d, a=%6.2f.\n", i, j, a);

Если

i=1234, j=127, a=86.531, то на экране увидим:

i =1234,
j =127, а = 86.53.

В управляющей строке допустимо использование символов заполнения, по умолчанию в качестве символа заполнения применяется пробел.
printf ("i=%00d,\n j=%d,a=%6.2f.\n",i,j,a);
Теперь значение i выглядит так:
i =001234,

scant ("%d %f %c %s", &i,&a,&ch,r);
Здесь r - строка символов, имя которой само является указателем, поэтому перед ней знак амперсанда (&) не ставится.


Слайд 15

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Если входные данные при вводе с клавиатуры разделяются

разделителями, например запятыми, то и в управляющей строке спецификации преобразования должны быть разделены такими же разделителями. Перепишем пример 3.1 для случая использования операций printf() и scanf().

Пример 3.5:
#include // подключение заголовочных файлов
#include
#define Pi 3.1415926 // определение символической константы с этого момента и на протяжении всей программы Pi определена как 3.1415926
void main() {double S,V;
float R,r;
printf("BBeдите через запятую внешний и внутренний радиусы R и г:");
scanf("%t ,%f", &R,&r);
printf("S=%g,V=%t\n\S=4 * Pi * (R * R-r * r), V=4/3 * Pi * (R * R * R-r * r * r));
}

Слайд 16

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Разветвленные алгоритмы
Разветвленные алгоритмы предусматривают выбор маршрута выполнения программы

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

if

if - else

switch.

Слайд 17

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Синтаксис оператора if имеет вид:
if (выражение) оператор;
Если

оператор, выполняемый при истинности условия выражения, единственный или если таких операторов несколько:
if (выражение) {оператор1;
оператор2;

onepaтopN;
}

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


Слайд 18

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Схема алгоритма оператора if
Выражение
Оператор
или
блок операторов


Слайд 19

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
При необходимости сравнить выражение с некоторым значением следует

использовать операции отношений в виде: if (выражение = = значение) оператор;
или
if (выражение!=значение) оператор;
или
if (выражение > значение) оператор;
или
if (выражение < значение) оператор;

Нельзя писать if (выражение =значение) оператор;
Это одна из наиболее распространенных и труднообнаруживаемых ошибок.
Результатом такого использования операции присваивания «=» будет сравнение выражения со значением с последующим присвоением выражению значения, с которым оно сравнивалось.

Слайд 20

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.6. Использование оператора if для определения абсолютной

величины введенного с клавиатуры целого значения.
#include
using namespace std;
int main() {
int dig;
cout << "Введите число:";
cin >> dig;
if (dig < 0) dig = -dig;
cout << dig << endl;
return 0;
}

Выражение, служащее условием, заключается в круглые скобки.

Слайд 21

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.7. По номеру у > 0 некоторого

года определить с - номер его столетия. Учесть, что, например, XXI в. начинается с 2001 г., а не с 2000-го.
#include
using namespace std;
int main() {
int dig;
cout << "Введите год:";
cin >> у;
с = у/100;
if (y%100!=0) c+=1;
cout << "Этот год принадлежит к веку " << с << endl;
return 0;
}

Слайд 22

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Оператор if- else
Оператор if может иметь две ветви,

одна из которых является альтернативной. Синтаксис оператора if - else имеет вид:
if (выражение) оператор1;
else оператор2;

если после if и else находится по одному оператору, или
if (выражение) {оператор-!;
оператор2;}
else {операторЗ;
оператор4;},
если после if и else находится блок операторов, т. е. два или больше оператора, заключенные в фигурные скобки. Точка с запятой после фигурной скобки, закрывающей блок операторов, не ставится.

Слайд 23

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Схема алгоритма оператор if - else


Слайд 24

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Вложенные ветвления
В качестве внутренних операторов оператора if могут

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

if (выражение1) оператор1;
else if (выражение2) оператор2;
else if (выражениеЗ) операторЗ;
else if (выражениеN) операторN;
else // необязательная часть
оператор_по_умолчанию;

Слайд 25

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Вложенные ветвления
В качестве внутренних операторов оператора if могут

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

if (x<=0){ y=e^x+x; cout<<“y=e^x+x”<else if (x>0&&x<=7) {tg(3*x); cout<<“y=tg3*x”<else if (x>7) (y=x-6; cout<<“y=x-6”<

Слайд 26

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
В подобных конструкциях часть else связывается с ближайшим

предыдущим if в том же блоке, не имеющем части else. Последний оператор else, за которым следует оператор_по_умолчанию;, не является обязательным. Формально уровней вложенности операторов if может быть много, но реально при количестве таких вложенных конструкций, большем чем 4-5, программа становится трудноотлаживаемой.

Пример 3.8. :
#include
using namespace std;
int main () {int value;
cout << "Input value from 1 to 10:";
cin >> value;
if (value >= 1)
if (value > 10) cout >> "Error: value >10" << endl;
else cout << "Error: value <1“ << endl;
return 0; }
/* Поскольку else связывается с ближайшим if, эта программа будет работать неправильно */.


Слайд 27

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
#include
using namespace std;
int main ()
{int

value;
cout << "Input value from 1 to 10: ";
cin >> value;
if (value >= 1)
{
if (value > 10) cout << "Error: value >10" << endl;
}
else cout << "Error: value <1" << endl;
return 0;
}
/* Фигурные скобки скорректировали поведение программы. Теперь все работает так, как было задумано */.


Слайд 28

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Приведенный пример наглядно демонстрирует, что во избежание неоднозначного

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

Вычислить d - max(a,b,c); - максимальное из трех введенных с клавиатуры чисел.
#include
using namespace std;
int main() { int a, b, c, d;
cout << "a > ";
cin >> a;
cout >> "b > ";
cin >> a;
cout << "c > ";
cin >> a;
if (a>b && a>c) d = a;
else if (b>c) d = b;
else d = c;
cout << "max = " << d << endl;
return 0; }


Слайд 29

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Условная операция
Условная операция является трехоперандной и имеет синтаксис:
переменная

= выражение? значение1: значение2;
Такая запись является аналогом условного оператора
if (выражение) переменная = значение1;
else переменная = значение2;
Условный оператор и условное выражение в результате компиляции формируют практически идентичный код. Разница состоит в том, что в случае условного оператора обращение к переменной происходит дваж­ды; следовательно, дважды вычисляется ее адрес, а в случае условной операции - лишь один раз. С другой стороны, с точки зрения понимания программы условный оператор намного лучше.

Слайд 30Пример 3.10:
if (test = = ‘Y’)
TestValue = 100;

else
TestValue = 0;
что полностью эквивалентно:
TestValue = (test = = ‘Y’)?100:0;

Пример 3.11:
if (a>b) max = а;
else max = b;
эквивалентно: max = (a>b)?a:b;



ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ


Слайд 31

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Оператор множественного выбора
Если в программе необходимо выбрать один

из многочисленных вариантов, то вместо вложенных конструкций if - else более целесообразно применять оператор-переключатель switch, иначе называемый оператором множественного выбора.
Его синтаксис:
switch (выражение)
{case значение1: оператор1;
break;
case значение2: оператор2;
break;
case значение3: оператор3;
break; default: // необязательный компонент
оператор_по_несравнению; // если не было ни одного совпадения.
} //end switch (выражение)

Слайд 32

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Фигурные скобки, ограничивающие тело оператора switch, являются обязательными.

Здесь для выполнения выбирается тот вариант (группа операторов), значение которого совпадает со значением выражения.
Оператор в каждом блоке выбора case может быть отдельным оператором или блоком операторов.
Оператор break в каждом блоке выбора case осуществляет выход из оператора switch.

Слайд 33

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Пример 3.12. Ввести с клавиатуры символ. Если он

является символом арифметической операции, то указать, какой именно, и привести соответствующий пример. Если не является, то выдать сообщение об этом.
#include
using namespace std;
int main() { char sym;
int op1, op2, res;
сout << "Введите символ арифметической операции "
cin >> sym;
switch (sym) { case'+': cout << "Сложение << endl;
cout << "1 слагаемое:";
cin >> op1;
cout << "2 слагаемое:";
cin << op2;
res = op1 + op2;
cout << op1 << '+‘ << op2 << '=‘ << res << endl;
break;

Слайд 34

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
case '-': cout


cin << op1;
cout << "Вычитаемое:";
cin >> op2;
res = op1 - op2;
cout << op1 << '-' << op2 << '=' << res << endl;
break; case '*': cout << "Умножение" << endl;
cout << "Множимое:";
cin >> op1;
cout << "Множитель:";
cin >> op2;
res = op1 * op2;
cout << op1 << '*‘ << op2 << '=‘ << res << endl; break;

Слайд 35

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
case '/': cout

"Делимое:";
cin >> op1;
cout << "Делитель:";
cin >> op2;
if (op2 != 0)
{res = ор1 / ор2;
cout << ор1 << '/' << ор2 << '=‘ << res << endl;
} else cout << "Деление на 0 запрещено " << endl;
break; default: cout << "Неарифметическая операция" << endl; } // end switch (sym)
return 0;
}


Слайд 36

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Контрольные вопросы

Что такое линейные и разветвленные программы?
В чем

заключается понятие форматного вывода данных?
Как осуществляется ввод данных?
Каковы формы условного оператора?
Каким образом строится условное выражение?
Какую структуру имеет оператор-переключатель?
С какой целью используется оператор разрыва break?
Что происходит, если забыть поставить break?
Определить значение переменной w после выполнения следующих операторов:
w= 100; u = 30;
switch (u/7)
{ case 0: w = 0; break;
case 1: w = 1; break;
case 2: w = 2; break;
case 3: w = 3; break;
default: w = 7; }
10. Определить значение переменной m после выполнения следующих операторов:
т = 5;
if (x>0) {if (y>0) m = 10;} else m = 20;
а) при х = -5, у = 7;
б) при х = 2, у = -3;
в) при х = 9, у = 3.

Слайд 37

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Контрольные вопросы

Что такое линейные и разветвленные программы?
В чем

заключается понятие форматного вывода данных?
Как осуществляется ввод данных?
Каковы формы условного оператора?
Каким образом строится условное выражение?
Какую структуру имеет оператор-переключатель?
С какой целью используется оператор разрыва break?
Что происходит, если забыть поставить break?
Определить значение переменной w после выполнения следующих операторов:
w= 100; u = 30;
switch (u/7)
{ case 0: w = 0; break;
case 1: w = 1; break;
case 2: w = 2; break;
case 3: w = 3; break;
default: w = 7; }
10. Определить значение переменной m после выполнения следующих операторов:
т = 5;
if (x>0) {if (y>0) m = 10;} else m = 20;
а) при х = -5, у = 7;
б) при х = 2, у = -3;
в) при х = 9, у = 3.

Слайд 38

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Практические задания
Вычислить S=A+B+C+D, если хотя бы одно из

чисел А, В, С, D равно нулю, и P=A*B*O*D, если все числа отличны от нуля.
Составить программу, которая при вводе оценки в виде цифры выводит оценку в буквенном виде: 5 - отлично, 4 - хорошо, 3 - удовлетворительно, 2 – неудовлетворительно.
Составить программу, которая по введенному номеру месяца выводит его название и время года.
Составить программу, которая при вводе символа определяет, скобка ли это, и указывает, какая именно, например фигурная открывающая ({), квадратная закрывающая (]).
Составить программу, которая при вводе символа выводит либо текст «цифра», если введена цифра, либо текст «латинская буква», если введена латинская буква, либо текст «не цифра и не латинская буква» в остальных случаях.
Ввести с клавиатуры координаты точек (xl, yl) и (х2, у2) и определить расстояние между этими точками.
Поменять местами значения переменных х и у.


Слайд 39

ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ
Значения переменных а, Ь, с поменять местами так,

чтобы оказалось а>Ь>с.
Определить: у = max(min(a,b), min(c,d)).
Определить: у = min(a,b,c).
Переменной k присвоить номер четверти координатной плоскости, в которой находится точка с координатами, введенными с клавиатуры. Отдельно учесть случаи, когда точка попадает на одну из координатных осей или в начало координат.
Написать программу преобразования прописных латинских букв в строчные. При написании программы использовать условное выражение.
Написать программу решения квадратного уравнения с произвольными коэффициентами, которые вводятся с клавиатуры.
Определить d = max(a, b, с), если значения переменных a, b и с введены с клавиатуры.

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика