Tam Sürümünü Görmek İçin : matris içinde matris arama sorunu
iuserseri
21/05/2008, 15:50
mrb arkadaşlar...
ben büyük bi matris içinde matris arayıp bulmaya çalışıyorum. asıl soru matris değil herhangi bi şekil ama matrise tamamlayarak aramayı düşünüyorum. büyük matrisin elemanları 0-9 arasında değişiyo. herhangi bi algoritma çıkaramadım. bi yerlerde tıkanıyo mutlaka. yardımcı olursanız sevinirim. (kodlama bilgim pointer ları bilmiyorum fonksiyon tanımlamayı araştırıyorum:))
acehreli
21/05/2008, 19:33
Akla gelen ilk algoritma: kucuk matrisin ilk satirini buyuk matriste satir satir ara. Eger bulursan, kucuk matrisin ikinci satirinin bir onceki buldugun satirla ayni sutunda baslayip baslamadigina bak. Kucuk matrisin butun satirlari ayni sutunda bulunuyorsa butun matrisi buldun demektir.
Eger satirlardan birisi tutmadiysa, kucuk matrisin birinci satirini onu ilk buldugun yerden itibaren aramaya devam et ve butun algoritmayi tekrarla.
Fonksiyonlari ogrenmen cok iyi olur tabii. O zaman "su satirda su satiri ara" diye bir fonksiyon yazarsin; o fonksiyon da bulursa hangi sutunda buldugunu soyler. Yukaridaki algoritmada hep o fonksiyonu cagirirsin.
Ali
iuserseri
22/05/2008, 15:51
çok teşekkür ederim. kodlama bilgim zayıf olduğu için özellikle matris sorularında çok zorlanıyorum. umarım bu algoritmayı kodlayabilirim. tekrar teşekkürler...
iuserseri
22/05/2008, 22:16
olmuyo abiler ablalar... en azından şu fonksiyonu tanımlama konusunda bi yardım edin bu acemi kardeşinize... bu ödev ortalamayı %30 etkileyecek çok önemli benim için lütfen yardımlarınızı bekliyorum...
acehreli
22/05/2008, 22:20
Sana zaman kazandirmak icin hemen hatirlatayim: neyi yanlis yaptigini anlamamiz icin bize biraz daha bilgi vermen gerekiyor.
Ali
iuserseri
22/05/2008, 22:39
şöyle söyliyim tam ödev aslında matris arama değil. her hangi bi şekil mesela
* 6 2 * *
5 8 9 0 *
* 3 4 7 1
şeklinde aramak istiyo kullanıcı (* olan yerler aslında boş eleman yok boşluk bırakınca önizlemede gözükmedi)
ben bunu eleman olmayan yerleri -1e tamamlayarak matris şekline getirip aramaya çalışıyorum
-1 6 2 -1 -1
5 8 9 0 -1
-1 3 4 7 1
bu şekilde aramaya çalışıyorum işin içine -1 lerde girince karışıyo...
ilk şekliyle aramaya çalıştım o hiç olmuyo... zaten hoca da matrise tamamlayıp yapın dedi.. (sözüm ona tiyo verdi onun yerine 3 hafta astığı derslere gelseydi daha ii olurdu bizim için)
sözün özü;
hani ilk önerin "şu satırda şu fonksiyonu ara" diye bi fonksiyon tanımla gereken yerlerde tanımla demiştin ya onu tanımlamaya çalışıyorum elimde iki tane kaynak kitabım ve sizler varsınız.. ocağınıza düştüm anlıcaanız..
daha tam bi program yazamadığım için bilgisayara hiç yazmadım kağıt üzerinde çalışıyorum...
süreye gelince 3 haftadan az sürem var...
myavuzselim
23/05/2008, 00:32
Su fonksiyonu tamamlamakla baslayabilirsin.
/*
* Buyuk matrisin icinde (enBaslangic, boyBaslangic) pozisyonundan itibaren
* kucuk matrisi arar. Kucuk matrisdeki -1 degeri jokerdir, her degere uyar.
* Var ise 1 dondurur, yok ise 0 dondurur.
*/
int ara( int** buyukMatris, int buyukEn, int buyukBoy,
int** kucukMatris, int kucukEn, int kucukBoy,
int enBaslangic, int boyBaslangic
)
{
/* burayi tamamla */
}
Eger fonksiyonun sonucu nerede bulundugunu da bilmek istiyorsan ya fonksiyona iki tane int pointer'i gecmen lazim (int*), ya uzunlugu 2 olan bir dizi, veya fonksiyondan bulunan indexleri iceren bir struct dondurmen lazim.
aysesule
01/06/2008, 00:09
Arkadaşın bahsettiği ödevden ben de sorumluyum aynen ben de işin içinden cıkamıyorum.Once girilen sekli almak için(sayılardan olusacak)bosluk ve satır atlama durumunda yapılması gerekenleri yazdım.int a diye bi şey tanımladım bu sekil için girilen sdc bir sayıyı temsil ediyo ama bunu soyle kullanmam gerekıyo:
printf(sekli giriniz cıkıs için -2 giriniz);
scanf("%d",&a)
while(a!=-2)
{
if(a=" ")//int oldugu için(a) buna esıtleyemıyor.
.......yap.
else if(a="\n")//bunda hata vermedi??
....yap.
else
dizi[i][j]=a;
scanf("%d",&a);
}
Arkadasın * olarak belirtigi bos karakterleri ben de -2'ye tamamlayarak matris formuna getirmeye calışıyorum ama sonrasında bu -2'nin 0-9 arasındaki sayiları temsil ettiğini nasıl tanıtabilirim.????????
acehreli
01/06/2008, 01:29
Cift tirnak yerine tek tirnak kullanacaksin herhalde. Bir de = yerine == yapinca:
if (a == ' ') {
/* ... */
} // vs.
Ali
aysesule
01/06/2008, 13:03
Öyle de olmadı benim yapmak istediğimin boşluk karakterinin int tipindeki degeri???
acehreli
01/06/2008, 21:54
Oyle olmadiysa baska bir yerde bir sorun var demektir. Bosluk karakterinin int tipindeki degeri ' ' karakterinin degeridir zaten. Soyle bir bak istersen:
int bosluk_degeri = ' ';
Ali
acehreli
02/06/2008, 21:59
Forumda kullanilan font nedeniyle iki tirnak karakteri arasinda bosluk olmadigi sanilabilir. Oysa su satirda iki tirnagin arasinda bir bosluk karakteri var:
int bosluk_degeri = ' ';
Ali
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.