Какой параметр передать в функцию - C (СИ)
Формулировка задачи:
У меня есть структура данных, которую я сортирую и записываю в файл.И у меня есть 2 функции сортировки для чисел и строк. Как мне правильно передать параметр в функцию, чтоб она выполнялась не для одного поля, но и для другого.
Например, Если у меня функция сортирует по коду изделия, то какой параметр надо передать, чтоб она сортировала по цене.
#include <stdio.h> #include <conio.h> #include <string.h> typedef struct Vurobu { int kod; int cina; char nazva[15]; char vurobnuk[15]; }; Vurobu v[10]; void Zcit(Vurobu c[],int k) { int i; for (i=0;i<k;i++) { printf("Vvedit dani pro vurib %d\n",i+1); printf("Nazva vuroby\n"); scanf("%s",&c[i].nazva); printf("Kraina vurobnuk\n"); scanf("%s",&c[i].vurobnuk); printf("Vvedit kod vuroby\n"); scanf("%d",&c[i].kod); printf("Vvedit cina vuroby\n"); scanf("%d",&c[i].cina); } } void Sort1(Vurobu c[],int k) { int temp; int i,j; for (i=0;i<k;i++) for (j=i+1;j<k;j++) { if (c[i].kod>c[j].kod) { temp=с[i].kod; c[i].kod=c[j].kod; c[j].kod=temp; } } } void Sort2(Vurobu c[],int k) { char temp[15]; int i,j; for (i=0;i<k;i++) for (j=i+1;j<k;j++) { if (strcmp(c[i].nazva,c[j].nazva)>0) { strcpy(temp,c[i].nazva); strcpy(c[i].nazva,c[j].nazva); strcpy(c[j].nazva,temp); } } } void Vuvid(Vurobu c[], int k) { int i; printf(" Nazva vuroby Vurobnuk Cina Kod\n"); for (i=0;i<k;i++) printf("%15s%15s%10d%10d\n",c[i].nazva,c[i].vurobnuk,c[i].cina,c[i].kod); } void Vfajl(Vurobu c[],int k) { FILE *fp; int i,j; char a[10]; fp=fopen("D:\\fajlstr.txt","wt"); if (fp==NULL) printf("Error.Ne ydalos' vidkrutu fajl"); for (i=0;i<k;i++) { fprintf(fp,"%15s%15s%10d%10d",c[i].nazva,c[i].vurobnuk,c[i].cina,c[i].kod); fputc('\n',fp); } fclose(fp); } int main() { int n,p; printf("Vvedit kilksit vurobiv\n"); scanf("%d",&n); Zcit(v,n); printf("Vuberit' sortyvanna vurobiv\n"); printf("1 - Po kody\n2 -Po nazvi\n"); scanf("%d",&p); if (p==1) Sort1(v,n); if (p==2) Sort2(v,n); Vuvid(v,n); Vfajl(v,n); getch(); return 0; }
Тема актуальна
Решение задачи: «Какой параметр передать в функцию»
textual
Листинг программы
int temp; if (c[i].kod > c[j].kod) { temp = с[i].kod; c[i].kod = c[j].kod; c[j].kod = temp; }
Объяснение кода листинга программы
В данном коде происходит сортировка массива структур по значению поля kod
.
- Переменная
temp
инициализируется значением первого элемента массиваc
. - Если значение поля
kod
текущего элемента массиваc
больше значения поляkod
следующего элемента массиваc
, то значения полейkod
этих элементов меняются местами, при этом значениеtemp
используется как временное хранилище для сохранения значения первого элемента. - Процесс повторяется до тех пор, пока все элементы массива
c
не будут отсортированы по возрастанию значения поляkod
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д