İki Boyutlu Dizide Tekrarsız Sayı Üretme

Waltz

Kilopat
Katılım
22 Ocak 2014
Mesajlar
823
Makaleler
1
Çözümler
1
Yer
İstanbul
Daha fazla  
Meslek
Öğrenci
Merhaba arkadaşlar. Bir ödev için C++ dilinde iki boyutlu diziye tekrarsız(benzersiz) random sayı atamam gerekiyor.

Sayıyı random atıyorum ama dizinin içine tekrar eden elemanlar geliyor. Tekrar eden elemanlar için bir döngü, sorgu yazmam gerek diye düşünüyorum ama kafamda bir türlü oluşturamadım. İnternette bolca araştırma yaptım fakat çoğu vektör sınıfı ile oluşturulmuş. Benim ödevimde ise kullandığım diziden başka herhangi bir dizi oluşturmadan, bu sorguyu yapmam gerekiyor. Aşağıda kod bloğu dizinin içine random sayılar atıyor fakat dizinin içinde tekrar eden bir eleman var mı kontrol etmiyor:


Kod:
srand(time(NULL));
       for (int i = 1; i <= 5; i++)
    {
        for (int j = 1; j <= 10; j++)
        {
            random=(rand()%57)+65;
            Harf[i][j]=random;


        }

    }
 
Her oluşturduğunuz sayıyı, dizi içerisine eklemeden önce dizi içerisindeki tüm indexlerle karşılaştırın. Eğer yoksa ekleme işlemini gerçekleştirin.
Dostum dediğini yapıyorum ama bir şey değişmiyor.
Kod:
random = (rand() % 57) + 65;
            if (Harf[i][j] == random)
            {
                Harf[i][j] = random-1;
            }
 
Dostum dediğini yapıyorum ama bir şey değişmiyor.
Kod:
random = (rand() % 57) + 65;
            if (Harf[i][j] == random)
            {
                Harf[i][j] = random-1;
            }

Selam dostum.

Eğer o sayı mevcutsa random-1 yapma. Onun yerine while döngüsünde tekrar sayı üret.

Sayıyı üret, mevcut mu karşılaştır, yoksa diziye at, varsa döngü içerisinde tekrar sayı üret, o ürettiğin sayıyıda karşılaştır.


Kolay gelsin
 
Dostum dediğini yapıyorum ama bir şey değişmiyor.
Kod:
random = (rand() % 57) + 65;
            if (Harf[i][j] == random)
            {
                Harf[i][j] = random-1;
            }
Bu kod sadece belirli indexleri kontrol ediyor. @abaka nın da dediği gibi her sayı için tüm diziyi kontrol etmen gerekiyor. Her sayı atamasında do while ile o ana kadar atama yaptığın tüm dizilerle karşılaştır ve sayı yoksa atama yap. Varsa yenisini üret, -1 yapma, yine de yapmak istiyorum dersen o sayıyıda kontrol ederek diziye dahil et.
 
Ödevinin tarihi geçmediyse;

C++:
#include <iostream>
#include <algorithm>
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */


int main() {
    srand(time(NULL));

    int random;
    bool unique = true;
    const int ROW = 5;
    const int COLUMN = 10;

    int harf[ROW][COLUMN];
    int harfTek[ROW*COLUMN];   // Silebilirsin
    int z = 0;                 // Silebilirsin

    for (int i = 0; i < ROW; i++)
    {
        for (int j = 0; j < COLUMN; j++)
        {
            do
            {
                random = (rand() % 57) + 65;
                for (int x = 0; x<ROW; x++)
                {
                    for (int y = 0; y < COLUMN; y++)
                    {   
                        unique = true;
                        if (harf[x][y] == random)
                        {
                            unique = false;
                            y = COLUMN;
                            x = ROW;
                        }
                        
                    }
                }
            } while (!unique);
                harf[i][j] = random;
                harfTek[z] = random;    // Silebilirsin
                z++;                    // Silebilirsin
        }
    }

    

    for (int i = 0; i < ROW; i++)
    {
        for (int j = 0; j < COLUMN; j++)
        {
            std::cout << harf[i][j] << "\n";
        }
    }

    std::sort(harfTek, harfTek+ROW*COLUMN);               // Silebilirsin           
    std::cout << "\n\n Siralanmis olan: \n\n";            // Silebilirsin
    for (int i = 0; i < ROW*COLUMN; i++)                  // Silebilirsin
    {                                                      // Silebilirsin
        std::cout <<i+1<<"->"<< harfTek[i] << "\n";       // Silebilirsin
    }                                                      // Silebilirsin

    system("PAUSE");
}

harfTek olarak tanımladığım dizi sadece rastgele oluşan sayıların kontrolü içindir. Sıralama yapmak için kullandım.
"// Silebilirsin" olarak belirttiğim satırları silebilirsin.
 
Uyarı! Bu konu 8 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.

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı