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


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

Содержание

Структурное программирование на языке СиТема 1. Теория© К.Ю. Поляков, 2007-2009

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

Слайд 1Структурное программирование на языке Си
© К.Ю. Поляков, 2007-2009
Теория
Проект
Графики функций
Точки пересечения
Штриховка
Вычисление

площади
Оформление отчета

Структурное программирование  на языке Си© К.Ю. Поляков, 2007-2009ТеорияПроектГрафики функцийТочки пересеченияШтриховкаВычисление площадиОформление отчета

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

Структурное программирование  на языке СиТема 1. Теория© К.Ю. Поляков, 2007-2009

Слайд 3Этапы разработки программ
Постановка задачи
определить цель и категорию программы (системная, прикладная)
определить

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

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


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

Слайд 4Этапы разработки программ
Разработка модели данных
формальная модель
типы данных (массивы, структуры, …)
взаимосвязь

между данными
Разработка алгоритма
выбор существующего или разработка нового
возможен возврат к шагу

2
Разработка программы
Языки: C, C++, Visual Basic, Delphi (Паскаль), `…
Отладка программы (поиск и исправление ошибок) debug – извлечение жучков (bug), 1945, MAРK-I
отладчик (точки останова, пошаговый режим, просмотр переменных)
профайлер (сколько выполняется каждая из процедур)
Этапы разработки программРазработка модели данныхформальная модельтипы данных (массивы, структуры, …)взаимосвязь между даннымиРазработка алгоритмавыбор существующего или разработка новоговозможен

Слайд 5Этапы разработки программ
Тестирование программы (проверка на исходных данных, для которых

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

Интернет



Разработка документации
справочная система
руководство пользователя (User Manual)
руководство разработчика
Сопровождение (техническая поддержка)
исправление ошибок, найденных заказчиком
обучение и консультирование заказчика
новые версии по льготной цене
Этапы разработки программТестирование программы (проверка на исходных данных, для которых известен результат)альфа-тестирование: внутри фирмы (тестеры)бета-тестирование: в других

Слайд 6

Методы проектирования программ
основная программа
процедуры 1-ого уровня
процедуры 2-ого уровня
снизу вверх
сверху вниз

Методы проектирования программосновная  программапроцедуры  1-ого уровняпроцедуры  2-ого уровняснизу вверхсверху вниз

Слайд 7Проектирование «снизу вверх»
сначала составляются процедуры нижнего уровня, из которых затем

«собираются» процедуры более высокого уровня.

легче начать программировать
более эффективные процедуры

процедуры необходимо

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

Слайд 8Проектирование «сверху вниз»
метод последовательного уточнения:
начинаем с основной программы;
она разбивается

на подзадачи, для каждой из которых пишется процедура-«заглушка»;
реализуем каждую из

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

Слайд 9Структурное программирование
Существовавшие проблемы:
увеличилась сложность программ
сократилось время на разработку
Цели:
повысить надежность
уменьшить

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

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

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

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

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

Слайд 11Модуль
Модуль – это программный блок (процедура или функция), отделенный от

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

модуля не зависит от того, откуда он вызывается, и от того, сколько раз он вызывался до этого
размер модуля не более 50-60 строк (1 страница)
модуль имеет один вход и один выход
модуль начинается с «шапки»-комментария (входные данные, результаты, какие модули использует)
имена переменных – смысловые
в одной строке – один оператор
«трюки» – долой
МодульМодуль – это программный блок (процедура или функция), отделенный от кода других модулей, который полностью решает самостоятельную

Слайд 12Оформление текста программы
Шапка – комментарий в начале процедур и функций.
//----------------------------------------
//

Sum сумма элементов массива
// Вход: A[] – массив целых чисел
//

n - размер массива
// Выход: S = A[0]+A[1]+...+A[n-1]
// Вызывает: -
//----------------------------------------
int Sum ( int A[], float n )
{
...
}
Оформление текста программыШапка – комментарий в начале процедур и функций.//----------------------------------------// Sum сумма элементов массива// Вход: A[] –

Слайд 13

Оформление текста программы
Отступы – тело цикла, условного оператора, оператора выбора

и т.п. сдвигается вправо на 2-3 символа.
for(i=0;i

i++)
{
j=0;
while ( j < i )
{
j++;
k = k % N;
}
k++;
}

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

Оформление текста программыОтступы – тело цикла, условного оператора, оператора выбора и т.п. сдвигается вправо на 2-3 символа.for(i=0;i

Слайд 14Оформление текста программы
«говорящие» имена функций, процедур, переменных: Sum, ShowMenu, count,

speed.
пробелы в операторах



выделение пустыми строками и комментариями важных блоков
for(i=0;i

i=0; i a += 10;


// ввод данных
printf( "Введите число\n" );
scanf ( "%d", &n );
//вычисления
n2 = n*n;
// вывод результата
printf ( "Его квадрат %d", n2 );

Оформление текста программы«говорящие» имена функций, процедур, переменных: Sum, ShowMenu, count, speed.пробелы в операторахвыделение пустыми  строками и

Слайд 15Структурное программирование на языке Си
Тема 2. Проект
© К.Ю. Поляков, 2007-2009

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

Слайд 16Проект «Графики функций»


построить координатные оси и сделать их разметку


построить графики

заданных функций (по вариантам)

Проект «Графики функций»построить координатные  оси и сделать их разметкупостроить графики  заданных функций  (по вариантам)

Слайд 17Проект «Графики функций»

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



заштриховать образованную

замкнутую область


x=3,58
y=2,14
x=1,40
y=1,55

Проект «Графики функций»найти точки пересечения  графиков, используя  численные методызаштриховать  образованную замкнутую  областьx=3,58y=2,14x=1,40y=1,55

Слайд 18Проект «Графики функций»


вычислить площадь этой области двумя способами

оформить отчет

по работе
S1=3,014
S2=3,025

Проект «Графики функций»вычислить площадь этой  области двумя способами  оформить отчет по работе S1=3,014S2=3,025

Слайд 19Структура программы
#include
#include
#include
#include



main()
{
initwindow(800,600);

getch();
closegraph();
}
глобальные константы и переменные
процедуры

и функции
основная программа

Структура программы#include#include#include#includemain(){ initwindow(800,600); getch(); closegraph(); }глобальные константы и переменныепроцедуры и функцииосновная программа

Слайд 20Разбивка программы на этапы
Axes(); // оси координат
Plot(); //

графики функций
Cross(); // точки пересечения графиков
Hatch(); // штриховка

Area(); // площадь (способ 1)
Area2(); // площадь (способ 2)

Основная программа

Процедуры-заглушки

//------------------------------------
// Axes оси координат
//------------------------------------
void Axes()
{
}

Разбивка программы на этапы Axes(); // оси координат Plot(); // графики функций Cross(); // точки пересечения графиков

Слайд 21Структурное программирование на языке Си
Тема 3. Графики функций
© К.Ю. Поляков,

2007-2009

Структурное программирование  на языке СиТема 3. Графики функций© К.Ю. Поляков, 2007-2009

Слайд 22Функции, заданные в явном виде
y = f (x)

Функции, заданные в явном видеy = f (x)

Слайд 23Функции, заданные в неявном виде
f (x, y) = 0

пример: уравнение

эллипса



Функции, заданные в неявном видеf (x, y) = 0пример: уравнение эллипса

Слайд 24полюс
Полярные координаты
А(ρ, ϕ)


ϕ - полярный угол
ρ - полярный радиус
Примеры:
Описание фигур,

полученных при вращении объектов.
ρ = f (ϕ)
ρ = R
окружность
ρ =

a ∙ϕ

спираль Архимеда


O


O

ρ = a∙sin(2ϕ/3)

«роза»

полюсПолярные координатыА(ρ, ϕ)ϕ - полярный уголρ - полярный радиусПримеры:Описание фигур, полученных при вращении объектов.ρ = f (ϕ)ρ

Слайд 25Полярные координаты
Переход к декартовым координатам

Полярные координатыПереход к декартовым координатам

Слайд 26Описание в параметрической форме
t – независимый параметр («время»)
Описание фигур, полученных

при сложном движении объектов.
x = f1 (t)
y = f2 (t)
Циклоида

– траектория точки на ободе колеса при вращении


R

y

x

0

Описание в параметрической формеt – независимый параметр («время»)Описание фигур, полученных при сложном движении объектов.x = f1 (t)y

Слайд 27Системы координат
Математическая
Экранная
Преобразование координат:
X0, Y0 – экранные координаты точки (0,0)
k –

масштаб (во сколько раз растягивается единичный отрезок)

Системы координатМатематическаяЭкраннаяПреобразование координат:X0, Y0 – экранные координаты  точки (0,0)k – масштаб (во сколько раз растягивается единичный

Слайд 28Структура программы
#include
#include
#include
#include
const int X0 = 100, Y0 = 400, //

начало координат
k = 80;

// масштаб


main()
{
initwindow(800, 600);

getch();
closegraph();
}

глобальные переменные

процедуры и функции

основная часть

Структура программы#include#include#include#includeconst int X0 = 100, Y0 = 400, // начало координат   k = 80;

Слайд 29Перевод в экранные координаты
//-----------------------------------------
// SCREENX – перевод X в координаты

экрана
//-----------------------------------------
int ScreenX (float x)
{
return X0+k*x;
}
//-----------------------------------------
// SCREENY

– перевод Y в координаты экрана
//-----------------------------------------
int ScreenY (float y)
{
return Y0-k*y;
}
Перевод в экранные координаты//-----------------------------------------// SCREENX – перевод X в координаты экрана//-----------------------------------------int ScreenX (float x) { return X0+k*x;

Слайд 30Оси координат
void Axes()
{
line ( X0, 0, X0, 599 );

line ( 0, Y0, 799, Y0 );
}

Оси координатvoid Axes(){ line ( X0, 0, X0, 599 ); line ( 0, Y0, 799, Y0 );}

Слайд 31Разметка оси X («черточки»)



(xЭ, Y0−2)
(xЭ, Y0+2)
Число меток на [0, xmax]:

длина 800 – X0
единичный отрезок k
void Axes()
{

int i, xe;
...
for (i = 1; i <= (800-X0)/k; i++) {
xe = ScreenX(i);
line ( xe, Y0-2, xe, Y0+2 );
}
}

переходим к экранным координатам

Разметка оси X («черточки»)(xЭ, Y0−2)(xЭ, Y0+2)Число меток на [0, xmax]:  длина 800 – X0  единичный

Слайд 32Разметка оси X (числа)

1


(xЭ, Y0+2)
Вывод символьной строки в графическом режиме:
outtextxy(x,

y, s);
void Axes()
{
char s[5];
...
for (i = 1;

i <= (800-X0)/k; i++) {
...
sprintf ( s, "%d", i );
outtextxy ( xe-4, Y0+3, s );
}
}

координаты левого верхнего угла


(xЭ-4, Y0+3)

8 на 8

перевести целое число i в строку s

строка:
char s[5];

вывести строку s на экран

с запасом…

Разметка оси X (числа)1xЭ(xЭ, Y0+2)Вывод символьной строки в графическом режиме:outtextxy(x, y, s);void Axes(){ char s[5]; ... for

Слайд 33Оси с разметкой (полностью)
void Axes()
{
int i, xe, ye;
char

s[5];
line ( X0, 0, X0, 599 );
line (

0, Y0, 799, Y0 );
for (i = 1; i <= (800-X0)/k; i++)
{
xe = ScreenX(i);
line ( xe, Y0-2, xe, Y0+2 );
sprintf ( s, "%d", i );
outtextxy ( xe-4, Y0+3, s );
}
...
}
Оси с разметкой (полностью)void Axes(){ int i, xe, ye; char s[5]; line ( X0, 0, X0, 599

Слайд 34
Задания
«4»: Сделать разметку осей полностью (не только положительной части оси

X).
«5»: Сделать задание на «4», использовав только 2 цикла (1

цикл для каждой оси).
Задания«4»: Сделать разметку осей полностью (не только положительной части оси X).«5»: Сделать задание на «4», использовав только

Слайд 35Построение графика по точкам
Границы области «видимости»:

Построение графика по точкамГраницы области «видимости»:

Слайд 36Вывод точки с проверкой
//----------------------------------------
// POINT вывод пикселя с проверкой и
//

пересчетом координат
//----------------------------------------
void Point ( float x,

float y, int color )
{
int xe, ye;
xe = ScreenX(x);
ye = ScreenY(y);
if ( xe >= 0 && xe < 800 &&
ye >= 0 && ye < 600)
putpixel(xe, ye, color);
}

если точка (xЭ, yЭ) в пределах экрана…

координаты в математической системе

цвет точки

Вывод точки с проверкой//----------------------------------------// POINT вывод пикселя с проверкой и//    пересчетом координат //----------------------------------------void Point

Слайд 37Описание функций
//-----------------------------------------
// F1, F2
// Вход: x
// Выход:

y = f(x)
//-----------------------------------------
float f1 ( float x )
{
return

sqrt(x+1);
}
float f2 ( float x )
{
return 4*sin(x-1);
}
Описание функций//-----------------------------------------// F1, F2// Вход: x   // Выход: y = f(x)//-----------------------------------------float f1 ( float x

Слайд 38Области определения
//----------------------------------------
// ODZ1 – область определения f1(x)
// Вход: x
// Выход:

1, если x входит в ОДЗ
// 0,

если x не входит в ОДЗ
//----------------------------------------
int odz1 ( float x )
{
return ( x >= -1 );
}

не нужно!

if ( x >= -1 ) return 1;
else return 0;

Области определения//----------------------------------------// ODZ1 – область определения f1(x)// Вход: x// Выход: 1, если x входит в ОДЗ//

Слайд 39Вывод графика функции
//----------------------------------------
// PLOT вывод графиков функций
//----------------------------------------
void Plot ()
{
float

xmin = - 1.* X0 / k,
xmax =

(800. - X0) / k;
float x,
h = (xmax - xmin) / 1000;


}

чтобы не отбрасывать остаток

границы видимой части

шаг по x

for ( x = xmin; x <= xmax; x += h)
if ( odz1(x) )
Point(x, f1(x), LIGHTRED);

Вывод графика функции//----------------------------------------// PLOT вывод графиков функций//----------------------------------------void Plot (){ float xmin = - 1.* X0 / k,

Слайд 40Общее расположение
float f1 ( float x ) { return sqrt(

x + 1 ); }
int odz1 ( float x

) { return x >= -1; }
...
void Point(float x, float y, int color)
{
...
}
...
void Plot()
{
...
for ( x = xmin; x <= xmax; x += h)
if ( odz1(x) )
Point(x, f1(x), LIGHTRED);
}




Общее расположениеfloat f1 ( float x ) { return sqrt( x + 1 ); } int odz1

Слайд 41
Задания
«4»: Построить графики в соответствии с заданием.
«5»: Построить графики, соединив

точки линиями.

Задания«4»: Построить графики в соответствии с заданием.«5»: Построить графики, соединив точки линиями.

Слайд 42Структурное программирование на языке Си
Тема 4. Точки пересечения
© К.Ю. Поляков,

2007-2009

Структурное программирование  на языке СиТема 4. Точки пересечения© К.Ю. Поляков, 2007-2009

Слайд 43Точки пересечения
f1 (x*) = f2 (x*)
a
b
f1 (x*) – f2 (x*)

= 0
f (x*) = 0
Пример:

Проблема: уравнение сложно (или невозможно)

решить аналитически (получить формулу для x*)

Точка пересечения:



Точки пересеченияf1 (x*) = f2 (x*)abf1 (x*) – f2 (x*) = 0f (x*) = 0Пример:Проблема:

Слайд 44Методы решения уравнений
f (x) = 0
Точные (аналитические)
Приближенные
графические



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

найти интервал [a, b], в котором находится x* (или одно начальное

приближение x0)
по некоторому алгоритму уточнить решение, сужая интервал, в котором находится x*
повторять шаг 2, пока не достигнута требуемая точность:

b – a < ε

Методы решения уравненийf (x) = 0Точные (аналитические) Приближенныеграфическиечисленные (методы последовательного приближения):по графику найти интервал [a, b], в

Слайд 45Численные методы
Применение: используются тогда, когда точное (аналитическое) решение неизвестно или

очень трудоемко.
дают хотя бы какое-то решение
во многих случаях можно оценить

ошибку и найти решение с заданной точностью

решение всегда приближенное, неточное



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

Слайд 46Метод прямого («тупого») перебора
Задача: найти решение уравнения f (x) =

0 на интервале [a, b] с заданной точностью ε (чтобы

найденное решение отличалось от истинного не более, чем на ε).

Алгоритм:
разбить интервал [a, b] на полосы шириной ε
найти полосу [a*, b*], в которой находится x*
решение – a* или b*

Метод прямого («тупого») перебораЗадача: найти решение уравнения f (x) = 0 на интервале [a, b] с заданной

Слайд 47
Есть ли решение на [a, b]?
есть решение
нет решения
нет решения

Есть ли решение на [a, b]?есть решениенет решениянет решения

Слайд 48
Метод дихотомии (деление пополам)


Найти середину отрезка [a,b]: c

= (a + b) / 2;
Если f(c)*f(a)

интервала b = c;
Если f(c)*f(a)≥ 0, сдвинуть левую границу интервала a = c;
Повторять шаги 1-3, пока не будет b – a ≤ ε.



Метод дихотомии (деление пополам)Найти середину отрезка [a,b]:    c = (a + b) / 2;Если

Слайд 49Метод дихотомии (деления пополам)
простота
можно получить решение с любой заданной точностью
нужно

знать интервал [a, b]
на интервале [a, b] должно быть только

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

Слайд 50Метод дихотомии (в программе)
//----------------------------------------------
// Solve находит точку пересечения на [a,b]
//

Вход: a, b – границы интервала, a < b
//

eps - точность решения
// Выход: x – решение уравнения f1(x)=f2(x)
//----------------------------------------------
float Solve ( float a, float b, float eps )
{
float c, fa, fc;
while ( b - a > eps )
{
c = (a + b) / 2;
fa = f1(a) - f2(a);
fc = f1(c) - f2(c);
if ( fa*fc < 0 ) b = c;
else a = c;
}
return (a + b) / 2;
}
Метод дихотомии (в программе)//----------------------------------------------// Solve находит точку пересечения на [a,b]// Вход: a, b – границы интервала, a

Слайд 51Метод дихотомии (в программе)
float xc1, xc2;
...
float Solve ( float a,

float b, float eps )
{
...
}
...
void Cross ()
{
char s[20];


sprintf(s, "x=%.2f", xc1);
outtextxy ( 150, 100, s );
sprintf(s, "y=%.2f", f1(xc1));
outtextxy ( 150, 120, s );
...
}

глобальные переменные: абсциссы точек пересечения

найти решение на интервале [1,2] с точностью 0,0001

xc1 = Solve ( 1, 2, 0.0001 );


вывод на экран через символьную строку

… и значение y!

то же самое для остальных точек

Метод дихотомии (в программе)float xc1, xc2;...float Solve ( float a, float b, float eps ){ ...}...void Cross

Слайд 52Структурное программирование на языке Си
Тема 5. Штриховка
© К.Ю. Поляков, 2007-2009

Структурное программирование  на языке СиТема 5. Штриховка© К.Ю. Поляков, 2007-2009

Слайд 53Штриховка (две функции)
x
y


xс2
xс1
y = f1 (x)
y = f2 (x)
void Hatch()
{

const int N = 10;
float x, h = (xc2

- xc1) / (N + 1);
int xe, yUp, yDown;
for (x = xc1+h; x < xc2; x += h )
{
xe = ScreenX ( x );
yUp = ScreenY ( f1(x) );
yDown = ScreenY ( f2(x) );
line ( xe, yUp, xe, yDown );
}
}

экранная координата x

экранные координаты границ области по оси y

шаг по x

Штриховка (две функции)xyxс2xс1y = f1 (x)y = f2 (x)void Hatch(){ const int N = 10; float x,

Слайд 54Штриховка (составная нижняя граница)
x
y


xс3
xс1

xс2
N линий
y = f1 (x)
y = f2

(x)
y = f3 (x)
//----------------------------
// Down нижняя граница области
//----------------------------
float Down (

float x )
{
if ( x < xc2 )
return f2(x);
else return f3(x);
}


Штриховка (составная нижняя граница)xyxс3xс1xс2N линийy = f1 (x)y = f2 (x)y = f3 (x)//----------------------------// Down нижняя граница

Слайд 55Штриховка (общий случай)
float Up ( float x ) {

... }
float Down ( float x ) { ...

}
...
void Hatch()
{
const N = 10;
float x, h = ( ? ) / (N + 1);
int xe, yUp, yDown;
for ( ? ; x += h )
{
xe = ScreenX ( x );
yUp = ScreenY ( ? );
yDown = ScreenY ( ? );
line ( xe, yUp, xe, yDown );
}
}

xc3 - xc1

x = xc1+h; x < xc3;



Up(x)

Down(x)

Штриховка (общий случай)float Up ( float x )  { ... } float Down ( float x

Слайд 56Структурное программирование на языке Си
Тема 6. Вычисление площади
© К.Ю. Поляков,

2007-2009

Структурное программирование  на языке СиТема 6. Вычисление площади© К.Ю. Поляков, 2007-2009

Слайд 57Метод (левых) прямоугольников
y = f1 (x)
y = f2 (x)
S1
S2
S3
S4
void Area()
{

float x, S = 0, h=0.001;
char out[20];
for (

x = xc1; x < xc2; x += h)
S += h*(f1(x) – f2(x));

sprintf ( out, "S=%7.3f", S );
outtextxy ( 300, 300, out );
}

for ( x = xc1; x < xc2; x += h )
S += f1(x) – f2(x);
S *= h;


Метод (левых) прямоугольниковy = f1 (x)y = f2 (x)S1S2S3S4void Area(){ float x, S = 0, h=0.001; char

Слайд 58Метод (правых) прямоугольников
x
y
xс2
xс1
y = f1 (x)
y = f2 (x)
S1
S2
S3
S4
void Area()
{

float x, S = 0, h=0.001;
char out[20];
for (

x = xc1; x < xc2; x += h)
S += h*(f1(x+h) – f2(x+h));

sprintf ( out, "S=%7.3f", S );
outtextxy ( 300, 300, out );
}

for ( x = xc1; x < xc2; x += h )
S += f1(x+h) – f2(x+h);
S *= h;

Метод (правых) прямоугольниковxyxс2xс1y = f1 (x)y = f2 (x)S1S2S3S4void Area(){ float x, S = 0, h=0.001; char

Слайд 59Метод (средних) прямоугольников
x
y
xс2
xс1
y = f1 (x)
y = f2 (x)
S1
S2
S3
S4
void Area()
{

float x, S = 0, h=0.001;
char out[20];
for (

x = xc1; x < xc2; x += h)
S += h*(f1(x+h) – f2(x+h));

sprintf ( out, "S=%7.3f", S );
outtextxy ( 300, 300, out );
}

for ( x = xc1; x < xc2; x += h )
S += f1(x+h/2) – f2(x+h/2);
S *= h;

левые (правые):

средние

Метод (средних) прямоугольниковxyxс2xс1y = f1 (x)y = f2 (x)S1S2S3S4void Area(){ float x, S = 0, h=0.001; char

Слайд 60Метод трапеций
x
y
xс2
xс1
y = f1 (x)
y = f2 (x)
for ( x

= xc1; x < xc2; x += h )

S += f1(x) – f2(x) +
f1(x+h) – f2(x+h);
S *= h/2;

S =( f1(xc1) - f2(xc1)
+ f1(xc2) - f2(xc2) )/2.;
for ( x = xc1+h; x < xc2; x += h )
S += f1(x) – f2(x);
S *= h;

Метод трапецийxyxс2xс1y = f1 (x)y = f2 (x)for ( x = xc1; x < xc2; x +=

Слайд 61Метод Монте-Карло
Применение: вычисление площадей сложных фигур (трудно применить другие методы).
Требования:

необходимо уметь достаточно просто определять, попала ли точка (x, y)

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

Слайд 62Метод Монте-Карло
Вписываем сложную фигуру в другую фигуру, для которой легко

вычислить площадь (прямоугольник, круг, …).
Равномерно N точек со случайными

координатами внутри прямоугольника.
Подсчитываем количество точек, попавших на фигуру: M.
4. Вычисляем площадь:

Всего N точек

На фигуре M точек

Метод приближенный.
Распределение должно быть равномерным.
Чем больше точек, тем точнее.
Точность ограничена датчиком случайных чисел.

!

Метод Монте-КарлоВписываем сложную фигуру в другую фигуру, для которой легко вычислить площадь (прямоугольник, круг, …). Равномерно N

Слайд 63Случайное число в заданном интервале
//-----------------------------------------
// randF – случайное вещественное число


// в заданном интервале
//-----------------------------------------
float randF (

float a, float b)
{
return (b-a)*rand() / RAND_MAX + a;
}

rand()
rand()/RAND_MAX
1.*rand()/RAND_MAX
1.*rand()/RAND_MAX + a
(b-a)*rand()/RAND_MAX + a

целое [0, RAND_MAX]
всегда 0!!!
[0,1]
[a,a+1]
[a,b]

Случайное число в заданном интервале//-----------------------------------------// randF – случайное вещественное число //     в заданном

Слайд 64Проверка точки (внутри или нет?)
//-----------------------------------------
// Inside – определяет, находится ли

точка
// внутри фигуры
// Вход: x, y

– координаты точки
// Выход: 1, если точка внутри фигуры,
// 0, если точка вне фигуры
//-----------------------------------------
int Inside ( float x, float y )
{
if ( Down(x) <= y && y <= Up(x) )
return 1;
else return 0;
}

int Inside ( float x, float y )
{
return (Down(x) <= y && y <= Up(x));
}


Проверка точки (внутри или нет?)//-----------------------------------------// Inside – определяет, находится ли точка//     внутри фигуры//

Слайд 65Метод Монте-Карло (реализация)
//----------------------------------------------------
// Area2 – вычисление площади методом Монте-Карло
//----------------------------------------------------
void Area2

()
{
int i, N = 200000, M = 0;
float

float x, y, S;
char out[20];
for (i=1; i<=N; i++)
{
x = randF ( x1, x2 );
y = randF ( y1, y2 );
if ( Inside(x,y) ) M++;
}
S = (x2-x1)*(y2-y1)*M/N;
sprintf(out, "S=%7.3f", S);
outtextxy(300, 320, out);
}

x1 = xc1, x2 = xc2, y1 = 1, y2 = 4;

границы прямоугольника (у каждого свои!)

S = (x2-x1)*(y2-y1)*M/N;

вычисление площади

если на фигуре, увеличить счетчик

Метод Монте-Карло (реализация)//----------------------------------------------------// Area2 – вычисление площади методом Монте-Карло//----------------------------------------------------void Area2 (){ int i, N = 200000, M

Слайд 66Структурное программирование на языке Си
Тема 7. Оформление отчета
© К.Ю. Поляков,

2007-2009

Структурное программирование  на языке СиТема 7. Оформление отчета© К.Ю. Поляков, 2007-2009

Слайд 67Титульный лист

Титульный лист

Слайд 68Графики функций
«скриншот» (screenshot) – «снимок» экрана
через Редактор формул (Вставка –

Объект – Microsoft Equation)

Графики функций«скриншот» (screenshot) – «снимок» экраначерез Редактор формул (Вставка – Объект – Microsoft Equation)

Слайд 69Как получить копию экрана?
Поменять цвета так, чтобы все линии и

текст были белые.
Запустить программу (она должна все нарисовать).
Нажать клавишу PrtScr

(Print Screen – «снимок» экрана) на клавиатуре или комбинацию Alt+PrtScr («снимок» активного окна).
В графическом редакторе (Paint): Правка – Вставить.
Перевести в черно-белую палитру (Рисунок – Атрибуты – Палитра – Черно-белая).
Инверсия (черный ↔ белый), Рисунок – Обратить цвета.
Выделить нужную часть рисунка.
Вставить в отчет через буфер обмена (Ctrl+C, Ctrl+V).
Как получить копию экрана?Поменять цвета так, чтобы все линии и текст были белые.Запустить программу (она должна все

Слайд 70Структура программы

Структура программы

Слайд 71Текст программы
шрифт Courier New,
(моноширинный)
размер 10 пт

Текст программышрифт Courier New,(моноширинный) размер 10 пт

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

Конец фильма

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

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

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

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

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


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

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