Главная страница

Язык Си. Алгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность


Скачать 4.66 Mb.
НазваниеАлгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность
Дата05.02.2023
Размер4.66 Mb.
Формат файлаppt
Имя файлаЯзык Си.ppt
ТипПрограмма
#921318
страница9 из 11
1   2   3   4   5   6   7   8   9   10   11

Задания





«5»: «Корона»

Задания





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





Штриховка


(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


float x, h;


!


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





Штриховка (программа)


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


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


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





Задания


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


или

Задание





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


COLOR(c, c, c)





Как менять цвет?


(x1, y1)


(x2, y2)


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


цвет границы


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


серый: R = G = B


Цвет:


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


N





Как менять цвет?


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)


x





Задания


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


Тема 10. Графики функций (только с 9 класса)





Построение графиков функций


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

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




Преобразование координат


(x,y)


X


Y


x


y


Математическая
система координат


Экранная система координат (пиксели)


(xэ,yэ)








(0,0)


(0,0)


a


b


k – масштаб (длина изображения единичного отрезка на экране)


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





Программа


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 – длина оси ОХ в пикселях


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


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





Как соединить точки?


Алгоритм:


Если первая точка
перейти в точку (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);
...
}


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





Задания


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


Тема 11. Процедуры





Процедуры


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


Можно ли решить известными методами?


?


Сколько координат надо задать?


?





Процедуры


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


Подзадача1


Подзадача2


Подзадача3


1.1


1.2


1.3


2.1


2.2


2.3


3.1


3.2


3.3


Задача





Процедуры


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


(x, y)


100


60


(x+100, y)


(x, y-60)


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


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


тело


координаты


цвет


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


параметры





Процедуры


(x, y)


100


60


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


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


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


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





Программа


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


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


процедура





Процедуры


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


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


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


x


y


c





Процедуры


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


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


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


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


int a2, bbc = 345;





Как поменять местами?


2


3


1


Задача: поменять местами содержимое двух чашек.


Задача: поменять местами содержимое двух ячеек памяти.


4


6


?


4


6


4


x


y


c


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


x = y;
y = x;


3


2


1


Можно ли обойтись без c?


?





Параметры-переменные


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


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





Параметры-переменные


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


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


&


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


&

1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта