Работа вам нужна срочно. Не волнуйтесь, уложимся!
Заполните, пожалуйста, данные для автора:
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Сформировать статический массив структур, каждый элемент которого содержит следующие три поля:
фамилия, имя отчество студента или школьника (вводим);
массив оценок фиксированной размерности, который также вводим;
средний балл (вычисляем).
Для каждого студента найти средний балл и рассортировать массив структур по этому полю.
const m=4;
// Количество оценок у одного студента.
struct tstr // Объявляем тип структуры.
{ char name[20] ; // Фамилия, имя , отчество.
int a[m] ; // Массив оценок .
float s ; // Средний балл.
} ;
// Ввод массива структур
void MyInp ( tstr x[], int,int );
// Вывод массива структур
void MyOut ( tstr x[], int );
// Сортировка массива структур
void MySort ( tstr x[], int );
/* Нахождение среднего значения в числовом массиве z (в целочисленном одномерном массиве, а не в массиве структур) */
float MyAver ( int z[], int );
int main()
{ const n=3;
/* Количество студентов, т.е. количество элементов массива структур. */
tstr ars[n]; // Статический массив структур (n — константа).
int i,j;
clrscr(); MyInp(ars,n,2);
/* Для каждого студента находим средний балл, т. е. для i-й структуры ars[i] вычисляем поле s. Для этого используем функцию MyAver.*/
for (i=0;i
ars[i].s=MyAver( ars[i].a,m);
cout<<" \n Before of sorting\n";
MyOut(ars,n); MySort(ars,n);
cout<<"\nAfter of sorting\n"; MyOut(ars,n);
getch(); return 0;
};
/* Ввод массива структур, т.е. фамилий и оценок всех (size) студентов. Ввод начинается со строки экрана с номером y0. */
void MyInp(tstr x[],int size, int y0)
{ int i,j, y,
coord1; // Номер позиции в строке
y=y0;
for (i=0;i
/* i – номер элемента массива структур (номер студента). */
{ gotoxy(2,y);
cout<<"Name ";
cin>> (x[i].name);
cout<<"Ocenki "<
y++;
for (j=0, coord1=8; j
// j – номер оценки одного студента
// Цикл для ввода одной j - й оценки i – го студента с контролем ввода.
{ while(1)
{ gotoxy(coord1,y);
cin>>x[i].a[j];
if (x[i].a[j]>0 && x[i].a[j]<=10)
break;
else { gotoxy(coord1,y);
// “Стираем” неверно введённую оценку
cout<<" ";
}
}
}
y++;
}
};
/* Сортировка массива структур. Подробный анализ алгоритма смотри в 1-м семестре ([1]). */
void MySort ( tstr x[], int size)
{ int i,j,k,flag; tstr T;
k=size;
do { k--;
flag=0;
for (i=0; i
if (x[i].s < x[i+1].s)
{
/* Перестановка i- го и (i+1) – го элемента массива структур. */
T=x[i];
x[i]=x[i+1];
x[i+1]=T;
flag=1;
}
}
while (flag);
} ;
/* Вывод массива структур, т. е. выводим информацию обо всех студентах. */
void MyOut (tstr x[], int size)
{ int i,j,coord1; cout<< endl;
for (i=0;i
{ cout<
for (j=0,coord1=25; j
{ gotoxy(coord1,wherey());
cout<
}
gotoxy(coord1,wherey());
textcolor(10);
cprintf("%5.2f",x[i].s);
cout<
}
cout<
} ;
float MyAver (int z[],int M)
{ float S=0; int j;
for (j=0; j
S+=z[j];
S/=M;
return S; };
Сформировать динамический массив многоугольников на плоскости. Количество сторон каждого из них различно и является полем структуры. Для каждого из многоугольников найти периметр и определить его тип в зависимости от количества сторон (треугольник, четырёхугольник, пятиугольник и остальные).
/*Структурный тип для определения декартовых координат одной точки плоскости. */
struct Point1
{float x,y;
};
/*Структурный тип для определения одного многоугольника плоскости. */
struct ttr
{
char *type; // Строка для названия.
unsigned n; // Количество вершин.
/* Указатель на динамический массив структур, т. е. массив точек одного многоугольника. Каждая точка имеет две координаты. Поэтому используется вложенная структура Point1, содержащая эти две координаты. */
Point1 *Points;
float per; // Периметр многоугольника.
};
/* Функция вычисляет периметр одного многоугольника, имеющего size вершин. В неё передаём указатель на динамический массив структур, т.е. массив точек одного многоугольника. Каждый элемент этого массива имеет тип Point1, т. е. содержит два числа (две координаты точки). */
float MyPer(Point1 *P, int size)
{ float Len=0;
/*В цикле находим сумму длин сторон, соединяющей 0-ю точку с 1 – й, 1-ю со 2 – й и т.д., (size-2) – ю точку с (size-1) – й. */
for(int j=0; j
Len+= sqrt((P[j].x-P[j+1].x)*(P[j].x-P[j+1].x)+
(P[j].y-P[j+1].y)*(P[j].y-P[j+1].y) );
/* Вне цикла добавляем длину стороны, соединяющей 0-ю точку с (size-1) – й точкой. */
return Len+sqrt((P[0].x-P[size-1].x)*(P[0].x-P[size-1].x)+
(P[0].y-P[size-1].y)*(P[0].y-P[size-1].y) );;
}
/* Функция получает поля одной структуры типа ttr, т. е. информацию об одном многоугольнике, кроме периметра. Периметр будет найден вызовом из main функции MyPer. Так как структура является результатом функции, то в качестве параметра объявлен указатель на неё.*/
void MyDef (ttr *Str, int size)
{ cout<
char t[40];
/* t — вспомогательная строка для названия многоугольника. В зависимости от количества вершин (size) формируем русско-латинское название многоугольника. При этом предусмотрены четыре варианта. */
switch (size)
{case 3: strcpy(t,"Triangle"); break;
case 4: strcpy(t,"Chetirexygolnic");break;
case 5: strcpy(t,"Pjatyygolnic"); break;
default: strcpy(t,"Other");
}
/* Динамически создаём строку type, длина которой берётся из вспомогательной строки t. Используем операцию “->”(стрелка), потому что Str — указатель на структуру, а не потому, что type и Points — указатели. */
Str->type=new char [strlen(t)];
strcpy(Str->type, t);
/* Создаём динамический массив структур внутри структуры Str. То есть определяем массив точек одного многоугольника размером size. */
Str->Points=new Point1[size];
for (int i=0; i
{ Str->Points[i].x= float(random (5)-2);
Str->Points[i].y= float(random (5)-2);
}
/* Использовали операцию “->”, потому что Str — указатель, а операция “.”, потому что Points[i] — это не указатель, а i – й элемент вложенного динамического массива структур. Указателем является Points, в котором хранится адрес начала этого массива.*/
}
/* Функция для вывода полей одной структуры, то есть информации об одном многоугольнике. Для экономии памяти в качестве параметра используем указатель на структуру, несмотря на то, что в этой функции структуру мы не меняем. */
void MyShow (ttr *Str, int size)
{Str->n=size;
cout<<"\n m="<< Str->n<<" ";
for (int i=0; i
printf(" x=%4.1f y=%4.1f", Str->Points[i].x, Str->Points[i].y);
printf("\n type %s",Str->type);
printf(" perimetr %10.2f",Str->per );
}
int main()
{ int m=3; // Количество вершин многоугольника.
clrscr();
/* Объявляем и создаём указатель на одну структуру типа ttr, в котором будет храниться информация об одном многоугольнике. */
ttr *S; S=new ttr;
MyDef ( S, m);
/* Так как в функциях MyDef и MyShow в качестве формального параметра используется указатель на структуру (ttr *Str), то в качестве фактического параметра передаём указатель на структуру такого же типа. Так как объявлен указатель (ttr*S;), а не просто структура (ttr S;), то при вызове функции в скобках записали просто S. */
S->per=MyPer(S->Points, m);
/* Так как в функции MyPer в качестве формального параметра используется указатель на структуру типа Point1 (Point1 *P), то в качестве фактического параметра передаём указатель на структуру такого же типа. После выполнения функции MyDef в структуре, адрес которой в S, будет создан динамический массив Points. Адрес начала этого массива S->Points и передаём в функцию. */
MyShow(S, m);
/* Вывели сформированную с помощью функций MyDef и MyPer структуру, адрес которой в S.*/
int n=4,i;
/*Создаём динамичечский массив структур типа ttr размерности n, то есть n m - угольников. */
ttr *arrs=new ttr[n];
for(i=0;i
{ cout<<"\n i="<
Работа вам нужна срочно. Не волнуйтесь, уложимся!
Заполните, пожалуйста, данные для автора: