C dilinde birbirinden farklı sayılar nasıl üretilir?

nilelle

Megapat
Katılım
28 Temmuz 2016
Mesajlar
188
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar C'de birbirini hiç tekrar etmeyen sayılar nasıl üretilir?
Mesela 20 ile 90 arasında 10 tane sayı üretecek ama hiç tekrar etmemesi lazım. Tekrar etmeme olayını nasıl yapabiliriz?
 
Cevabı almadan yazmaya başlamıştım o yüzden sayı adedi öyle oldu. İsterseniz değiştirirsiniz.

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define START   20
#define END     90

int main(){
    srand(time(0));
    int input = 0;
    int num = 0;
    int arr[100] = { 0 };
    
    printf("Kac adet sayi olsun? ");
    scanf("%d", &input);
    
    for(int i = START; i < END + 1; ++i){
        arr[i] = i;
    }
    
    while(input > 0){
        num = arr[rand()%100];
        if(num != 0){
            printf("%d\n", num);
            --input;
        }       
    }
    
    return 0;
}
 
Cevabı almadan yazmaya başlamıştım o yüzden sayı adedi öyle oldu. İsterseniz değiştirirsiniz.

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define START 20.
#define END 90.

int main(){
srand(time(0));
int input = 0;
int num = 0;
int arr[100] = { 0 };

printf("Kac adet sayi olsun? ");
scanf("%d", &input);

for(int i = START; i < END + 1; ++i){
arr = i;
}

while(input > 0){
num = arr[rand()%100];
if(num != 0){
printf("%d\n", num);
--input;
} 
}

return 0;
}



1610227412326.png


Sanırım yine tekrar ediyor dostum. Çünkü eşitliği denetlemiyorsun. Kod parçacığının içinde bir for döngüsü ile listeye atılmış tüm elemanları gezip üretilen sayının bu sayılardan biri ile eşleşip eşleşmediği kontrol edilmeli.
 
Yine tekrar ediyor. Ben de eşit olup olmadığını nasıl kontrol edeceğimi yazamadım işte. Diziye atama konusunda sıkıntı yok.
 
Değeri sıfır vermeyi unutmuşum. 2-3 kere denediğimde denk gelmemişti.

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define START   20
#define END     90

int main(){
    srand(time(0));
    int input = 0;
    int num = 0;
    int arr[100] = { 0 };
    
    printf("Kac adet sayi olsun? ");
    scanf("%d", &input);
    
    for(int i = START; i < END + 1; ++i){
        arr[i] = i;
    }
    
    while(input > 0){
        num = arr[rand()%100];
        if(num != 0){
            printf("%d\n", num);
            arr[num] = 0;
            --input;
        }       
    }
    
    return 0;
}
 
Basit olarak sayı üretirsin diziye atarsın. sonra karşılaştırırsın. aynısı var ise tekrar sayı üretirsin.
Genelde Verimli olmaz.
Diger yaklaşım ise tam tersi olarak sayıları önceden diziye atarsın. random ürettigin sayıyı diziden çıkartırsın.(0'a veya -1 e eşitlenir genelde).
 
Tekrar etmeyen rastgele sayı üreteci:

C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(NULL));
    int a, b;
    printf("Please enter the array size: ");
    scanf(" %i", &a);
    int c[a];
    for(b=0; b<a; b++)
        c[b] = b;
    for(b=0; b<a; b++) {
        int d = c[b];
        int e = rand()%a;
        c[b] = c[e];
        c[e] = d;
    }
    for(b=0; b<a; b++)
        printf("%i\n", c[b]);
    return 0;
}
 
#include <stdio.h> #include <stdlib.h> #include<time.h> int main() { int a,b,c,ran[10]; srand(time(NULL)); for(a=0;a<10;a++){ ran[a]=rand()%10; for(b=0;b<a;b++){ if(ran[b]==ran[a]){ a--; break; } } } for(c=0;c<10;c++) printf("%d\n",ran[c]); return 0; }

Bunu uygularsanız her random oluşturduğu sayıyı daha önce de oluşturup oluşturmadığını kontol edecek ve eğer aynısı varsa tekrar değer verecek
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı
09:05:00