Презентация, доклад на тему Программирование на языке Си

Содержание

Программирование на языке СиТема 1. Введение

Слайд 1Программирование на языке Си
Введение
Переменные
Ветвления
Сложные условия
Циклы
Циклы с переменной
Оператор выбора


Отладка программ
Графика
Графики функций
Процедуры
Анимация
Функции
Случайные числа

Программирование  на языке СиВведениеПеременныеВетвленияСложные условияЦиклыЦиклы с переменнойОператор выбораОтладка программГрафикаГрафики функцийПроцедурыАнимацияФункцииСлучайные числа

Слайд 2Программирование на языке Си
Тема 1. Введение

Программирование  на языке СиТема 1. Введение

Слайд 3
Алгоритм
Свойства алгоритма
дискретность: состоит из отдельных шагов (команд)
понятность: должен включать только команды,

известные исполнителю (входящие в СКИ)
определенность: при одинаковых исходных данных всегда выдает один и тот же результат
конечность: заканчивается за конечное число шагов
массовость: может применяться многократно при различных исходных данных
корректность: дает верное решение при любых допустимых исходных данных

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

АлгоритмСвойства алгоритмадискретность: состоит из отдельных шагов (команд)понятность: должен включать только команды, известные исполнителю (входящие в СКИ)определенность: при

Слайд 4
Программа
Программа – это
алгоритм, записанный на каком-либо языке программирования
набор команд для

компьютера

Команда – это описание действий, которые должен выполнить компьютер.
откуда взять исходные данные?
что нужно с ними сделать?
куда поместить результат?

ПрограммаПрограмма – это алгоритм, записанный на каком-либо языке программированиянабор команд для компьютераКоманда – это описание действий, которые

Слайд 5
Языки программирования
Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора

(ассемблер)
Языки высокого уровня – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера
для обучения: Бейсик, ЛОГО, Паскаль
профессиональные: Си, Фортран, Паскаль
для задач искусственного интеллекта: Пролог, ЛИСП
для Интернета: JavaScript, Java, Perl, PHP, ASP
Языки программированияМашинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора (ассемблер)Языки высокого уровня – приближены к

Слайд 6
Язык Си
1972-1974 – Б. Керниган, Д. Ритчи
высокая скорость работы программ
много возможностей
стал

основой многих современных языков (С++, С#, Javascript, Java, ActionScript, PHP)

много шансов сделать ошибку, которая не обнаруживается автоматически
Язык Си1972-1974 – Б. Керниган, Д. Ритчивысокая скорость работы программмного возможностейстал основой многих современных языков (С++, С#,

Слайд 7
Простейшая программа
main()
{

}
главная (основная) программа всегда имеет имя main
начало программы
«тело» программы (основная часть)
конец

программы
Простейшая программаmain(){}главная (основная) программа всегда имеет имя mainначало программы«тело» программы (основная часть)конец программы

Слайд 8


Что происходит дальше?
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трансляторЪБzЦ2?|ё3БКаn/36ШпIC+И-ЦЗ_5МyРЧбs6bд^:/@:лЖ1_объектный файлстандартные  функцииредактор связей(компоновка)MZPо:ЄPэ_еЗ

Слайд 9
Вывод текста на экран
#include
main()
{
printf("Привет!");
}
include = включить
файл stdio.h: описание стандартных функций

ввода и вывода

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

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

Вывод текста на экран#include main(){printf(

Слайд 10
Как начать работу?
здесь мы набираем программу
сообщения об ошибках
Открыть
Новый
Сохранить
Закрыть

Как начать работу?здесь мы набираем программусообщения об ошибкахОткрытьНовыйСохранитьЗакрыть

Слайд 11
Оболочка Dev C ++ 4.9
IDE = Integrated Development Environment

интегрированная среда разработки:
текстовый редактор для создания и редактирования текстов программ
транслятор для перевода текстов программ на Си и Си++ в команды процессора
компоновщик для создания исполняемого файла (EXE-файла), подключаются стандартные функции
отладчик для поиска ошибок в программах
Оболочка Dev C ++ 4.9IDE = Integrated Development Environment     интегрированная среда разработки:текстовый редактор

Слайд 12
Управление клавишами

Управление клавишами

Слайд 13
Где ошибки?
2 x ЛКМ
эта ошибка обнаружена здесь!

Где ошибки?2 x ЛКМэта ошибка обнаружена здесь!

Слайд 14
Наиболее «популярные» ошибки

Наиболее «популярные» ошибки

Слайд 15
Ждем нажатия любой клавиши
#include
#include
main()
{
printf("Привет!"); // вывод на экран

/* ждать нажатия клавиши */
}

файл conio.h: описание функций для работы с клавиатурой и монитором

ждать нажатия на любую клавишу

комментарий до конца строки

комментарий между /* и */

getch();

Ждем нажатия любой клавиши#include #include main(){printf(

Слайд 16
Переход на новую строку
#include
#include
main()
{
printf("Привет,\n Вася!");
getch();
}
Привет,
Вася!
на экране:
последовательность \n (код

10)
переход на новую строку

\n

Переход на новую строку#include #include main(){printf(

Слайд 17
Задания
«4»: Вывести на экран текст "лесенкой"
Вася

пошел
гулять
«5»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
Задания«4»: Вывести на экран текст

Слайд 18Программирование на языке Си
Тема 2. Переменные

Программирование  на языке СиТема 2. Переменные

Слайд 19
Что такое переменная?
Переменная – это ячейка в памяти компьютера, которая имеет

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

Слайд 20
Имена переменных
Могут включать
латинские буквы (A-Z, a-z)
знак подчеркивания _
цифры 0-9


НЕ могут включать
русские

буквы
пробелы
скобки, знаки +, =, !, ? и др.

Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B

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

Слайд 21
Объявление переменных
Объявить переменную = определить ее имя, тип, начальное значение, и

выделить ей место в памяти.

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'

Объявление переменныхОбъявить переменную = определить ее имя, тип, начальное значение, и выделить ей место в памяти. main(){int

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

для изменения значения переменной.

Пример

a = 5;
x = a + 20;
y = (a + x) * (x – a);

5

25


600

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

Слайд 23
Оператор присваивания
Общая структура:
Арифметическое выражение может включать
константы (постоянные)
имена переменных
знаки арифметических операций:

+ - * / %

вызовы функций
круглые скобки ( )

умножение

деление

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

имя переменной = выражение;

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

что

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

Слайд 24
Сложение двух чисел
Задача. Ввести два целых числа и вывести на экран

их сумму.

Простейшее решение:

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

подсказка для ввода

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

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

Сложение двух чиселЗадача. Ввести два целых числа и вывести на экран их сумму.Простейшее решение:#include #include main(){ int

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

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

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

12

7652

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

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

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

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

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

scanf

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


&a

%d%d

&a, &b

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

%d%d

Что неправильно?int a, b;scanf (

Слайд 27
Вывод чисел на экран
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 );

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

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

Слайд 28
Вывод целых чисел
int x = 1234;
printf ("%d", x);
1234
printf ("%9d", x);
минимальное число

позиций

1234

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

или "%i"

или "%9i"



5

4

Вывод целых чиселint x = 1234;printf (

Слайд 29
Вывод вещественных чисел
float x = 123.4567;
printf ("%f", x);
123.456700
printf ("%9.3f", x);
минимальное число

позиций, 6 цифр в дробной части

123.456

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

printf ("%e", x);

1.234560e+02

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

printf ("%10.2e", x);

1.23e+02

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

Вывод вещественных чиселfloat x = 123.4567;printf (

Слайд 30
Полное решение
#include
#include
main()
{
int a, b, c;
printf("Введите два целых

числа\n");
scanf("%d%d", &a, &b);
c = a + b;
printf("%d+%d=%d", a, b, c);
getch();
}

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

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

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

Полное решение#include #include main(){ int a, b, c; printf(

Слайд 31
Блок-схема линейного алгоритма
начало
конец
c = a + b;
ввод a, b
вывод c
блок «начало»
блок

«ввод»

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

блок «вывод»

блок «конец»

Блок-схема линейного алгоритманачалоконецc = a + b;ввод a, bвывод cблок «начало»блок «ввод»блок «процесс»блок «вывод»блок «конец»

Слайд 32
Задания
«3»: Ввести три числа, найти их сумму.
Пример:
Введите три

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

Слайд 33
Задания
«5»: Ввести три числа, найти их сумму, произведение и среднее арифметическое.

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

Слайд 34 main()
{
int a, b;
float x, y;

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



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

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

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

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

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

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

4;
x = 4 / a;
x = float(a) / 4;
x = 1.*a / 4;
}

1

0

1.75

1.75

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

Слайд 36
Сокращенная запись операций в Си
инкремент
декремент
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;

Сокращенная запись операций в Сиинкрементдекрементa = a + 1;a++;a = a + b;a += b;a = a

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

слева направо
сложение и вычитание слева направо

z = (5*a+c)/a*(b-c)/ b;

x =(5*c*c-d*(a+b))/((c+d)*(d-2*a))



1 2 4 5 3 6

2 3 5 4 1 10 6 9 8 7

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

Слайд 38
Ручная прокрутка программы
main()
{
int a, b;
a = 5;
b =

a + 2;
a = (a + 2)*(b – 3);
b = a / 5;
a = a % b;
a++;
b = (a + 14) % 7;
}


5

7

28

5

3

4

4

?

?

Ручная прокрутка программыmain(){ int a, b; a = 5; b = a + 2; a = (a

Слайд 39Вывод на экран
int a = 1, b = 3;
printf("%d+%d=%d", a, b,

a+b);


список вывода

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

1+3=4


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

Вывод на экранint a = 1, b = 3;printf(

Слайд 40Что будет выведено?
int a = 1, b = 3;
printf("a+%d=a+b", b);
a+3=a+b
int a

= 1, b = 3;
printf("%d=F(%d)", a, b);

1=F(3)

int a = 1, b = 3;
printf("a=F(%d);", b);

int a = 1, b = 3;
printf("%d>%d!", a+b, b);

int a = 1, b = 3;
printf("F(%d)=X(%d)", b, a);

a=F(3);

4>3!

F(3)=X(1)


Слайд 41Как записать оператор вывода?
int a = 1, b = 3
printf("X(%d)=%d", b,

a);

X(3)=1

4=1+3

f(1)>f(3)

<1<>3>

1+3=?

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

int a = 1, b = 3
printf("f(%d)>f(%d)", a, b);

int a = 1, b = 3
printf("<%d<>%d>", a, b);

int a = 1, b = 3
printf("%d+%d=?", a, b);


Слайд 42Программирование на языке Си
Тема 3. Ветвления

Программирование  на языке СиТема 3. Ветвления

Слайд 43
Разветвляющиеся алгоритмы
Задача. Ввести два целых числа и вывести на экран наибольшее

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

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

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

Слайд 44

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

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

Слайд 45


Вариант 1. Программа
main()
{
int a, b, max;
printf("Введите два целых

числа\n");
scanf("%d%d", &a, &b );
if (a > b) {

}
else {

}
printf("Наибольшее число %d", max);
}

max = a;

max = b;

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


Слайд 46
Условный оператор
if ( условие )
{

// что делать, если условие верно
}
else
{
// что делать, если условие неверно
}

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

Условный оператор	if ( условие )  {    // что делать, если условие верно

Слайд 47Что неправильно?
if a > b {
a =

b;
}
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;

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

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

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

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

Слайд 49
Вариант 2. Программа


main()
{
int a, b, max;
printf("Введите два целых

числа\n");
scanf("%d%d", &a, &b );
max = a;
if (b > a)

printf("Наибольшее число %d", max);
}

max = b;

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


Слайд 50 main()
{
int a, b, max;
printf("Введите два целых числа\n");

scanf("%d%d", &a, &b );
max = b;
if ( ??? )
???
printf("Наибольшее число %d", max);
}

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

max = a;

a > b


Слайд 51
Задания
«3»: Ввести два числа и вывести их в порядке возрастания.

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

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

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

Слайд 53Программирование на языке Си
Тема 4. Сложные условия

Программирование  на языке СиТема 4. Сложные условия

Слайд 54
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет включительно.

Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли два условия одновременно.
Сложные условияЗадача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит

Слайд 55
Вариант 1. Алгоритм
начало
ввод x
'подходит'
конец




да
нет
x >= 25?


да
нет
x

Вариант 1. Алгоритмначаловвод x'подходит'конецданетx >= 25?данетx

Слайд 56Вариант 1. Программа



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

25)
if (x <= 40)
printf("Подходит");
else printf("Не подходит");
else
printf("Не подходит");
}

Слайд 57Вариант 2. Алгоритм
начало
ввод x
'подходит'


да
нет
x >= 25 и
x

Вариант 2. Алгоритмначаловвод x'подходит'данетx >= 25  иx

Слайд 58
Вариант 2. Программа


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

( x >= 25 && x <= 40 )
printf("Подходит");
else printf("Не подходит");
}

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


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

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

равно

не равно

Сложные условияСложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:!

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

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

Слайд 61Истинно или ложно при 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

Истинно или ложно при a = 2; b = 3; c = 4;!(a > b)a < b

Слайд 62
Задания
«3»: Ввести три числа и определить, верно ли, что они вводились

в порядке возрастания.
Пример:
Введите три числа:
4 5 17
да
«4»: Ввести номер месяца и вывести название времени года.
Пример:
Введите номер месяца:
4
весна
Задания«3»: Ввести три числа и определить, верно ли, что они вводились в порядке возрастания.  Пример:		Введите три

Слайд 63
Задания
«5»: Ввести возраст человека (от 1 до 150 лет) и вывести

его вместе с последующим словом «год», «года» или «лет».
Пример:
Введите возраст: Введите возраст:
24 57
Вам 24 года Вам 57 лет
Задания«5»: Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год»,

Слайд 64Программирование на языке Си
Тема 5. Циклы

Программирование  на языке СиТема 5. Циклы

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

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

Слайд 66Циклы
#include
main()
{
printf("Привет!\n");
printf("Привет!\n");
printf("Привет!\n");
printf("Привет!\n");
printf("Привет!\n");
}

Циклы#include main(){ printf(

Слайд 67Циклы

начало
конец
Блок-схема:
да
нет
тело цикла

ЦиклыначалоконецБлок-схема:данеттело цикла

Слайд 68Циклы





N := N + 1

ЦиклыN := N + 1

Слайд 69Циклы

начало
конец
да
нет
N == 5?

N = 0;
N = N + 1;

еще не

сделали ни одного раза

всё ли сделали

считаем очередной шаг

цикл

N++;

Циклыначалоконецданет N == 5?N = 0;N = N + 1;еще не сделали ни одного разавсё ли сделалисчитаем

Слайд 70Циклы с условием
main()
{
int N;
N = 0;
while (

N != 5 )
{
printf("Привет!\n");
N ++;
}
}
Циклы с условиемmain(){  int N; N = 0; while ( N != 5 )  {

Слайд 71Цикл с условием
Вместо знаков вопроса добавьте числа и операторы так, чтобы

цикл выполнился ровно 5 раз:

main()
{
int N;
N = 5;
while ( N != ??? )
{
printf("Привет!\n");
???;
}
}

0

N = N - 1;

N --;

Цикл с условиемВместо знаков вопроса добавьте числа и операторы так, чтобы цикл выполнился ровно 5 раз: main(){

Слайд 72Что получим?
// Пример 1
main()
{
int N;
N = 1;
while

( N <= 5 )
{
printf("%d\n", N);
N ++;
}
}

1
2
3
4
5


Что получим?// Пример 1main(){  int N; N = 1; while ( N

Слайд 73Что получим?
// Пример 2
main()
{
int N;
N = 1;
while

( N <= 5 )
{
printf("%d\n", N);
N = N + 2;
}
}

1
3
5


N += 2;

Что получим?// Пример 2main(){  int N; N = 1; while ( N

Слайд 74Что получим?
// Пример 3
main()
{
int N;
N = 2;
while

( N != 5 )
{
printf("%d\n", N);
N += 2;
}
}

2
4
6
8
10
12
14
16
...


Что получим?// Пример 3main(){  int N; N = 2; while ( N != 5 )

Слайд 75Что получим?
// Пример 4
main()
{
int N;
N = 1;
while

( N != 5 )
{
printf("%d\n", N*N*N);
N = N + 1;
}
}

1
8
27
64
125


Что получим?// Пример 4main(){  int N; N = 1; while ( N != 5 )

Слайд 76Что получим?
// Пример 4
main()
{
int N;
N = 5;
while

( N >= 1 )
{
printf("%d\n", N*N*N);
N = N - 1;
}
}

125
64
27
8
1


Что получим?// Пример 4main(){  int N; N = 5; while ( N >= 1 )

Слайд 77Задания
«3»: Ввести натуральное число вывести квадраты и кубы всех чисел от

1 до этого числа.
Пример:
Введите натуральное число:
3
1: 1 1
2: 4 8
3: 9 27
«4»: Ввести два целых числа a и b (a ≤ b) и вывести квадраты все чисел от a до b.
Пример:
Введите два числа:
4 5
4*4=16
5*5=25
Задания«3»: Ввести натуральное число вывести квадраты и кубы всех чисел от 1 до этого числа.  Пример:		Введите

Слайд 78Задания
«5»: Ввести два целых числа a и b (a ≤ b)

и вывести сумму квадратов всех чисел от a до b.
Пример:
Введите два числа:
4 10
Сумма квадратов 371
Задания«5»: Ввести два целых числа a и b (a ≤ b) и вывести сумму квадратов всех чисел

Слайд 79
Цикл с неизвестным числом шагов
Пример: Отпилить полено от бревна. Сколько раз

надо сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.




Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать «пока n != 0».
Цикл с неизвестным числом шаговПример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой?Задача: Ввести целое

Слайд 80

Алгоритм

начало
count
конец
нет
да
n != 0?

count = 0;

count = count + 1;
n

= n / 10;

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

ввод n


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

Алгоритмначалоcountконецнетдаn != 0?count = 0;count = count + 1;  n = n / 10;обнулить счетчик цифрввод

Слайд 81


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


{
count ++;
n = n / 10;
}
printf("В числе %d нашли %d цифр", n, count);
}

n1 = n;

n1,

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

, n1;

Программаmain(){int n, count;printf(

Слайд 82Цикл с условием
while ( условие )
{
//

тело цикла
}

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

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

while ( a < b ) a ++;

Цикл с условием	while ( условие )  {  // тело цикла     }Особенности:можно

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

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

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

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

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

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

< 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 --;

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

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

Слайд 85
Задания
«3»: Ввести целое число и определить, верно ли, что в нём

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

Слайд 86Задания
«5»: Ввести целое число и определить, верно ли, что в его

записи есть две одинаковые цифры, стоящие рядом.
Пример:
Введите целое число: Введите целое число:
1232 1224
Нет. Да.
«6»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры, НЕ обязательно стоящие рядом.
Пример:
Введите целое число: Введите целое число:
1234 1242
Нет. Да.

Задания«5»: Ввести целое число и определить, верно ли, что в его записи есть    две

Слайд 87Задания-2
«3»: Ввести целое число и определить, верно ли, что в нём

ровно 1 цифра «9».
Пример:
Введите число: Введите число:
193 1994
Да. Нет.
«4»: Ввести целое число и определить, верно ли, что все его цифры четные.
Пример:
Введите число: Введите число:
2684 2994
Да. Нет.
Задания-2«3»: Ввести целое число и определить, верно ли, что в нём ровно 1 цифра «9».

Слайд 88Задания-2
«5»: Ввести целое число и определить, верно ли, что все его

цифры расположены в порядке возрастания.
Пример:
Введите целое число: Введите целое число:
1238 1274
Да. Нет.
«6»: Ввести целое число и «перевернуть» его, так чтобы первая цифра стала последней и т.д.
Пример:
Введите целое число: Введите целое число:
1234 782
4321 287

Задания-2«5»: Ввести целое число и определить, верно ли, что все его цифры расположены в порядке возрастания.

Слайд 89Вычисление НОД
НОД = наибольший общий делитель двух натуральных чисел

– это наибольшее число, на которое оба исходных числа делятся без остатка.

Перебор:

Записать в переменную k минимальное из двух чисел.
Если a и b без остатка делятся на k, то стоп.
Уменьшить k на 1.
Перейти к шагу 2.


это цикл с условием!

Вычисление НОДНОД = наибольший общий делитель двух    натуральных чисел – это наибольшее

Слайд 90Алгоритм Евклида
Евклид
(365-300 до. н. э.)
НОД(a,b)= НОД(a-b, b)

= НОД(a, b-a)

Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.

НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)

НОД (1998, 2) = НОД (1996, 2) = … = 2

Пример:

много шагов при большой разнице чисел:

= НОД (7, 7) = 7

Надо: вычислить наибольший общий делитель (НОД) чисел a и b.

Алгоритм ЕвклидаЕвклид(365-300 до. н. э.) НОД(a,b)= НОД(a-b, b)     = НОД(a, b-a)Заменяем большее из

Слайд 91Блок-схема алгоритма

начало
конец

Блок-схема алгоритманачалоконец

Слайд 92Алгоритм Евклида
while ( a != b )
{
if ( a

> b )
a = a – b;
else b = b – a;
}
Алгоритм Евклидаwhile ( a != b ) { if ( a > b )

Слайд 93Модифицированный алгоритм Евклида
НОД(a,b)= НОД(a % b, b)

= НОД(a, b % a)

Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю. Тогда большее — это НОД.

НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7

Пример:

Еще один вариант:

НОД(2·a,2·b)= 2·НОД(a, b)
НОД(2·a,b)= НОД(a, b) | при нечетном b

Модифицированный алгоритм ЕвклидаНОД(a,b)= НОД(a % b, b)     = НОД(a, b % a)Заменяем большее

Слайд 94Алгоритм Евклида
«3»: Составить программу для вычисления НОД с помощью алгоритма Евклида.
«4»:

Составить программу для вычисления НОД с помощью модифицированного алгоритма Евклида и заполнить таблицу:



Алгоритм Евклида«3»: Составить программу для вычисления НОД с помощью алгоритма Евклида.«4»: Составить программу для вычисления НОД с

Слайд 95Алгоритм Евклида
«5»: Выполнить задание на «4» и подсчитать число шагов алгоритма

для каждого случая.
Алгоритм Евклида«5»: Выполнить задание на «4» и подсчитать число  шагов алгоритма для каждого случая.

Слайд 96
Последовательности
Примеры:
1, 2, 3, 4, 5, …
1, 2, 4, 7, 11, 16,


1, 2, 4, 8, 16, 32, …

an = n

a1 = 1, an+1 = an+1

a1 = 1, an+1 = an + n

an = 2n-1

a1 = 1, an+1 = 2an

b1 = 1, bn+1 = bn+1

c1 = 2, cn+1 = 2cn

ПоследовательностиПримеры:1, 2, 3, 4, 5, …1, 2, 4, 7, 11, 16, …1, 2, 4, 8, 16, 32,

Слайд 97
Последовательности
Задача: найти сумму всех элементов последовательности,
которые по модулю больше

0,001:

Элемент последовательности (начиная с №2):

b = b+1;

c = 2*c;

z = -z;

ПоследовательностиЗадача: найти сумму всех элементов последовательности,  которые по модулю больше 0,001: Элемент последовательности (начиная с №2):b

Слайд 98
Алгоритм

начало
S
конец
нет
да
|a| > 0.001?


S = S + a;

S = 0; b =

1; c = 2; z = -1; a = 1;

начальные значения

a = z*b/c;
b = b + 1; c = 2*c; z = -z;

первый элемент

a = 1;

S = 0;

новый элемент

изменение

АлгоритмначалоSконецнетда|a| > 0.001?S = S + a;S = 0; b = 1;  c = 2; z

Слайд 99



Программа
#include
main()
{
int b, c, z;
float S, a;
S =

0; z = -1;
b = 1; c = 2; a = 1;
while (fabs(a) > 0.001) {
S += a;
a = z * b / c;
z = - z;
b ++;
c *= 2;
}
printf ("S = %10.3f", S);
}

переход к следующему слагаемому

начальные значения

увеличение суммы

расчет элемента последовательности

математические функции

fabs – модуль вещественного числа

, b;


чтобы не было округления при делении

Программа#include main(){ int b, c, z; float S, a; S = 0; z = -1; b =

Слайд 100
Задания
«4»: Найти сумму элементов последовательности с точностью 0,001:


Ответ:
S =

1.157
«5»: Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.220
Задания«4»: Найти сумму элементов последовательности с точностью 0,001:  Ответ:		S = 1.157«5»: Найти сумму элементов последовательности с

Слайд 101
Цикл с постусловием
Задача: Ввести целое положительное число (

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

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

Цикл с постусловиемЗадача: Ввести целое положительное число (

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

начало
конец
нет
да
n

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

Слайд 103


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

&n);
}
while ( n <= 0 );
... // основной алгоритм
}

условие

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

Программаmain(){ int n; do {  printf(

Слайд 104
Сколько раз выполняется цикл?
a = 4; b = 6;
do { a

++; } 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 );

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

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

Слайд 105
Задания (с защитой от неверного ввода)
«4»: Ввести натуральное число и определить,

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

Слайд 106Программирование на языке Си
Тема 6. Циклы с переменной

Программирование  на языке СиТема 6. Циклы с переменной

Слайд 107
Цикл c переменной
Цикл – это многократное выполнение одинаковой последовательности действий.
цикл с

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

Слайд 108Алгоритм

начало
конец
нет
да
N

АлгоритмначалоконецнетдаN

Слайд 109Цикл с переменной
Задача: вывести кубы натуральных чисел от 1 до 8.


main()
{
int N, cubeN;
N = 1;
while ( N <= 8 ) {
cubeN = N*N*N;
printf("%4d\n", cubeN);
N++;
}
}

N = 1;

N <= 8

N++;

3 действия с N

Цикл с переменнойЗадача: вывести кубы натуральных чисел от 1 до 8. main(){ int N, cubeN; N =

Слайд 110
Алгоритм (с блоком «цикл»)

начало
N, cubeN
конец

cubeN = N*N*N;
N = 1,8
блок «цикл»
тело цикла

Алгоритм (с блоком «цикл»)началоN, cubeNконецcubeN = N*N*N;N = 1,8блок «цикл»тело цикла

Слайд 111


Программа
main()
{
int N, cubeN;


for (i=1; i

printf("%4d %4d\n", N, cubeN);
}
}

for (N=1; N<=8; N++)
{
cubeN = N*N*N;;
printf("%4d %4d\n", N, cubeN);
}

переменная цикла

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

конечное значение

изменение на каждом шаге:
i=i+1

ровные столбики

цикл работает, пока это условие верно

цикл

начало цикла

конец цикла

заголовок цикла

for (N=1; N<=8; N++)

cubeN = N*N*N;
printf("%4d %4d\n", N, cubeN);

тело цикла

Программаmain() {int N, cubeN;for (i=1; i

Слайд 112
Цикл с уменьшением переменной
Задача. Вывести на экран кубы целых чисел от

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

for ( )
{
cubeN = N*N*N;
printf("%4d %4d\n", N, cubeN);
}

N = 8; N >= 1; N --


Слайд 113
Цикл с переменной
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; ) { ... }

Цикл с переменной	for (начальные значения;   условие продолжения цикла;   изменение на каждом шаге) {

Слайд 114
Цикл с переменной
Особенности:
условие проверяется в начале очередного шага цикла, если оно

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




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

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

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

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

Слайд 115for (i=8; i>=1; i--) printf("Привет");
printf("i=%d", i);

Цикл с переменной
Особенности:
после

выполнения цикла во многих системах устанавливается первое значение переменной цикла, при котором нарушено условие:

for (i=1; i<=8; i++) printf("Привет");
printf("i=%d", i);

i=9

i=0

for (i=8; i>=1; i--)     printf(

Слайд 116
Сколько раз выполняется цикл?
a = 1;
for(i=1; i

= 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

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

Слайд 117
Замена for на while и наоборот
for( i=1; i


{
// тело цикла
}

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

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

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



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

Слайд 118Задания
«3»: Ввести натуральное число N и вывести числа от N до

1 (через одно) в порядке убывания.
Пример:
Введите натуральное число:
8
Ответ: 8 6 4 2
Задания«3»: Ввести натуральное число N и вывести числа от N до 1 (через одно) в порядке убывания.

Слайд 119Задания
«4»: Ввести два целых числа a и b (a ≤ b)

и вывести кубы всех чисел от a до b.
Пример:
Введите два числа:
4 6
4*4*4=64
5*5*5=125
6*6*6=216
«5»: Ввести целое число a и вывести сумму квадратов всех чисел от 1 до a с шагом 0.1.
Пример:
Введите последнее число:
3
Сумма 91.7
Задания«4»: Ввести два целых числа a и b (a ≤ b) и вывести кубы всех чисел от

Слайд 120
Задания
«3»: Ввести натуральное число вывести квадраты и кубы всех чисел от

1 до этого числа.
Пример:
Введите натуральное число:
3
1: 1 1
2: 4 8
3: 9 27
«4»: Ввести два целых числа a и b (a ≤ b) и вывести квадраты все чисел от a до b.
Пример:
Введите два числа:
4 5
4*4=16
5*5=25
Задания«3»: Ввести натуральное число вывести квадраты и кубы всех чисел от 1 до этого числа.  Пример:		Введите

Слайд 121
Задания
«5»: Ввести два целых числа a и b (a ≤ b)

и вывести сумму квадратов всех чисел от a до b.
Пример:
Введите два числа:
4 10
Сумма квадратов 371
Задания«5»: Ввести два целых числа a и b (a ≤ b) и вывести сумму квадратов всех чисел

Слайд 122Программирование на языке Си
Тема 7. Оператор выбора

Программирование  на языке СиТема 7. Оператор выбора

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

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

Слайд 124Алгоритм
начало
конец

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

да
нет
M = 1?
D = 31;
нет
M

= 2?

D = 28;

да

нет

M = 12?

D = 31;

да

вывод D

ошибка




Алгоритмначалоконецоператор выборани один вариант не подошелввод MданетM = 1?D = 31;нетM = 2?D = 28;данетM = 12?D

Слайд 125
Программа

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

M ) {
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


Слайд 126

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

эту букву.
Особенность: выбор по символьной величине.


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

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

Слайд 127
Оператор выбора
Особенности:
после 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;
}

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

Слайд 128
Задания (с защитой от неверного ввода)
«4»: Ввести номер месяца и вывести

количество дней в нем, а также число ошибок при вводе.
Пример:
Введите номер месяца: Введите номер месяца:
-2 2
Введите номер месяца: В этом месяце 28 дней.
11 Вы вводили неверно 0 раз.
В этом месяце 30 дней.
Вы вводили неверно 1 раз.
«5»: Ввести номер месяца и номер дня, вывести число дней, оставшихся до Нового года.
Пример:
Введите номер месяца:
12
Введите день:
25
До Нового года осталось 6 дней.
Задания (с защитой от неверного ввода)«4»: Ввести номер месяца и вывести количество дней в нем, а также

Слайд 129Программирование на языке Си
Тема 8. Отладка программ

Программирование  на языке СиТема 8. Отладка программ

Слайд 130
Отладка программ
Отладка – поиск и исправление ошибок в программе. Англ. debugging, bug

= моль, жучок
Методы:
трассировка – вывод сигнальных сообщений
отключение части кода (в комментарии)
пошаговое выполнение – выполнить одну строчку программы и остановиться
точки останова – выполнение программы останавливается при достижении отмеченных строк (переход в пошаговый режим)
просмотр и изменение значений переменных в пошаговом режиме
Отладка программОтладка – поиск и исправление ошибок в программе. Англ. debugging, bug = моль, жучокМетоды:трассировка – вывод

Слайд 131
Трассировка
printf("Введено X=%d\n", X);
printf("В цикле: i=%d, X=%d\n", i, X);
printf("После цикла: X=%d\n", X);
main()
{

int i, X;
printf("Введите целое число:\n");
scanf("%d", &X);

for(i=1; i<10; i++)
{

...
}

...
}

Трассировкаprintf(

Слайд 132
Отключение части кода (комментарии)
main()
{
int i, X;
printf("Введите целое число:\n");
scanf("%d",

&X);
X *= X + 2;
for(i=1; i<10; i++) X *= i;
while ( X > 5 ) {
...
}
...
}

// X *= X + 2;

/* while ( X > 5 ) {
...
} */

комментарий до конца строки //

закомментированный блок /* … */


Слайд 133
Точки останова
это точка останова
ЛКМ или Ctrl+F5
F8 – запустить и выполнить до

следующей точки останова
F7 – выполнить одну строку
Shift+F7 – войти в процедуру (функцию)
Ctrl-F7 – выполнять дальше
Ctrl-Alt-F2 – остановить программу
Точки остановаэто точка остановаЛКМ или Ctrl+F5F8 – запустить и выполнить до следующей точки остановаF7 – выполнить одну

Слайд 134
Просмотр значений переменных
навести мышь на имя переменной


ПКМ

Просмотр значений переменныхнавести мышь на имя переменнойПКМ

Слайд 135Программирование на языке Си
Тема 9. Графика

Программирование  на языке СиТема 9. Графика

Слайд 136
Система координат
(0,0)
(x,y)
X
Y
x
y

Система координат(0,0)(x,y)XYxy

Слайд 137
Принцип сэндвича
рисование в графическом режиме
открыть окно для графики
закрыть окно для графики



Принцип сэндвичарисование в графическом режимеоткрыть окно для графикизакрыть окно для графики

Слайд 138#include
#include
main()
{
initwindow ( 400, 300 );
... // рисуем на экране


getch();
closegraph();
}

initwindow ( 400, 300 );

closegraph();

Структура графической программы

открыть окно для графики

закрыть окно

чтобы посмотреть результат

библиотека для работы с графикой

ширина

высота

#include #include main(){initwindow ( 400, 300 );... // рисуем на экране getch(); closegraph();}initwindow ( 400, 300 );closegraph();Структура

Слайд 139
Цвета

Цвета

Слайд 140
Полная палитра цветов
цвет = R + G

+ B

Red
красный
0..255

Blue
синий
0..255

Green
зеленый
0..255

R = 218 G = 164 B = 32

R = 135 G = 206 B = 250



256·256·256 = 16 777 216 (True Color)

Полная палитра цветовцвет =  R  +  G  +  BRedкрасный0..255Blueсиний0..255Greenзеленый0..255R = 218 G

Слайд 141
Управление цветом
Цвет линий и текста: set color = установить цвет
setcolor ( 12

);
setcolor ( COLOR(255,255,0) );
Цвет и стиль заливки: set fill style = установить стиль заливки
setfillstyle ( стиль, цвет );

0 – выключить 3..6 – наклонные линии
1 – сплошная 7..8 – сетка 9..11 – точечная

номер цвета

R

G

B

Управление цветомЦвет линий и текста: set color = установить цветsetcolor ( 12 );setcolor ( COLOR(255,255,0) );Цвет и

Слайд 142
Точки, отрезки и ломаные
setcolor ( 10 );
line (x1, y1, x2,

y2);

putpixel (x, y, 9);

setcolor ( 12 );
moveto (x1, y1); lineto (x2, y2);
lineto (x3, y3);
lineto (x4, y4);
lineto (x5, y5);

цвет

Точки, отрезки и ломаныеsetcolor ( 10 ); line (x1, y1, x2, y2);putpixel (x, y, 9);setcolor ( 12

Слайд 143
Прямоугольники
setcolor ( 9 );
rectangle (x1, y1, x2, y2);
setfillstyle ( 1, 12

);
bar (x1, y1, x2, y2);

setfillstyle ( 1, 12 );
bar (x1, y1, x2, y2);
setcolor ( 9 );
rectangle (x1, y1, x2, y2);

цвет

стиль
(1 - сплошная)

Прямоугольникиsetcolor ( 9 );rectangle (x1, y1, x2, y2);setfillstyle ( 1, 12 );bar (x1, y1, x2, y2);setfillstyle (

Слайд 144
Окружность, заливка, текст
setcolor ( COLOR(255,0,0) );
circle ( x, y, R );
setfillstyle

( 1, 11 );
floodfill ( x, y, 0);

стиль
(1 - сплошная)

цвет границы

цвет заливки

setcolor ( 9 );
outtextxy ( x, y, "Вася" );

Окружность, заливка, текстsetcolor ( COLOR(255,0,0) );circle ( x, y, R );setfillstyle ( 1, 11 );floodfill ( x,

Слайд 145
Пример


(200, 50)
(100, 100)
(300, 200)



setfillstyle (1, 9);
bar (100,100,300,200);
setcolor (13);
rectangle (100,100,300,200);
moveto (100,100);
lineto (200,

50);
lineto (300,100);
setfillstyle (1, 14);
floodfill (200, 75, 13);
setcolor (15);
circle (200, 150,50);
setfillstyle (1, 10);
floodfill (200,150, 15);
setcolor (12);
outtextxy (100, 230,
"Sharik's house.");


Sharik's house

Пример(200, 50)(100, 100)(300, 200)setfillstyle (1, 9);bar (100,100,300,200);setcolor (13);rectangle (100,100,300,200);moveto (100,100);lineto (200, 50);lineto (300,100);setfillstyle (1, 14);floodfill (200, 75,

Слайд 146Задания
«5»: «Корона»

Задания«5»: «Корона»

Слайд 147Задания
«3»: «Домик»







«4»: «Лягушка»



Задания«3»: «Домик» «4»: «Лягушка»

Слайд 148
Штриховка
(x1, y1)
(x2, y2)



N линий (N=5)
h



rectangle (x1, y1, x2, y2);
line( x1+h,

y1, x1+h, y2);
line( x1+2*h, y1, x1+2*h, y2);
line( x1+3*h, y1, x1+3*h, y2);
...

rectangle(x1, y1, x2, y2);
h = (x2 – x1) / (N + 1.);
for (x = x1+h; x < x2; x += h)
line(x, y1, x, y2);

x

дробная часть x отбрасывается

x

результат – дробное число

Штриховка(x1, y1)(x2, y2)N линий (N=5)hrectangle (x1, y1, x2, y2);line( x1+h,  y1, x1+h,  y2);line( x1+2*h, y1,

Слайд 149
Штриховка (программа)
(x1, y1)
(x2, y2)



h
#include
#include
main()
{
int N =

10, x1 = 100, x2 = 300, y1 = 100, y2 = 200;
float h, x;
initwindow(800,600);
rectangle (x1, y1, x2, y2);



getch();
closegraph();
}

прямоугольник

штриховка

N

h = (x2 – x1) / (N + 1.);
for (x = x1+h; x < x2; x += h)
line(x, y1, x, y2);

Штриховка (программа)(x1, y1)(x2, y2)h#include #include main() {  int N = 10, x1 = 100,

Слайд 150
Штриховка
(x1, y1)

(x2, y2)
(x3, y2)



a
h
(x3+a, y1)



line( x1+h, y1, x1+h-a,

y2);
line( x1+2*h, y1, x1+2*h-a, y2);
line( x1+3*h, y1, x1+3*h-a, y2);
...

h = (x3 – x2) / (N + 1.);
a = x2 – x1;
x = x1 + h;
for (i = 1; i <= N; i ++, x += h )
line(x, y1, x-a, y2);

x

x-a

i ++, x += h

после каждого шага выполняются две команды

Штриховка(x1, y1)(x2, y2)(x3, y2)ah(x3+a, y1)line( x1+h,   y1, x1+h-a,  y2);line( x1+2*h, y1, x1+2*h-a, y2);line( x1+3*h,

Слайд 151
Штриховка

(x1, y1)
(x2, y2)


hx
hy



y

x
y
line( x1, y1+hy, x1+hx, y1+hy

);
line( x1, y1+2*hy, x1+2*hx, y1+2*hy);
line( x1, y1+3*hy, x1+3*hx, y1+3*hy);
...

hx = (x2 – x1) / (N + 1.);
hy = (y2 – y1) / (N + 1.);
x = x1 + hx; y = y1 + hy;
for (i=1; i <= N; i++) {
line( x1, y, x, y );
x += hx; y += hy;
}

Штриховка(x1, y1)(x2, y2)hxhyyxyline( x1, y1+hy,   x1+hx,   y1+hy );line( x1, y1+2*hy, x1+2*hx, y1+2*hy);line( x1,

Слайд 152Задания
«3»: Ввести с клавиатуры количество линий, построить фигуру и выполнить штриховку:





«4»: Ввести с клавиатуры количество линий, построить фигуру и выполнить штриховку:

или

Задания«3»: Ввести с клавиатуры количество линий, построить фигуру и выполнить штриховку: «4»: Ввести с клавиатуры количество линий,

Слайд 153Задание
«5»: Ввести с клавиатуры количество линий и построить фигуру:

Задание«5»: Ввести с клавиатуры количество линий и   построить фигуру:

Слайд 154COLOR(c, c, c)

Как менять цвет?
(x1, y1)
(x2, y2)


hc = 255 / N;
c

= 0;
for ( i=1; i<=N+1; i++ ) {
setfillstyle ( 1, COLOR(c,c,c) );
floodfill( ???, ???, 15 );
c += hc;
}

цвет границы

Шаг изменения c:

серый: R = G = B

Цвет:

Изменение c: 0, ..., 255

N

COLOR(c, c, c)Как менять цвет?(x1, y1)(x2, y2)hc = 255 / N;c = 0;for ( i=1; i

Слайд 155
Как менять цвет?
setfillstyle( 1, COLOR(c,c,c) );
floodfill ( ???, ???, 15 );
hc

= 255 / N;
c = 0;
x = x1 + h;
for ( i=1; i <= N+1; i++ ) {
setfillstyle(1,COLOR(c,c,c));
floodfill ( x-1, y1+1, 15 );
x += h;
c += hc;
}

c = 0;

COLOR(c,c,c)

c += hc;

правая граница полосы

(x1, y1)

(x2, y2)



(x-1, y1+1)


Как менять цвет?setfillstyle( 1, COLOR(c,c,c) );floodfill ( ???, ???, 15 );hc = 255 / N;c = 0;x

Слайд 156
Задания
«4»: Ввести с клавиатуры число линий штриховки и построить фигуру, залив

все области разным цветом.







«5»: Ввести с клавиатуры число окружностей и построить фигуру, залив все области разным цветом.
Задания«4»: Ввести с клавиатуры число линий штриховки и построить фигуру, залив все области разным цветом. «5»: Ввести

Слайд 157Программирование на языке Си
Тема 10. Графики функций (только с 9 класса)

Программирование  на языке СиТема 10. Графики функций (только с 9 класса)

Слайд 158
Построение графиков функций
Задача: построить график функции y = 3 sin(x) на

интервале от 0 до 2π.
Анализ:
максимальное значение ymax = 3 при x = π/2
минимальное значение ymin = -3 при x = 3π/2
Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.
Построение графиков функцийЗадача: построить график функции y = 3 sin(x) на интервале от 0 до 2π.Анализ: максимальное

Слайд 159
Преобразование координат
(x,y)

X
Y
x
y
Математическая
система координат
Экранная система координат (пиксели)

(xэ,yэ)



(0,0)
(0,0)
a
b
k – масштаб (длина изображения

единичного отрезка на экране)

xэ = a + kx
yэ = b - ky

Преобразование координат(x,y)XYxyМатематическая система координатЭкранная система координат (пиксели)(xэ,yэ)xэyэ(0,0)(0,0)abk – масштаб (длина изображения единичного отрезка на экране)xэ = a

Слайд 160Программа



const a = 50, b = 200, k = 50;
const float

xmin = 0, xmax =2*M_PI;
float x, y, h = 0.01;
int xe, ye, w;
w = (xmax - xmin)*k;
line(a-10, b, a+w, b);
line(a, 0, a, 2*b);
for (x = xmin; x < xmax; x += h)
{
y = 3*sin(x);
xe = a + k*x;
ye = b - k*y;
putpixel (xe, ye, 12);
}


h – шаг изменения x

w – длина оси ОХ в пикселях

координаты точки на экране

оси координат

Программаconst a = 50, b = 200, k = 50;const float xmin = 0, xmax =2*M_PI;float x,

Слайд 161
Как соединить точки?
Алгоритм:
Если первая точка
перейти в точку (xэ,yэ)
иначе
отрезок

в точку (xэ,yэ)

Программа:



выбор варианта действий


переменная-флаг (1 или 0)

int first;
...
first = 1;
for (x = xmin; x < xmax; x += h)
{
...
if ( first ) {
moveto(xe, ye);
first = 0;
}
else lineto(xe, ye);
...
}

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

Как соединить точки?Алгоритм:Если первая точка перейти в точку (xэ,yэ)иначе  отрезок в точку (xэ,yэ)Программа:выбор варианта действийпеременная-флаг (1

Слайд 162
Задания
«4»: Построить график функции y = x2 на интервале [-3,3].







«5»: Построить график функции (эллипс)


Задания«4»: Построить график функции y = x2 на интервале [-3,3]. «5»: Построить график  функции (эллипс)

Слайд 163Программирование на языке Си
Тема 11. Процедуры

Программирование  на языке СиТема 11. Процедуры

Слайд 164
Процедуры
Задача: Построить фигуру:
Особенность: Три похожие фигуры.
общее: размеры, угол поворота
отличия: координаты,

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

Слайд 165
Процедуры
Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.
Применение:
выполнение

одинаковых действий в разных местах программы
разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия
ПроцедурыПроцедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.Применение:выполнение одинаковых действий в разных местах программыразбивка

Слайд 166
Процедуры
Порядок разработки:
выделить одинаковое или похожее (три фигуры)
найти в них общее (размеры,

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

(x+100, y)

(x, y-60)


void Tr( int x, int y, int c )
{
...
}

имя процедуры

тело

координаты

цвет

void – «пустой» (некоторые действия)

ПроцедурыПорядок разработки:выделить одинаковое или похожее (три фигуры)найти в них общее (размеры, форма, угол поворота) и отличия (координаты,

Слайд 167
Процедуры
(x+100, y)
(x, y-60)

void Tr( int x, int y, int c )
{

moveto ( x, y );
lineto ( x, y-60 );
lineto ( x+100, y );
lineto ( x, y );
setfillstyle ( 1, c );
floodfill ( x+20, y-20, 15);
}

тело процедуры

формальные параметры

«Формальные параметры» могут изменяться, заранее неизвестны (обозначаются именами, как переменные).

Процедуры(x+100, y)(x, y-60)void Tr( int x, int y, int c ){  moveto ( x, y );

Слайд 168Программа
#include
#include




main()
{
initwindow (400, 300);
Tr (100, 100, COLOR(0,0,255));
Tr

(200, 100, COLOR(0,255,0));
Tr (200, 160, COLOR(255,0,0));
getch();
closegraph();
}

(100,100)

100

60

фактические параметры

вызовы процедуры

void Tr( int x, int y, int c)
{
...
}

формальные параметры

процедура

Программа#include #include main(){ initwindow (400, 300); Tr (100, 100, COLOR(0,0,255)); Tr (200, 100, COLOR(0,255,0)); Tr (200, 160,

Слайд 169
Процедуры
Особенности:
обычно процедуры расположены выше основной программы
в заголовке процедуры перечисляются формальные параметры,

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

void Tr( int x, int y, int c )

Tr ( 200, 100, COLOR(255,0,0));

x

y

c

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

Слайд 170
Процедуры
Особенности:
для каждого формального параметра в заголовке процедуры указывают его тип
внутри процедуры

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

void A ( int x, float y, char z ) { ... }

void A ( int x, float y, char z ) {
int a2, bbc = 345;
... }

локальные переменные

int a2, bbc = 345;

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

Слайд 171Как поменять местами?
2
3
1
Задача: поменять местами содержимое двух чашек.
Задача: поменять местами содержимое

двух ячеек памяти.

4

6

?

4

6

4

x

y

c

c = x;
x = y;
y = c;

x = y;
y = x;


3

2

1

Как поменять местами?231Задача: поменять местами содержимое двух чашек.Задача: поменять местами содержимое двух ячеек памяти.46?464xycc = x;x =

Слайд 172





Параметры-переменные
Задача: составить процедуру, которая меняет местами значения двух переменных.
Особенности: надо, чтобы

изменения, сделанные в процедуре, стали известны вызывающей программе.





main()
{
int x = 1, y = 2;
Swap ( x, y );
printf ( "x = %d, y = %d", x, y );
}

void Swap ( int a, int b )
{
int c;
c = a; a = b; b = c;
}


эта процедура работает с копиями параметров

x = 1, y = 2

Параметры-переменныеЗадача: составить процедуру, которая меняет местами значения двух переменных.Особенности: надо, чтобы изменения, сделанные в процедуре, стали известны

Слайд 173Параметры-переменные
Применение: таким образом процедура (и функция) может возвращать несколько значений
Запрещенные варианты

вызова
Swap ( 2, 3 ); // числа
Swap ( x+z, y+2 ); // выражения

void Swap ( int & a, int & b )
{
int c;
c = a; a = b; b = c;
}

&

параметры могут изменяться





&

Параметры-переменныеПрименение:  таким образом процедура (и функция) может возвращать несколько значенийЗапрещенные варианты вызоваSwap ( 2, 3 );

Слайд 174Задания
«3»: Используя одну процедуру, построить фигуру.







«4»: Используя одну процедуру,

построить фигуру.
Задания«3»: Используя одну процедуру, построить фигуру. «4»: Используя одну процедуру, построить фигуру.

Слайд 175Задания
«5»: Используя одну процедуру, построить фигуру.

Задания«5»: Используя одну процедуру, построить фигуру.

Слайд 176Программирование на языке Си
Тема 12. Анимация

Программирование  на языке СиТема 12. Анимация

Слайд 177
Анимация
Анимация (англ. animation) – оживление изображения на экране.
Задача: внутри синего квадрата

400 на 400 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области.

Проблема: как изобразить перемещение объекта на экране?
Привязка: состояние объекта задается координатами (x,y)
Принцип анимации:
рисуем объект в точке (x,y)
задержка на несколько миллисекунд
стираем объект
изменяем координаты (x,y)
переходим к шагу 1

АнимацияАнимация (англ. animation) – оживление изображения на экране.Задача: внутри синего квадрата 400 на 400 пикселей слева направо

Слайд 178

Как «поймать» нажатие клавиши?
kbhit() – функция, определяет, было ли нажатие

на (любую!) клавишу (0 – не было, не 0 – было).
getch() – функция, которая определяет код нажатой клавиши: 27 = Esc, 13 = Enter, 32 = пробел, …

if ( kbhit() )
printf("Нажата какая-то клавиша...");
else printf("Нет нажатия...");

if ( kbhit() ) {
printf("Нажата какая-то клавиша...");
c = getch();
printf("Код клавиши %d", c);
}

int c;

if ( kbhit() != 0 )

Как «поймать» нажатие клавиши?kbhit() – функция, определяет, было ли нажатие на (любую!) клавишу (0 – не

Слайд 179

Как выйти из цикла?

#include
main()
{
...
while ( x + 20

< 400 )
{
if ( kbhit() )
if ( getch() == 27 ) break;
...
}
...
}

если нажата клавиша ...

если нажата клавиша с кодом 27 (Esc), выйти из цикла

для kbhit() и getch()

пока не вышли за границу синего квадрата

x + 20 < 400

Как выйти из цикла?#include main(){ ... while ( x + 20 < 400 )  {

Слайд 180

Процедура (рисование и стирание)
void Draw( int x, int y, int color

)
{
setfillstyle ( 1, color );
bar ( x, y, x+20, y+20 );
}


(x, y)



(x+20, y+20)

Идеи
одна процедура рисует и стирает
стереть = нарисовать цветом фона
границу квадрата отключить (в основной программе)

цвет: желтым рисуем, синим стираем

сплошная заливка цветом color

залитый прямоугольник

Процедура (рисование и стирание)void Draw( int x, int y, int color ){setfillstyle ( 1, color );bar (

Слайд 181


Полная программа

#include
#include
void Draw ( int x, int y, int

color )
{
...
}
main()
{
int x, y;
initwindow (500, 500);
setfillstyle(1, COLOR(0,0,255));
bar (0, 0, 399, 399);
x = 0; y = 240;
/* анимация */
closegraph();
}

процедура

начальные координаты

синий фон

Полная программа#include #include void Draw ( int x, int y, int color ) { ... }main(){ int

Слайд 182

Цикл анимации


while ( x + 20 < 400 )
{

if ( kbhit() )
if ( getch() == 27 ) break;
Draw ( x, y, COLOR(255,255,0) );
delay ( 20 );
Draw ( x, y, COLOR(0,0,255) );
x ++;
}

выход по клавише Esc

ждем 20 мс

пока не вышли из синего квадрата

Цикл анимацииwhile ( x + 20 < 400 )  {  if ( kbhit() )

Слайд 183Задания
«3»: Квадрат двигается справа налево:



«4»: Два квадрата двигаются в противоположных направлениях:

Задания«3»: Квадрат двигается справа налево:«4»: Два квадрата двигаются в противоположных направлениях:

Слайд 184Задания

«5»: Два квадрата двигаются в противоположных направлениях и отталкиваются от стенок

синего квадрата:








Задания«5»: Два квадрата двигаются в противоположных направлениях  и отталкиваются от стенок синего квадрата:

Слайд 185
Управление клавишами
Задача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:
влево

– 75 вверх – 72 Esc – 27
вправо – 77 вниз – 80
Проблема: как изменять направление движения?
Решение:

if нажата клавиша {
получить код клавиши - code
if (code == 27) break;
if (code == 75) x --;
if (code == 77) x ++;
if (code == 72) y --;
if (code == 80) y ++;
}

( kbhit() )

code = getch();

switch ( code ) {
case 75: x --; break;
case 77: x ++; break;
case 72: y --; break;
case 80: y ++;
}
}

если было нажатие на клавишу, …

получить код клавиши

выход по Esc

перемещение

Управление клавишамиЗадача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:			влево – 75		вверх – 72		Esc – 27			вправо

Слайд 186




Программа
void Draw (int x, int y, int color)
{
...
}
if ( kbhit()

) {
...
}

процедура

основной цикл

обработка нажатия на клавишу

main()
{
int x, y, code;
...
while ( 1 ) {
Draw(x, y, COLOR(255,255,0));
delay(20);
Draw(x, y, COLOR(0,0,255));



}
}

Программаvoid Draw (int x, int y, int color){ ...}if ( kbhit() ) { ... }процедураосновной циклобработка нажатия

Слайд 187Задания
«3»: Квадрат в самом начале стоит в правом нижнем углу, и

двигается при нажатии стрелок только вверх или влево:


«4»: Квадрат двигается при нажатии стрелок, однако не может выйти за границы синего квадрата:













Задания«3»: Квадрат в самом начале стоит в правом нижнем углу, и двигается при нажатии стрелок только вверх

Слайд 188Задания
«5»: Квадрат непрерывно двигается, при нажатии стрелок меняет направление и отталкивается

от стенок синего квадрата:







Задания«5»: Квадрат непрерывно двигается, при нажатии стрелок меняет направление и отталкивается от стенок синего квадрата:

Слайд 189
Вращение (для 8-11 класса)
Задача: изобразить модель вращения Земли вокруг Солнца.
Проблема: движение

по окружности, как изменять координаты?
Решение: использовать в качестве независимой переменной (менять в цикле) угол поворота α



(x0, y0)



α

L

(x, y)

x = x0 + L·cos(α)
y = y0 – L·sin(α)


Вращение (для 8-11 класса)Задача: изобразить модель вращения Земли вокруг Солнца.Проблема: движение по окружности, как изменять координаты?Решение: использовать

Слайд 190Процедура
void Draw( int x, int y, int color )
{
const int r

= 10;
setcolor ( color );
circle ( x, y, r );
}

цвет: желтый – рисуем, черный – стираем

установили цвет линий

радиус Земли




(x,y)

r

постоянная

Процедураvoid Draw( int x, int y, int color ){const int r = 10;setcolor ( color );circle (

Слайд 191Константы и переменные
#include // математические функции




main()
{
const int

rSun = 60, // радиус Солнца
L = 150, // радиус орбиты Земли
x0 = 200, // координаты центра Солнца
y0 = 200;
int x, y, // координаты Земли
code; // код нажатой клавиши
float a, ha; // угол поворота, шаг
initwindow( 500, 500 );
...
}

void Draw ( int x, int y, int color )
{
...
}

Константы и переменные#include  // математические функцииmain(){ const int     rSun = 60,

Слайд 192
Основной цикл

circle ( x0, y0, rSun );
setfillstyle(1, COLOR(255,255,0));

floodfill(x0, y0, COLOR(255,255,255));
a = 0; // начальный угол
ha = M_PI/180; // шаг 1o за 20 мс
while(1) {
x = x0 + L*cos(a);
y = y0 - L*sin(a);
Draw ( x, y, COLOR(0,255,255) );
delay ( 20 );
Draw(x, y, 0);


a = a + ha;
}
closegraph();

рисуем Солнце: белый контур, желтая заливка

if ( kbhit() )
if ( 27 == getch() ) break;

новые координаты

поворот на ha

ждем 20 мс

выход по Esc

Основной цикл circle ( x0, y0, rSun ); setfillstyle(1, COLOR(255,255,0)); floodfill(x0, y0, COLOR(255,255,255)); a = 0;

Слайд 193«4»: Изобразить модель Солнца с двумя планетами, которые вращаются в противоположные

стороны:


«5»: Изобразить модель системы Солнце-Земля-Луна:

Задания









«4»: Изобразить модель Солнца с двумя планетами, которые вращаются в противоположные стороны: «5»: Изобразить модель системы Солнце-Земля-Луна:

Слайд 194Программирование на языке Си
Тема 13. Функции

Программирование  на языке СиТема 13. Функции

Слайд 195Функции
Функция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое

значение.
Примеры:
вычисление модуля числа,
расчет значений по сложным формулам
ответ на вопрос (простое число или нет?)
Зачем?
для выполнения одинаковых расчетов в различных местах программы
для создания общедоступных библиотек функций
ФункцииФункция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение. Примеры: вычисление модуля числа,

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

пример ее использования
Функция:

формальные параметры




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

return - вернуть результат функции

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

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

Слайд 197Функции
Особенности:
в начале заголовка ставится тип результата
формальные параметры описываются так же, как

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

Слайд 198Функции
Особенности:
можно объявлять и использовать локальные переменные
локальные переменные

ФункцииОсобенности:можно объявлять и использовать локальные переменныелокальные переменные

Слайд 199


Программа




main()
{
int a, b, с;
printf ( "Введите два числа\n" );

scanf ( "%d%d", &a, &b );
c = Max ( a, b );
printf ( "Наибольшее число %d", c );
}

int Max ( int a, int b )
{
...
}

фактические параметры

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

формальные параметры

Программаmain(){ int a, b, с; printf (

Слайд 200
Задания
«4»: Составить функцию, которая определяет сумму всех чисел от 1 до

N и привести пример ее использования.
Пример:
Введите число:
100
сумма чисел от 1 до 100 = 5050
«5»: Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна, на 3-ю – 4 зерна, …)
Пример:
Введите номер клетки:
28
На 28-ой клетке 134217728 зерен.
Задания«4»: Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования.

Слайд 201
Задания (вариант 2 для 9-11 класса)
«4»: Составить функцию, которая определяет наибольший

общий делитель двух натуральных и привести пример ее использования.
Пример:
Введите два числа:
14 21
НОД(14,21)=7
«5»: Составить функцию, которая вычисляет функцию синус как сумму ряда (с точностью 0.001)

Пример:
Введите угол в градусах:
45
sin(45) = 0.707

x в радианах!

Задания (вариант 2 для 9-11 класса)«4»: Составить функцию, которая определяет наибольший общий делитель двух натуральных и привести

Слайд 202Логические функции
Задача: составить функцию, которая определяет, верно ли, что заданное число

– простое.
Особенности:
ответ – логическое значение: «да» (1) или «нет» (0)
результат функции можно использовать как логическую величину в условиях (if, while)
Алгоритм: считаем число делителей в интервале от 2 до N-1, если оно не равно нулю – число составное.



count = 0;
for (i = 2; i < N; i ++)
if ( N % i == 0) count ++;
if ( count == 0 )
// число N простое}
else // число N составное

Логические функцииЗадача: составить функцию, которая определяет, верно ли, что заданное число – простое.Особенности:ответ – логическое значение: «да»

Слайд 203Функция: простое число или нет
int Prime ( int N )
{
int

count = 0, i;
for (i = 2; i*i <= N; i++)
if (N % i == 0) count ++;
return (count == 0);
}

if (count == 0) return 1;
else return 0;

Функция: простое число или нетint Prime ( int N ) {int count = 0, i;for (i =

Слайд 204Логические функции
#include




main()
{
int N;
printf ( "Введите целое число\n" );

scanf ( "%d", &N );
if ( Prime( N ) )
printf ("%d - простое число", N);
else printf ("%d - составное число", N);
}

int Prime ( int N )
{
...
}

функция

Prime( N )

Логические функции#include main(){ int N; printf (

Слайд 205
Задания
«4»: Составить функцию, которая определяет, верно ли, что сумма его цифр

– четное число.
Пример:
Введите число:
136
Сумма цифр четная.
«5»: Составить функцию, которая определяет, верно ли, что в заданном числе все цифры стоят по возрастанию.
Пример:
Введите число:
258
Верно.

Введите число:
528
Неверно.

Введите число:
245
Сумма цифр нечетная.

Задания«4»: Составить функцию, которая определяет, верно ли, что сумма его цифр – четное число.  Пример:	 Введите

Слайд 206Программирование на языке Си
Тема 14. Случайные числа

Программирование  на языке СиТема 14. Случайные числа

Слайд 207Случайные числа
Случайные явления: везде…
бросание монеты («орел» или «решка»)
падение снега
броуновское движение
помехи при

телефонной связи
шум радиоэфира
Случайные числа – это такая последовательность чисел, для которой невозможно предсказать следующее даже зная все предыдущие.
Проблема: как получить на компьютере?
Возможные решения:
использовать внешний источник шумовых помех
с помощью математических преобразований
Случайные числаСлучайные явления: везде…бросание монеты («орел» или «решка»)падение снегаброуновское движениепомехи при телефонной связишум радиоэфираСлучайные числа – это

Слайд 208Псевдослучайные числа
Псевдослучайные числа – это такая последовательность чисел, которая обладает свойствами

случайных чисел, но каждое следующее число вычисляется по заданной формуле.
Примеры:
Случайные целые числа [0,m) (линейный конгруэнтный метод)



Случайные вещественные числа [0,1]
Литература:
Д. Кнут, Искусство программирования для ЭВМ, т.2.

дробная часть числа

a, c, m - целые числа

простое число

230-1

например, k = 5

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

Псевдослучайные числаПсевдослучайные числа – это такая последовательность чисел, которая обладает свойствами случайных чисел, но каждое следующее число

Слайд 209Распределение случайных чисел
Модель: снежинки падают на отрезок [a,b]
распределение
равномерное
неравномерное

Распределение случайных чиселМодель: снежинки падают на отрезок [a,b]распределениеравномерноенеравномерное

Слайд 210Распределение случайных чисел
Особенности:
распределение – это характеристика всей последовательности, а не

одного числа
равномерное распределение одно, компьютерные датчики (псевдо)случайных чисел дают равномерное распределение
неравномерных – много
любое неравномерное можно получить с помощью равномерного


a

b

a

b

равномерное распределение

равномерное распределение

Распределение случайных чиселОсобенности: распределение – это характеристика всей последовательности, а не одного числаравномерное распределение одно, компьютерные датчики

Слайд 211Генератор случайных чисел в Си
RAND_MAX – максимальное случайное целое число

(обычно RAND_MAX = 32767)
rand() – случайное целое число в интервале [0,RAND_MAX]



srand(N) – установить начальное значение последовательности случайных чисел N:

#include // случайные числа

int x, y;
x = rand(); // первое число [0,RAND_MAX]
y = rand(); // уже другое число

srand ( 345 ); // начнем с 345

Генератор случайных чисел в СиRAND_MAX – максимальное случайное целое число

Слайд 212Целые числа в заданном интервале

Целые числа в интервале [0,N-1]:




Примеры:

Целые

числа в интервале [a,b]:

int random(int N) {
return rand()% N;
}

x = random ( 100 ); // интервал [0,99]
x = random ( z ); // интервал [0,z-1]

x = random ( z ) + a; // интервал [a,z-1+a]
x = random (b – a + 1) + a; // интервал [a,b]

Целые числа в заданном интервалеЦелые числа в интервале [0,N-1]: Примеры: Целые числа в интервале [a,b]: int random(int

Слайд 213Генератор случайных чисел в Си
Вещественные числа в интервале [0,1]
float x;

x = 1.*rand() / RAND_MAX; // интервал [0,1]
Вещественные числа в интервале [0,z]
x = 1.*z*rand() / RAND_MAX;
Вещественные числа в интервале [a,z+a]
x = 1.*z*rand() / RAND_MAX + a;
Вещественные числа в интервале [a,b]
x = 1.*(b-a)*rand() / RAND_MAX + a;

[0,RAND_MAX] = [0,32767]

Генератор случайных чисел в СиВещественные числа в интервале [0,1] float x; x = 1.*rand() / RAND_MAX; //

Слайд 214Случайные числа
Задача: заполнить прямоугольник 400 на 300 пикселей равномерно точками случайного

цвета
Как получить случайные координаты точки?
x = random ( 400 );
y = random ( 300 );
Как добиться равномерности?
обеспечивается автоматически при использовании функции random
Как получить случайный цвет?
R = random( 256 ); G = random ( 256 );
B = random( 256 );

COLOR(R,G,B)

Случайные числаЗадача: заполнить прямоугольник  400 на 300 пикселей равномерно  точками случайного цветаКак получить случайные координаты

Слайд 215Программа
#include
#include
#include



main()
{
int x, y, R, G, B;
initwindow

( 500, 500 );
// цикл до нажатия на Esc
closegraph();
}

int random(int N) {
return rand() % N;
}

функция для получения случайного числа от 0 до N-1

Программа#include #include #include main(){ int x, y, R, G, B; initwindow ( 500, 500 );  //

Слайд 216Основной цикл
while ( 1 ) {


x = random(400);

y = random(300);
R = random(256);
G = random(256);
B = random(256);
putpixel ( x, y, COLOR(R,G,B));
}

if ( kbhit() )
if ( 27 == getch() ) break;

случайные координаты

случайный цвет

выход по Esc

бесконечный цикл???

Основной циклwhile ( 1 ) {  x = random(400);  y = random(300); R = random(256);

Слайд 217Задания
«3»: Заполнить квадрат точками случайного цвета. размер квадрата ввести с клавиатуры:

Пример:
Введите размер квадрата:
150


«4»: Заполнить область точками случайного цвета:
Задания«3»: Заполнить квадрат точками случайного цвета. размер квадрата ввести с клавиатуры:	 Пример:	 Введите размер квадрата:	 150«4»: Заполнить

Слайд 218Залания
«5»: Заполнить область точками случайного цвета:
или

Залания«5»: Заполнить область точками случайного цвета:или

Слайд 219Конец фильма

ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики высшей категории,
ГОУ СОШ № 163,

г. Санкт-Петербург
kpolyakov@mail.ru
Конец фильмаПОЛЯКОВ Константин Юрьевичд.т.н., учитель информатики высшей категории,ГОУ СОШ № 163, г. Санкт-Петербургkpolyakov@mail.ru

Что такое shareslide.ru?

Это сайт презентаций, где можно хранить и обмениваться своими презентациями, докладами, проектами, шаблонами в формате PowerPoint с другими пользователями. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами.


Для правообладателей

Яндекс.Метрика

Обратная связь

Email: Нажмите что бы посмотреть