• 01-01-2020, 22:43:51
    #1
    Ödev konusu şu ; Kullanıcı tarafından elemanları girilen kare matrisin yedek
    köşegeninde bulunan elemanları tek boyutlu farklı bir diziye aktaran bilgisayar programını yazınız.

    Elemanlar tamam sadece yedek köşegeni bulmak da sıkıntı yaşıyorum kafam zaten pek de yerinde değil ama mantık olarak şu değil mi ?
    Örneğin 3X3 Matrisinden gidelim.(Biz buna NXN diyebiliriz çünkü kare matris) ( Ödevde N'i kullanıcıdan istiyoruz ve değişkendir.)

    1 2 3
    4 5 6
    7 8 9

    Şimdi burada olan Yedek köşegen matrisi 7,5 ve 3 sayıları. yani
    Örnek dizi [ i ] [ j ] dersek ;
    7 = dizi [0] [2]
    5= dizi [1] [1]
    3= dizi [2 [1]

    Bu örnekten anlayacağınız üzere ilk indis artarken ikinci indis azalıyor bunu nasıl for döngüsuyle tam kullanırız ?Şöyle yaptım olmadı ;
    for (i=0;i<N;i++){
    for(j=N:j>=0:j--){ <<-------- burada problem yaşıyorum göründüğü üzere i Artarken j 'nin azalması gerekiyor farklı kombinasyonlar denemedim ama tam yapamadım.
    Syso(dizi ekrana yazdırma işte) }


    }



    Edit kafam ve biraz zaman olsa halledebilirim ama şuan sıkıştım biraz.
  • 01-01-2020, 22:56:13
    #2
    j=N dediğiniz için sıkıntı yaşıyor olabilirsiniz hocam, çünkü index sıfırdan başladığı için max index N-1 olur.. orayı j=N-1 şeklinde düzeltseniz çalışır bence, çünkü algoritma genel olarak doğru duruyor.. Olmazsa tam kodu bir kod paylaşım yüklerseniz inceleyebilirim..
  • 01-01-2020, 23:22:17
    #3
    impROS01 adlı üyeden alıntı: mesajı görüntüle
    j=N dediğiniz için sıkıntı yaşıyor olabilirsiniz hocam, çünkü index sıfırdan başladığı için max index N-1 olur.. orayı j=N-1 şeklinde düzeltseniz çalışır bence, çünkü algoritma genel olarak doğru duruyor.. Olmazsa tam kodu bir kod paylaşım yüklerseniz inceleyebilirim..
    Hata tam nerede kavrayamadım ama orası N olmalı çünkü örnekte verdiğim gibi J en yüksekten başlamalı. Bu da değişken. Nasıl i=0; i<N diyoruz yani N'e eşit değil N'den küçük demek zaten bu.

    N En yüksek sınır diyelim i 0'dan başlar ve artar sıkıntı yok ama yedek köşegen bulurken J Sınırdan yani en sondan başlamalı.
  • 01-01-2020, 23:52:11
    #4
    galiba soruna çok odaklandığınız için çok ufak bir noktayı kaçırıyorsunuz.. for döngüsünde ilk değer başlangıç değeridir.. o yüzden i=0;i<N dediğiniz zaman 0 da başlar ve N-1 e kadar(N-1) dahil devam eder(Bunda sorun yok).. Ama j=N dediğiniz zaman döngü direkt N den başlar ve out of index hatası alırsınız.. Çünkü kodunuz 3x3 elemanlı bir dizi için şöyle işler sout([0][3]) => out of index hatası .. Çünkü dizinin 3 indexinde hiçbir eleman olmadığı için de 3 "indexli" elamanı bulamaz..
  • 01-01-2020, 23:53:04
    #5
    impROS01 adlı üyeden alıntı: mesajı görüntüle
    galiba soruna çok odaklandığınız için çok ufak bir noktayı kaçırıyorsunuz.. for döngüsünde ilk değer başlangıç değeridir.. o yüzden i=0;i<N dediğiniz zaman 0 da başlar ve N-1 e kadar(N-1) dahil devam eder(Bunda sorun yok).. Ama j=N dediğiniz zaman döngü direkt N den başlar ve out of index hatası alırsınız.. Çünkü kodunuz 3x3 elemanlı bir dizi için şöyle işler sout([0][3]) => out of index hatası .. Çünkü dizinin 3 indexinde hiçbir eleman olmadığı için de 3 "indexli" elamanı bulamaz..
    Buldum hocam teşekkürler.
  • 01-01-2020, 23:56:02
    #6
    j=N diyerek mi yaptınız yani hocam ? yoksa j=N-1 diyerek mi ? önemli değil bu arada
  • 02-01-2020, 02:14:38
    #7
    impROS01 adlı üyeden alıntı: mesajı görüntüle
    j=N diyerek mi yaptınız yani hocam ? yoksa j=N-1 diyerek mi ? önemli değil bu arada
    Hocam sonradan azaltarak yaptım. Şöyle düşünün

    for(satir=0;satir<N;satir++) {
    dizi[satir]=matris[i][j];
    j=j-1;
    i=i+1;
    }



    böyle de ekrana verebilirsiniz.
    for(satir=0;satir<N;satir++)
    System.out.print(dizi[satir]+" ");
  • 02-01-2020, 02:33:38
    #8
    j nin nasıl olduğunu tam çözemedim ama sorununuzun çözülmesine sevindim hocam
  • 02-01-2020, 02:39:37
    #9
    impROS01 adlı üyeden alıntı: mesajı görüntüle
    j nin nasıl olduğunu tam çözemedim ama sorununuzun çözülmesine sevindim hocam
    j yi int olarak tanımlarken değer vermeniz gerekecek.

    int i,j=0 ; gibi



    Teşekkürler