/* Бесплатная консультация онлайн № 180342 */
/*
Итак, на ввод идут фамилии, не меньше 4, пол, местожительство и 4 оценки.
Первый вывод должен быть в виде таблицы с введенными данными.
Далее должен быть вывод студенток, проживающих в СПб.
И 3 вывод-сортировка 2 вывода по возрастанию среднего балла.
*/
#include <stdio.h>
#define SIZE 10
/********************/
#define MAX_BALLS 4
/********************/
typedef struct
{
int year;
int month;
int day;
} Born;
typedef struct student
{
char FIO[20];
char Gender[2];
Born b;
char City[30];
int Balls[MAX_BALLS];
} Student;
void Print_Group(Student MyMas[], int quant);
void Izm_Group(Student MyMas[], Student MyMas1[], int quant, int *quant1);
void Sort_Group(Student MyMas[], int quant);
int main()
{
int i;
int j;
int n1; /* количество студенток из СПб */
Student GROUP[SIZE], GROUP1[SIZE];
/* Ввод данных */
for ( i = 0; i<SIZE; i++)
{
printf("\nФИО : ");
scanf("%s", GROUP[i].FIO);
printf("ПОЛ(m/f) : ");
scanf("%s", GROUP[i].Gender);
printf("Год месяц день: ");
scanf("%d %d %d", &GROUP[i].b.year, &GROUP[i].b.month,&GROUP[i].b.day);
printf("Город : ");
scanf("%s", GROUP[i].City);
printf("Оценки[%d] : ", MAX_BALLS);
for (j=0;j<MAX_BALLS;j++)
scanf("%d", &GROUP[i].Balls[j]);
}
/* Печать */
printf("\nВведенный массив[%i]\n",SIZE);
Print_Group(GROUP, SIZE);
printf("\n");
Izm_Group(GROUP,GROUP1,SIZE, &n1);
printf("Массив, отобранный по условию[%i]\n",n1);
Print_Group(GROUP1,n1);
printf("\n");
Sort_Group(GROUP1,n1);
printf("Отсортированный массив[%i]\n",n1);
Print_Group(GROUP1,n1);
return 0;
}
void Print_Group(Student MyMas[], int quant)
{ int i,j;
double sum;
for( i=0, sum=0.0; i<quant; i++)
{
printf("\nФИО :%s\n", MyMas[i].FIO);
printf("Пол :%s\n", MyMas[i].Gender);
printf("Дата рождения:%d-%d-%d\n", MyMas[i].b.year, MyMas[i].b.month, MyMas[i].b.day);
printf("Проживает :%s\n", MyMas[i].City);
printf("Оценки :");
for(j=0, sum=0.0; j<MAX_BALLS; j++)
{ sum+=MyMas[i].Balls[j];
printf("%d,", MyMas[i].Balls[j]);
}
printf("средний балл :%4.2f\n", sum/MAX_BALLS);
}
}
void Izm_Group(Student MyMas[], Student MyMas1[], int quant, int *quant1)
{
/* Формирование массива студенток, проживающих в СПб. */
int i;
int j;
for(i=0, *quant1=0; i<quant; i++)
if((strcmp(MyMas[i].Gender,"f")==0)&&(strcmp(MyMas[i].City,"SPb")==0))
{
MyMas1[(*quant1)++]=MyMas[i];
}
}
void Sort_Group(Student MyMas[],int quant)
{
// Вместо того, чтобы сравнивать средний балл при одинаковом числе оценок,
// достаточно сравнить сумму баллов
int i, j, k, k1;
int sum, sum1;
Student buf;
for(i=1; i<quant;i++)
for(j=quant-1; j>=i;j--)
// Эту часть можно улучшить, так как
// каждая сумма внутри этого цикла, кроме "крайних"
// считается дважды
{
for (k=0, sum=0; k<MAX_BALLS; k++)
sum+=MyMas[j].Balls[k];
for (k1=0, sum1=0; k1<MAX_BALLS; k1++)
sum1+=MyMas[j-1].Balls[k1];
if(sum1>sum)
{
buf=MyMas[j];
MyMas[j]=MyMas[j-1];
MyMas[j-1]=buf;
}
}
}
Иванов m 1990 11 12 SPb 1 2 3 4
Петров m 1991 10 25 NY 4 3 2 1
Сидоров m 1989 9 22 Ковров 2 3 4 5
Антонова f 1990 8 13 Москва 2 3 4 5
Николаенко f 1990 7 14 SPb 3 3 4 5
Джабраилова f 1990 11 3 SPb 5 5 4 5
Набиуллина f 1990 10 21 Париж 2 2 3 5
Алимов m 1990 5 11 SPb 3 5 4 5
Черненко f 1990 3 2 SPb 3 3 3 3
Федоров m 1990 2 2 SPb 2 2 4 5
Введенный массив[10]
ФИО :Иванов
Пол :m
Дата рождения:1990-11-12
Проживает :SPb
Оценки :1,2,3,4,средний балл :2.50
ФИО :Петров
Пол :m
Дата рождения:1991-10-25
Проживает :NY
Оценки :4,3,2,1,средний балл :2.50
ФИО :Сидоров
Пол :m
Дата рождения:1989-9-22
Проживает :Ковров
Оценки :2,3,4,5,средний балл :3.50
ФИО :Антонова
Пол :f
Дата рождения:1990-8-13
Проживает :Москва
Оценки :2,3,4,5,средний балл :3.50
ФИО :Николаенко
Пол :f
Дата рождения:1990-7-14
Проживает :SPb
Оценки :3,3,4,5,средний балл :3.75
ФИО :Джабраилова
Пол :f
Дата рождения:1990-11-3
Проживает :SPb
Оценки :5,5,4,5,средний балл :4.75
ФИО :Набиуллина
Пол :f
Дата рождения:1990-10-21
Проживает :Париж
Оценки :2,2,3,5,средний балл :3.00
ФИО :Алимов
Пол :m
Дата рождения:1990-5-11
Проживает :SPb
Оценки :3,5,4,5,средний балл :4.25
ФИО :Черненко
Пол :f
Дата рождения:1990-3-2
Проживает :SPb
Оценки :3,3,3,3,средний балл :3.00
ФИО :Федоров
Пол :m
Дата рождения:1990-2-2
Проживает :SPb
Оценки :2,2,4,5,средний балл :3.25
Массив, отобранный по условию[3]
ФИО :Николаенко
Пол :f
Дата рождения:1990-7-14
Проживает :SPb
Оценки :3,3,4,5,средний балл :3.75
ФИО :Джабраилова
Пол :f
Дата рождения:1990-11-3
Проживает :SPb
Оценки :5,5,4,5,средний балл :4.75
ФИО :Черненко
Пол :f
Дата рождения:1990-3-2
Проживает :SPb
Оценки :3,3,3,3,средний балл :3.00
Отсортированный массив[3]
ФИО :Черненко
Пол :f
Дата рождения:1990-3-2
Проживает :SPb
Оценки :3,3,3,3,средний балл :3.00
ФИО :Николаенко
Пол :f
Дата рождения:1990-7-14
Проживает :SPb
Оценки :3,3,4,5,средний балл :3.75
ФИО :Джабраилова
Пол :f
Дата рождения:1990-11-3
Проживает :SPb
Оценки :5,5,4,5,средний балл :4.75
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.