Hocanın verdiği sorulardan 3.sü:
Kabarcık sıralama algoritmasını kullanarak veri.dat dosyasındaki verileri sıralı hale getiriniz.
#include "stdio.h"
#include "errno.h"
FILE *dosya;
struct sayiyapi {
int deger;
} sayi;
int getDeg(FILE *dosya, int rec) {
fseek(dosya, rec * sizeof(sayi), SEEK_SET);
fread(&sayi, sizeof(sayi), 1, dosya);
return sayi.deger;
}
void setDeg(FILE *dosya, int rec, int deger) {
sayi.deger = deger;
fseek(dosya, rec * sizeof(sayi), SEEK_SET);
fwrite(&sayi, sizeof(sayi), 1, dosya);
}
void YerDegis(FILE *dosya, int deg1, int deg2) {
int diziDeg1, diziDeg2;
diziDeg1 = getDeg(dosya, deg1);
diziDeg2 = getDeg(dosya, deg2);
setDeg(dosya, deg2, diziDeg1);
setDeg(dosya, deg1, diziDeg2);
}
void ekranaYazdir(FILE *dosya, int n) {
int i;
for(i=0; i<n; i++)
printf("%d ", getDeg(dosya, i));
printf("
");
}
void bubbleSort(FILE *dosya, int n) {
int i, j;
int diziDeg1, diziDeg2;
for(i=n; i>1; --i) {
for(j=0; j<i-1; j++) {
diziDeg1 = getDeg(dosya, j);
diziDeg2 = getDeg(dosya, j + 1);
if(diziDeg1 > diziDeg2)
{
YerDegis(dosya, j, j + 1);
ekranaYazdir(dosya, n);
}
}
}
}
int main()
{
dosya = fopen("veri.dat", "r+");
if(errno == ENOENT) {
dosya = fopen("veri.dat", "w+");
sayi.deger = 7;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 4;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 5;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 6;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 1;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 3;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 8;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 2;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 9;
fwrite(&sayi, sizeof(sayi), 1, dosya);
sayi.deger = 0;
fwrite(&sayi, sizeof(sayi), 1, dosya);
fclose(dosya);
dosya = fopen("veri.dat", "r+");
}
int n = 10;
ekranaYazdir(dosya, n);
bubbleSort(dosya, n);
printf("===========================
");
printf("SONUC :
");
ekranaYazdir(dosya, n);
fclose(dosya);
system("PAUSE");
return 0;
}
Soruya göre kodun eksiği yok fazlası var. Soruda istenilen kısma göre çıkartmalar yapılabilinir.
Indekslerle alakalı soruları yapabilen varsa ve paylaşırsa sevinirim. Uğraşıyorum ama henüz sonuç yok. Bir de iplikli ağacı anlatabilecek olan var mı (kod örnekli olsa daha bir güzel olur :) )?
|