Оператор выбора.
Циклы.
Практическое занятие
Задачи на линейные алгоритмы.
Решение задач
• Задача1. Определить цифры трехзначного числа.
• Ввод: n (заданное трехзначное число)
• Вывод: a, b, c (число сотен, десятков и единиц числа)
• Тесты к задаче
• № Ввод Вывод
• 1 456 4 5 6
• 2 106 1 0 6
• 3 543 5 4 3
Код программы
• #include <iostream>
• int main()
• { setlocale(0, "");
• short n, a, b, c;
• cin >> n;
• c = n % 10;
• a = n / 100;
• b = (n / 10) % 10;
• cout << a << " " << b << " " << c;
• return 0;
• }
Решение задач
• Задача2. С начала суток прошло n секунд ( n- целое). Найти количество полных
часов, прошедших с начала суток.
• Тесты к задаче
• № Ввод Вывод
• 1 12547 3
• 2 3601 1
• 3 256 0
Код программы
• using namespace std;
• int main()
• { int n, h;
• cin >> n;
• h = n / 3600;
• cout << h;
• return 0;
• }
Решение задач
• Задача3. Дни недели пронумерованы следующим образом: 0 - воскресенье, 1 -
понедельник, 2 - вторник,..., 6 - суббота. Дано целое число K, лежащее в
диапазоне 1 - 365. Определить номер дня недели для К-го дня года, если известно,
что в этом году 1 января было четвергом.
• Тесты к задаче
• № Ввод Вывод
• 1 11 0
• 2 365 4
• 3 128 5
Код программы
• #include <iostream>
• using namespace std;
• int main()
• {
• short k, d;
• cin >> k;
• d = (k % 7 + 3) % 7;
• cout << d;
• return 0;
• }
Самостоятельно
• 1. Дано трехзначное число. Определить сумму и произведение цифр числа;
• 2. Дни недели пронумерованы следующим образом: 0 - воскресенье, 1 -
понедельник, 2 - вторник,..., 6 - суббота. Дано целое число K, лежащее в
диапазоне 1 - 365. Определить номер дня недели для К-го дня года, если известно,
что в этом году 1 января было пятницей.
• 3. Даны катеты прямоугольного треугольника a и b. Найти его гипотенузу c и
периметр P:
•
Задачи на разветвляющиеся алгоритмы
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
if (a > b)
cout << a;
else
cout << b;
return 0;
}
Решение задач
• Задача 5. Определить принадлежит ли заданное число х отрезку [a; b].
• Ввод: a, b, х
#include <iostream>
Вывод: текст "yes" или "no"
using namespace std;
int main()
{
int a, b, x;
cin >> a >> b;
cin >> x;
if (a <= x && x <= b)
cout << "yes\n";
else
cout << "no\n";
return 0;
}
Решение задач
• Задача 6. Даны положительные числа a, b, c, y. Выяснить, пройдет ли кирпич с
ребрами a, b, c в прямоугольное отверстие со сторонами х,y. Просовывать кирпич
в отверстие можно только так, чтобы каждое из его ребер было параллельно или
перпендикулярно каждой из сторон отверстия.
#include <iostream>
using namespace std;
int main()
{
int a, b, c,x,y;
cin >> a >> b >>c;
cin >> x >> y;
if ((a<=x && b<=y) ||(b<=x && a<=y) || (a<=x && c<=y) || (c<=x && a<=y) || (c<=x && b<=y) || (b<=x && c<=y))
cout << "yes\n";
else
cout << "no\n";
return 0;
}
Самостоятельно
• 1. Составьте программу, определяющую, является ли число А делителем
числа В.
• 2. Составьте программу, заменяющую меньшее из двух данных чисел
суммой, а большее - произведением этих чисел (числа не равны).
• 3. Составьте программу, выводящую на экран квадраты чисел от 10 до 20
включительно.
Оператор выбора
• Оператор switch имеет следующий формат:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
switch (n)
{
case 1 : cout << "Monday"; break;
case 2 : cout << "Tuesday"; break;
case 3 : cout << "Wednesday"; break;
case 4 : cout << "Thursday"; break;
case 5 : cout << "Friday"; break;
case 6 : cout << "Saturday"; break;
case 7 : cout << "Sunday"; break;
default : cout << "mistake";
}
return 0;
}
Составить программу, которая по
#include <iostream>
using namespace std;
int main(){
номеру месяца #include
setlocale(0,"");
int N;
определяла
<iostream>
время года.
cout<<"Введите месяц: "; using namespace std;
cin>>N; int main(){
switch(N){ setlocale(0,"");
case 1:{cout<<"Это зима!";break;} int N;
case 2:{cout<<"Это зима!";break;} cout<<"Введите месяц: ";
case 3:{cout<<"Это весна!";break;} cin>>N;
case 4:{cout<<"Это весна!";break;} switch(N){
case 5:{cout<<"Это весна!";break;} case 1: case 2: case 12: cout<<"Это зима!"; break;
case 6:{cout<<"Это лето!";break;} case 3: case 4: case 5: cout<<"Это весна!"; break;
case 7:{cout<<"Это лето!";break;} case 6: case 7: case 8: cout<<"Это лето!"; break;
case 8:{cout<<"Это лето!";break;} case 9: case 10: case 11: cout<<"Это осень!"; break;
case 9:{cout<<"Это осень!";break;} }
case 10:{cout<<"Это осень!";break;} system("pause>>void");
case 11:{cout<<"Это осень!";break;} }
case 12:{cout<<"Это зима!";break;}
}
system("pause>>void");
}
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
if (n <= 0 || n > 12)
cout << "mistake";
else if ( 3 <= n && n <= 5)
cout << "spring";
else if ( 6 <= n && n <= 8)
cout << "summer";
else if ( 9 <= n && n <= 11)
cout << "autumn";
else cout << "winter";
return 0;
}
Циклы
• Оператор for
• Вид оператора for:
тело
• Например
Замечание:
i++ - это увеличение переменной i на 1, аналогично i-- - уменьшение переменной i на 1.
После выполнения этого оператора на экране мы увидим 4 строки "I learn C++".
?
Комбинация операций присваивания
int main()
{
int n, m, r, i;
cin >> n;
m = n;
r=0;
for (i = 1; i <= 4; i++)
{
r = r * 10 + m % 10;
m = m / 10;
}
if (r == n)
cout << "yes";
else cout << "no";
return 0;
}
Цикл с предусловием while
•int n;
• cin >> n;
•
• int pow2 = 1;
• while (pow2 <= n)
• {
• cout << pow2 <<' ';
• pow2 *=2;
Исполнитель “Раздвоитель” преобразует натуральные числа. У него есть две команды: “Вычесть 1” и
“Разделить на 2”, первая команда уменьшает число на 1, вторая команда уменьшает число в два раза,
если оно чётное, иначе происходит ошибка.
Дано два натуральных числа A и B (A>B). Напишите алгоритм для Раздвоителя, который преобразует
число A в число B и при этом содержит минимальное число команд. Команды алгоритма нужно выводить
по одной в строке, первая команда обозначается, как -1, вторая команда как :2.
int a, b;
1.
Например, массив может содержать годовые отметки по математике двадцати пяти учеников
класса. Так как годовая отметка - это целое число, то тип значений элементов массива short.
Также массив - это среднесуточная температура 30 дней апреля. Температура - это не всегда целое
число, поэтому тип значения элементов массива float.
Каждое значение сохраняется в отдельном элементе
массива и хранится в памяти последовательно друг за
другом. Каждый элемент массива имеет номер и значение.
Нумерация массивов в C++ начинается с нуля.
Индекс 0 1 2 3 4 5 6
(номер)
Значение 25 48 -8 0 12 4 58
элемента
Например:
short marks [25];
float month [12]; Обратите внимание, что первый элемент массива имеет
индекс 0, а последний элемент на 1 меньше, чем его
размер.
#include <iostream>
using namespace std;
int main()
{
float a, b, c, d, e, s;
cin >> a >> b >> c >> d >> e;
s = a + b + c + d + e;
cout << s;
return 0;
}
А если требуется найти сумму 30 целых чисел?
Для работы с массивами используют цикл (чаще for), тогда возникает обобщенное имя
элементов массива a[i], где i должно изменяться согласно диапазону индексов элементов.
Формирование массива
• int a[4];
• a[0] = 4;
• a[1] = -2;
• a[2] = 0;
• a[3] = -4;
Формирование массива
• 2 способ: ввод значений элементов с клавиатуры
float b[10];
cout << a[i] << " "; //вывод элементов в строку через пробел
3. Фрагмент массива (часть элементов от m-го до k-го элемента, где m,k-номера в пределах
диапазона индексов массива).
int main()
{
short n = 15;
int a[n];
return 0;
}
Экспериментальный раздел работы