Konuyu görüntüle
IUCODERS FORUM > Duyurular > Okul ile ilgili > VER? YAPILARI LAB. ÖRNEK PROGRAM
Yazar
safak


avatar

Kayıt: 09.11.2006
15.12.2006-15:02 #12604
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 yokblushing

Araş. Gör.
Şafak DURUKAN





Yazar
muammeryigit


avatar
istanbul
Kayıt: 04.03.2006
15.12.2006-22:10 #12612
bu hafta ödev olmamasını çok üzüldük hocam(dancingdancingdancing)
ama kodu gönderdiğiniz çok iyi olmuş üzerinde saatlerce ugraşıp tam anlamı ile çalışan bir kod yapamamak yerine biraz kod incelemek çok daha yararlı olacak





Yazar
guvendh


avatar
Rize
Kayıt: 26.02.2006
15.12.2006-23:07 #12614
Can-ı gönülden katılıyorum biggrin





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb