C'de hatanın çözümünü bulamadım YARDIM...

Kodla Büyü

cinefil

Süper Üye
Süper Üye
Seçkin Üye
Mesajlar
1,177
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#define MAX_SEHIR 100
FILE *d;
int uzakliklar[MAX_SEHIR][MAX_SEHIR];
int main()
{
time_t t=time(NULL);
srand(t);
int n,u,g,loop,loop1;
int Liste;
d=fopen("itf.in","w");
n=rand()%MAX_SEHIR+1;
fprintf(d,"%d ",n);
g=rand()%n+1;
fprintf(d,"%d ",g);
u=rand()%MAX_SEHIR+1;
fprintf(d,"%d\n",u);
for (loop=0;loop<n;loop++)
{
uzakliklar[loop][loop]=0;
for (loop1=loop+1;loop1<n;loop1++)
{
uzakliklar[loop][loop1]=rand()%MAX_SEHIR+1;
uzakliklar[loop1][loop]=uzakliklar[loop][loop1];
}
}
for (loop=0;loop<n;loop++)
{
for (loop1=0;loop1<n;loop1++)
fprintf(d,"%d ",uzakliklar[loop][loop1]);
fprintf(d,"\n");
}
fclose(d);
}
#include<stdio.h>
#include<stdlib.h>
#define MAXSATIR 100
struct dugum{
int no;
struct dugum* ileri;
struct dugum* arka;
};
typedef struct dugum Dugum;
typedef Dugum* Dugumptr;
struct liste{
Dugumptr bas;
Dugumptr son;
int tane;
};
typedef struct liste Liste;
typedef Liste* Listeptr;
Listeptr uzaklik2;
int **uzaklik;
int secilen_satir[MAXSATIR];
int cozum_satir[MAXSATIR];
int n,g,u,satir=0,cozum=0;
void dosya_oku2()
{
int loop,loop1,tmp;
d=fopen("itf.in","r");
if (!d)
{
printf("File can not be opened for reading\n");getch();
exit(0);
}
fscanf(d,"%d",&n);
fscanf(d,"%d",&g);
fscanf(d,"%d",&u);
uzakliklar[MAX_SEHIR][MAX_SEHIR]=(Liste)malloc(n*sizeof(Liste));
for (loop=0;loop<n;loop++)
{
uzakliklar[loop][loop].tane=0;
uzakliklar2[loop].bas=NULL;
for (loop1=0;loop1<n;loop1++)
{
fscanf(d,"%d",&tmp);
if (tmp<u)
}
}
fclose(d);
}
int secildi_mi(int no)
{
int loop;
for (loop=0;loop<satir;loop++)
if (secilen_satir[loop]==no)
return 1;
return 0;
}
int satirda_kac_tane_var(int satirno)
{
int loop,res=0;
for (loop=0;loop<n;loop++)
if ((!secildi_mi(loop))&&(uzakliklar[satirno][loop]<u))
res++;
return res;
}
void satir_sec(int satirno)
{
int loop;
cozum_satir[cozum]=satirno;
cozum++;
for (loop=0;loop<n;loop++)
if ((!secildi_mi(loop))&&(uzaklik[satirno][loop]<u))
{
secilen_satir[satir]=loop;
satir++;
}
}
void coz()
{
int loop,index,max,tmp;
while (satir<n)
{
max=0;
for (loop=0;loop<n;loop++)
if (!secildi_mi(loop))
{
tmp=satirda_kac_tane_var(loop);
if (tmp>max)
{
max=tmp;
index=loop;
}
}
if (max!=0)
satir_sec(index);
else
break;
}
}
void sonuc_yaz()
{
int loop;
d=fopen("itf.out","w");
if (!d)
{
printf("File can not be opened for writing\n");
exit(0);
}
for (loop=0;loop<cozum;loop++)
fprintf(d,"%d ",cozum_satir[loop]+1);
fclose(d);
}
void dosya_oku()
{
int loop,loop1;
d=fopen("itf.in","r");
if (!d)
{
printf("File can not be opened for reading\n");
exit(0);
}
fscanf(d,"%d",&n);
fscanf(d,"%d",&g);
fscanf(d,"%d",&u);
uzaklik=(int **)malloc(n*sizeof(int *));
for (loop=0;loop<n;loop++)
{
uzaklik[loop]=(int *)malloc(n*sizeof(int));
for (loop1=0;loop1<n;loop1++)
fscanf(d,"%d",&(uzaklik[loop][loop1]));
}
fclose(d);
}
void main(){coz();sonuc_yaz();}

ÜSTTEKİ PROGRAMDA kırmızı yazılı yerde "no matching function for call to `liste::liste(void*)' " hatasını veriyor... hatadan nasıl kurtulacağımı bulamadım LÜTFEN yardım...
 
hocam (Liste) yerine (int) yazılması lazım.

c'de sınıf yapısı yok. c++ da var. zaten Liste'de bir sınıf ismi değil int değişkeni.

ikincisi, malloc u bir değşkene bağlamak istiyorsan bağladığın şey değişken değil işaretci olabilir.

(int) yazsan bile diziye değer olarak atayamazsın onu.

malloc dediğin şey bellekten yer ayırır. sonra o yeri gösterecek olacak bir işaretciye atarsın.

örnek:

int *a;

a = (int)malloc(4*sizeof(int));

işaretci dizisine de atayabilirsin ama diziyi işaretci dizisi olarak tanımlaman lazım.

örnek:

int *uzakliklar[MAX SEHIR][MIN_SEHIR];

ama ben orda malloc komutunu niye kullandığınızı anlayamadım bir türlü.

malloc bu işler için kullanılmaz.
 
alixsaglam' Alıntı:
hocam (Liste) yerine (int) yazılması lazım.

c'de sınıf yapısı yok. c++ da var. zaten Liste'de bir sınıf ismi değil int değişkeni.

ikincisi, malloc u bir değşkene bağlamak istiyorsan bağladığın şey değişken değil işaretci olabilir.

(int) yazsan bile diziye değer olarak atayamazsın onu.

malloc dediğin şey bellekten yer ayırır. sonra o yeri gösterecek olacak bir işaretciye atarsın.

örnek:

int *a;

a = (int)malloc(4*sizeof(int));

işaretci dizisine de atayabilirsin ama diziyi işaretci dizisi olarak tanımlaman lazım.

örnek:

int *uzakliklar[MAX SEHIR][MIN_SEHIR];

ama ben orda malloc komutunu niye kullandığınızı anlayamadım bir türlü.

malloc bu işler için kullanılmaz.
sağolun hocam beni bu dertten kurtardınız... çok sağolun...
 
BBNET
Geri
Üst