1.08k likes | 1.33k Views
Программирование. Часть 3 Введение в процедурное программирование Управляющие инструкции. 4. Процедурное программирование 4.1. Парадигмы программирования. Парадигма программирования — совокупность теорий, стандартов и методов, используемых при разработке программ.
E N D
Программирование Часть 3 Введение в процедурное программирование Управляющие инструкции
4. Процедурное программирование4.1. Парадигмы программирования • Парадигма программирования — совокупность теорий, стандартов и методов, используемых при разработке программ. • Наиболее известные парадигмы программирования: • Процедурное программирование - парадигма программирования, отражающая традиционную архитектуру компьютера - архитектуру Фон Неймана. В соответствии с этой парадигмой программа рассматривается как последовательность инструкций, задающих процедуру решения задачи. Выполнение программы сводится к последовательному выполнению инструкций с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. • Объектно-ориентированное программирование - парадигма программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
4. Процедурное программирование4.2. Принципы структурного программирования • Структурное программирование — методология разработки программного обеспечения, предложенная в 70-х года XX века Эдсгером Дейкстрой, разработанная и дополненная Никласом Виртом, развитие парадигмы процедурного программирования. • Цели структурного программирования: • Повышение эффективности и надежности программ (разбиение на модули с дальнейшей независимой оптимизацией модулей, простота тестирования и отладки) • Повышение производительности труда программиста (обеспечение дисциплины программирования, улучшение читабельности программ, повышение скорости программирования и возможности коллективной разработки программ)
4. Структурное программирование 4.2. Принципы структурного программирования • Использование ограниченного числа управляющих конструкций (структур): • следование (последовательное исполнение) – однократное выполнение инструкцийй в том порядке, в котором они записаны в тексте программы; • ветвление (выбор) – однократное выполнение одной из двух или более инструкций, в зависимости от выполнения некоторого заданного условия; • повторение (цикл) – многократное исполнение одной и той же инструкции до тех пор, пока выполняется некоторое заданное условие продолжения цикла. • В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения инструкций не предусматривается.
4. Структурное программирование 4.2. Принципы структурного программирования • Использование ограниченного числа управляющих конструкций (структур): • Алгоритмические конструкции могут иметь только одну точку входа и одну – выхода; • Инструкция goto не используется; • Не допускается излишняя вложенность алгоритмических структур (не более 3-х уровней вложенности инструкции if) • Не используются языковые конструкции с неочевидной семантикой и программистские «трюки»
4. Структурное программирование 4.2. Принципы структурного программирования • Использование подпрограмм (процедур, функций) для структурирования программ • Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) оформляются в виде так называемых подпрограмм (процедур или функций). • При выполнении размещаемой в программе инструкции вызова подпрограммы(функции) выполняется эта подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы. • Каждая подпрограмма реализует только одну логическую функцию • Подпрограмма (функция) имеет одну входную и выходную точку; • Размер подпрограммы не превышает 100 инструкций; • Число других подпрограмм, вызываемых подпрограммой, не должно превышать 7.
4. Структурное программирование 4.2. Принципы структурного программирования • Соблюдение специальных требований к оформлению текстов программ • Каждая функция начинается с комментариев, объясняющих ее назначение, назначение входных и выходных параметров, содержащих перечень и назначение вызываемых ей функций, номер версии и дата последней модификации; • В одной строке записывается не более одной инструкции (если только группа инструкций не выполняет общее действие) • Если для записи одной инструкции требуется больше, чем одна строка, все последующие строки записываются с отступами • Тела инструкций цикла, ветвления, выбора записываются с отступами • Идентификаторы всех объектов программы должны быть смысловыми • Идентификаторы родственных объектов программы должны начинаться с одинакового префикса
4. Структурное программирование 4.2. Принципы структурного программирования • Пошаговая детализация при написании текста программы • На первом шаге описывается общая схема работы в обозримой линейной текстовой форме (т.е. с использованием очень крупных понятий), причем это описание не является полностью формализованным и ориентировано на восприятие его человеком. • На каждом следующем шаге производится уточнение и детализация одного из понятий, использованного (как правило, неформализованно) в каком либо описании, разработанном на одном из предыдущих шагов. • В результате такого шага создается описание выбранного уточняемого понятия либо в терминах языка программирования, либо в такой же форме, что и на первом шаге с использованием новых уточняемых понятий.
4. Структурное программирование 4.2. Принципы структурного программирования • Пошаговая детализация при написании текста программы • Процесс детализации завершается, когда все уточняемые понятия будут выражены в конечном счете на языке программирования. • Последним шагом является получение текста программы на языке программирования путем замены всех вхождений уточняемых понятий заданными их описаниями и выражение всех вхождений конструкций структурного программирования средствами этого языка программирования.
4. Структурное программирование 4.2. Принципы структурного программирования • Разработка программы методом «сверху вниз» • На первом этапе разрабатывается основная программа, в которой вместо каждого связного логического фрагмента текста вставляется вызов функции, которая будет выполнять этот фрагмент. • Вместо настоящих, работающих функций, к программе подключаются специально написанные функции - «заглушки», которые ничего не делают. • Полученная программа проверяется и отлаживается. • После того, как программист убедится, что функциивызываются в правильной последовательности (то есть общая структура программы верна), функции-заглушки последовательно заменяются на реально работающие, причём разработка каждой функции ведётся тем же методом, что и основной программы.
4. Структурное программирование 4.2. Принципы структурного программирования • Разработка программы методом «сверху вниз» • Разработка заканчивается тогда, когда не останется ни одной функции - «заглушки», которая не была бы удалена. • Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. • При сопровождении и внесении изменений в программу выясняется, в какие именно функции нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними.
4. Структурное программирование 4.3. Базовые управляющие структуры Компоненты конструкций структурного программирования true P S false • Условие (предикат): • выражение, результатом которого может быть true или false • В зависимости от значения выражения в программе может быть выполнена передача управления тому или иному узлу обработки • Действие • простая инструкция используемого языка программирования (инструкция присваивания, ввода, вывода, обращения к процедуре и др.), • фрагмент программы, являющийся композицией основных конструкций структурного программирования. • Каждая из этих конструкций имеет по управлению только один вход и один выход. Тем самым, и обобщенный оператор имеет только один вход и один выход.
4. Структурное программирование 4.3. Базовые управляющие структуры Следование (последовательное исполнение) Действие 1 Действие 2 S1 S2
4. Структурное программирование 4.3. Базовые управляющие структуры Ветвление (выбор) Решение [false] [true] S1 S2
4. Структурное программирование 4.3. Базовые управляющие структуры Повторение Слияние Решение [true] S [false]
4. Структурное программирование 4.3. Базовые управляющие структуры Диаграмма деятельности — диаграмма, на которой показано разложение некоторой деятельности на её составные части. Правила построения структурированных программ
4. Структурное программирование 4.3. Базовые управляющие структуры Вложенные структуры Правило 2 Состояние действия
4. Структурное программирование 4.3. Базовые управляющие структуры Вложенные структуры Правило 2 Правило 3 Состояние действия Состояние действия
4. Структурное программирование 4.3. Базовые управляющие структуры Вложенные структуры Правило 2 Правило 3 Состояние действия Состояние действия Состояние действия Состояние действия
4. Структурное программирование 4.3. Базовые управляющие структуры Вложенные структуры Состояние действия Состояние действия Состояние действия Состояние действия Состояние действия
4. Структурное программирование 4.4. Ветвления Условная инструкция if…else if(Условие) инструкция1; else инструкция2; [false] [true] S1 S2
4. Структурное программирование 4.3. Ветвления Пример использования инструкции if…else int main() // determines is the entered number greater than 100 or not { int x; cout << "\nEnter a number: "; cin >> x; if( x > 100 ) cout << "That number is greater than 100\n"; else cout << "That number is not greater than 100\n"; return 0; }
4. Структурное программирование 4.3. Базовые управляющие структуры Инструкция if [true] if(Условие) инструкция; [false] S1
4. Структурное программирование 4.4. Ветвления Пример использования инструкции if int main() // determines is the entered number greater than 100 { int x; cout << "\nEnter a number: "; cin >> x; if( x > 100 ) cout << "That number is greater than 100\n"; return 0; }
4. Структурное программирование 4.3. Ветвления Несколько инструкций в теле if #include <stdafx.h> #include <time.h> using namespace std; int main()//Guess a magic number { unsigned int guess = 0; unsigned int magic = time (NULL); //returns number of sec. from 01/01/1970 magic &= 0x00000007; // generates pseudo random in [0-7] cout << "Guess the magic number: "; cin >> guess; if(guess == magic) { cout << endl << "** Right ** magic " ; cout << magic << "==" << guess << " (guess}"; } getch (); return 0; }
4. Структурное программирование 4.3. Ветвления Несколько инструкций в теле if…else … int main() // Guess a magic number (with message if guessing wasn’t success) { … if (guess == magic) { cout << endl << "** Right ** magic " ; cout << magic << "==" << guess << " (guess}"; } else { cout << endl << "** Wrong ** magic "; cout << magic << “!=" << guess << " (guess}"; } … }
4. Структурное программирование 4.3. Ветвления Вложенные инструкции if…else … int main() // more complicated program to guess a magic number { … if (guess == magic) { cout << endl << "** Right ** magic " ; cout << magic << "==" << guess << " (guess}"; } else { cout << endl << "** Wrong ** "; if (guess > magic) cout << " too high " ; else cout << " too low " ; } … }
4. Структурное программирование 4.3. Ветвления Вложенные инструкции:соответствие if и else … int main() { … if (i) { if (j) инструкция 1; if (k) инструкция 2; else инструкция 3; } else инструкция 4; … }
4. Структурное программирование 4.3. Ветвления Вложенные инструкции: соответствие if и else … int main() { … if (i) { if (j) инструкция 1; if (k) инструкция 2; else инструкция 3; } else инструкция 4; … } Во вложенных условных инструкциях раздел else всегда связан с ближайшим предшествующим инструкцияом if,находящимся с ним в одном блоке и не связанном с другим разделом else.
4. Структурное программирование 4.3. Ветвления Цепочка инструкций if-else … int main() { … if (Выражение) инструкция; else if (Выражение) инструкция; else if (Выражение) инструкция; … else инструкция; … }
4. Структурное программирование 4.3. Ветвления Цепочка инструкцияов if-else (другой формат записи) … int main() { … if (Выражение) инструкция; else if (Выражение) инструкция; else if (Выражение) инструкция; … else инструкция; … }
4. Структурное программирование 4.3. Ветвления Цепочка инструкцияов if-else … int main() // another more complicated program to guess a magic number { … if (guess == magic) { cout << endl << "** Right ** magic " ; cout << magic << "==" << guess << " (guess}"; } elseif (guess > magic) cout << “** Wrong ** too high " ; else cout << “** Wrong ** too low " ; } … }
4. Структурное программирование 4.3. Ветвления Пример: анализ результатов тестирования if (grade >=90) cout << “excellent”; else if (grade >=70) cout << “very good”; else if (grade >=50) cout << “good”; else if (grade >=15) cout << “poor”; else cout << “very bad”; if (grade>=90) cout << “excellent”; if (grade>=70 && grade<90) cout << “very good”; if (grade>=50 && grade<70 ) cout << “good”; if (grade >=15 && grade<50) cout << “poor”; if (grade<15) cout << “very bad”;
4. Структурное программирование 4.3. Ветвления Демонстрация многовариантности использования if … else Задача. Даны три вещественных числа a, b, c. Записать на языке С++ алгоритм нахождения наименьшего из этих чисел
4. Структурное программирование 4.3. Ветвления Демонстрация многовариантности использования if … else Алгоритм 1 (используем цепочку if –then-else) if ((a <= b) && (a<=c)) min = a; else if ((b <= c) && (b<=a)) min = b; else if ((c<=b) && (c<=a))min = c; if ((a<=b) && (a<=c)) min = a; else if ((b<=c) && (b<=a))min = b; else min=c; if ((a<=b) && (a<=c)) min = a; else if (b<=c) min = b; else min = c;
4. Структурное программирование 4.3. Ветвления Демонстрация многовариантности использования if … else Алгоритм 2 (простой и надежный) min = a; if (b < min) min = b; if (c < min) min = c; Алгоритм 3(вложенные if… else) if (a <= b) if (a <= c) min = a; else min = c; else if (b <=c ) min = b; else min = c;
4. Структурное программирование 4.3. Ветвления Демонстрация многовариантности использования if … else Алгоритм 1 (используем цепочку if –then-else) if (a<=b) and (a<=c) then min = a; else if (b<=c) then min = b; else min = c; Алгоритм 2 (простой и надежный) min = a; if (b < min) min = b; if (c < min) min = c; ? Алгоритм 3(вложенные if… else) if (a <= b) if (a <= c) min = a; else min = c; else if (b <=c ) min = b; else min = c;
4. Структурное программирование 4.3. Ветвления Простейший анализ вычислительной сложности алгоритмов
4. Структурное программирование 4.3. Ветвления Простейший анализ вычислительной сложности алгоритмов Примерное время выполнения операций (P-200), 10-9 с:
4. Структурное программирование 4.3. Ветвления Результат: законченная программа вычисления min (a,b,c) int main() // Calculates min value of a,b,c { float a=0, b=0,c=0, min=0; cout << "Enter a, b, c divided by blanks:"; cin >> a >> b >> c; if (a <= b) if (a <= c) min = a; else min = c; else if (b <=c ) min = b; else min = c; cout << endl << "The minimum value is " << min; getch (); return 0; }
4. Структурное программирование 4.3. Ветвления Тернарный условный оператор ? Выражение1?Выражение2:Выражение3; вместо x = 10; if (x > 9) y = 100; else y = 200; можно x = 10; y = x > 9 ? 100 : 200; [Выражение 1 true] [Выражение 1 false] Вернуть значение Выражения 2 Вернуть значение Выражения 3
4. Структурное программирование 4.3. Ветвления Тернарный условный оператор ? #include <stdafx.h> using namespace std; int main() //Calculates square of float and setsit's sign to the result { float a = 0, sqr = 0; cout << "Enter a:"; cin >> a; sqr = a < 0 ? -a*a : a*a; cout << endl << "The result is " << sqr; getch (); return 0; }
4. Структурное программирование 4.3. Ветвления Полученное ранее решение задачи min (a,b,c) с помощью if…else int main() // Calculates min value of a,b,c { float a=0, b=0,c=0, min=0; cout << "Enter a, b, c divided by blanks:"; cin >> a >> b >> c; if (a <= b) if (a <= c) min = a; else min = c; else if (b <=c ) min = b; else min = c; cout << endl << "The minimum value is " << min; getch (); return 0; }
4. Структурное программирование 4.3. Ветвления Решение задачи min (a,b,c) с помощью условного оператора int main() // Calculates min value of a,b,cusing conditional operator { float a=0, b=0,c=0, min=0; cout << "Enter a, b, c divided by blanks:"; cin >> a >> b >> c; min = a<=b ? (a<=c ? a : c) : (b<=c ? b : c); cout << endl << "The minimum value is " << min; getch (); return 0; }
4. Структурное программирование 4.3. Ветвления Вызовы функций из условного оператора #include <stdafx.h> using namespace std; int f1(int n); int f2(); int f3 (); int main() // Demonstrates functions' calls by the conditional operator { int t=0; cout << "Enter a number: "; cin >> t; // prints proper message: t ? f1(t) + f2() : f3 ();// int t as boolean, ignore values to be return getch (); return 0; }
4. Структурное программирование 4.3. Ветвления Вызовы функций из тернарного условного оператора int f1(int n) // first message if non-zero number entered { cout << endl << n; return 0; } int f2() // second message if non-zero number entered { cout <<" entered.\n"; return 0; } int f3() // message if zero entered { cout <<"\nZero entered.\n"; return 0; }
4. Структурное программирование 4.3. Ветвления Инструкция switch switch (Выражение) { case константа1: последовательность инструкций; break; case константа2: последовательность инструкций; break; case константа3: последовательность инструкций; break; . . . default последовательность инструкций; Case 1 Case 2 Case n [true] Действия для 1 break [false] [true] Действия для 2 break [false] [true] Действия для n break [false] Default: действия по умолчанию
4. Структурное программирование 4.3. Ветвления Инструкция switch: пример функции «простейшее меню» void menu() { cout <<"1. Check Spelling\n” << "2. Correct Spelling Errors\n” <<"3. Display Errors\n”; cout <<"Strike Any Other Key to Skip\n” << " Enter your choice: “; char ch = getchar(); // read the selection from the keyboard switch (ch) { case '1': check_spelling(); break; case '2': correct_errors(); break; case '3': display_errors(); break; default : printf("No option selected"); } }
4. Структурное программирование 4.3. Ветвления Инструкция switch: опускаем break // Process a valueof i void inp_handler(int i) { int flag=-1; switch(i) { case 1: // These cases have common case 2: // statement sequences. case 3: flag = 0; break; case 4: flag = 1; case 5: error(flag); break; default: process(i); } } Рассмотрим возможные входные значения i
4. Структурное программирование 4.3. Ветвления Инструкция switch: опускаем break // Process a value of i void inp_handler(int i) { int flag = -1; switch(i) { case 1: // These cases have common case 2: // statement sequences. case 3: flag = 0; break; case 4: flag = 1; case 5: error(flag); break; default: process(i); } } Если i == 1 или i == 2 или i == 3