Arkadaşlar bugün derste yaptığımız dosyadan graf okuyarak matris formuna çevirme örneğinde kodda bazı yanlışlıklar olduğu için program çalışmıyor. Kodu modifiye ettim. Aşağıdaki şekilde kodunuzu değiştirirseniz doğru bir şekilde çalışacaktır:
------------------------------------------------------------------------------------------------------------
main()
{
FILE *di;
int **A,i,j,maliyet,dugum;
//Dosya okuma modunda açılıyor
if((di=fopen("grafOku.txt","r"))==NULL)
{
//Dosya okuma için açılamadı
printf("Dosya okuma modunda acilamadi ");
getchar();
exit(0);
}
//Dosyanın boş olup olmadığının kontrolü
if(feof(di))
{
printf("Dosya icerisinde veri yok! ");
getchar();
exit(0);
}
//Dosyadan ilk satırın yani düğüm sayısının okunması
//Böylece komşuluk matrisi için bellekte yer ayrılacak
fscanf(di,"%d",&dugum);
//bellekte matris için yer ayrilmasi işlemi
//önce başka her bir elemanı başka bir diziyi işaret eden A dizisi için yer ayıracağız
A = (int **) malloc(dugum*sizeof(int *));
//A dizisinin her bir elemanı da başka bir dizi elemanını işaret ettiği için
// her i. eleman için tekrar yer ayırmamız gerekiyor.
for(i=0;i<dugum;++i)
A[i]=(int *)malloc(dugum*sizeof(int));
//Bellekte dizi için yeterli yer olup olmadığının kontrolü
if(A==NULL)
{
puts("Bellekte yeterli yer yok! ");
exit(0);
}
//Başlangıç olarak matristeki tüm değerlere
//düğümler arasında hiçbir bağlantı yok anlamında -1 atanır
for(i=0;i<dugum;++i)
for(j=0;j<dugum;++j)
A[i][j]=-1;
//Dosya sonuna gelene kadar satır satır okuma yapılarak okunan değerler sırayla
//satır numarası,sütun numarası ve maliyet bilgisi olarak alınır
//alınan maliyet bilgisi A matrisinin ilgili elemanına değer olarak atanır
while(!feof(di))
{
fscanf(di,"%d %d %d",&i,&j,&maliyet);
A[i][j]=maliyet;
A[j][i]=maliyet;
}
//Oluşturulan matrisin ekrana yazdırılması
printf("Elde edilen matris ");
printf("--------------------- ");
for(i=0;i<dugum;++i)
{
for(j=0;j<dugum;++j)
printf("%d ",A[i][j]);
printf(" ");
}
//Dosya kapatılır
fclose(di);
getchar();
}
------------------------------------------------------------------------------------------------
* Oğuzhan Bey'e bugün ulaşamadım. Büyük ihtimalle bu hafta ödeviniz yok
Araş. Gör.
Şafak DURUKAN
|