Тема: Використання структур і функцій
Я студент і пишу на С.В мене є таке завдання:.З клавіатури ввести інформацію про автомобілі, що прийматимуть участь у змаганнях: <Марка>, <Рік випуску>, <Об’єм двигуна>, <Власник>. Роздрукувати введений список у вигляді таблиці. Потім відсортувати його за об’ємами двигунів у спадному порядку і ще раз надрукувати. Визначити і вказати кількість автомобілів кожної марки.Я зміг реалізувати майже всі частини програми,але мені важко визначити і вказати кількість автомобілів кожної марки(це я намагався реалізувати в функції NumbOfCars).Ніяк не можу зрозуміти в чому проблема.Шукав чи є подібні завдання на інших форумах,але саме такої проблеми чомусь не найшов.Буду вдячним за допомогу.
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef struct Competition_list {
char model[20];
int year;
int engvol;
char owner[30];
}car;
car clist[MAX];
void Print(int numb);
void SelectionSort(int numb); //прототипи функцій
void GetData(int numb);
void NumbOfCars(int numb);
int main(void) {
system("chcp 1251");
int numb;
printf("Введіть інформацію про учасників змагань:\n");
printf("Введіть кількість учасників:");
scanf_s("%d", &numb);
rewind(stdin); //для очищення буфера введення
GetData(numb);
puts("Список учасників:");
Print(numb);
puts("\nВідсортований список:");
SelectionSort(numb);
Print(numb);
NumbOfCars(numb);
return 0;
}
void GetData(int numb) { //функція введення даних
puts("\t\tДані:");
for (int i = 0; i <numb; i++) {
printf("%d-й учасник:\n", i + 1);
printf("1)Марка машини:");
gets_s((clist + i)->model);
rewind(stdin);
printf("2)Рік випуску автомобіля:");
scanf_s("%d", &clist[i].year);
printf("3)Об'єм двигуна:");
scanf_s("%d", &clist[i].engvol);
rewind(stdin);//для очищення буфера введення
printf("4)Власник:");
gets_s((clist + i)->owner);
puts("");
}
}
void NumbOfCars(int numb) {
puts("\nКількість автомобілів кожної марки:");
int i, j, count = 1, freqarr[MAX];
for (i = 0; i < numb; i++) {
for (j =i+1; j != 0; j++) {
if (clist[i].model == clist[j].model)
freqarr[i] = count + 1;
else
freqarr[i] = count;
}
}
for (i = 0; i < numb; i++) {
printf("%d.Марка авто:%-20.18s Кількість машин:%d\n", i + 1, (clist + i)->model, freqarr[i]);
}
}
void SelectionSort(int numb) { //цикл сортування вибором
car tmp,*maxelm,*sortitem;
for (int i = 0; i < numb; i++) {
for (int k =i+1; k < numb; k++) {
maxelm = clist + i; sortitem = clist +k;
if (maxelm->engvol < sortitem->engvol) {
tmp =*maxelm;
*maxelm = *sortitem;
*sortitem = tmp;
}
}
}
}
void Print(int numb){ //виведення таблиці
for (int i = 0; i < numb; i++) {
printf("%d.%-20.18s%-9.4d%-8.3d%-30.22s\n", i + 1, (clist + i)->model, (clist + i)->year, (clist + i)->engvol, (clist + i)->owner);
}
}