25-11-2020-Лекция_ОАиП1

Содержание

Слайд 2

Свойства структур

1. Описание переменных структурного типа
coord a; city b[10];
2. Доступ к

Свойства структур 1. Описание переменных структурного типа coord a; city b[10]; 2.
полям структуры:
a.x a.y b[1].name b[2].name[0]
3. Присваивание структурных переменных
Переменные одного структурного типа можно присваивать друг другу
coord a,b; a=b;
city p,q; p=q;
4. Остальные операции выполняются для каждого поля в отдельности в соответствии с типом этого поля
Пример задачи 1
Задан массив точек на плоскости. Определить координаты точки, расположенной наиболее близко к началу координат
#include “stdafx.h”
#include “iostream”
#include “string.h”

Слайд 3

Пример программы

#include “math.h”
using namespace std;
struct coord{
float x,y;};
coord minrast(coord

Пример программы #include “math.h” using namespace std; struct coord{ float x,y;}; coord
*s,int n);
void main()
{
coord mas[10];
cout <<“Input mas”< for(int i=0;i<10;i++)
cin>>mas[i].x>>mas[i].y;
coord r = minrast(mas,10);
cout< system(“pause”);
}

Слайд 4

Пример программы

coord minrast(coord *s,int n)
{
coord rm;
float minr=1.0e20;
for(int

Пример программы coord minrast(coord *s,int n) { coord rm; float minr=1.0e20; for(int
i=0;i {
float r = sqrt(s[i].x*s[i].x+s[i].y*s[i].y)
if(r {
minr=r;
rm=s[i];
}
}
return rm;
}

Слайд 5

Пример программы

Пример задачи 2
Задан массив структурных переменных, каждый элемент которого состоит

Пример программы Пример задачи 2 Задан массив структурных переменных, каждый элемент которого
из фамилии студента и его возраста. Составить список студентов, фамилии которых начинаются на заданную букву, а возраст не превосходит заданного значения
#include “stdafx.h”
#include “iostream”
#include “string.h”
struct stud{
char name[20];
int age;};
int spis(stud *mas,int n,char c,int ag,char rm[][20]);
void main()
{
stud mas[20];

Слайд 6

Пример программы

char rm[20][20];
cout <<“Input mas”< for(int i=0;i<10;i++)
cin>>mas[i].name>>mas[i].age;
char c; int

Пример программы char rm[20][20]; cout for(int i=0;i cin>>mas[i].name>>mas[i].age; char c; int ag;
ag;
cin>>c>>ag;
int kol = spis(mas,20,c,ag,rm);
for(int i=0;i cout< system(“pause”);
}
int spis(stud *mas,int n,char c,int ag,char rm[][20])
{
int k=0;

Слайд 7

Пример программы

for(int i=0;i if((mas[i].age<=ag)&&(mas[i].name[0]==c)
{
strcpy(rm[k],mas[i].name);
k++;
}
return k;
}
Структуры с битовыми полями

Пример программы for(int i=0;i if((mas[i].age { strcpy(rm[k],mas[i].name); k++; } return k; }
Если у структуры одно или несколько полей имеют ограниченный спектр значений, то можно существенно сэкономить отводимую под структуру память
Пример:
struct person {
char name[20];
unsigned age; //4 байта

Слайд 8

Структуры с битовыми полями

unsigned sex; //4 байта
unsigned child; //4 байта

Структуры с битовыми полями unsigned sex; //4 байта unsigned child; //4 байта
};
Под последние 3 поля – 12 байт (48 бит)
struct person {
char name[20];
unsigned age:7; // 7 бит
unsigned sex:1;
unsigned child:4;
};
Итого под последние 3 поля – 12 бит
Пример использования – заголовок каждого фрейма mp3 - файла

Слайд 9

Структуры с битовыми полями

struct mp3_frame_hdr {
unsigned short sync;
unsigned char priv:1;
unsigned char pad:1;
unsigned

Структуры с битовыми полями struct mp3_frame_hdr { unsigned short sync; unsigned char
char freg:2;
unsigned char rate:4;
unsigned char mode:2;
unsigned char mode_exit:2;
unsigned char copy:1;
unsigned char orig:1;
unsigned char emph:2;
};

Слайд 10

Объединение

Определение Объединение – это структура, в которой поля перекрывают друг друга, располагаясь

Объединение Определение Объединение – это структура, в которой поля перекрывают друг друга,
по одному и тому же адресу
Общий вид:
union <имя> {
<тип 1> <поле 1>;
<тип 2> <поле 2>;
……..
};
Пример:
struct bytes{
char lobyte;
char hibyte;
};
union word
{
unsigned short w;
bytes bt;
};

Слайд 11

Объединения

word d;
d.w= 12;
d.bytes.lobyte – младший байт
d.bytes.hibyte – старший

Объединения word d; d.w= 12; d.bytes.lobyte – младший байт d.bytes.hibyte – старший
байт
Структуры и указатели
Пример
struct coord{
float x,y;};
coord *p;
Доступ к каждому полю структуры осуществляется оператором доступа ->, т.е.
p->x - разименование указателя для поля Х
p->y - разименование указателя для поля Y
Другая форма записи (*p).x

Слайд 12

Структуры и указатели

Пример: Дано 6 точек на плоскости, заданных своими координатами. Определить

Структуры и указатели Пример: Дано 6 точек на плоскости, заданных своими координатами.
минимальное расстояние между точками
#include “stdafx.h”
#include “iostream”
#include “math.h”
using namespace std;
struct coord{
float x,y;};
void main()
{
coord *p = new coord[6];
for(int i=0;i<6;i++)
cin>>(p+i)->x>>(p+i)->y;
float min = 1.0e20;