
seminar_1-6.ppt
- Количество слайдов: 35
Основы информатики Семинар 6
Проверочная работа 4 На листе с ответом обязательно указать: • Дата выполнения: • Группа: • Фамилия Имя:
Проверочная работа 4. Задание 1 Даны два целых числа: unsigned int ui 1 = 3, ui 2 = 7; Каков результат следующих выражений? Поясните в чем отличие. 1 вар: ui 1 & ui 2 ; ui 1 && ui 2 2 вар: uil | ui 2; uil || ui 2
Проверочная работа № 4. Задание 2 Найдите и исправьте ошибки в следующих примерах: 1 вар if ( i != i 12 ) i = i 12 else i = i 12 = 0; 2 вар if ( i == 0 ) else i = 0;
Проверочная работа № 4. Задание 3 Исправьте ошибки в примерах: 1 вар 2 вар switch ( i ) { case 'a': a 1++; case 1, 3, 5, 7, 9: case 'e': e 1++; t++; default: t++; break; } case 2, 4, 6, 8, 10: v++; break; }
Проверочная работа № 4. 0 int main () 1 { Задание 4 2 string month; (общее для 1 и 2 вар) 3 string days; 4 cout << "Enter month name: "; 5 cin >> month; Изучите код программы. 6 SWITCH (month) Есть ли в программе 7 { 8 CASE("february"): days = "28 or 29"; break; ошибки? Перечислите какие (укажите номер строки и 9 CASE("april"): какая ошибка, а так же 10 CASE("june"): 11 CASE("september"): правильный вариант) 12 CASE("november"): days = "30"; break; 13 CASE("january"): 14 CASE("march"): 15 CASE("may"): 16 CASE("july"): 17 CASE("august"): 18 CASE("october"): 19 CASE("december"): days = "31"; break; 20 DEFAULT: days = "? "; break; 21 } 22 Cout << month << " has " << days << " days. " << endl; 23 }
А КАК ЖЕ ПРАВИЛЬНО…
Задание 1 Даны два целых числа: unsigned int ui 1 = 3, ui 2 = 7; Каков результат следующих выражений? Поясните в чем отличие. 1 вар: ui 1 & ui 2 ; ui 1 && ui 2 2 вар: uil | ui 2; uil || ui 2
Задание 1 ui 1 & ui 2 ; побитовое И uil | ui 2; побитовое ИЛИ • Поразрядные операции (&, |) применяются только к целочисленным операндам и работают с их двоичными представлениями. При выполнении операций операнды сопоставляются побитово (первый бит первого операнда с первым битом второго, второй бит первого операнда со вторым битом второго, и т д. ). 6 & 5 = 4 6 | 5 = 7
Задание 1 ui 1 && ui 2; логическое И uil || ui 2; логическое ИЛИ Результатом логической операции является true или false. Результат операции логическое И имеет значение true только если оба операнда имеют значение true. Результат операции логическое ИЛИ имеет значение true, если хотя бы один из операндов имеет значение true. Логические операции выполняются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.
Задание 2 Найдите и исправьте ошибки в следующих примерах: 1 вар if ( i != i 12 ) i = i 12 else i = i 12 = 0; 2 вар if ( i == 0 ) else i = 0;
Задание 2 Найдите и исправьте ошибки в следующих примерах: 1 вар if ( i != i 12 ) i = i 12 ; else i = i 12 = 0; 2 вар if ( i == 0 ) else i = 0; алгоритмически надо переделать выражение так - если i!=0 то i=0, но будет работать и так
Задание 3 Исправьте ошибки в примерах: 1 вар switch ( i ) { 2 вар case 'a': a 1++; switch ( i ) { case 'e': e 1++; case 1, 3, 5, 7, 9: default: t++; } break; case 2, 4, 6, 8, 10: v++; break; }
Задание 3 Исправьте ошибки в примерах: 1 вар switch ( i ) { case 'a': { a 1++; break; } case 'e': {e 1++; break; } default: {t++; break; } 2 вар switch ( i ) { } case 1: { t++; break; } … case 10: {v++; break; } }
Проверочная работа № 3. 0 int main () 1 { Задание 4 2 string month; (общее для 1 и 2 вар) 3 string days; 4 cout << "Enter month name: "; 5 cin >> month; Изучите код программы. 6 SWITCH (month) Есть ли в программе 7 { 8 CASE("february"): days = "28 or 29"; break; ошибки? Перечислите какие (укажите номер строки и 9 CASE("april"): какая ошибка, а так же 10 CASE("june"): 11 CASE("september"): правильный вариант) 12 CASE("november"): days = "30"; break; 13 CASE("january"): 14 CASE("march"): 15 CASE("may"): 16 CASE("july"): 17 CASE("august"): 18 CASE("october"): 19 CASE("december"): days = "31"; break; 20 DEFAULT: days = "? "; break; 21 } 22 Cout << month << " has " << days << " days. " << endl; 23 }
Проверочная работа № 3. 0 int main () 1 { Ошибки 2 string month; - Нет библиотек 3 string days; 4 cout << "Enter month name: "; - Регистр 5 cin >> month; - Нет return 0; 6 SWITCH (month) - Определение типа данных 7 { 8 CASE("february"): days = "28 or 29"; break; Фигурные скобки после case 9 CASE("april"): 10 CASE("june"): 11 CASE("september"): 12 CASE("november"): days = "30"; break; 13 CASE("january"): 14 CASE("march"): 15 CASE("may"): 16 CASE("july"): 17 CASE("august"): 18 CASE("october"): 19 CASE("december"): days = "31"; break; 20 DEFAULT: days = "? "; break; 21 } 22 Cout << month << " has " << days << " days. " << endl; 23 }
Повторение
Вычислить значение функции f 0(x) f 1(x) x 1 f 2(x) x 2 f 4(x) f 3(x) x 3 x 4 18
Алгоритмические структуры: ветвление Алгоритм (вариант 1) : Вычислить значение функции Ввод x + y: =f 0(x) x<=x 1 + y: =f 1(x) – x<=x 2 + y: =f 2(x) – x<x 3 + y: =f 3(x) – x<=x 4 – y=f 4(x) Вывод у 19
Алгоритмические структуры: ветвление Алгоритм (вариант 2) : Вычислить значение функции 1 пуск x 2<x<x 3 Ввод x x<=x 1 y: =f 2(x) + 4 + y: =f 1(x) 1 + x 3<=x<=x y: =f 0(x) x 1<x<=x 2 + x>x 4 y: =f 3(x) + y: =f 4(x) Вывод у стоп 20
Вычислить значение функции Вариант 1 решения задачи достигает цели четыре ветвления в худшем случае и за одно – в оптимальном. При составлении такого алгоритма следует сначала упорядочить точки x 1 … x 4 по возрастанию (или по убыванию). Вариант 2 достигает цели всегда за пять ветвлений, условия могут быть перечислены в произвольном порядке, поэтому многим этот способ кажется проще. Однако алгоритм требует большего количества действий. 21
Реализация конструкции ветвления 1. Условная операция (? : ) операнд_1 ? операнд_2 : операнд_3 max = (b > a)? b : a; //если (b > a), то max = b, иначе max = a; 2. Условный оператор IF используется для разветвления процесса вычислений на два направления, позволяет определить действие, когда условие истинно и альтернативное действие, когда условие ложно. if ( выражение ) оператор_1; [else оператор_2; ] if (a<b) { m = a; } else {m = b; } 3. Оператор множественного выбора switch (переменная) { case /*константное выражение 1/*: { /*группа операторов*/; break; } case /*константное выражение 2*/: { /*группа операторов*/; break; } //. . . default: { /*группа операторов*/; } }
Реализация конструкции ветвления 3. Оператор множественного выбора switch Форма записи оператора множественного выбора switch (/*переменная или выражение*/) { case /*константное выражение 1/*: { /*группа операторов*/; break; } case /*константное выражение 2*/: { /*группа операторов*/; break; } //. . . default: { /*группа операторов*/; } } 1. анализируется переменная или выражение 2. осуществляется переход к той ветви программы, для которой значение переменной или выражения совпадает с указанным константным выражением. 3. выполняется оператор или группа операторов пока не встретиться зарезервированное слово break или закрывающая фигурная скобочка. 4. Если значение переменной или выражения не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default и выполняется оператор или группа операторов данной ветви.
Что будет если f= 5, n=8, t=3 switch( f ) { case 3: n++; case 8: n--; default : t++; } switch( f ) { case 3: n++; break; case 8: n++; break; default : t++; break; }
Выполним задания
Определите, что будет выведено на экран в результате выполнения приведенных ниже фрагментов кода, укажите как более читабельно записать код программы. Нарисуйте блок-схемы примеров. Считайте, что переменные a, b, c объявлены как целочисленные (int) и инициализированы значениями 1, 5 и 10, соответственно. а) if(a > b) a = b + 1; else b = a - 1; cout<<a<<b<<c; г) if(a < 0) a = 10; cout<<a<<b<<c; б) if(5 > b) { a = b + 1; b = a - 1; } else cout<<a<<b<<c; д) if((a < b) || (b > c)) a = b; else b = a; cout<<a<<b<<c; ж) if(c>a) if(c>0) cout<<”$$$”; elsе cout<<”###”; cout<<”@@@”; в) if(a > 0) cout<<”Ok!”; else b = a; cout<<a<<b<<c; е) if((a < b)&&(b > c)) a = b; else b = a; cout<<a<<b<<c; з) if(c>a) if(c>10) cout<<”===”; else cout<< ”<<<”; cout<< ”>>>”);
Задача Необходимо вывести на экран название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и 1 -е число — понедельник. Для решения задачи воспользуемся операцией %, позволяющей 1 #include <stdafx. h> 2 #include <iostream. h> 3 int main () 4 { 5 unsigned int D, R; 6 cout<<"D="; 7 cin>>D; 8 R=? ? ? ; вычислить остаток от деления двух чисел. Программа будет выводить название дня недели в зависимости от заданного нами числа. 9 switch (R) 10 { 11 case ? : cout<<"Monday n"; break; 12 case ? : cout<<"Theusday n"; break; 13 case ? : cout<<"Wednesday n"; break; 14 case ? : cout<<"Thursday n"; break; 15 case ? : cout<<"Friday n"; break; 16 case ? : cout<<"Saturday n"; break; ЗАДАНИЕ 17 case ? : cout<<"Sunday n"; break; Рассказать словами построчно, что записано в 18 } 19 system ("pause"); каждой строке дополнив пропуски обозначенные 20 return 0; знаком вопроса (1 знак ? – 21 } 1 пропущенный символ)
Задача Необходимо вывести на экран название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и 1 -е число — понедельник. ПРАВИЛЬНЫЙ ВАРИАНТ 1 #include "stdafx. h" 2 #include <iostream. h> 3 int main () 4 { 5 unsigned int D, R; 6 cout<<"D="; 7 cin>>D; 8 R=D%7; 9 switch (R) 10 { 11 case 1: cout<<"Monday n"; break; 12 case 2: cout<<"Theusday n"; break; 13 case 3: cout<<"Wednesday n"; break; 14 case 4: cout<<"Thursday n"; break; 15 case 5: cout<<"Friday n"; break; 16 case 6: cout<<"Saturday n"; break; 17 case 0: cout<<"Sunday n"; break; 18 } 19 system ("pause"); 20 return 0; 21 }
Тема занятия: Циклические алгоритмы. Базовые конструкции языка С++: Операторы цикла.
Циклический алгоритм • Обеспечивает многократное выполнение некоторой последовательности действий, которая называется телом цикла. • «Многократно» – не значит «бесконечно» , прекращение циклической последовательности происходит в результате проверки истинности некоторого условия 30
Циклические структуры Используются для организации многократно повторяющихся вычислений. Цикл состоит из • тела цикла, то есть тех операторов, которые выполняются несколько раз, • начальных установок, Типы циклов Проверка условия выполняется на • модификации параметра цикла, • проверки условия продолжения выполнения цикла. каждой итерации - либо до тела цикла - тогда говорят о цикле с предусловием, возможно, что он не выполнится ни разу; - либо после тела цикла - цикл с постусловием, всегда выполняется хотя бы один раз. Переменные, изменяющиеся в теле цикла и используемые при проверке условия продолжения, называются параметрами цикла. Целочисленные параметры цикла, изменяющиеся с постоянным шагом на каждой итерации, называются счетчиками цикла.
Типовые задачи, решаемые с использованием циклов: • Нахождение суммы (произведения, среднего арифметического) элементов некоторой последовательности • Подсчёт количества заданных элементов в последовательности • Поиск первого (последнего) элемента последовательности, удовлетворяющего заданному условию • Поиск максимального (минимального) элемента последовательности и другие ПЕРЕБОРНЫЕ задачи 32
Построить алгоритм к следующей задаче: С клавиатуры вводят N чисел. Найти их сумму. Этапы решения 1. Запросить, чему равно N. 2. Обнулить переменную для хранения суммы Sum. 3. Сделать N раз: Запросить у пользователя очередное слагаемое A Прибавить слагаемое A к сумме Sum 4. Вывести результат – значение Sum 33
Построить алгоритм к следующей задаче: С клавиатуры вводят несколько целых чисел, признаком окончания является ввод нуля. Найти сумму введённых чисел Этапы решения: 1. Обнулить переменную для хранения суммы Sum. 2. Повторять: Запросить у пользователя очередное слагаемое A Прибавить слагаемое А к сумме Sum пока A не равно нулю 3. Вывести результат Sum 34
Домашнее задание 5 1. Павловская Т. А. С/С++. Программирование на языке высокого уровня – Спб. : Питер, 2004. – 461 с. : ил. ISBN 594723 -568 -4 – раздел: Базовые конструкции структурного программирования: Операторы цикла: цикл с предусловием (while) 2. Нарисовать алгоритмы к следующим задачам: 2. 1. Подсчитать общее число делителей натурального числа 2. 2. Проверить, является ли заданное натуральное число простым Примечание: простым называется натуральное число, которое имеет ровно два различных натуральных делителя: единицу и само это число.
seminar_1-6.ppt