Finaldeki 4. Sorunun cevabı.
Daha önce iucoders'ta bi kod görmüştüm onu sınav sorusuna uyarladım.
Yanlışlıklar olabilir...
#include<stdio.h>
#include<errno.h>
#include<stdlib.h>
#include<string.h>
FILE *dosya;
typedef struct veriyapi {
int deger;
char isim[20];
char soyisim[20];
} veri;
veri* GetVal(FILE *dosya, int kayit) {
veri *temp = (veri *) malloc(sizeof(veri));
fseek(dosya, kayit * sizeof(veri), SEEK_SET);
fread(temp, sizeof(veri), 1, dosya);
return temp;
}
void SetVal(FILE *dosya, int kayit, veri *ptr){
fseek(dosya, kayit * sizeof(veri), SEEK_SET);
fwrite(ptr, sizeof(veri), 1, dosya);
}
void Swap(FILE *dosya, int kayit1, int kayit2){
veri *ptr1;
veri *ptr2;
ptr1 = GetVal(dosya, kayit1);
ptr2 = GetVal(dosya, kayit2);
SetVal(dosya, kayit2, ptr1);
SetVal(dosya, kayit1, ptr2);
}
void PrintScr(FILE *dosya, int boyut){
int i;
veri *ptr;
for (i = 0; i < boyut; i++)
{
ptr = GetVal(dosya, i);
printf("%d %s %s
",ptr->deger, ptr->isim, ptr->soyisim);
}
}
void BubbleSort(FILE *dosya, int boyut){
int i, j;
veri *ptr1;
veri *ptr2;
for (i = boyut; i > 1; --i)
{
for (j = 0; j < i - 1; j++)
{
ptr1 = GetVal(dosya, j);
ptr2 = GetVal(dosya, j + 1);
if(ptr1->deger > ptr2->deger)
{
Swap(dosya, j, j + 1);
PrintScr(dosya, boyut);
printf("
");
}
}
}
}
int main(){
veri * data = (veri *) malloc( sizeof( veri ));
int boyut = 6;
dosya = fopen("veri.dat", "r+");
if(errno == ENOENT)
{
dosya = fopen("veri.dat", "w+");
data->deger = 6;
strcpy(data->isim,"Guven6");
strcpy(data->soyisim,"DH6");
fwrite (data, sizeof(veri), 1, dosya);
data->deger = 2;
strcpy(data->isim,"Guven2");
strcpy(data->soyisim,"DH2");
fwrite (data, sizeof(veri), 1, dosya);
data->deger = 4;
strcpy(data->isim,"Guven4");
strcpy(data->soyisim,"DH4");
fwrite (data, sizeof(veri), 1, dosya);
data->deger = 1;
strcpy(data->isim,"Guven1");
strcpy(data->soyisim,"DH1");
fwrite (data, sizeof(veri), 1, dosya);
data->deger = 5;
strcpy(data->isim,"Guven5");
strcpy(data->soyisim,"DH5");
fwrite (data, sizeof(veri), 1, dosya);
data->deger = 3;
strcpy(data->isim,"Guven3");
strcpy(data->soyisim,"DH3");
fwrite (data, sizeof(veri), 1, dosya);
fclose(dosya);
dosya = fopen("veri.dat", "r+");
}
PrintScr(dosya, boyut);
printf("
*****************************
");
BubbleSort(dosya, boyut);
PrintScr(dosya, boyut);
fclose(dosya);
system("PAUSE");
return 0;
}
|