Микропроцессорная_техника_2019_практика_1

Содержание

Слайд 2

Электронно-вычислительная машина (компьютер):

Электронно-вычислительная машина (компьютер):

Слайд 3

Для обработки информации при помощи ЭВМ, необходимо:

Превратить входную информацию в данные, пригодные

Для обработки информации при помощи ЭВМ, необходимо: Превратить входную информацию в данные,
для хранения в памяти (то есть, превратить в числа);
Расположить данные в памяти определенным образом;
Выполнить определенные действия над числами, хранящимися в памяти;
Куда-то выдать результат.

Слайд 4

Таким образом:

Таким образом:

Слайд 5

Язык программирования Си

Си - стандартизированный процедурный язык программирования, разработанный в начале 1970-х

Язык программирования Си Си - стандартизированный процедурный язык программирования, разработанный в начале
годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи
Си – самый распространенный язык программирования для микроконтроллеров
высокая скорость работы программ
много возможностей, много готовых библиотек функций
стал основой многих современных языков (С++, С#, Javascript, Java, ActionScript, PHP)
высокие шансы сделать ошибку, которая не обнаруживается автоматически

Слайд 6

main()
{
}

главная (основная) функция всегда имеет имя main

начало программы

«тело» программы (основная часть)

конец программы

Простейшая программа

main() { } главная (основная) функция всегда имеет имя main начало программы

Слайд 7

Что происходит дальше?

main()
{
}

first.cpp

исходный файл

first.o

Транслятор
(компилятор)

ЪБzЦ2?|ё3БКа
n/36ШпIC+И-
ЦЗ_5МyРЧб
s6bд^:/@:лЖ1_

объектный файл

Стандартные
(готовые) функции

редактор связей
(компоновка)

MZPо:ЄPэ_еЗ"!_
`кn,ЦbЄ-Щр1 
G_БАC,
_Ощях¤9жФ

first.exe

исполняемый файл

текст программы на Си

Что происходит дальше? main() { } first.cpp исходный файл first.o Транслятор (компилятор)

Слайд 8

Вывод текста на экран

#include
main()
{
printf("Привет!");
}

include = включить

файл stdio.h: описание стандартных функций

Вывод текста на экран #include main() { printf("Привет!"); } include = включить
ввода и вывода

вызов стандартной функции
printf = print format (форматный вывод)

этот текст будет на экране

Слайд 9

Переход на новую строку

#include
main()
{
printf("Привет,\n Вася!");
}

Привет,
Вася!

на экране:

последовательность \n (код 10)
переход

Переход на новую строку #include main() { printf("Привет,\n Вася!"); } Привет, Вася!
на новую строку

Слайд 10

Символы управления выводом

Для управления расположением текста на экране (в окне вывода) используются

Символы управления выводом Для управления расположением текста на экране (в окне вывода)
специальные символы форматирования. Такие символы в тексте программы обозначаются как пара, состоящая из символа обратной косой черты «\» и строчной латинской буквы.
Наиболее часто используются:
\n - переход на новую строку;
\r - переход в начало текущей строки;
\t - горизонтальная табуляция: прыжок вправо.

Слайд 11

Включение русской кодовой страницы

#include
#include
main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Привет!");
}

файл Windows.h: описание специфических функций управления ОС

Включение русской кодовой страницы #include #include main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); printf("Привет!"); }
Windows

Вызов функций установки номера кодовой страницы окна консоли («черного экрана»).
1251 – кодовая станица с символами кириллицы

Слайд 12

Для написания, компиляции и отладки программ в настоящее время широко используются программные

Для написания, компиляции и отладки программ в настоящее время широко используются программные
комплексы, которые называются IDE - Integrated Development Environment (интегрированная среда разработки)
Если программа пишется и компилируется на одной платформе (например, на PC под управлением ОС Windows), а исполняется на другой платформе (например, на микроконтроллере ARM), то среда разработки называется кроссплатформенной

Средства создания программ

Слайд 13

Интегрированная среда разработки

Включает в себя:
текстовый редактор для создания и редактирования текстов программ
компилятор

Интегрированная среда разработки Включает в себя: текстовый редактор для создания и редактирования
для перевода текстов программ в команды процессора
компоновщик для создания исполняемого файла (EXE-файла или двоичного файла, пригодного для загрузки в память микроконтроллера)
программатор для записи файлов во Flash-память
отладчик для поиска ошибок в программах

Слайд 14

Интегрированная среда разработки

Для написания простых программ под ОС Windows будет использоваться IDE

Интегрированная среда разработки Для написания простых программ под ОС Windows будет использоваться
DEV-CPP

здесь мы набираем программу

сообщения об ошибках, результаты поиска текста, результаты работы компилятора

список файлов проекта

Слайд 15

ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ

Клавиши и кнопки управления Dev-CPP

ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ Клавиши и кнопки управления Dev-CPP

Слайд 16

СООБЩЕНИЯ ОБ ОШИБКАХ КОМПИЛЯЦИИ

эта ошибка обнаружена здесь!

СООБЩЕНИЯ ОБ ОШИБКАХ КОМПИЛЯЦИИ эта ошибка обнаружена здесь!

Слайд 17

НАИБОЛЕЕ «ПОПУЛЯРНЫЕ» ОШИБКИ

НАИБОЛЕЕ «ПОПУЛЯРНЫЕ» ОШИБКИ

Слайд 18

Задания

Вывести на экран текст "лесенкой"
Вася
пошел
гулять
Вывести на экран рисунок из

Задания Вывести на экран текст "лесенкой" Вася пошел гулять Вывести на экран
букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ

Слайд 19

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

Практические занятия
Занятие 2

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА Практические занятия Занятие 2

Слайд 20

Хранение данных: Переменные

Хранение данных: Переменные

Слайд 21

Что такое переменная?

Переменная – это ячейка в памяти компьютера, которая имеет имя

Что такое переменная? Переменная – это ячейка в памяти компьютера, которая имеет
и хранит некоторое значение.
Значение переменной может меняться во время выполнения программы.
При записи в ячейку нового значения старое стирается.
Типы переменных
int – целое число (В ОС Windows 32 - 4 байта)
float – вещественное число, floating point (4 байта)
char – символ, character (1 байт)
… и много других разных типов…

Слайд 22

Какие имена правильные?
i j R&B temperature1 4you Internal_Pressure Вася
current_offset _ABBA [Privet]

Какие имена правильные? i j R&B temperature1 4you Internal_Pressure Вася current_offset _ABBA
A+B

Могут включать
латинские буквы (A-Z, a-z)
знак подчеркивания _
цифры 0-9
НЕ могут включать
русские буквы
пробелы
скобки, знаки +, =, !, ? и др.

Имена переменных:

Слайд 23

Объявление переменных

Объявить переменную = определить её имя, тип и начальное значение (если

Объявление переменных Объявить переменную = определить её имя, тип и начальное значение
нужно).

main()
{
int a;
float b, c;
int Tu104, Il86=23, Yak42;
float x=4.56, y, z;
char c, c2='A', m;
}

целая переменная a

вещественные переменные b и c

целые переменные Tu104, Il86 и Yak42
Il86 = 23

вещественные переменные x, y и z
x = 4,56

·

целая и дробная части отделяются точкой

символьные переменные c, c2 и m
c2 = 'A'

Слайд 24

Оператор присваивания

Оператор – это команда языка программирования.
Оператор присваивания служит для изменения

Оператор присваивания Оператор – это команда языка программирования. Оператор присваивания служит для изменения значения переменной.
значения переменной.

Слайд 25

Оператор присваивания

Общая структура:

Значение выражения вычисляется в процессе выполнения оператора присваивания.
Выражение может включать:
константы

Оператор присваивания Общая структура: Значение выражения вычисляется в процессе выполнения оператора присваивания.
(постоянные)
имена переменных
знаки арифметических операций:
+ - * / %
вызовы функций
круглые скобки ( )

умножение

деление

остаток от деления

куда записать

что записать

имя_переменной

=

выражение;

Слайд 26

main()
{
int a, b;
float x, y;
a = 5;

main() { int a, b; float x, y; a = 5; 10

10 = x;
y = 7,8;
b = 2.5;
x = 2*(a + y);
a = b + x;
}

Какие операторы неправильные?

имя переменной должно быть слева от знака =

целая и дробная часть отделяются точкой

при записи вещественного значения в целую переменную дробная часть будет отброшена

Слайд 27

Особенность деления в Си

main()
{
int a = 7;
float x;
x =

Особенность деления в Си main() { int a = 7; float x;
a / 4;
x = 4 / a;
x = (float)a / 4;
x = 4.0 / a;
}

=1

=0

=1.75

=0.57

Слайд 28

Сокращенная запись операций в Си
Смысл сокращенной записи – уменьшение вероятности случайных опечаток

Сокращенная запись операций в Си Смысл сокращенной записи – уменьшение вероятности случайных
при наборе текста программы.

инкремент

декремент

a = a + 1;

a++;

a = a + b;

a += b;

a = a - 1;

a--;

a = a – b;

a -= b;

a = a * b;

a *= b;

a = a / b;

a /= b;

a = a % b;

a %= b;

Слайд 29

Пошаговое исполнение программы

main()
{
int a, b;
a = 5;
b = a

Пошаговое исполнение программы main() { int a, b; a = 5; b
+ 2;
a = (a + 2)*(b – 3);
b = a / 5;
a = a % b;
a++;
b = (a + 14) % 7;
}

5

7

28

5

3

4

4

?

?

Отладка (F5)

Слайд 30

Порядок выполнения операций

вычисление выражений в скобках
умножение, деление, % слева направо
сложение и вычитание

Порядок выполнения операций вычисление выражений в скобках умножение, деление, % слева направо
слева направо

2 3 5 4 1 7 8 6 9
z = (5*a*c+3*(c-d))/a*(b-c)/ b;

2 6 3 4 7 5 1 12 8 11 10 9
x =(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));

Слайд 31

Вычислительная программа

Задача. Ввести два целых числа и вывести на экран их сумму.

#include

Вычислительная программа Задача. Ввести два целых числа и вывести на экран их

#include
main()
{
int a, b, c;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите два целых числа:\n");
scanf ("%d%d", &a, &b);
c = a + b;
printf("%d", c);
}

подсказка для ввода чисел

ввод двух чисел с клавиатуры

вывод результата

Слайд 32

Ввод чисел с клавиатуры

scanf ("%d%d", &a, &b);

формат ввода

scanf() – функция ввода с

Ввод чисел с клавиатуры scanf ("%d%d", &a, &b); формат ввода scanf() –
консоли

адреса ячеек, куда записать введенные числа

Формат – символьная строка, которая указывает, какие числа вводятся:
%d – целое число
%f – вещественное число
%c – 1 символ
%s – символьная строка

7652

&a – адрес переменной a

ждать ввода с клавиатуры двух целых чисел (через пробел или Enter), первое из них записать в переменную a, второе – в b

12 – значение переменной a

7653


7651

Слайд 33

Что неправильно?

int a, b;
scanf ("%d", a);
scanf ("%d", &a, &b);
scanf ("%d%d", &a);
scanf ("%d

Что неправильно? int a, b; scanf ("%d", a); scanf ("%d", &a, &b);
%d", &a, &b);
scanf ("%f%f", &a, &b);

&a

%d%d

&a, &b

убрать пробел

%d%d

Слайд 34

Вывод чисел на экран

printf ("%d", c);

здесь вывести целое число

это число взять из

Вывод чисел на экран printf ("%d", c); здесь вывести целое число это
ячейки c

printf ("Результат: %d", c);

printf ("%d+%d=%d", a, b, c );

формат вывода

список значений

a, b, c

printf ("%d+%d=%d", a, b, a+b );

арифметическое выражение

Слайд 35

Вывод целых чисел

int x = 1234;
printf ("%d", x);

1234

printf ("%9d", x);

минимальное число позиций

Вывод целых чисел int x = 1234; printf ("%d", x); 1234 printf
(+ всегда одно место слева для знака «-»)

1234

всего 9 позиций

или "%i"

или "%9i"

5

4

Слайд 36

Вывод вещественных чисел

float x = 123.4567;
printf ("%f", x);

123.456700

printf ("%9.3f", x);

минимальное число позиций,

Вывод вещественных чисел float x = 123.4567; printf ("%f", x); 123.456700 printf
6 цифр в дробной части

123.457

всего 9 позиций, 3 цифры в дробной части

printf ("%e", x);

1.234560e+02

стандартный вид: 1,23456·102

printf ("%10.2e", x);

1.23e+02

всего 10 позиций, 2 цифры в дробной части мантиссы

Слайд 37

Полное решение

#include
#include
main()
{
int a, b, c;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите два

Полное решение #include #include main() { int a, b, c; SetConsoleCP(1251); SetConsoleOutputCP(1251);
целых числа\n");
scanf("%d%d", &a, &b);
c = a + b;
printf("%d+%d=%d", a, b, c);
}

Протокол:
Введите два целых числа
25 30
25+30=55

это выводит компьютер

это вводит пользователь

Слайд 38

Линейный алгоритм

начало

конец

c = a + b;

ввод a, b

вывод c

блок «начало»

блок «ввод»

блок «процесс»

блок

Линейный алгоритм начало конец c = a + b; ввод a, b
«вывод»

блок «конец»

Слайд 39

Задания

«4»: Ввести три числа, найти их сумму и произведение.
Пример:
Введите три

Задания «4»: Ввести три числа, найти их сумму и произведение. Пример: Введите
числа:
4 5 7
4+5+7=16
4*5*7=140
«5»: Ввести три числа, найти их сумму, произведение и среднее арифметическое.
Пример:
Введите три числа:
4 5 7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.33

Слайд 40

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

Практические занятия
Занятие 3

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА Практические занятия Занятие 3

Слайд 41

УПРАВЛЕНИЕ ИСПОЛНЕНИЕМ ПРОГРАММЫ В СИ

Алгоритмы на языке Си описываются при помощи специальных

УПРАВЛЕНИЕ ИСПОЛНЕНИЕМ ПРОГРАММЫ В СИ Алгоритмы на языке Си описываются при помощи
ключевых слов – операторов управления, определяющих последовательность выполнения действий в программе:
Проверка и условное исполнение кода (if-else, «?:»)
Переходы (goto)
Циклы (while, for, do-while)
Выбор (switch, if-else if)

Слайд 42

Разветвляющиеся алгоритмы

Задача. Ввести два целых числа и вывести на экран наибольшее из

Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее
них.
Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого.
Особенность: действия исполнителя зависят от некоторых условий (если … иначе …).

Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.

Слайд 43

Вариант 1. Блок-схема

полная форма ветвления

блок «решение»

Вариант 1. Блок-схема полная форма ветвления блок «решение»

Слайд 44

Вариант 1. Программа

main()
{
int a, b, max;
printf("Введите два целых числа:\n");
scanf("%d%d",

Вариант 1. Программа main() { int a, b, max; printf("Введите два целых
&a, &b );
if (a > b) {
}
else {
}
printf("Наибольшее число: %d", max);
}

max = a;

max = b;

полная форма условного оператора

Слайд 45

Оператор условия (условного исполнения)

if ( условие )
{
// что делать,

Оператор условия (условного исполнения) if ( условие ) { // что делать,
если условие верно
}
else
{
// что делать, если условие неверно
}

Особенности:
вторая часть (else …) может отсутствовать (неполная форма)
если в блоке один оператор, можно убрать { }

Слайд 46

Что неправильно?

if a > b
{
a = b;
}

Что неправильно? if a > b { a = b; } else
else
b = a;

if ( a > b ) {
a = b;
else
b = a;

if ( a > b )
else
b = a;

if ( a > b )
a = b;
c = 2*a;
else
b = a;

}

}

{

a = b;

Обратите внимание:
фигурные скобки можно ставить как вместе с операторами, так и на отдельной строке.

Слайд 47

Вариант 2. Блок-схема

неполная форма ветвления

Вариант 2. Блок-схема неполная форма ветвления

Слайд 48

Вариант 2. Программа


main()
{
int a, b, max;
printf("Введите два целых числа:\n");
scanf("%d%d",

Вариант 2. Программа main() { int a, b, max; printf("Введите два целых
&a, &b );
max = a;
if (b > a)
printf("Наибольшее число %d", max);
}

max = b;

неполная форма условного оператора

Слайд 49

Задача: Найти корни квадратного уравнения

 

Задача: Найти корни квадратного уравнения

Слайд 50

main()
{
double a, b, c, D;
printf("Введите коэффициенты квадратного уравнения:\n");
scanf("%lf%lf%lf", &a, &b, &c);
D =

main() { double a, b, c, D; printf("Введите коэффициенты квадратного уравнения:\n"); scanf("%lf%lf%lf",
b*b – 4*a*c;
if (D >= 0) {
double x1 = (-b + sqrt(D))/(2*a);
double x2 = (-b - sqrt(D))/(2*a);
printf("Корни вещественные: x1=%lf, x2=%lf", x1, x2);
}
else {
double real = -b / (2*a);
double im = sqrt(-D) / (2*a);
printf("Корни мнимые: x1=%lf+%lfi, x2=%lf-%lfi", real, im, real, im);
}
}

Программа

тип всех переменных здесь – числа с плавающей точкой двойной точности double

для извлечения корня используется функция sqrt() из библиотеки math

чтобы напечатать одно и то же число два раза, его приходится дважды указывать в функции printf()

для возведения в квадрат просто умножаем число само на себя

Улучшения: - Проверять, не равно ли a нулю
- Отдельно обрабатывать случай с D = 0 (совпадающие корни)

внутри фигурных скобок можно объявлять локальные переменные

для ввода и вывода чисел типа double используем формат “%lf"

Слайд 51

Сложные условия

Задача. Надо вывести возраст человека так, чтобы после числа было напечатано

Сложные условия Задача. Надо вывести возраст человека так, чтобы после числа было
слово «год», «года» или «лет».
Особенность: надо проверять, выполняются ли два условия одновременно. Говоря математическим языком, мы должны решить задачу на принадлежность точки к отрезку.

Слайд 52

Алгоритм

начало

ввод x

“x года”

да

нет

n<5 и n>1?

“x год”

n = последняя цифра числа x

n =

Алгоритм начало ввод x “x года” да нет n 1? “x год”
1?

да

нет

“x лет”

Слайд 53


Программа

main()
{
int x;
printf("Введите возраст\n");
scanf("%d", &x);
int n = x % 10;

Программа main() { int x; printf("Введите возраст\n"); scanf("%d", &x); int n =
if ( n < 5 && n > 1 )
printf("%d года", x);
else if (n == 1)
printf("%d год", x);
else
printf("%d лет", x);
}

сложное условие

“%” – операция нахождения остатка от деления

Слайд 54

Сложные условия

Сложное условие – это условие, состоящее из нескольких простых условий (отношений),

Сложные условия Сложное условие – это условие, состоящее из нескольких простых условий
связанных с помощью логических операций:
! – НЕ (not, отрицание, инверсия)
&& – И (and, логическое умножение, конъюнкция, одновременное выполнение условий)
|| – ИЛИ (or, логическое сложение, дизъюнкция, выполнение хотя бы одного из условий)
Простые условия (отношения)
< <= > >= == !=

равно

не равно

Слайд 55

Сложные условия

Порядок выполнения условных выражений:
выражения в скобках
! (НЕ, отрицание)
<, <=, >,

Сложные условия Порядок выполнения условных выражений: выражения в скобках ! (НЕ, отрицание)
>=
==, !=
&& (И)
|| (ИЛИ)
Пример:
2 1 6 3 5 4
if ( !(a > b) || c != d && b == a)
{
...
}

Слайд 56

Истинно или ложно при a = 2; b = 3; c =

Истинно или ложно при a = 2; b = 3; c =
4:
!(a > b)
a < b && b < c
!(a >= b) || c == d
a < c || b < c && b < a
a > b || !(b < c)
Для каких значений x истинны условия:
x < 6 && x < 10
x < 6 && x > 10
x > 6 && x < 10
x > 6 && x > 10
x < 6 || x < 10
x < 6 || x > 10
x > 6 || x < 10
x > 6 || x > 10

Сложные условия

1

1

0

(-∞, 6)


(6, 10)

(10, ∞)

(-∞, 10)

(-∞, 6) ∪ (10,∞)

(-∞, ∞)

(6, ∞)

x < 6

x > 10

x < 10

x > 6

1

1

Слайд 57

Задания

«4»: Ввести пять чисел и найти наибольшее из них.
Пример:
Введите пять

Задания «4»: Ввести пять чисел и найти наибольшее из них. Пример: Введите
чисел:
4 15 9 56 4
Наибольшее число 56
«5»:Ввести номер месяца и вывести название времени года.
Пример:
Введите номер месяца:
4
весна

Слайд 58

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

Практические занятия
Занятие 4

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА Практические занятия Занятие 4

Слайд 59

Циклы

Цикл – это многократное выполнение одинаковой последовательности действий.
цикл с известным числом шагов

Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным
(цикл со счётчиком)
цикл с неизвестным числом шагов (итерационный цикл)

Слайд 60

Цикл с неизвестным числом шагов

Пример: Отпилить полено от бревна. Сколько раз надо

Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз
сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру (путем деления числа на 10), увеличиваем счетчик.
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0.

Слайд 61

Алгоритм

начало

count

конец

нет

да

n != 0?

count = 0;

count = count + 1;
n = n

Алгоритм начало count конец нет да n != 0? count = 0;
/ 10;

обнулить счетчик цифр

ввод n

выполнять «пока n != 0»

Слайд 62

Программа

main()
{
int n, count;
printf("Введите целое число\n");
scanf("%d", &n);
count = 0;
while (n != 0)
{

Программа main() { int n, count; printf("Введите целое число\n"); scanf("%d", &n); count
count ++;
n = n / 10;
}
printf("В числе %d нашли %d цифр", n,
count);
}

n1 = n;

n1,

выполнять «пока n != 0»

, n1;

Слайд 63

Цикл с условием

while ( условие )
{
// тело цикла

Цикл с условием while ( условие ) { // тело цикла }
}

Особенности:
можно использовать сложные условия:
если в теле цикла только один оператор, скобки {} можно не писать:

while ( a < b && b < c ) { ... }

while ( a < b ) a ++;

Слайд 64

Цикл с условием

Особенности:
условие проверяется каждый раз при входе в цикл
если условие на

Цикл с условием Особенности: условие проверяется каждый раз при входе в цикл
входе в цикл ложно, цикл не выполняется ни разу
если условие никогда не станет ложным, программа зацикливается

a = 4; b = 6;
while ( a > b ) a = a– b;

while (1)
{
// главный цикл программы
}

Слайд 65

Сколько раз выполняется цикл?

a = 4; b = 6;
while ( a <

Сколько раз выполняется цикл? a = 4; b = 6; while (
b ) a ++;

2 раза
a = 6

a = 4; b = 6;
while ( a < b ) a += b;

1 раз
a = 10

a = 4; b = 6;
while ( a > b ) a ++;

0 раз
a = 4

a = 4; b = 6;
while ( a < b ) b = a - b;

1 раз
b = -2

a = 4; b = 6;
while ( a < b ) a --;

зацикливание

Слайд 66

Задания

«4»: Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число:
1234
Сумма

Задания «4»: Ввести целое число и найти сумму его цифр. Пример: Введите
цифр числа 1234 равна 10.
«5»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры.
Пример:
Введите целое число: Введите целое число:
1234 1224
Нет. Да.

Слайд 67

Цикл с постусловием

Задача: Ввести целое положительное число (<2000000) и определить число цифр

Цикл с постусловием Задача: Ввести целое положительное число ( Проблема: Как не
в нем.
Проблема: Как не дать ввести отрицательное число или ноль?
Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в любом случае ⇒ проверку условия цикла надо делать в конце цикла (цикл с постусловием).

Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.

Слайд 68

Цикл с постусловием: алгоритм

начало

конец

нет

да

n <= 0?

тело цикла

условие

блок «типовой процесс»

ввод n

основной алгоритм

Цикл с постусловием: алгоритм начало конец нет да n тело цикла условие

Слайд 69

Программа

main()
{
int n;
do {
printf("Введите положительное число\n");
scanf("%d", &n);
}
while

Программа main() { int n; do { printf("Введите положительное число\n"); scanf("%d", &n);
( n <= 0 );
... // основной алгоритм
}

условие

Особенности:
тело цикла всегда выполняется хотя бы один раз
после слова while («пока…» ) ставится условие продолжения цикла

Слайд 70

Сколько раз выполняется цикл?

a = 4; b = 6;
do { a ++;

Сколько раз выполняется цикл? a = 4; b = 6; do {
} while (a <= b);

3 раза
a = 7

a = 4; b = 6;
do { a += b; } while ( a <= b );

1 раз
a = 10

a = 4; b = 6;
do { a += b; } while ( a >= b );

зацикливание

a = 4; b = 6;
do b = a - b; while ( a >= b );

2 раза
b = 6

a = 4; b = 6;
do a += 2; while ( a >= b );

зацикливание

Слайд 71

Задания (с защитой от неверного ввода)

«4»: Ввести натуральное число и определить, верно

Задания (с защитой от неверного ввода) «4»: Ввести натуральное число и определить,
ли, что сумма его цифр равна 10.
Пример:
Введите число >= 0: Введите число >= 0:
-234 1233
Нужно положительное число. Нет
Введите число >= 0:
1234
Да
«5»: Ввести натуральное число и определить, какие цифры встречаются несколько раз.
Пример:
Введите число >= 0: Введите число >= 0:
2323 1234
Повторяются: 2, 3 Нет повторов.

Слайд 72

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

Практические занятия
Занятие 5

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА Практические занятия Занятие 5

Слайд 73

Цикл с известным числом шагов

Цикл с известным числом шагов организуется при помощи

Цикл с известным числом шагов Цикл с известным числом шагов организуется при
специальной переменной – счетчика цикла.
Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b).
Особенность: одинаковые действия выполняются 8 раз.

Слайд 74

Алгоритм

начало

i, i2, i3

конец

нет

да

i <= 8?

i = 1;

i = i + 1;

i2 =

Алгоритм начало i, i2, i3 конец нет да i i = 1;
i*i*i;
i3 = i*i;

задаем начальное значение переменной - счетчика цикла

проверяем, все ли сделали

вычисляем квадрат и куб

вывод результата

увеличиваем значение счетчика цикла

Слайд 75

Программа

main()
{
int i = 0;
while (i <= 8)
{
int i2 = i*i;

Программа main() { int i = 0; while (i { int i2
int i3 = i*i*i;
printf("%d %d %d\n", i, i2, i3);
i = i + 1;
}
}

Объявляем переменную - счетчик цикла и присваиваем ей начальное значение

увеличиваем значение счетчика цикла

Проблема:
Действия со счетчиком цикла разбросаны по тексту → велика вероятность где-нибудь ошибиться!

Проверяем условие выхода из цикла

Значение переменной-счетчика можно использовать в теле цикла

i++;

Слайд 76

int i;
for (i = 0; i <= 8; i++)
{
printf("%d %d %d\n",

int i; for (i = 0; i { printf("%d %d %d\n", i,
i, i*i, i*i*i);
}

Оператор цикла for

Оператор for используется для краткого описания циклов с заранее известным числом повторений
В операторе for переменной-счетчику:
присваивают начальное значение;
задают условие завершения цикла;
указывают операцию по изменению значения счетчика в конце каждого шага.

int i = 0;
while (i <= 8)
{
printf("%d %d %d\n", i, i*i, i*i*i);
i++;
}

начальное значение

условие завершения

приращение счетчика

Слайд 77

Цикл с уменьшением счетчика

Задача. Вывести на экран квадраты и кубы целых чисел

Цикл с уменьшением счетчика Задача. Вывести на экран квадраты и кубы целых
от 8 до 1 (в обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:

for ( )
{
printf("%4d %4d %4d\n", i, i*i, i*i*i);
}

i = 8; i >= 1; i --

сделаем заодно ровные столбики

Слайд 78

Оператор цикла for – общий вид

for (начальные значения;
условие продолжения цикла;
действия

Оператор цикла for – общий вид for (начальные значения; условие продолжения цикла;
на каждом шаге)
{
// тело цикла
}

Примеры:

for (a = 2; a < b; a+=2) { ... }

for (a = 2, b = 4; a < b; a+=2) { ... }

for (a = 1; c < d; x++) { ... }

for (; c < d; x++) { ... }

for (; c < d; ) { ... }

Слайд 79

Оператор цикла for

Особенности:
условие проверяется в начале очередного шага цикла, если оно ложно,

Оператор цикла for Особенности: условие проверяется в начале очередного шага цикла, если
то цикл завершается;
действия (третья часть в заголовке) выполняются в конце очередного шага цикла;
если условие никогда не станет ложным, цикл может продолжаться бесконечно (зацикливание)
если в теле цикла есть только один оператор, скобки {} можно не ставить:

for(i=1; i<8; i++) { i--; }

for (i = 1; i < 8; i++) a += b;

Слайд 80

Сколько раз выполняется цикл?

a = 1;
for(i=1; i<4; i++) a++;

a = 4

a =

Сколько раз выполняется цикл? a = 1; for(i=1; i a = 4
1; b=2;
for(i=3; i >= 1; i--)a += b;

a = 7

a = 1;
for(i=1; i >= 3; i--)a = a+1;

a = 1

a = 1;
for(i=1; i<= 4; i--)a ++;

зацикливание

a = 1;
for(i=1; i<4; i++) a = a+i;

a = 7

Слайд 81

Замена for на while и наоборот

for( i=1; i<=10; i++)
{
// тело

Замена for на while и наоборот for( i=1; i { // тело
цикла
}

i = 1;
while ( i <= 10 ) {
// тело цикла
i ++;
}

for ( i=a; i>=b; i--)
{
// тело цикла
}

i = a;
while ( i >= b ) {
// тело цикла
i --;
}

Слайд 82

Задания

«4»: Ввести a и b и вывести квадраты и кубы чисел от

Задания «4»: Ввести a и b и вывести квадраты и кубы чисел
a до b.
Пример:
Введите границы интервала:
4 6
4 16 64
5 25 125
6 36 216
«5»: Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, …
Пример:
1 1 1
2 4 8
4 16 64
...
46 2116 97336

Слайд 83

Оператор выбора

Задача: Ввести номер месяца и вывести количество дней в этом месяце.

Оператор выбора Задача: Ввести номер месяца и вывести количество дней в этом

Решение: Число дней по месяцам:
28 дней – 2 (февраль)
30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)
Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от номера месяца.

Слайд 84

Алгоритм

начало

конец

ни один вариант не подошел

ввод M

да

нет

M = 1?

D = 31;

нет

M = 2?

D

Алгоритм начало конец ни один вариант не подошел ввод M да нет
= 28;

да

нет

M = 12?

D = 31;

да

вывод D

ошибка

оператор выбора

Слайд 85

Программа

main()
{
int M, D;
printf("Введите номер месяца:\n");
scanf("%d", &M);
switch ( M

Программа main() { int M, D; printf("Введите номер месяца:\n"); scanf("%d", &M); switch
) {
case 2: D = 28;
case 4: case 6: case 9: case 11: D = 30;
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
D = 31;
default: D = -1;
}
if (D > 0)
printf("В этом месяце %d дней.", D);
else printf("Неверный номер месяца");
}

ни один вариант не подошел

break;

break;

break;

выйти из
switch

Слайд 86

Оператор выбора

Задача: Ввести букву и вывести название животного на эту букву.
Особенность:

Оператор выбора Задача: Ввести букву и вывести название животного на эту букву.
выбор по символьной величине.

main()
{
char c;
printf("Введите первую букву названия животного:\n");
scanf("%c", &c);
switch ( c ) {
case 'а': printf("Антилопа"); break;
case 'б': printf("Бизон"); break;
case 'в': printf("Волк"); break;
default: printf("Я не знаю!");
}
}

Слайд 87

Оператор выбора switch

Особенности:
после switch может быть имя переменной или арифметическое выражение целого

Оператор выбора switch Особенности: после switch может быть имя переменной или арифметическое
типа (int) или символьного типа (char)
нельзя ставить два одинаковых значения:

switch ( i+3 ) {
case 1: a = b; break;
case 2: a = c;
}

switch ( x ) {
case 1: a = b; break;
case 1: a = c;
}

Слайд 88

Задание


Ввести номер месяца и номер дня, вывести число дней, оставшихся

Задание Ввести номер месяца и номер дня, вывести число дней, оставшихся до
до Нового года.
Пример:
Введите номер месяца:
12
Введите день:
25
До Нового года осталось 6 дней.

Слайд 89

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

Практические занятия
Занятие 6

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА Практические занятия Занятие 6

Слайд 90

Cамый простой механизм ввода – чтение по одному символу из стандартного входного

Cамый простой механизм ввода – чтение по одному символу из стандартного входного
потока (с клавиатуры) и вывод по одному символу в стандартный выходной поток (на экран дисплея, в консольное окно).
Функция getch() ожидает нажатие клавиши и возвращает ее код:
int key = getch();
Функция putch(int x) выдает символ с кодом x в стандартный выходной поток (в консольное окно):
putch(‘H’); putch(‘i’); putch(‘!’);
Функции getch() и putch(), так же, как и printf(), scanf(), объявлены в заголовочном файле stdio.h.

Hi!

Ввод/вывод символов

Слайд 91

Ввод/вывод символов

Задача. Ввести число. Затем обеспечить следующую функциональность:
клавиши «+» и «-» увеличивают

Ввод/вывод символов Задача. Ввести число. Затем обеспечить следующую функциональность: клавиши «+» и
/ уменьшают число на 1;
клавиши «*» и «/» увеличивают / уменьшают число в два раза;
клавиша «ESC» вызывает выход из программы.
Особенность: алгоритм представляет собою цикл с заранее неизвестным числом повторений.

Слайд 92

Ввод/вывод символов: алгоритм

начало

конец

нет

да

c = 27?

ввод числа n

ввод символа c

c =‘+’?

n++;

c =‘-’?

n--;

c

Ввод/вывод символов: алгоритм начало конец нет да c = 27? ввод числа
=‘*’?

n*=2;

c =‘/’?

n/=2;

вывод n

да

да

да

да

нет

нет

нет

нет

27 – это код клавиши ESC

сюда хорошо подойдет оператор выбора

Слайд 93

Программа

main()
{
int n, c;
printf("Введите число:\n");
scanf("%d", &n);
do {
c = getch();

Программа main() { int n, c; printf("Введите число:\n"); scanf("%d", &n); do {
switch ( c )
{
case '+': n++; break;
case '-': n--; break;
case '*': n*=2; break;
case '/': n/=2; break;
}
printf("%9d\r", n);
} while (c != 27);
}

"\r" вызывает печать с начала строки

вместо кода символа можно написать сам этот символ внутри одинарных кавычек ' '

останавливаем программу, читаем код клавиши

Слайд 94

Меню в программе

Задача. Написать программу, вычисляющую площади различных фигур. Тип фигуры и

Меню в программе Задача. Написать программу, вычисляющую площади различных фигур. Тип фигуры
ее параметры должны вводиться с клавиатуры.
Особенность: Подобного рода программы обычно содержат «меню пользователя», в котором можно сделать выбор, нажав одну из предложенных кнопок.

Слайд 95

Программа

main()
{
printf("Вычисление площадей фигур:\n");
printf("1: Круг\n");
printf("2: Квадрат\n");
printf("3: Треугольник\n");
printf("0: Выход из

Программа main() { printf("Вычисление площадей фигур:\n"); printf("1: Круг\n"); printf("2: Квадрат\n"); printf("3: Треугольник\n");
программы\n");
int c = getch();
double result;
switch ( c )
{
case 0: return;
case 1: result = calc_round(); break;
case 2: result = calc_square(); break;
case 3: result = calc_triangle(); break;
}
printf("Площадь фигуры = %lf\r", result);
}

просто выходим из программы, даже не завершая switch()

вызываем разные функции для вычислений

Слайд 96

Задания

«4»: Ввести два числа, затем сделать так, чтобы нажатие «+» увеличивало бы

Задания «4»: Ввести два числа, затем сделать так, чтобы нажатие «+» увеличивало
первое число на величину, заданную вторым числом; нажатие «-» - уменьшало бы это число на ту же величину.
«5»: Ввести одно число, а затем сделать так, чтобы нажатие на цифровые клавиши 1..9 увеличивало (или уменьшало) бы это число на значение, заданное нажатой клавишей.

Слайд 97

Функции

В языке Си функция – группа из одного или нескольких операторов, имеющая

Функции В языке Си функция – группа из одного или нескольких операторов,
имя. Как правило, функция выполняет одно действие, один шаг алгоритма или одно вычисление по формуле.
Функция может получать на вход данные (они размещаются в специальных переменных – параметрах функции) и может отдавать в основную программу результат (одно число).
Функция – основная единица программы на языке Си; собственно программа и состоит из описания функций.

Слайд 98

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

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

параметры функции

int Max ( int a, int b )
{
if ( a > b ) return a ;
else return b ;
}

оператор return возвращает результат функции

тип результата

Функции

Слайд 99

Функции

Объявление функции:
тип_функции имя_функции (список_параметров)
{
тело_функции
}
Имя типа, стоящее перед именем функции, задает тип

Функции Объявление функции: тип_функции имя_функции (список_параметров) { тело_функции } Имя типа, стоящее
возвращаемого функцией значения. Если функция не возвращает никакого значения, в качестве типа пишут ключевое слово void.
Список параметров – это список локальных переменных, автоматически получающих значения в момент вызова функции. Если функция не использует параметров, то в круглых скобках не пишут ничего или пишут слово void.
Оператор return заканчивает выполнение функции. Если функция возвращает число, после слова return необходимо указать выражение, значение которого передастся в качестве результата. «return» может использоваться в теле функции сколько угодно раз.

Слайд 100

Вызов функции

Когда нужно, чтобы выполнились действия, описанные в функции, функцию вызывают.
Для этого

Вызов функции Когда нужно, чтобы выполнились действия, описанные в функции, функцию вызывают.
есть два способа:
Если функция ничего не возвращает (у нее тип void): просто написать в тексте программы имя функции, а затем, в круглых скобках, значения, которые будут присвоены параметрам функции.
Если функция возвращает значение: использовать имя функции внутри какого-нибудь выражения.
Вызвать функцию можно из любой другой функции.

Слайд 101

Вызов функции

int Max (int a, int b)
{
if (a > b)

Вызов функции int Max (int a, int b) { if (a >
return a;
else
return b;
}

void main()
{
int x = Max (10, 15);
int y = Max (5, x) * 4;
int m = -6, n = 10;
printf (“Maximum = %d”, Max (m, n));
}

Вызов Max() из выражения в операторе присваивания

Вызов Max() из выражения в функции printf()

x = 15

y = 60

a=10

b=15

Слайд 102

Объявление переменных и область видимости

Язык Си позволяет объявлять переменные в любом месте

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

short x, y;
short GetAverage (short a, short b)
{
return (a + b) / 2;
}
int main(void)
{
x = 10; y = 12;
short z = GetAverage(x, y);
printf(“z=%d”, z);
}

Параметры функции также являются ее локальными переменными. Их изменение никак не влияет на объекты, находящиеся за ее пределами.

Слайд 103

Функции

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

Функции Вернемся к нашей задаче вычисления площадей фигур. Нам нужно описать три
для вычисления площади круга, прямоугольника и треугольника.
Особенность: Каждая такая функция будет не только производить вычисления, но и обеспечивать ввод необходимых исходных данных.

double calc_round (void)
{
double r;
printf("Введите радиус круга:");
scanf("%lf", &r);
return M_PI * r * r;
}

Константа M_PI (число π) объявлена в библиотеке math.h

double calc_square(void)
{
double r;
printf("Введите сторону квадрата:");
scanf("%lf", &r);
return r * r;
}

Имя файла: Микропроцессорная_техника_2019_практика_1.pptx
Количество просмотров: 52
Количество скачиваний: 0