Первый слайд презентации
Лекция 8 В ложенные циклы. Сквозной проект – этап 2 ЛР 1 2. Вложенные циклы СП2. Сквозной Проект – Этап 2. Индивидуальный проект КЭИ УлГТУ 1 курс Власенко Олег Федосович SimbirSoft
Слайд 4: Пример с вложенными DO WHILE
Нужно вывести 3 строки, содержащие числа от 1 до 4 каждая. Вывод для этого примера должен быть таким: 1 2 3 4 1 2 3 4 1 2 3 4
Слайд 5: Пример с вложенными DO WHILE - реализация
Нужно вывести 3 строки, содержащие числа от 1 до 4 каждая. Вывод для этого примера должен быть таким: 1 2 3 4 1 2 3 4 1 2 3 4 void Example1() { printf ( "Example1() START\n" ); int i, j; i = 1; do { j = 1; do { printf ( "%d ", j); j++ ; } while (j <= 4); printf ( "\n" ); i ++; } while ( i <= 3); printf ( "Example1() FINISH\n" ); }
Слайд 6: Пример с вложенными DO WHILE - трассировка
Нужно вывести 3 строки, содержащие числа от 1 до 4 каждая. Вывод для этого примера должен быть таким: 1 2 3 4 1 2 3 4 1 2 3 4 i j j <= 4 i <= 3 Вывод void Example1() { printf ( "Example1() START\n" ); int i, j; i = 1; do { j = 1; do { printf ( "%d ", j); j++ ; } while (j <= 4); printf ( "\n" ); i ++; } while ( i <= 3); printf ( "Example1() FINISH\n" ); }
Слайд 7: Пример с вложенными DO WHILE – трассировка (2)
Нужно вывести 3 строки, содержащие числа от 1 до 4 каждая. Вывод для этого примера должен быть таким: 1 2 3 4 1 2 3 4 1 2 3 4 i j j <= 4 i <= 3 Вывод 1 start 1 1 2 + 2 3 + 3 4 + 4 5 - \n 2 + 1 1 2 + 2 3 + 3 4 + 4 5 - \n 3 + 1 1 2 + 2 3 + 3 4 + 4 5 - \n 4 - finish
Слайд 8: Пример 2
Нужно вывести время с шагом 10 минут. Вывод должен выглядеть так: 00:00 00:10 00:20 00:30 00:40 00:50 01:00 01:10 01:20 01:30 01:40 01:50 …. 23:00 23:10 23:20 23:30 23:40 23:50
Слайд 9: Пример 2 - реализация
Нужно вывести время с шагом 10 минут. Вывод должен выглядеть так: 00:00 00:10 00:20 00:30 00:40 00:50 01:00 01:10 01:20 01:30 01:40 01:50 …. 23:00 23:10 23:20 23:30 23:40 23:50 void Example2() { printf ( "Example2() START\n" ); int h = 0; do { int m = 0; do { printf( "%02d:%02d ", h, m); m += 10; } while (m < 60); printf ( "\n" ); h++; } while (h < 24); printf ( "Example2() FINISH\n" ); }
Слайд 10: Пример 2 - трассировка
Нужно вывести время с шагом 10 минут. Вывод должен выглядеть так: 00:00 00:10 00:20 00:30 00:40 00:50 01:00 01:10 01:20 01:30 01:40 01:50 …. 23:00 23:10 23:20 23:30 23:40 23:50 void Example2() { printf ( "Example2() START\n" ); int h = 0; do { int m = 0; do { printf( "%02d:%02d ", h, m); m += 10; } while (m < 60); printf ( "\n" ); h++; } while (h < 24); printf ( "Example2() FINISH\n" ); } H m Вывод 0 0 00:00 10 00:10 20 00:20 30 00:30 40 00:40 50 00:50 60 \n 1 0 01:00 10 01:10 20 01:20 30 01:30 40 01:40 50 01:50 60 \n 2 … … … 23 50 23:50 23 60 \n 24
Слайд 12: Лабораторная работа №12
Консольное меню и задачи, реализуемые через вложенный цикл DO..WHILE
Слайд 13: Задача 0
Нужно сделать меню, в котором можно будет выбрать какую из задач Лабораторной работы №12 нужно выполнить. Меню нужно сделать по аналогии с меню из предыдущей лабораторной работы.
Слайд 14: Задача 1
Нужно ввести N – количество строк и M – количество столбцов. N <= 9, M <= 9 В ывести табличку по следующей схеме (N=4, M=5): 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 Каждое число количеством десятков сообщает о номере строки, количеством единиц о номере столбца. Выполнение кода задачи должно вызываться при выборе соответствующего пункта меню.
Слайд 15: Задача 1. Блок-схема
Нужно ввести N – количество строк и M – количество столбцов. N <= 9, M <= 9 В ывести табличку по следующей схеме (N=4, M=5): 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45
Слайд 16: Задача 2
Вывести таблицу Пифагора, используя вложенные циклы DO WHILE Вывод должен выглядеть так: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 ... 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 Выполнение кода задачи должно вызываться при выборе соответствующего пункта меню.
Слайд 17: ЛР 1 2 : Задания на закрепление и отработку
Доделать задачи 1-2, которые не успели сделать на занятии в классе. Выполнить трассировку этих задач, для N = 4, M = 3 Задача 3*. Добавьте пункт меню ‘3’, при выборе которого будет выведен узор из чисел, согласно варианта. (См. следующий слайд). Номер варианта соответствует последней цифре в вашем порядковом номере в журнале. Если вы выполнили задачу 3 *, тогда вам нужно нарисуйте блок-схему для нее. Если вы не выполнили эту задачу, то вам нужно нарисовать блок-схему – для задачи 2. Задача 4* *. Добавьте пункт меню ‘ 4 ’, при выборе которого будет выведен узор из чисел, согласно варианта. (См. соответствующий слайд). Номер варианта соответствует последней цифре в вашем порядковом номере в журнале. (для реализации Задачи 4* * скорее всего вам понадобиться больше, чем 2 цикла)
Слайд 18: Варианты для Задачи 3 *
Вариант Рисунок Вариант Рисунок 0 5 4 5 3 4 5 2 3 4 5 1 2 3 4 5 1 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 2 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 3 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 4 5 5 4 5 4 3 5 4 3 2 5 4 3 2 1 5 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 7 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 8 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 9 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1
Слайд 19: Пример реализации Задачи 3 *
Ввести число N. Вывести N строк по N чисел в каждой. Каждое выведенное число равно N. Ввод 1: N = 2 Вывод 1: 2 2 2 2 Ввод 2: N = 4 Вывод 2: 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
Слайд 20: Варианты для Задачи 4* *
0 5 4 5 3 4 5 2 3 4 5 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 5 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1 1 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 6 5 4 5 4 3 4 5 4 3 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1 2 1 2 1 2 3 2 1 2 3 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5 7 5 5 4 5 5 4 3 4 5 5 4 3 2 3 4 5 5 4 3 2 1 2 3 4 5 3 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 5 4 5 4 3 5 4 3 2 5 4 3 2 1 8 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 4 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 4 5 3 4 5 2 3 4 5 1 2 3 4 5 9 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
Слайд 23: Задача 21 A – на разбор
// Задача 21. A void main() { int n, i, j, k; k = 1; scanf_s ( "%d", &n); i = 1; do { j = 1; do { printf ( "%2d ", k); k++; j++ ; } while (j <= n); printf ( "\n" ); i ++; } while ( i <= n); } Тест 1. Введите 2 Тест 2. Введите 3
Слайд 24: Задача 21 A – блок-схема
// Задача 21. A void main() { int n, i, j, k; k = 1; scanf_s ( "%d", &n); i = 1; do { j = 1; do { printf ( "%2d ", k); k++; j++ ; } while (j <= n); printf ( "\n" ); i ++; } while ( i <= n); }
Слайд 25: Задача 2 2A – на разбор
// Задача 22. A void main() { int n, i, j; scanf_s ( "%d", &n); i = 1; do { j = 1; do { if (j >= i ) printf ( "[]" ); else printf ( ".." ); j++ ; } while (j <= n); printf ( "\n" ); i ++; } while ( i <= n); } Тест 1. Введите 3 Тест 2. Введите 4
Слайд 26: Задача 2 2A – блок-схема
// Задача 22. A void main() { int n, i, j; scanf_s ( "%d", &n); i = 1; do { j = 1; do { if (j >= i ) printf ( "[]" ); else printf ( ".." ); j++ ; } while (j <= n); printf ( "\n" ); i ++; } while ( i <= n); }
Слайд 27: Задача 2 3A – на разбор
// Задача 23. A void main() { int n, i, j, a, b; scanf_s ( "%d", &n); a = 2 - n; b = n; do { if (a > b) j = a; else j = b; while (j >= 1) { printf ( "* " ); j--; } printf ( "\n" ); a++; b--; } while (a <= n); } Тест 1. Введите 3 Тест 2. Введите 4
Слайд 28: Задача 2 3A – блок-схема
// Задача 23. A void main() { int n, i, j, a, b; scanf_s ( "%d", &n); a = 2 - n; b = n; do { if (a > b) j = a; else j = b; while (j >= 1) { printf ( "* " ); j--; } printf ( "\n" ); a++; b--; } while (a <= n); }
Слайд 32: ИТОГО по лекции 8
Познакомились с вложенными циклами на примере DO..WHILE Узнали что нужно сделать в ЛР12 и Этапе 2 [ Сквозного ] Проекта
Слайд 33: Термины 1
Директива (препроцессора) - #include Строчные комментарии Блок кода {} Функция Заголовок функции Объявление функции Прототип функции Сигнатура («подпись») функции Определение функции Вызов функции Формальные параметры/аргументы функции (Фактические) параметры/аргументы функции Глобальные переменные Локальные переменные Область видимости переменной Время жизни переменной #include < stdio.h > i++; // работает аналогично i = i + 1 void main() { } void main() { } void main() { } BOOL LineTo (HDC hdc, int xEnd, int yEnd ); BOOL LineTo (HDC hdc, int xEnd, int yEnd ); BOOL LineTo (HDC, int, int) void main() { } LineTo ( hdc, 300, 100); BOOL LineTo (HDC hdc, int xEnd, int yEnd ); LineTo ( hdc, 300, 100 ); scanf_s ( "%d", &n ); int a = 0; void main() { int c = 10; printf ("main: a=%d c=%d\n", a, c); } Глобальная – весь файл Локальная – блок кода Глобальная – время работы программы Локальная – время работы блока кода
Слайд 34: Термины 2
Точка входа в пользовательский код Функция int main () Неименованные целочисленные константы Неименованные строковые константы Escape-последовательности - \t, \n, \" и др. Стандартные типы данных – Целый тип Функция printf Функция scanf_s Строка форматирования printf / scanf_s Функция SetConsoleCP Функция SetConsoleOutputCP int main() { return 0; } int main() { return 0; } LineTo ( hdc, 300, 100 ); printf ( "2^%d = %d\n", i, stepen ); printf ("2^%d = %d \n ", i, stepen ); int res = 1; printf ("Hello! It is main()!\n"); scanf_s ("%f", &s); printf ( "2^%d = %d\n", i, stepen ); SetConsoleCP (1251); SetConsoleOutputCP (1251);
Слайд 35: Термины 3
Идентификатор Определение переменных Инициализация переменных Выражения Оператор присваивания Операторы сравнения Арифметические операторы + - * / % Оператор & (взятие адреса) Оператор инкремента - постфиксный и префиксный int x1 = 10, y 1 = 100; int x1 = 10, y1 = 100; int x1 = 10, y1 = 100 ; y2 = y2 + 10 ; y2 = y2 + 10; int i = 0; do { i ++; } while ( i < 16 ); y2 = y2 + 10; scanf_s ("%d", & n); res = res * i ++ ; // постфиксный инкремент res = res * ++ i ; // префиксный инкремент
Слайд 36: Термины 4
Инструкция Цикл DO WHILE Инструкция Развилка IF ELSE Инструкция RETURN Инструкция Цикл WHILE Метка Инструкция безусловного перехода GOTO Инструкция SWITCH Инструкция BREAK Инструкция CONTINUE int i = 0; do { i ++; } while ( i < 16); if (x < 0) return -x; else return x; int main() { return 0; } a = 1; while (a <= 10) { printf ("%d ", a ++ ); } label_do : printf ("%d ", a); if ( ++ a <= 10) goto label_do ; switch (n) { case 1: printf (" Вы ввели ПН\ n"); break; case 2: printf ("Вы ввели ВТ\n"); break; case 3: printf ("Вы ввели СР\n"); break; } int a = 1999; while (a++ < 2030) { if (a % 4 == 0) continue ; printf ("%d ", a); }