Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессионал
Рейтинг: 4778
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2498
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1991
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1580
Дата выхода:22.10.2010, 05:00
Администратор рассылки:Verena (Профессионал)
Подписчиков / экспертов:344 / 173
Вопросов / ответов:1 / 1

Вопрос № 180342: День добрый, уважаемые эксперты, нуждаюсь в помощи со следующей программой: Компилятор Code blocks идеально, Borland в крайнем случае, Итак, на ввод идут фамилии, не меньше 4, пол, местожительство и 4 оценки. Первый вывод должен быть в виде та...



Вопрос № 180342:

День добрый, уважаемые эксперты, нуждаюсь в помощи со следующей программой:
Компилятор Code blocks идеально, Borland в крайнем случае,
Итак, на ввод идут фамилии, не меньше 4, пол, местожительство и 4 оценки. Первый вывод должен быть в виде таблицы с введенными данными.
Далее должен быть вывод студенток, проживающих в СПб. И 3 вывод-сортировка 2 вывода по возрастанию среднего балла.

Отправлен: 17.10.2010, 04:49
Вопрос задал: Aptemis (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает lamed (Профессор) :
Здравствуйте, Aptemis! Мой вариант, проверен в Code::Blocks/GCC.
Код:
/* Бесплатная консультация онлайн № 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+=MyM as[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--)
// Эту часть можно улучшить, так как
// каждая сумма внутри этого цикла, кроме "крайних&q uot;
// считается дважды
{
for (k=0, sum=0; k<MAX_BALLS; k++)
sum+=MyMas[j].Bal ls[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

Если требуются комментарии - задавайте вопросы в мини-форуме. Удачи!

Ответ отправил: lamed (Профессор)
Ответ отправлен: 18.10.2010, 13:47
Номер ответа: 263536

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 263536 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.22 от 18.10.2010

    В избранное