C dilinde her seferinde tekrarsız farklı sayı oluşturma

Musa B.

Kilopat
Katılım
1 Ekim 2017
Mesajlar
1.633
Makaleler
4
Çözümler
13
Daha fazla  
Cinsiyet
Erkek
Merhaba, programla dersimizde bizden bir program yazmamız ve bu programın 4 satır ve 4 sütundan oluşması her sütun ve satırdaki sayıların 3 karakterlik yer kaplaması, bu sayıların 1 ile 16 arasında olması ve rastgele üretilmesi istendi. Kodu yazdığımda rastgele sayı üretmeyi, satır ve sütunu oluşturmayı başardım fakat bir türlü tekrarsız rastgele sayı ve sayıların kaplayacağı karakter miktarını ayarlayamadım. Dizileri kullanamam çünkü diziler konusuna daha geçmedik ondan dolayı, do-while, for, if-else gibi şeylerle yapmam gerekiyor. Yardımcı olabilir misiniz?
Olması gereken şey;
1606214368593.png

Yazdığım kod;
C:
#include <stdio.h>
#include <math.h>
#include <complex.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <conio.h>
int main()
{
        int satir, sutun, x, y, rastgele;
        srand(time(NULL));
        for (satir = 1; satir <= 4; satir++)
        {
            rastgele = rand() % 16;
            printf("\n%d    ", rastgele);
            for (sutun = 1; sutun < 4; sutun++)
                printf("%d \t ", rastgele);

        }
    return 0;
}
 
Son düzenleyen: Moderatör:
Tekrar yoksa sayılar rastgele değildir. Rastgele olan 16 sayının tamamı 0 olabilir. Çünkü ihtimal dahilindedir.
Madem sayılar tekrar etmeyecek, sayıların kendisini değil yerlerini rastgele olarak dağıtın.
 
Tekrar yoksa sayılar rastgele değildir. Rastgele olan 16 sayının tamamı 0 olabilir. Çünkü ihtimal dahilindedir.
Madem sayılar tekrar etmeyecek, sayıların kendisini değil yerlerini rastgele olarak dağıtın.
Bunu nasıl yapabilirim peki? Kullanıcıdan 1-16 dahil aralığında değer istedim, fakat her bir satıra 4 tane 3 karakterlik yer kaplayan sayı nasıl koyabilirim?
 
3 karakter yer kaplaması için başına space koyacaksın. Sorgular ile 10'dan küçük mü, 100'den küçük mü diye kontrol ederek. Kullanıcı değer girdiğinde de 1 ile 16 arasında mı diye sorgu ile kontrol et.
 
3 karakter yer kaplaması için başına space koyacaksın. Sorgular ile 10'dan küçük mü, 100'den küçük mü diye kontrol ederek. Kullanıcı değer girdiğinde de 1 ile 16 arasında mı diye sorgu ile kontrol et.
Öncelikle teşekkürler fakat bir türlü başaramadım. Kafayı yemek üzereyim. Sorunun tamamı "Kullanıcıdan 1 den 16’ya kadar sayıları alıp bunları her satıra 4 sayı olmak üzere ve her sayı 3 karakterlik yer kaplayacak şekilde bastırınız. Sayılar karışık şekilde alınabilir." şeklinde fakat kullanıcıdan aldığımız değerleri nasıl tek tek sıralatacağım en ufak fikrim yok.
 
Öncelikle teşekkürler fakat bir türlü başaramadım. Kafayı yemek üzereyim. Sorunun tamamı "Kullanıcıdan 1'den 16’ya kadar sayıları alıp bunları her satıra 4 sayı olmak üzere ve her sayı 3 karakterlik yer kaplayacak şekilde bastırınız. Sayılar karışık şekilde alınabilir." Şeklinde fakat kullanıcıdan aldığımız değerleri nasıl tek tek sıralatacağım en ufak fikrim yok.

Bir dizide tutacaksın ve bu dizi iki eksenli olmalı. Döngü ile dizine yazdıracaksın. Yapamazsan söyle örnek kod atayım. Senin için başlangıç olsun.
 
Bir dizide tutacaksın ve bu dizi iki eksenli olmalı. Döngü ile dizine yazdıracaksın. Yapamazsan söyle örnek kod atayım. Senin için başlangıç olsun.
Diziden kastınız "diziler" adlı konu başlığındaki gibi bir dizi mi? Çünkü öyleyse o konuya geçmediğimizden ötürü hoca muhtemelen kabul etmez. Gerçi anlatmadıkları şeyleri ödevde istiyorlar orası ayrı konu da...
 
Diziden kastınız "diziler" adlı konu başlığındaki gibi bir dizi mi? Çünkü öyleyse o konuya geçmediğimizden ötürü hoca muhtemelen kabul etmez. Gerçi anlatmadıkları şeyleri ödevde istiyorlar orası ayrı konu da...
Diziler kullanmadan yapmak mümkün ana mesajı şimdi okudum. Kullanıcıdan sayı almaktan bahsetmiyor orada rastgele üretmekten kastı da hocanın tam olarak yaptığın. Üç karakter olarak yazmak için bunu kullan yeterli bence.

3 karakter yer kaplaması için başına space koyacaksın. Sorgular ile 10'dan küçük mü, 100'den küçük mü diye kontrol ederek.

Yazdığın kod doğru. Tekrarsız rastgele sayı oluşturmak için bu sayıları bir yerde tutup (diziler) orada var mı yok mu diye bakman lazım. O yüzden tekrarsız rastgele istenmez senden.

Biraz daha toparlarsak kodunu;
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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

  for (int row = 0; row < 4; row++){
    for (int col = 0; col < 4; col++){
      int random = rand() % 16;
      if (random < 10){
        printf("  %d", random);
      } else if (random >= 10 && random <= 16){
        printf(" %d", random);
      }
    }
    printf("\n");
  }
  return 0;
}

Bu da örnek çıktı;
1606230860941.png
 
Son düzenleme:
Diziler kullanmadan yapmak mümkün ana mesajı şimdi okudum. Kullanıcıdan sayı almaktan bahsetmiyor orada rastgele üretmekten kastı da hocanın tam olarak yaptığın. Üç karakter olarak yazmak için bunu kullan yeterli bence.



Yazdığın kod doğru. Tekrarsız rastgele sayı oluşturmak için bu sayıları bir yerde tutup (diziler) orada var mı yok mu diye bakman lazım. O yüzden tekrarsız rastgele istenmez senden.

Biraz daha toparlarsak kodunu;
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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

  for (int row = 0; row < 4; row++){
    for (int col = 0; col < 4; col++){
      int random = rand() % 16;
      if (random < 10){
        printf("  %d", random);
      } else if (random >= 10 && random <= 16){
        printf(" %d", random);
      }
    }
    printf("\n");
  }
  return 0;
}

Bu da örnek çıktı;
Eki Görüntüle 749289
Çok teşekkürler, bir şekilde farklı sayı yazdırmayı bulmamız gerekiyor. Hocaya mail attım geri dönüş bekliyorum, sizin dediklerinizi de "araştırmalarım" olarak bahsettim.
 
Çok teşekkürler, bir şekilde farklı sayı yazdırmayı bulmamız gerekiyor. Hocaya mail attım geri dönüş bekliyorum, sizin dediklerinizi de "araştırmalarım" olarak bahsettim.
Farklı sayıdan kastın program her çalıştığında farklı sonuç vermesi mi yoksa sonuçlar içinde aynı sayı olmaması mı?
 

Geri
Yukarı