PDA

Tam Sürümünü Görmek İçin : C İle İlgİlİ Bİ Problem


BEBETY
31/12/2007, 05:53
slm ben bi program yazdım da hata veriyo fikri olan arkadşlar varsa yardımcı olabilir misiniz?soru şu;bir oda var içinde N*M boyutunda kare fayanslarr var bir karınca bu odanın ortasında bir yerde; bütün fayansları en az bir kere dolaşmak üzere odayı nkadar sürede bitirir?
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int yonbul(int a[100][100], int mx, int my, int m, int n)
{
int x,y;
x = mx;
y = my;
// karincanin hareketleri
if(x<=m-2)
{
x = x + 1;
a[x][y]=1;
}
if(x==m-1)
{
y = y + 1;
a[x][y]=1;
}
if(y<=n-2)
{ y = y + 1;
a[x][y]=1;
}
if(y==n-1)
{
x = x + 1;
a[x][y]= 1;
}
if( a[m-1][n-1]==1 )
{
return 1;
}
else
{
yonbul(a,x,y,m,n);
}
}
void goster(int a[100][100],int mx,int my)
{
int i,j;
for(i=0; i<mx; i++)
{
for(j=0; j<my; j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
// Gerekli degiskenleri tanimlayalim
int a[100][100];
int i,j,m,n;
int mx,my;
main()
{
clrscr();
printf("\n 0 : Fayanslar ");
printf("\n 1 : Karincanin oldugu veya gectigi fayans ");
printf("\n");
printf(" m = "); scanf("%d",&m);
printf(" n = "); scanf("%d",&n);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
a[i][j]=0;


mx = m /2;
my = n /2;
a[mx][my] = 1;
printf("\n Su an karinca 1 nolu fayansda \n");
goster(a,m,n);
printf("\n");
getch();
printf("\n Karincanin izledigi yol\n");
printf("\n");
int sonuc;
sonuc=yonbul(a,mx,my,m,n);


goster(a,m,n);
getch();
} :utangac:


acehreli
31/12/2007, 07:43
Ne yazik ki "hata veriyor" yetmiyor. Ne hata verdigini tahmin etsek senin isine yaramaz herhalde...

Ali

tujix
31/12/2007, 12:59
odayi gezmekten kastin nedir?sanirim her fayansin cevresini gezmesi?
birde x=v*t bir bilinmeyenli denkleminde iki bilinmeyen var hizi bilmiyoruz zamnin turu ne ?

mrhacklyncy
31/12/2007, 13:20
hata verdiği yerle clrscr tanımlı değil, yonbul fonksiyonun int tanımlı bir şeye return yapması lazım, fonksiyonun içinde en son if de return yapmadan yonbul fonksiyonunu çağırmıssın bir de main in return unu unutmussun ama bunları yapınca da program doğru çalışmıyor, şimdi onlara bakacam :)

BEBETY
31/12/2007, 22:08
ya ben de daha 1.snıfta olduğum için hoclardanöğrendiklerim kadar birleştirebildim bi hocaya gösterdim o doğru olduğunu söyledi ancak nerede hata var bi türlü bulamıyorumm başka türlü de düşünüp programı yazmak için ne zamanım var ne de bunları uygulayacak bilgim:aglama:

acehreli
01/01/2008, 00:06
Senin bile anlamadigin bir seyi, senin yazdiklarina bakarak bizim anlamamizi bekliyorsun. Programinda derleme hatalari var. Bunlari mrhacklyncy da soyledi ama sunlari yapmak zorunda kaldim:


...

// DERLEME HATASI: Bende boyle bir baslik yok
/* #include<conio.h> */
// Onun yerine, getch'nin bildirimi icin bu basligi ekliyorum:
#include <curses.h>
// Ayrica getch'nin tanimi icin de baglama satirina '-lcurses' eklemek
// zorunda kaldim

...
// DERLEME HATASI: main'in donus turu 'int' olmalidir; duzeltiyorum
int main()
{
// DERLEME HATASI: Bende boyle bir fonksiyon yok
/* clrscr(); */

...
}


Onun disinda, programin anlamadigimiz kadariyla "hata vermeden" calisiyor.

Ali

BEBETY
01/01/2008, 16:02
:utangac: bir kareden dierine geçişi 1 sn olarak kabul etcez tüm parselleri 0 olarak kabul ettim ve a[m,n]=1 oluncaya kadar rekürsifi kullanarak kendi kendini çağırmasını sağladımm sınırı 100 kabul ettim her hangi bi noktadan başlayarak random kullanıp yön bulmasını sağladımm ama hata veriyoo başka bir programm bulabilir misiniz yaa kafam allak bullak oldu gerçektennn

acehreli
02/01/2008, 04:51
"Hata veriyor" derken ne demek istiyorsun? Belki hatayi tarif etmeyi deneyebilirsin. Belki de hata senin kullandigin giris degerleri icin olusuyordur? Onlari da vermek isteyebilirsin.

Ali

-aga-
02/01/2008, 09:23
int s=(N*M);
if (N%2==1)
s++;
if (M%2==1)
s++;

-aga-
02/01/2008, 09:33
int el=0;
if (N<M)
el=N;
else
el=M;
int s=N*M+el/2-(1+el%2)

xsee
05/01/2008, 00:20
aynı ödevi bende yapıyorum aslinda basit ama biz daha 1 sınıf oldugumuz için karmasık geliyor benim anladıgım
mxn lik bir matriste bir terim a[i][j]=1 diger butun terimler 0 1 olan terimden rastgele cevresindeki birimleri 1 er arttiriyor butun 0 lar en az 1 olana kadar random döngüde devam ediyor

yani 4x3 de

0 0 0
0 0 0
0 0 0
0 0 0

iken bir terim 1 veriliyor 4,3 u alalim

0 0 0
0 0 0
0 0 0
0 0 1
şimdi bu 1 den cevresindeki 0 rakamlari 1 arttira arttira random da dönüyor
taaki son 0 bir olana kadr
ber bir terimi bir arttirisini 1 sn dersek kaç sn sürer
yada en son olusan matrisi ekrana yazip sonra tüm elemanlairi toplayacaz
bizim yani benim takildigim kisim randomu nasıl kullanıcam ve nerede kullanıcam yani ben hep bi main() acıp tup kodlari main içinde yazar return 0;
diyip built liyordum

acehreli
05/01/2008, 00:46
xsee, belki de hos oluyor diye noktalama isaretleri kullanmiyorsun ama ben noktalama isaretleri olmayan metinleri anlayamiyorum. :( Ornegin besinci kelime olan 'aslinda"dan once veya sonra bir cumle bitiyor mu?

Su cumlede ne demek istiyorsun? "butun terimler 0 1 olan terimden rastgele cevresindeki birimleri 1 er arttiriyor"

"0 1 olan terim" ne demek?

Ali
"anlayissiz" :)

xsee
05/01/2008, 01:10
aynı ödevi bende yapıyorum.Aslinda basit, ama biz daha 1 sınıf oldugumuz için karmasık geliyor, benim anladıgım ;
mxn lik bir matriste bir terim a[i][j]=1. diger butun terimler 0.
1 olan terimden, rastgele cevresindeki terimleri 1 er arttiriyor,
butun 0 lar en az 1 (random belki ikinci defa aynı yere gelirse 1 olan 2 yapacak )olana kadar random döngüde devam ediyor

yani 4x3 de

0 0 0
0 0 0
0 0 0
0 0 0

iken bir terim 1 veriliyor 4,3 u alalim

0 0 0
0 0 0
0 0 0
0 0 1
şimdi bu 1 den cevresindeki 0 rakamlarinı (komuşların) 1 arttira arttira random da dönüyor
taaki son 0 bir olana kadar.
her bir terimi 1 arttirisini 1 sn dersek kaç sn sürer ?
yani en son olusan matrisi ekrana yazip, sonra tüm elemanlairi toplayacaz.
bizim yani benim takildigim kisim randomu nasıl kullanıcam ve nerede kullanıcam ?ben hep bir main() acıp tum kodlari main içinde yazar, return 0;
diyip built liyordum.


insallah düzeltebilmişimdir