Şimdi Ara

Matris'de satırdaki aynı sayılar

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
14
Cevap
0
Favori
631
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Selam arkadaşlar.

    Elimizde bir matris var bu matris'teki her satırda kaçtane 1 olduğunu nasıl bulabilliriz. Örneğin

    0 0 1 1 0
    1 0 1 1 0
    0 1 0 1 1
    1 1 0 0 1
    0 0 0 1 0

    Bu matris de 1. satırda 2 tane 1 2. satırda 3 tane 1 bu şekilde nasıl bulabiliriz.Teşekkürler



  • matris[m][n] olarak bir matris olusturursun..
    birler[m] ile de her satirdaki birleri sayalim...

    sonra da bir for dongusu ile kac tane 1 oldugunu sayarsin

    birler[]={0};

    for(i=0;i<m;i++){
    for(j=0;j<n;j++) {

    if(matris[ i ][j]==1)
    birler[ i ]++;
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi Ali_7 -- 10 Ocak 2007; 4:39:41 >
  • Ali_7 ilginden dolayı teşekkür ederim. Pekişu şekilde nasıl yapabilirim.

    Benim Çalışmış olduğum matris 300x200 boyutunda yaklaşık olarak. Elimdeki 300x200 matrisin içinde şu şekilde arama yapmak istiyorum. 15x25 matrisi for döngüsüyle gezdireceğim ve program bitince 15x25 lik alanda en fazla 1 olan yeri bulmak istiyorum.

    Şu şekilde daha iyi anlatabilirim sanırsam

    0 0 0 0 1 1 0 1
    0 1 0 1 1 0 1 0
    0 1 1 1 1 0 1 1
    1 0 1 0 1 1 0 0
    1 0 0 1 1 0 1 1
    1 0 0 0 1 0 1 1

    örneğin yukardaki matriste en fazla 1 bulunan 2x3 maris için yer kırmızı ile gösterilmiş. Bu matrisi nasıl bulabilirim. Demin vermiş olduğunuz programı yazdım. Ama o şekilde program istenilen doğrultuda çalışmadı. Bu şekilde doğru yol olduğunu düşünüyorum. Yardımınız için teşekkürler
  • sanirim en fazla birler oraninin oldugu alt-matris demek istiyorsun, verdigin ornekte 6 elemndan 5 tanesi 1, yani 5/6 gibi bir oran... ama en fazla birler senin ana 200x300 matrisinde olur.

    butun ihtimalleri taraman gerekiyor.

    altmatris[k][l] senin alt matrislerin olsun, ve burada 2<=k<=m ve 2<=l<=n degil mi??

    for(1<k;k<m;k++) { // k boyutu icin
    for(1<l;l<n;l++) { // l boyutu icin

    //burada altmatrisi matristen okuyacaksin
    //okumaya baslayacagin noktalar: 0x0dan basla, daha sonra 0x1 ile devam et (m-k)x(n-l) en son okunacak nokta olsun
    //axb baslangic noktasi oluyor

    for(0=a;a<(m-k);a++) { // satirlari okumak icin
    for(0=b;b<(n-l);b++) { // sutunlari okumak icin

    birler=0;

    for(0=i;i<k;i++) { // satirlari okumak icin
    for(0=j;j<l;j++) { // sutunlari okumak icin

    altmatris[ i ][j]=matris[a+i][b+j];
    if(altmatris[ i ][j]==1)
    birler++;

    } //satirlar - j
    } //sutunlar - i

    birler_orani=(float)birler/(float)(k*l); //burada int/int yapmamaya dikkat et yoksa sonuc her zaman 0 olur. float/float olmasi gerekiyor
    // bu sayiyi hatirlaman gerekiyor ki bir sonraki hesaplama ile karsilastirabilesin...
    // burada axb ve kxl degerlerini de hatirlarsan sonucu for'lardan sonra hemen cikartirsin....


    } //satirlar - b
    } //sutunlar - a


    }// l boyutu bitti
    } //k boyutu bitti


    bence senin istedigin boyle birsey? yani boyutlarda hata yapmis olabilirim, ama 3 asagi 5 yukari yukaridaki kodun calismasi gerekiyor...

    haberlesme muhendisligi yada matematik icin mi lazim bu?



    < Bu mesaj bu kişi tarafından değiştirildi Ali_7 -- 10 Ocak 2007; 17:38:52 >




  • Abi çalıştıramadım bunu akşamdan beri uğraşıyorum ama olmadı programı biraz daha geniş yazma imkanı varmı.

    Bu arada Elektrik-Elektronik okuyorum. Görüntü işleme yapar iken bu problem ile karşılaştım. Teşekkürler ilgilendiğin için
  • jpg sıkıştırma olayı mı?
  • birinci sorunun cevabi:

    satirlardaki 1leri sayiyor...

     
    #include <stdio.h>

    #define m 5
    #define n 5

    int main() {
    int i,j;
    int matrix[m][n]={ {0, 0, 1, 1, 0},
    {1, 0, 1, 1, 0},
    {0, 1, 0, 1, 1},
    {1, 1, 0, 0, 1},
    {0, 0, 0, 1, 0}};
    int birler[m]={0};

    for(i=0;i<m;i++){
    for(j=0;j<n;j++) {
    if(matrix[i][j]==1)
    birler[i]++;
    }
    printf("%d satirindaki birler sayisi=%d \n",(i+1),birler[i]);
    }

    return 0;
    }

  • ikinci sorunun cevabi:



     

    #include <stdio.h>

    #define m 6
    #define n 8

    int main() {
    int i,j;
    int k,l;
    int a,b;
    int matrix[m][n]={ {0, 0, 0, 0, 1, 1, 0, 1},
    {0, 1, 0, 1, 1, 0, 1, 0},
    {0, 1, 1, 1, 1, 0, 1, 1},
    {1, 0, 1, 0, 1, 1, 0, 0},
    {1, 0, 0, 1, 1, 0, 1, 1},
    {1, 0, 0, 0, 1, 0, 1, 1}};

    //int birler[m]={0};
    float birler_orani;
    int altmatris[m][n];
    int birler;

    for(k=2;k<=m;k++) {
    for(l=2;l<=n;l++) {
    // kxl alt matrisin degisken boyutlari

    // axb alt matrisin baslangic noktasi
    for(a=0;a<=(m-k);a++) {
    for(b=0;b<=(n-l);b++) {

    birler=0; //alt matristeki birler sayisi

    for(i=0;i<k;i++) { // satirlari okumak icin
    for(j=0;j<l;j++) { // sutunlari okumak icin

    altmatris[i][j]=matrix[a+i][b+j];
    if(altmatris[i][j]==1)
    birler++;

    } //satirlar - j
    } //sutunlar - i

    birler_orani=(float)birler/(float)(k*l);
    printf("kxl=%dx%d axb=%dx%d ",k,l,a,b);
    printf("%f \n",birler_orani);
    }// l boyutu bitti
    } //k boyutu bitti
    }
    }

    return 0;
    }





    senin verdigin ornekte, kirmizili matrisin boyutu 2x3 yani kxl=2x3 olan nokta benim programda...
    senin verdigin ornekte alt matrisin baslangic noktasi 2x3, c dilinde matrisler 0dan basladigi icin programda axb=1x2 oluyor.

    yani programin ciktisina bakarsan: kxl=2x3 axb=1x2 0.833333
    boyle bir satir goreceksin...

    ama senin verdigin ornekte sag alt koseye bakarsan 4 tane bir goreceksin, yani kxl=2x2 axb=4x6 1.000000
    senin istedigin birler orani ise oranin 1 oldugu bir iki nokta var..


    unutmadan bir not: program ciktisi yukaridaki sekli ile DOS bufferini doldurdugu icin ilk cikan sonuclari goremiyorsun. onlari bir dosyaya yazabilirsin, yada hepsini yazmak yerine buyuk orani bulan bir algoritma yazabilirsin.

    kolay gelsin....




  • quote:

    Görüntü işleme yapar iken bu problem ile karşılaştım.


    geleneksel olarak goruntu isleme haberlesme muhendisligine giriyor. yani haberlesme modelinde audio yada video isleme kaynak kodlama kismidir...

    kaynak kodlama -> kanal kodlama -> modulasyon -> vs vs olarak gider...

    kaynak kodlama genelde haberlesme modeline paralel olarak yapilir, ve amaci bilgiyi en etkili sekilde A'dan Bye gondermektir.

    Real-time systems, DSP, haberlesme birbirine cok yakin alanlardir.

    hadi kolay gelsin
  • Ben ordaki matrisin yerini bulmak istiyorum. Örneğin o matris te 2. satır 3. sutun da en fazla yoğunluk var gibisinden. iki örneği dikkate alarak ben değiştirmeye çalışıyorum inşallah yapabilirim.

    İlgin için tekrardan tşkler.
  • yapamadım ya Ali yardım edermisin o matrisin yerini nasıl bulabiliriz.
  • #include <stdio.h> 

    #define m 6
    #define n 8

    int main() {
    int i,j;
    int k,l;
    int a,b;
    int matrix[m][n]={ {0, 0, 0, 0, 1, 1, 0, 1},
    {0, 1, 1, 0, 1, 0, 1, 0},
    {0, 0, 1, 1, 1, 0, 1, 1},
    {1, 0, 1, 0, 0, 1, 0, 0},
    {1, 0, 1, 1, 1, 0, 1, 1},
    {1, 0, 1, 0, 1, 0, 1, 0}};

    //int birler[m]={0};
    float birler_orani=0;
    float max=0;
    int altmatris[m][n];
    int birler;
    int aa, bb;

    for(k=2;k<=m;k++) {
    for(l=2;l<=n;l++) {
    // kxl alt matrisin degisken boyutlari

    // axb alt matrisin baslangic noktasi
    for(a=0;a<=(m-k);a++) {
    for(b=0;b<=(n-l);b++) {

    birler=0; //alt matristeki birler sayisi

    for(i=0;i<k;i++) { // satirlari okumak icin
    for(j=0;j<l;j++) { // sutunlari okumak icin

    altmatris[i][j]=matrix[a+i][b+j];
    if(altmatris[i][j]==1)
    birler++;

    } //satirlar - j
    } //sutunlar - i

    birler_orani=(float)birler/(float)(k*l);
    if( birler_orani > max) {
    max=birler_orani;
    aa=a;
    bb=b;
    }

    }// l boyutu bitti
    } //k boyutu bitti
    }
    }
    printf("Aradigin nokta: %dx%d \n",aa+1,bb+1);

    return 0;
    }


    ornek matrisi degistirdim biraz, cunku senin ornekte 4 tane 1 olan bolgeler vardi...

    bu versiyonunda, yogunluk olarak esit iki bolge var ise birinci buldugunu sonuc olarak verecek...




  • bu sorunun cevabını buldun mu arkadaşım, bulamadıysan sana yardımcı olabilirim
  • ve birşey sormak istiyorum, senin elindeki matris hep 200*300 mü olacak ve araman hep 2*3 şeklinde mi gerçekleşecek, c++ kodlarını hatırlamıyorum ama hala çözüm bulamadıysan sana türkçe olarak programın mantığını yazayım, sen oraya gerekli kodları yerleştir
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.