Основы программирования. Polyline/Polygon. Типы данных. Вложенные циклы (лекция 7)

Содержание

Слайд 2

Слайд 3

Polygon / Polyline

Polygon / Polyline

Слайд 4

Polygon POINT pt[5]; // Массив содержит структуры pt[0].x = 100; pt[0].y

Polygon

POINT pt[5]; // Массив содержит структуры
pt[0].x = 100;
pt[0].y = 50;
pt[1].x =

150;
pt[1].y = 100;
pt[2].x = 150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 5);
Слайд 5

Что такое POINT? // windef.h? typedef struct tagPOINT { LONG x; LONG y; } POINT;

Что такое POINT?

// windef.h?
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT;

Слайд 6

Polygon POINT pt[5]; // Массив содержит структуры pt[0].x = 100; pt[0].y

Polygon

POINT pt[5]; // Массив содержит структуры
pt[0].x = 100;
pt[0].y = 50;
pt[1].x =

150;
pt[1].y = 100;
pt[2].x = 150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 5);
Слайд 7

Polygon POINT pt[5]; pt[0].x = 100; pt[0].y = 50; pt[1].x =

Polygon

POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x = 150;
pt[1].y = 100;
pt[2].x =

150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 4);
Слайд 8

Polygon POINT pt[5]; pt[0].x = 100; pt[0].y = 50; pt[1].x =

Polygon

POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x = 150;
pt[1].y = 100;
pt[2].x =

150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 3);
Слайд 9

Polygon HBRUSH hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0, 128)); SelectObject(hdc, hBrush); Ellipse(hdc,

Polygon

HBRUSH hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0, 128));
SelectObject(hdc, hBrush);
Ellipse(hdc, 0, 0 ,

160, 120);
HBRUSH hBrush2 = CreateHatchBrush(HS_DIAGCROSS, RGB(128, 0, 128));
SelectObject(hdc, hBrush2);
POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x = 150;
pt[1].y = 100;
pt[2].x = 150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 5);
Слайд 10

Polygon – прозрачная кисть HBRUSH hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0, 128));

Polygon – прозрачная кисть

HBRUSH hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0, 128));
SelectObject(hdc, hBrush);
Ellipse(hdc,

0, 0 , 160, 120);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x = 150;
pt[1].y = 100;
pt[2].x = 150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 5);
Слайд 11

Polyline POINT pt[5]; pt[0].x = 100; pt[0].y = 50; pt[1].x =

Polyline

POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x = 150;
pt[1].y = 100;
pt[2].x =

150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polyline(hdc, pt, 5);
Слайд 12

Источники информации http://www.frolov-lib.ru/books/bsp/v14/ch2_3.htm - Рисование геометрических фигур

Источники информации

http://www.frolov-lib.ru/books/bsp/v14/ch2_3.htm - Рисование геометрических фигур

Слайд 13

Слайд 14

Типы данных в Си

Типы данных в Си

Слайд 15

Какие типы есть в Си?

Какие типы есть в Си?

Слайд 16

Где прочитать про типы данных в Си? С.Ю. Курсков Введение в

Где прочитать про типы данных в Си?

С.Ю. Курсков Введение в язык

Си
Типы данных - https://dfe.petrsu.ru/koi/posob/c/c.htm#g1.2
Указатели и операции с ними - https://dfe.petrsu.ru/koi/posob/c/c.htm#g2.3
Массивы - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.1
Структуры - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.3
Битовые поля - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.5
Объединение (union) - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.6
Перечислимый тип данных - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.7
Указатели на функции - https://dfe.petrsu.ru/koi/posob/c/c.htm#g4.3
**Система типов Си - https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%A1%D0%B8
****Б. Керниган, Д. Ритчи Язык программирования Си
Типы и размеры данных - http://givi.olnd.ru/kr2/02.html#c0202
Слайд 17

Программное обеспечение https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5

Программное обеспечение

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5

Слайд 18

Структура компьютера https://www.zaurtl.ru/UkVT/UKVT3.html

Структура компьютера

https://www.zaurtl.ru/UkVT/UKVT3.html

Слайд 19

Оперативная память https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C Операти́вная па́мять (англ. Random Access Memory, RAM —

Оперативная память

https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C
Операти́вная па́мять (англ. Random Access Memory, RAM — память с произвольным

доступом) — в большинстве случаев энергозависимая часть системы компьютерной памяти, в которой во время работы компьютера хранится выполняемый машинный код (программы), а также входные, выходные и промежуточные данные, обрабатываемые процессором.
Слайд 20

Оперативная память во время работы компьютера

Оперативная память во время работы компьютера

Слайд 21

Оперативная память доступная программе

Оперативная память доступная программе

Слайд 22

Размещение переменных в оперативной памяти

Размещение переменных в оперативной памяти

Слайд 23

Шестнадцатиричная система счисления (16СС)

Шестнадцатиричная система счисления (16СС)

Слайд 24

Размещение переменных в оперативной памяти * ОБЫЧНО адреса в памяти отображаются в 16СС

Размещение переменных в оперативной памяти

* ОБЫЧНО адреса в памяти отображаются в

16СС
Слайд 25

Целые типы в Си “int” – это либо “short”, либо “long”

Целые типы в Си

“int” – это либо “short”, либо “long”
в MS

VS int = long
sizeof (тип) или sizeof (переменная) – сколько памяти в байтах занимает переменная
Слайд 26

“signed” VS “unsigned” “char” не определен явно ни как “signed” ни

“signed” VS “unsigned”

“char” не определен явно ни как “signed” ни как

“unsigned”. Знаковый он или беззнаковый зависит от компилятора.
Слайд 27

Все целые типы Си (все синонимы) “char” не определен явно ни

Все целые типы Си (все синонимы)

“char” не определен явно ни как

“signed” ни как “unsigned”. Знаковый он или беззнаковый зависит от компилятора.
“int” это либо “signed short” либо “signed long”
“unsigned int” это либо “unsigned short” либо “unsigned long”
Слайд 28

Использование целых типов void main() { printf("main() start!\n"); unsigned long long

Использование целых типов

void main() {
printf("main() start!\n");
unsigned long long l = 1;
int

i = 0;
while (l > 0) {
printf("<%llu (%d)>\n", l, i);
l *= 2;
i += 1;
}
l--;
printf("\n", l, i);
printf("main() finish!\n");
}
Слайд 29

Использование целых типов void main() { printf("main() start!\n"); unsigned long long

Использование целых типов

void main() {
printf("main() start!\n");
unsigned long long l = 1;
int

i = 0;
while (l > 0) {
printf("<%llu (%d)>\n", l, i);
l *= 2;
i += 1;
}
l--;
printf("\n", l, i);
printf("main() finish!\n");
}
Слайд 30

Использование целых типов void main() { printf("main() start!\n"); short s =

Использование целых типов

void main() {
printf("main() start!\n");
short s = 1;
int i =

0;
while (s > 0) {
printf("<%d (%d)>\n", s, i);
s *= 2;
i += 1;
}
s--;
printf("\n", s, i);
printf("main() finish!\n");
}
Слайд 31

Использование целых типов void main() { printf("main() start!\n"); short s =

Использование целых типов

void main() {
printf("main() start!\n");
short s = 1;
int i =

0;
while (s > 0) {
printf("<%d (%d)>\n", s, i);
s *= 2;
i += 1;
}
s--;
printf("\n", s, i);
printf("main() finish!\n");
}
Слайд 32

Вещественные типы в Си “long double” – либо 8 байтовое число,

Вещественные типы в Си

“long double” – либо 8 байтовое число, совпадающее

с double, либо более точный 10 байтовый формат – если он реализован в системе.
в MS VS “long double” = “double”
Слайд 33

Использование вещественных типов void main() { printf("main() start!\n"); float f =

Использование вещественных типов

void main() {
printf("main() start!\n");
float f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 34

Использование вещественных типов void main() { printf("main() start!\n"); float f =

Использование вещественных типов

void main() {
printf("main() start!\n");
float f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 35

Использование вещественных типов void main() { printf("main() start!\n"); float f =

Использование вещественных типов

void main() {
printf("main() start!\n");
float f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 36

Использование вещественных типов void main() { printf("main() start!\n"); float f =

Использование вещественных типов

void main() {
printf("main() start!\n");
float f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 37

Использование вещественных типов void main() { printf("main() start!\n"); double f =

Использование вещественных типов

void main() {
printf("main() start!\n");
double f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 38

Использование вещественных типов void main() { printf("main() start!\n"); double f =

Использование вещественных типов

void main() {
printf("main() start!\n");
double f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 39

Использование вещественных типов void main() { printf("main() start!\n"); double f =

Использование вещественных типов

void main() {
printf("main() start!\n");
double f = 1.23456789012345678901234567890;
int i =

0;
while (i < 1000) {
printf("<%60.30f (%d)>\n", f, i);
f *= 10;
i += 1;
}
printf("sizeof: f = %d, i = %d", sizeof(f), sizeof(i));
printf("main() finish!\n");
}
Слайд 40

Какие типы есть в Си?

Какие типы есть в Си?

Слайд 41

Указатели в Си Указатели - это переменные, показывающие место или адрес

Указатели в Си

Указатели - это переменные, показывающие место или адрес памяти,

где расположены другие объекты (переменные, функции и др.).
Так как указатель содержит адрес некоторого объекта, то через него можно обращаться к этому объекту.
Унарная операция & дает адрес объекта, поэтому оператор
у = &х;
присваивает адрес переменной х переменной у.
Унарная операция * воспринимает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого, поэтому оператор
z = *y;
присваивает z значение переменной, записанной по адресу у.
Если
y = &x;
z = *у;
то z = x.
https://dfe.petrsu.ru/koi/posob/c/c.htm#g2.3
Указатели определяются в Си так: ТИП * имя_указателя;
Например int *y; // y – указатель на int
Слайд 42

Пример №1 работы с указателем #include void main() { printf("main() start!\n");

Пример №1 работы с указателем

#include
void main() {
printf("main() start!\n");
int a;
int*

pa;
a = 10;
pa = &a;
printf("val: a=%d *pa=%d pa=%p\n", a, *pa, pa);
printf("ptr: &a=%p &pa=%p\n", &a, &pa);
printf("sizeof: %d %d\n", sizeof a, sizeof (pa));
*pa = 30;
printf("val: a=%d *pa=%d pa=%p\n", a, *pa, pa);
printf("main() finish!\n");
}
Слайд 43

Пример №2 работы с указателем #include // В функции f вычисляется

Пример №2 работы с указателем

#include
// В функции f вычисляется

сумма a + b
// Результат вычисления помещается по адресу,
// заданному в аргументе ps
void f(int *ps, int a, int b) {
*ps = a + b;
}
void main() {
printf("main() start!\n");
int i1, i2, i3;
i1 = 10;
i2 = 20;
i3 = 30;
printf("i1=%d i2=%d i3=%d\n", i1, i2, i3);
f(&i1, i2, i3);
printf("i1=%d i2=%d i3=%d\n", i1, i2, i3);
printf("main() finish!\n");
}
Слайд 44

Пример №3 работы с указателем (1)

Пример №3 работы с указателем (1)

Слайд 45

Пример №3 работы с указателем (2) void Picture2F(HDC hdc, void (*pfImage)(HDC

Пример №3 работы с указателем (2)

void Picture2F(HDC hdc, void (*pfImage)(HDC

hdc, int cx, int cy)) {
int x = 40;
int y = 40;
int i = 0;
while (i < 6) {
pfImage(hdc, x, y);
y += 50;
i++;
}
}
Слайд 46

Массивы https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.1 Массив состоит из элементов одного и того же типа.

Массивы

https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.1
Массив состоит из элементов одного и того же типа.
Ко

всему массиву целиком можно обращаться по имени. Кроме того, можно выбирать любой элемент массива. Для этого необходимо задать индекс, который указывает на его относительную позицию.
Если массив объявлен, то к любому его элементу можно обратиться следующим образом: указать имя массива и индекс элемента в квадратных скобках.
Массивы определяются так же, как и переменные:
int a[100];
char b[20];
float d[50];
В первой строке объявлен массив а из 100 элементов целого типа: а[0], а[1], ..., а[99] (индексация всегда начинается с нуля). Во второй строке элементы массива b имеют тип char, а в третьей - float.
Слайд 47

Массивы – пример 1 #include void main() { printf("main() start!\n"); int

Массивы – пример 1

#include
void main() {
printf("main() start!\n");
int a[4];
a[0] = 1;
a[1]

= 10;
a[2] = 100;
a[3] = 1000;
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
int b[5] = {2, 20, 200, 2000, 20000};
printf("%d %d %d %d %d\n", b[0], b[1], b[2], b[3], b[4]);
printf("main() finish!\n");
}
Слайд 48

Массивы – пример 2 #include void main() { printf("main() start!\n"); int

Массивы – пример 2

#include
void main() {
printf("main() start!\n");
int a[4];
a[0] = 1;
a[1]

= 10;
a[2] = 100;
a[3] = 1000;
int i;
i = 0;
while (i < 4) {
printf("%d ", a[i]);
i++;
}
printf("\n");
int b[5] = {2, 20, 200, 2000, 20000};
i = 0;
while (i < 5) {
printf("%d ", b[i]);
i++;
}
printf("\n");
printf("main() finish!\n");
}
Слайд 49

Структуры https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.3 Структура - это объединение одного или нескольких объектов (переменных,

Структуры

https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.3
Структура - это объединение одного или нескольких объектов (переменных, массивов,

указателей, других структур и т.д.).
Как и массив, она представляет собой совокупность данных. Отличием является то, что к ее элементам необходимо обращаться по имени и что различные элементы структуры не обязательно должны принадлежать одному типу.
Объявление структуры осуществляется с помощью ключевого слова struct, за которым идет ее тип и далее список элементов, заключенных в фигурные скобки:
struct тип {
тип элемента_1 имя элемента_1;
.........
тип элемента_n имя элемента_n;
};
Слайд 50

Структура - пример #include struct data { int d, m, y;

Структура - пример

#include
struct data { int d, m, y; };
void

main() {
printf("main() start!\n");
struct data d1;
d1.d = 11;
d1.m = 3;
d1.y = 2022;
struct data d2 = { 31, 12, 2021 };
printf("(%02d.%02d.%d)\n", d1.d, d1.m, d1.y);
printf("(%02d.%02d.%d)\n", d2.d, d2.m, d2.y);
printf("main() finish!\n");
}
Слайд 51

typedef https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.4 Рассмотрим описание структуры: struct data {int d, m, у;};

typedef

https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.4
Рассмотрим описание структуры:
struct data {int d, m, у;};
Здесь

фактически вводится новый тип данных - data. Теперь его можно использовать для объявления конкретных экземпляров структуры, например:
struct data а, b, с;
В язык Си введено специальное средство, позволяющее назначать имена типам данных (переименовывать). Таким средством является оператор typedef. Он записывается в следующем виде:
typedef тип имя;
Здесь "тип" - любой разрешенный тип данных и "имя" - любой разрешенный идентификатор.
Рассмотрим пример:
typedef int INTEGER;
После этого можно сделать объявление:
INTEGER а, b;
Оно будет выполнять то же самое, что и привычное объявление int a,b;. Другими словами, INTEGER можно использовать как синоним ключевого слова int.
Слайд 52

struct и typedef – пример (RECT) // windef.h? typedef struct tagRECT

struct и typedef – пример (RECT)

// windef.h?
typedef struct tagRECT
{
LONG left;

LONG top;
LONG right;
LONG bottom;
} RECT;

// RECT - Структура, в которой хранятся параметры прямоугольника
RECT rect; // struct tagRECT rect;
//Определяем размер клиентской области окна
GetClientRect(hWnd, &rect);
// Рисуем прямоугольник по границам клиентской области окна
Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
Слайд 53

Рисуем много линий из центра case WM_PAINT: { PAINTSTRUCT ps; HDC

Рисуем много линий из центра

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc =

BeginPaint(hWnd, &ps);
RECT rect;
GetClientRect(hWnd, &rect);
int cx = rect.right / 2;
int cy = rect.bottom / 2;
int x = 0;
while (x < rect.right) {
MoveToEx(hdc, cx, cy, NULL);
LineTo(hdc, x, 5);
x += 20;
}
EndPaint(hWnd, &ps);
}
Слайд 54

Использование POINT // windef.h? typedef struct tagPOINT { LONG x; LONG

Использование POINT

// windef.h?
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT;

POINT p1;
p1.x

= 10;
p1.y = 10;
POINT p2 = { 300, 10 };
MoveToEx(hdc, p1.x, p1.y, NULL);
LineTo(hdc, p2.x, p2.y);
Слайд 55

Слайд 56

Массивы&Структуры – пример - Polygon HBRUSH hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0,

Массивы&Структуры – пример - Polygon

HBRUSH hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0, 128));
SelectObject(hdc,

hBrush);
Ellipse(hdc, 0, 0 , 160, 120);
HBRUSH hBrush2 = CreateHatchBrush(HS_DIAGCROSS, RGB(128, 0, 128));
SelectObject(hdc, hBrush2);
POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x = 150;
pt[1].y = 100;
pt[2].x = 150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 5);
Слайд 57

Массивы&Структуры – размещение в памяти POINT pt[5]; pt[0].x = 100; pt[0].y

Массивы&Структуры – размещение в памяти
POINT pt[5];
pt[0].x = 100;
pt[0].y = 50;
pt[1].x =

150;
pt[1].y = 100;
pt[2].x = 150;
pt[2].y = 150;
pt[3].x = 50;
pt[3].y = 150;
pt[4].x = 50;
pt[4].y = 100;
Polygon(hdc, pt, 5);
Слайд 58

Слайд 59

Какие типы есть в Си?

Какие типы есть в Си?

Слайд 60

printf/scanf и базовые типы https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%A1%D0%B8

printf/scanf и базовые типы

https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%A1%D0%B8

Слайд 61

Где прочитать про типы данных в Си? С.Ю. Курсков Введение в

Где прочитать про типы данных в Си?

С.Ю. Курсков Введение в язык

Си
Типы данных - https://dfe.petrsu.ru/koi/posob/c/c.htm#g1.2
Указатели и операции с ними - https://dfe.petrsu.ru/koi/posob/c/c.htm#g2.3
Массивы - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.1
Структуры - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.3
Битовые поля - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.5
Объединение (union) - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.6
Перечислимый тип данных - https://dfe.petrsu.ru/koi/posob/c/c.htm#g3.7
Указатели на функции - https://dfe.petrsu.ru/koi/posob/c/c.htm#g4.3
**Система типов Си - https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%A1%D0%B8
****Б. Керниган, Д. Ритчи Язык программирования Си
Типы и размеры данных - http://givi.olnd.ru/kr2/02.html#c0202
Слайд 62

Слайд 63

Лабораторная работа №12 Использование Polyline и Polygon

Лабораторная работа №12

Использование Polyline и Polygon

Слайд 64

Задача 1. Отрисовка треугольника 1 Функцию Image0() вставить в ваш код

Задача 1. Отрисовка треугольника 1

Функцию Image0() вставить в ваш код и

при помощи нее нарисовать от 3 до 5 треугольников в окне приложения.

void Image0(HDC hdc, int cx, int cy) {
HPEN hPen;
hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
SelectObject(hdc, hPen);
POINT p[4];
p[0].x = cx;
p[0].y = cy + 20;
p[1].x = cx + 20;
p[1].y = cy - 20;
p[2].x = cx - 20;
p[2].y = cy - 20;
p[3].x = cx;
p[3].y = cy + 20;
Polyline(hdc, p, 4);
DeleteObject(hPen);
}

Слайд 65

Задача 2. Отрисовка треугольника 2 Функцию Image1() вставить в ваш код

Задача 2. Отрисовка треугольника 2

Функцию Image1() вставить в ваш код и

при помощи нее нарисовать от 3 до 5 треугольников в окне приложения.

void Image1(HDC hdc, int cx, int cy) {
HPEN hPen;
hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
SelectObject(hdc, hPen);
POINT p[4] = {
cx, cy - 20,
cx + 20, cy + 20,
cx - 20, cy + 20,
cx, cy - 20
};
Polyline(hdc, p, 4);
DeleteObject(hPen);
}

Слайд 66

Задача 3. Отрисовка ромба Нужно создать функцию Image2() и при помощи

Задача 3. Отрисовка ромба

Нужно создать функцию Image2() и при помощи нее

нарисовать от 3 до 5 ромбиков в окне приложения.
Слайд 67

Задача 4. Отрисовка сложной фигуры 1 Нужно создать функцию Image3(), в

Задача 4. Отрисовка сложной фигуры 1

Нужно создать функцию Image3(), в

которой отрисовать фигуру по образцу и при помощи неё нарисовать от 3 до 5 фигур в окне приложения.
Слайд 68

Задача 5*. Отрисовка сложной фигуры 2 Нужно создать функцию Image4(), в

Задача 5*. Отрисовка сложной фигуры 2

Нужно создать функцию Image4(), в

которой отрисовать фигуру по образцу и при помощи неё нарисовать от 3 до 5 фигур в окне приложения.
Слайд 69

Домашнее задание по ЛР12 Доделать задачи 1-4. Сделать функцию Image5() в

Домашнее задание по ЛР12

Доделать задачи 1-4.
Сделать функцию Image5() в которой отрисовать

следующую фигуру. При помощи Image5() нарисовать от 3 до 5 фигур.
** Сделать одну из следующих фигур:
Сделать еще две ваши собственные (уникальные) фигуры.
Обязательно! Принести получившийся код на занятие. Его будем использовать и переделывать на следующих лабораторных работах.
Слайд 70

ИТОГО по ЛР12 Научились использовать Polyline/Polygon

ИТОГО по ЛР12

Научились использовать Polyline/Polygon

Слайд 71

Слайд 72

Лабораторная работа №13 Вложенные циклы

Лабораторная работа №13

Вложенные циклы

Слайд 73

Задача 1. Отрисовка треугольника 1 в цвете Функцию Image0() вставить в

Задача 1. Отрисовка треугольника 1 в цвете

Функцию Image0() вставить в ваш

код и при помощи нее нарисовать от 3 до 5 треугольников в окне приложения - разным цветом.

void Image0(HDC hdc, int cx, int cy, COLORREF color) {
HPEN hPen;
hPen = CreatePen(PS_SOLID, 2, color);
SelectObject(hdc, hPen);
POINT p[4] = {
cx, cy + 20,
cx + 20, cy - 20,
cx - 20, cy - 20,
cx, cy + 20
};
Polyline(hdc, p, 4);
DeleteObject(hPen);
}

Слайд 74

Задача 2. Отрисовка треугольника 2 в цвете Функцию Image1() из предыдущей

Задача 2. Отрисовка треугольника 2 в цвете

Функцию Image1() из предыдущей лабораторной

работы переделайте таким образом, чтобы она могла отрисовывать треугольники разным цветом.
Слайд 75

Задача 3. Вертикальный ряд фигур При помощи функции Image0() нарисовать вертикальный

Задача 3. Вертикальный ряд фигур

При помощи функции Image0() нарисовать вертикальный ряд

фигур.

void PictureV(HDC hdc) {
int x, y, i;
x = 100;
y = 50;
i = 0;
do {
Image0(hdc, x, y, RGB(0, 255, 0));
y += 70;
i++;
} while (i < 6);
}

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
PictureV(hdc);
EndPaint(hWnd, &ps);
}
break;

Слайд 76

Задача 4. Горизонтальный ряд фигур При помощи функции Image0() нарисовать горизонтальный

Задача 4. Горизонтальный ряд фигур

При помощи функции Image0() нарисовать горизонтальный ряд

фигур.

void PictureH(HDC hdc) {
int x, y, j;
x = 100;
y = 50;
j = 0;
do {
Image0(hdc, x, y, RGB(255, 0, 0));
x += 50;
j++;
} while (j < 8);
}

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
PictureH(hdc);
EndPaint(hWnd, &ps);
}
break;

Слайд 77

Задача 5. Много рядов фигур При помощи функции Image0() нарисовать много

Задача 5. Много рядов фигур

При помощи функции Image0() нарисовать много рядов

фигур. Использовать для этого вложенные циклы.

void PictureVH(HDC hdc) {
int x, y, i, j;
y = 50;
i = 0;
do {
x = 100;
j = 0;
do {
Image0(hdc, x, y, RGB(255, 255, 0));
x += 50;
j++;
} while (j < 8);
y += 70;
i++;
} while (i < 6);
}

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
PictureVH(hdc);
EndPaint(hWnd, &ps);
}
break;

Слайд 78

Задача 6*. Изменение цвета 1 При помощи функции Image0() нарисовать вертикальный

Задача 6*. Изменение цвета 1

При помощи функции Image0() нарисовать вертикальный ряд

фигур – с изменением цвета.

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
PictureV2(hdc);
EndPaint(hWnd, &ps);
}
break;

Слайд 79

Задача 7*. Изменение цвета 2 При помощи функции Image0() нарисовать вертикальный

Задача 7*. Изменение цвета 2

При помощи функции Image0() нарисовать вертикальный ряд

фигур – с изменением цвета.

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
PictureH2(hdc);
EndPaint(hWnd, &ps);
}
break;

Слайд 80

Задача 8*. Изменение цвета 3 При помощи функции Image0() нарисовать вертикальный

Задача 8*. Изменение цвета 3

При помощи функции Image0() нарисовать вертикальный ряд

фигур – с изменением цвета.

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
PictureV2H2(hdc);
EndPaint(hWnd, &ps);
}
break;

Слайд 81

Домашнее задание по ЛР13 Доделать задачи 1-5. * Доделать задачи 6-8

Домашнее задание по ЛР13

Доделать задачи 1-5.
* Доделать задачи 6-8
Все сделанные в

предыдущей лаб работе функции отрисовки фигур Image2(), Image3() и т.д. – переделать таким образом, чтобы можно было рисовать фигуры разным цветом.
Используя самые красивые 3 фигуры, созданные вами, создать рисунки из множества рядов из каждой из этих фигур.
** Используя все созданные вами фигуры нарисовать подобную картину:
Слайд 82

ИТОГО по ЛР13 Познакомились с вложенными циклами

ИТОГО по ЛР13

Познакомились с вложенными циклами

Слайд 83