Разделы презентаций


Си_Основы.ppt

Содержание

Программирование на языке СиТема 1. Введение© К.Ю. Поляков, 2007-2008

Слайды и текст этой презентации

Слайд 1Программирование на языке Си
© К.Ю. Поляков, 2007-2008
Введение
Переменные
Ввод и вывод
Ветвления
Сложные условия
Циклы
Циклы

с условием

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

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

Слайд 2Программирование на языке Си
Тема 1. Введение
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 1. Введение© К.Ю. Поляков, 2007-2008

Слайд 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. Переменные
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 2. Переменные© К.Ю. Поляков, 2007-2008

Слайд 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 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

Слайд 25
Особенность деления в Си
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 =

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

Слайд 27
Ручная прокрутка программы
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

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

и вычитание слева направо
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));



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

Слайд 29Программирование на языке Си
Тема 3. Ввод и вывод
© К.Ю. Поляков,

2007-2008

Программирование  на языке СиТема 3. Ввод и вывод© К.Ю. Поляков, 2007-2008

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

экран их сумму.
Простейшее решение:
#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

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

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

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

12

7652

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

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

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

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

Слайд 32
Что неправильно?
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 (

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

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

число позиций
1234
всего 9 позиций
или "%i"
или "%9i"


5
4

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

Слайд 35
Вывод вещественных чисел
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 (

Слайд 36
Полное решение
#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(

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

«начало»
блок «ввод»
блок «процесс»
блок «вывод»
блок «конец»

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

Слайд 38
Задания
«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
Задания«4»: Ввести три числа, найти их сумму и произведение.  Пример:	 Введите три числа:	 4  5

Слайд 39Программирование на языке Си
Тема 4. Ветвления
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 4. Ветвления© К.Ю. Поляков, 2007-2008

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

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

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

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

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

Слайд 41

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

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

Слайд 42


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

целых числа\n");
scanf("%d%d", &a, &b );
if (a

> b) {

}
else {

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

max = a;

max = b;

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


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

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

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

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

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

Слайд 44Что неправильно?
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

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

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

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

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


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

целых числа\n");
scanf("%d%d", &a, &b );
max =

a;
if (b > a)

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

max = b;

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


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

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

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

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

max = a;

a > b


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

Пример:
Введите три числа:
4 15 9
Наибольшее число 15
«5»: Ввести

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

Слайд 49Программирование на языке Си
Тема 5. Сложные условия
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 5. Сложные условия© К.Ю. Поляков, 2007-2008

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

включительно. Ввести возраст человека и определить, подходит ли он фирме

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

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




да
нет
x >= 25?


да
нет
x

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

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



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

>= 25)
if (x

printf("Подходит");
else printf("Не подходит");
else
printf("Не подходит");
}

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


да
нет
x >= 25 и
x

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

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


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

if ( x >= 25 && x

printf("Подходит");
else printf("Не подходит");
}

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


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

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

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

равно

не равно

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

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

, >=
==, !=
&& (И)
|| (ИЛИ)
Пример:
2

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

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

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

Пример:
Введите номер месяца:
4
весна
«5»: Ввести возраст человека (от 1 до 150

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

Слайд 59Программирование на языке Си
Тема 6. Циклы
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 6. Циклы© К.Ю. Поляков, 2007-2008

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

числом шагов
цикл с неизвестным числом шагов (цикл с условием)
Задача. Вывести

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

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

начало
i, i2, i3
конец
нет
да
i

1;

i2 = i * i;
i3 = i2 * i;
задать начальное

значение переменной цикла

проверить, все ли сделали

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

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

перейти к следующему i

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

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

начало
i, i2, i3
конец

i2 = i * i;
i3

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

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

Слайд 63


Программа
main()
{
int i, i2, i3;


for (i=1; i

= i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2,

i3);
}
}

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

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

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

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

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

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

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

цикл

начало цикла

конец цикла

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

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

i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);

тело цикла

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

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

целых чисел от 8 до 1 (в обратном порядке).
Особенность: переменная

цикла должна уменьшаться.
Решение:

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

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


Слайд 65
Цикл с переменной
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 (начальные значения;   условие продолжения цикла;   изменение на каждом шаге) {

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

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

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




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

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

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

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

Слайд 67for (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(

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

4
a = 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 >=

Слайд 69
Задания
«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

Задания«4»: Ввести a и b и вывести квадраты и кубы чисел от a до b.  Пример:		Введите

Слайд 70Программирование на языке Си
Тема 7. Циклы с условием
© К.Ю. Поляков,

2007-2008

Программирование  на языке СиТема 7. Циклы с условием© К.Ю. Поляков, 2007-2008

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

раз надо сделать движения пилой?
Задача: Ввести целое число (

определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.




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

Слайд 72

Алгоритм

начало
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;обнулить счетчик цифрввод

Слайд 73


Программа
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(

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

// тело цикла
}
Особенности:
можно использовать сложные

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

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

while ( a < b ) a ++;

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

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

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

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

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

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

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

Слайд 76
Сколько раз выполняется цикл?
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

Слайд 77
Замена 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 --; }

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

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

число и определить, верно ли, что в его записи есть две одинаковые цифры.

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

Слайд 79
Последовательности
Примеры:
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,

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

больше 0,001:
Элемент последовательности (начиная с №2):
b = b+1;
c =

2*c;

z = -z;

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

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

начало
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

Слайд 82



Программа
#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 =

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


Ответ:
S

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

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

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

число цифр в нем.
Проблема: Как не дать ввести отрицательное

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

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

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

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

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

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

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

Слайд 86


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

scanf("%d", &n);
}
while ( n

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

условие

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

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

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

a ++; } while (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

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

определить, верно ли, что сумма его цифр равна 10.
Пример:

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

Слайд 89Программирование на языке Си
Тема 8. Оператор выбора
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 8. Оператор выбора© К.Ю. Поляков, 2007-2008

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

дней в этом месяце.


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

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

оператор выбора
ни один вариант не подошел
ввод 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

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

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


Слайд 93

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

эту букву.
Особенность:

выбор по символьной величине.


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

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

Слайд 94
Оператор выбора
Особенности:
после 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)  или символьного типа

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

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

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

Слайд 96Программирование на языке Си
Тема 9. Отладка программ
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 9. Отладка программ© К.Ю. Поляков, 2007-2008

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

bug = моль, жучок
Методы:
трассировка – вывод сигнальных сообщений
отключение части кода

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

Слайд 98
Трассировка
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(

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

scanf("%d", &X);
X *= X + 2;
for(i=1; i

X *= i;
while ( X > 5 ) {
...
}
...
}

// X *= X + 2;

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

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

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


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

до следующей точки останова
F7 – выполнить одну строку
Shift+F7 – войти

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

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


ПКМ

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

Слайд 102Программирование на языке Си
Тема 10. Графика
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 10. Графика© К.Ю. Поляков, 2007-2008

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

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

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

графики



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

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

экране
getch();
closegraph();
}
initwindow ( 400, 300 );
closegraph();
Структура графической программы
открыть окно

для графики

закрыть окно

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

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

ширина

высота

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

Слайд 106
Цвета

Цвета

Слайд 107
Полная палитра цветов
цвет = 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

Слайд 108
Управление цветом
Цвет линий и текста: 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) );Цвет и

Слайд 109
Точки, отрезки и ломаные
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

Слайд 110
Прямоугольники
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 (

Слайд 111
Окружность, заливка, текст
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,

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


(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,

Слайд 113
Задания
«4»: Лягушка







«5»: Корона






Задания«4»: Лягушка «5»: Корона

Слайд 114
Штриховка
(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,

Слайд 115
Штриховка (программа)
(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,

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

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


hc = 255 /

N;
c = 0;
for ( i=1; i

( 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

Слайд 117
Как менять цвет?
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

Слайд 118
Штриховка
(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,

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

(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,

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







«5»:

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

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

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

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







«5»: Ввести с клавиатуры

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

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

К.Ю. Поляков, 2006-2007

Программирование  на языке СиТема 11. Графики функций (только с 9 класса)© К.Ю. Поляков, 2006-2007

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

на интервале от 0 до 2π.
Анализ:
максимальное значение ymax =

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

Слайд 124
Преобразование координат
(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

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



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,

Слайд 126
Как соединить точки?
Алгоритм:
Если первая точка
перейти в точку (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

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









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


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

Слайд 128Программирование на языке Си
Тема 12. Процедуры
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 12. Процедуры© К.Ю. Поляков, 2007-2008

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

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

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

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

действий.
Применение:
выполнение одинаковых действий в разных местах программы
разбивка программы (или другой

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

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

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

в виде неизвестных переменных, они будут параметрами процедуры

(x+100, y)

(x, y-60)


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

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

тело

координаты

цвет

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

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

Слайд 132
Процедуры
(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 );

Слайд 133Программа
#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,

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

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

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

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

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

x

y

c

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

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

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

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

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

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

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

int a2, bbc = 345;

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

Слайд 136Как поменять местами?
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 =

Слайд 137





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

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




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

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

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

варианты вызова
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 );

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







«5»: Используя процедуры, построить

фигуру.
равносторонний треугольник

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

Слайд 140Программирование на языке Си
Тема 13. Анимация
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 13. Анимация© К.Ю. Поляков, 2007-2008

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

квадрата 400 на 400 пикселей слева направо двигается желтый квадрат

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

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

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

Слайд 142

Как «поймать» нажатие клавиши?
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 – не

Слайд 143

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

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

Слайд 144

Процедура (рисование и стирание)
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 (

Слайд 145


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

#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

Слайд 146

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


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() )

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






«5»: Два

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

квадрата:

Задания













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

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

клавиш:
влево – 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			вправо

Слайд 149




Программа
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() ) { ... }процедураосновной циклобработка нажатия

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

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




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

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

Задания















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

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

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

переменной (менять в цикле) угол поворота α



(x0, y0)



α

L

(x, y)

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


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

Слайд 152Процедура
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 (

Слайд 153Константы и переменные
#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,

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

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;

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

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


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








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

Слайд 156Программирование на языке Си
Тема 14. Функции
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 14. Функции© К.Ю. Поляков, 2007-2008

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

некоторое значение.
Примеры:
вычисление модуля числа,


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

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

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



int Max ( int a, int

b )
{
if ( a > b ) return a ;
else return b ;
}

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

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

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

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

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

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

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

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

Слайд 161


Программа




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 (

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

до N и привести пример ее использования.
Пример:
Введите

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

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

наибольший общий делитель двух натуральных и привести пример ее использования.

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

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

x в радианах!

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

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

число – простое.
Особенности:
ответ – логическое значение: «да» (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 составное

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

Слайд 165Функция: простое число или нет
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 =

Слайд 166Логические функции
#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 (

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

цифр – четное число.
Пример:
Введите число:
136

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

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

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

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

Слайд 168Программирование на языке Си
Тема 15. Случайные числа
© К.Ю. Поляков, 2007-2008

Программирование  на языке СиТема 15. Случайные числа© К.Ю. Поляков, 2007-2008

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

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

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

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

свойствами случайных чисел, но каждое следующее число вычисляется по заданной

формуле.
Примеры:
Случайные целые числа [0,m) (линейный конгруэнтный метод)



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

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

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

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

230-1

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

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

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

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

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

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

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

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


a

b

a

b

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

Слайд 173Генератор случайных чисел в Си
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 – максимальное случайное целое число

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

Целые числа в интервале [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

Слайд 175Генератор случайных чисел в Си
Вещественные числа в интервале [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; //

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

случайного цвета
Как получить случайные координаты точки?
x = random ( 400

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

COLOR(R,G,B)

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

Слайд 177Программа
#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 );  //

Слайд 178Основной цикл
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);

Слайд 179«4»: Ввести с клавиатуры координаты углов прямоугольника и заполнить его

точками случайного цвета.




«5»: Заполнить треугольник точками случайного цвета (равномерно

или неравномерно).
Подсказка: возьмите равнобедренный треугольник с углом 45о.

Задания


(100,100)

(300,200)

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

Слайд 180
Конец фильма

Конец фильма

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика