• 13-10-2012, 21:27:59
    #1
    C++ da yazdığım bir kodda sanırsam for döngüsüne girmiyor.Sorun ne anlayamadım. Bir ilgilenebilir misiniz?

    Yazmaya çalıştığım kodda bizden istenen şuydu:"iki boyutlu iki tane matrisin çarpımı isteniyor.matris boyutlarını kullanıcı girecek ve matris elemanlarının değerleri random ile rastgele atanacak.Ayrıca pointer kullanımı isteniyor."

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main(){
    
    	int sutunsayisi_1,sutunsayisi_2,satirsayisi_1,satirsayisi_2;
    	int **matris_1,**matris_2,**carpim;
    
    tekrar:
    
    	cout<<"ilk matrisin satir sayisini giriniz:";
    	cin>>satirsayisi_1;
    	cout<<"ilk matrisin sutun sayisini giriniz:";
    	cin>>sutunsayisi_1;
    	cout<<"ikinci matrisin satir sayisini giriniz:";
    	cin>>satirsayisi_2;
    	cout<<"ikinci matrisin sutun sayisini giriniz:";
    	cin>>sutunsayisi_2;
    
    	//çarpım olur mu diye bakıyoruz
    
    		if(satirsayisi_1=!sutunsayisi_2)
    	{
    		cout<<"carpma islemi yapilamaz!,tekrar değer giriniz:";
    		goto tekrar;
    	}
    
    
    	//1.matris tanımı
    
    	matris_1=new int *[satirsayisi_1];
    	for(int i=0;i<satirsayisi_1;i++){
    		*(matris_1+i)=new int[sutunsayisi_1];
    	}
    
    	//2.matris tanımı
    
    	matris_2=new int *[satirsayisi_2];
    	for(int i=0;i<satirsayisi_2;i++){
    		*(matris_2+i)=new int[sutunsayisi_2];
    	}
    
    	//çarpım matrisinin tanımı
    
    	carpim=new int *[satirsayisi_1];
    	for(int i=0;i<satirsayisi_1;i++){
    		*(carpim+i)=new int[sutunsayisi_2];
    	}
    
    
    	//1.matris deger atama
    	for(int i=0;i<satirsayisi_1;i++){
    		for(int j=0;j<sutunsayisi_1;j++)
    			*(*(matris_1+i)+j)=rand()%10;
    	}
    
    	//2.matris deger atama
    
    	for(int i=0;i<satirsayisi_2;i++){
    		for(int j=0;j<sutunsayisi_2;j++)
    			*(*(matris_2+i)+j)=rand()%10;
    	}	
    
    
    	//carpim matrisinin tüm elemanlarını 0 atarız.
    	for(int k=0;k<satirsayisi_1;k++)
    	{
    		for(int l=0;l<sutunsayisi_2;l++)
    		{
    			carpim[k][l]=0;
    		}
    	}
    	getchar();
    	
    		for(int x=0;x<satirsayisi_1;x++)
    		{
    			cout<<"girdi4";
    			for(int y=0;y<sutunsayisi_2;y++){
    		
    				cout<<"carpim matrisi"<<carpim[x][y];
    		}
    	}
    		getchar();
    
    
    	//çarpım kısmı
    	
    	for(int i=0;i<satirsayisi_1;i++){
    
    		for(int j=0;j<sutunsayisi_2;j++){
    		
    			for(int k=0;k<satirsayisi_2;k++){
    			
    				carpim[i][j]+=(matris_1[i][k]) * (matris_2[k][j]);
    			}
    		}
    	}
    	getchar();
    
    	//yazdırma kısmı
    
    	for(int x=0;x<satirsayisi_1;x++){
    
    		for(int y=0;y<sutunsayisi_2;y++){
    		
    				cout<<"carpim matrisi"<<carpim[x][y];
    				getchar();
    		}
    	}
    
    	return 1;
    
    }
  • 14-10-2012, 00:26:06
    #2
    Kodunuzda çok aşağılara girmedim.
    Sanırım **matris ile işaretçi tanımlamak istemişsiniz ama işaretçiye işaret eden işaretçi tanımlamışsınız.
    *matris ile işaretçi tanımlayabilirsiniz.
    if(satirsayisi_1=!sutunsayisi_2)
    yerine de
    if(satirsayisi_1 != sutunsayisi_2)
    kullanmalısınız. ! işareti önce..
  • 14-10-2012, 01:00:57
    #3
    aynen problem =! den kaynaklı. != şeklinde olmalı. aşağılara ben de bakmadım ama döngülere girdi. dev c++ kullandım derleyici olarak ama bu hatayı yakalamadı .. bunun yerine
    vc++ , vc++.net ya da code::blocks iyidir. ben linux da kullanmıştım intellisense özelliğinin olması çok işe yaramıştı yoksa sürünüyordum gedit de. bunun windows versiyonu da var

    http://www.codeblocks.org/downloads/26

    olmadı eclipse de kullanabilirsin ya da netbeans.. derleyici çok ama dev c++ ile uğraşma. çıkan hataları bulmak için çok zorluyor şekil a daki gibi..
  • 14-10-2012, 01:58:13
    #4
    evet.. "!=" yapınca ve ufak mantık hatalarını da giderince sorunsuz çalışır hale geldi..
    Yardımlarınız için çok teşekkür ederim
  • 14-10-2012, 11:22:11
    #5
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    aynen problem =! den kaynaklı. != şeklinde olmalı. aşağılara ben de bakmadım ama döngülere girdi. dev c++ kullandım derleyici olarak ama bu hatayı yakalamadı ..
    ...
    dev c++ ile uğraşma. çıkan hataları bulmak için çok zorluyor şekil a daki gibi..
    dev c++ kullanmıyorum ama bu bir (=!) hata değil zaten. c dilinin esnekliği diyelim. if parantez içinde yaptığına değil en son elinde kalan değere bakar.
  • 14-10-2012, 13:23:14
    #6
    böyle bir operator olduğunu hiç duymadım. hadi sayı arttırımı ya da azaltımı için ++i i++ şekli var ama =! bunu hiç bir yer de görmedim. elimde şuan dev c++ dan başka derleyici olmadığı için deneyemedim ama c# da =! böyle bir ifade yok. muhtemelen vc ++ .net de de hata verir. Mesela a++ ve a++ örrneği burada verilmiş ancak != varken =! ı göremedim. ve cpluscplus.com da bile yayınlanmış değil. ama dediğiniz gibi kullanılabiliyordur, sadece hiç bir yerde örneğine rastlamadım
  • 14-10-2012, 20:20:22
    #7
    Birleşik olarak öyle bir operator yok zaten.
    Öyle bir operatör yok olduğuna göre tek tek işleme alınır.
    ama pratikte kullanımı mümkün.
    Örneğin :
    bool bDeney = false;
    CheckBoxDeney->Checked =! bDeney; // dDeney in tersini uygula gibi...
    // kötü bir kod yazma tekniği, öncelikle okunaklı değil 
    //ama derleyici neden böyle yazıldığını sorgulamaz.
    Benim vurguladığım C/C++ dillerinin programcısına güvendiği ve esnek oluşu.
    Prartikte if içerisinde çoğu zaman bir fonksiyon kullanılır. Geri dönüş değerine göre işlem yapılır.
  • 15-10-2012, 01:02:59
    #8
    anladım peki bu bahsettiğin tüm c/c++ derleyicilerinde geçerli midir? Mesela g++ ile bu kodu derlediğimde sıkıntı çıkarır mı? şuan elimde linux yok deneyemiyorum. ama merak ediyorum. c++ dan mümkün mertebe kaçma eğilimindeyim, linux da biraz düşük seviye kod yazınca akademik hayatımda o yüzden pek iyi anılarım yok şuan sadece dev cpp var o da işte bazı arkadaşlara denk gelirse yardım etmek için kurulu. bu bahsettiğinizin bir standartı yok sanırm ama IDE lerin verdiği tepkileri merak ediyorum. Mesela c# ya da java böyle bir şeye izin vermez. ben pic programlamak için de ccs c derleyicisini kullanıyorum o da izin vermez. bunun standartı nedir tam olarak
  • 15-10-2012, 15:21:13
    #9
    Konuyu işleç önceliği ve sırası olarak düşünün. Bazı işleçler birlikte bir operatör olarak kullanılıyor. Konudaki "!=" gibi. Ancak o birliktelik dışındaki kullanımlarda standart işleçler olarak değerlendirileceklerdir. "=!" kullanım yazım olarak okunaklı değil. "a = !b; olarak daha okunaklı. İşleç sırasına göre b nin değili alınıp a ya atanacaktır.
    Bunları bilmiyorsunuz diye yazmıyorum. Sanki "=!" birlikte değerlendiriliyormuş, böyle bir işleç varmış kısmına takıldınız hissi oluştu bende.
    Biliyorsunuz boşluk tırnak içinde (" ") string olarak tanımlanmadıysa kod aralarında okunaklılık dışında yararsız.
    İşleçlerin işletim sistemine veya derleyiciye göre değişen bir farklılığı bulunmuyor.