Какой параметр передать в функцию - 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.