Çözüldü C++ iki boyutlu diziye rastgele sayı atama

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

ikaross

Hectopat
Katılım
15 Mayıs 2020
Mesajlar
680
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
öğrenci
Arkadaşlar ödevimden ötürü kodumda 10 satır 15 sütunlu olacak şekilde iki boyutlu dizi oluşturup. İçlerine de benzersiz sayı atamam lazım. Rastgele nasıl yapacağım?
 

Dosya Ekleri

  • unknown_2021.04.25-11.59.png
    unknown_2021.04.25-11.59.png
    108,5 KB · Görüntüleme: 213
Çözüm
Söylememe rağmen hala srand kullanmıyorsunuz.
Değişkenlerinizi ilklendirin.
Sabit değişkenleri büyük harfle yazın.
Döngüler tek satır olsa da parantez kullanın.
Index nedir, öğrenin.
For döngüsü değişkenini döngü içerisinde tanımlamanız yeterli.
Sabitleri fonksiyonda da kullanacağınız için global tanımlayın.

Döngüleriniz hatalı. <= yerine < olmalı. Döngünün sonunda ve döngüler bittikten sonra TombalaKart[satir][sutun] elemanına erişmeye çalışıyorsunuz. O tanımlı değil. Index sıfırdan başlar.

Srand kullanmadığınızda ne olduğunu görmeniz için yorumda bıraktım.

Kod:
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int SATIR = 10;
const int SUTUN = 15;

void TombalaKartGoster(int[][15], int);

int main(){
    //srand(time(NULL));
    int TombalaKart[SATIR][SUTUN];

    for (int i = 0; i < SATIR; i++) {
        for (int j = 0; j < SUTUN; j++) {
            TombalaKart[i][j] = rand() % 89 + 1;
        }
    }

    cout << TombalaKart[SATIR - 1][SUTUN - 1] << endl;

    return 0;
}
C++'ta milyon farklı yolu var desem yeridir. En sevdiğimi yaptım.

C++:
#include <iostream>

#include <random>

#include <iomanip>



#define ROW 10

#define COL 15



using namespace std;



static random_device rd;

static mt19937 mt{ rd() };



int randomNumber(int start, int end) {

    uniform_int_distribution<int> dist(start, end);

    return dist(mt);

}



void printCard(int arr[ROW][COL]) {

    for (auto i{ 0 }; i < ROW; ++i) {

        for (auto j{ 0 }; j < ROW; ++j) {

            cout << setw(3) << arr[i][j];

        }



        cout << endl;

    }

}



int main() {

    int arr[ROW][COL];



    for (auto i{ 0 }; i < ROW; ++i) {

        for (auto j{ 0 }; j < ROW; ++j) {

            arr[i][j] = randomNumber(1, 90);

        }

    }



    printCard(arr);



    return 0;
}
 
iomanip çıktığının düzgün olması için. setw silinip \t veya boşluk da konulabilir.
Aralık sabit olacaksa 14. satır global tanımlanabilir.

Bir şeyi işlemediniz diye kullanamamanız saçma. Ben internetten araştırıp öğrendim deyip kullanabilmelisiniz bence.

Ne işlediğinizi bilmeden bir şey diyemem.
Umarım hocanız size C++ öğretiyorum deyip C öğretmiyordur.
 
İomanip çıktığının düzgün olması için. Setw silinip \t veya boşluk da konulabilir.
Aralık sabit olacaksa 14. satır global tanımlanabilir.

Bir şeyi işlemediniz diye kullanamamanız saçma. Ben internetten araştırıp öğrendim deyip kullanabilmelisiniz bence.

Ne işlediğinizi bilmeden bir şey diyemem.
Umarım hocanız size C++ öğretiyorum deyip C öğretmiyordur.

Adım adım işlediği için işlediğim noktalara kadar kullanın diyor en son öğrendiğimiz konu çok boyutu diziler işte.

Forları iç içe döngü olarak ayarlamalısın. Sonra.
C++:
for(int i = 0; i<satir; i++)
for(int j = 0; j<sutun; j++)
TombolaKart[i][j] = rand() % 89 + 1;

Deneyeceğim.
 
Bir şeyi işlemediniz diye kullanamamanız saçma. Ben internetten araştırıp öğrendim deyip kullanabilmelisiniz bence.
Bunu söyleyip 100 almam gerekirken 80 verdiği günden beri 1 dakikamı bile ayırmıyorum o hocanın dersleri için.
Öğrenmemi istemeyen adama saygı duymam açıkçası.
 
Adım adım işlediği için işlediğim noktalara kadar kullanın diyor en son öğrendiğimiz konu çok boyutu diziler işte.
Rastgeleyi hocanız nasıl yapıyor ne bileyim? C++ şöyle öğrenilmeli diye bir müfredat yok. Onun neyi hangi sırayla işlediğini nereden bileyim.

Köylü olmak mı istiyorsunuz? Buyurun.
Yaptığınız şeyin yazıcı ve bilgisayar gibi nimetler varken daktilo kullanmaktan farkı olmadığını da bilin.

Bu arada srand kullanmadığınız için rand çağırdığınızda aynı şey gelecek.

Kod:
#include <iostream>
#include <stdlib.h>
#include <ctime>

#define ROW 10
#define COL 15
#define N 1
#define M 90

using namespace std;

void printCard(int arr[ROW][COL]) {
    for (int i = 0; i < ROW; ++i) {
        for (int j = 0; j < ROW; ++j) {
            cout << arr[i][j] << " ";
        }

        cout << endl;
    }
}

int main() {
    srand(time(NULL));
    int arr[ROW][COL];

    for (int i = 0; i < ROW; ++i) {
        for (int j = 0; j < ROW; ++j) {
            arr[i][j] = rand() % 90 + 1;
        }
    }

    printCard(arr);

    return 0;
}
Kod:
#include <iostream>
#include <random>
#include <iomanip>
#include <array>

#define ROW 10
#define COL 15
#define N 1
#define M 90

using namespace std;

static random_device rd;
static mt19937 mt{ rd() };
static uniform_int_distribution<int> dist(N, M);

int randomNumber() {
    return dist(mt);
}

void printCard(array<array<int, COL>, ROW>& arr) {
    for (auto& i : arr) {
        for (auto& j : i) {
            cout << setw(3) << j;
        }

        cout << endl;
    }
}

int main() {
    array<array<int, COL>, ROW> arr;

    for (auto& i : arr) {
        for (auto& j : i) {
            j = randomNumber();
        }
    }

    printCard(arr);

    return 0;
}
 
Bir şeyi işlemediniz diye kullanamamanız saçma. Ben internetten araştırıp öğrendim deyip kullanabilmelisiniz bence.
Haklısınız aslında. Ama yeni öğrenen birinin bu tür ileri konuları öğrenmesi biraz zor olacağı için Hoca da kodu internetten bulmuş olabilir diye düşünüyordur bence. Bu yüzden kendi anlattığı tarzda istemiştir ödevi :)
 
Haklısınız aslında. Ama yeni öğrenen birinin bu tür ileri konuları öğrenmesi biraz zor olacağı için Hoca da kodu internetten bulmuş olabilir diye düşünüyordur bence. Bu yüzden kendi anlattığı tarzda istemiştir ödevi :)
Saçma. Beyni olan herkes Google'a bir şeyler yazıp bir şeyler öğrenebilir. Yazdığım düzgün kodu hocasının bile bildiğinden şüpheliyim.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı