Şimdi Ara

-----ACİL-----Rand fonksiyonuyla artışlı sayı üretmek

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
177
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar merhaba
    Kodumu yazarken bir noktada takıldım yardımlarınızı bekliyorum.

    N(105) sayı üretilecek, altsınır(l) -1, üst sınır(u) 20, besleme(M) 5

    buraya kadar sıkıntı yok ama ürettiğim sayıların 0.01 oranla(s) artmasını istiyorum. yani l, l + s, l + 2s, l + 3s, . . . , u − s gibi ilerleyecek sayılar. bu sayıları da ekranda gösterirken virgülden sonraki 3 basamağını da göstermek istiyorum. artış oranını yansıtmakta, double float int tiplerini belirlemekte ve ondalık kısmı göstermekte sıkıntı yaşıyorum lütfen yardımcı olun

    Denediğim kodlar şu şekilde:

    1.


    int main() {

    int N = 105, i;
    int l = -1, u = 20, M = 5, a, s = 0.01;
    int randfuncupperbound = (u - l);

    srand(M);

    for (i = 1; i <= N; i++) {
    printf("%6d", l + ((rand()%randfuncupperbound)));

    if (i % 10 == 0)
    printf("\n");
    }
    return 0;

    }


    2.

    int RandNumber(int);

    int main() {

    int i, N=105;
    int s = 10;

    for (i = 1; i <= N; i++) {
    if (RandNumber % s == 0) {
    printf("%10d", RandNumber); }

    if (i % 10 == 0)
    printf("\n");
    }
    return 0;
    }

    int RandNumber(int x) {

    int M = 5, l = -1, u = 20;
    int upperbound = u - l;

    srand(M);
    x = l + (rand()% upperbound);

    return x;
    }







  • Son olarak şu kodu geliştirdim:

    int main() {
    int i,l=-1,u=20,M=5,N=105;
    double rn;

    srand(M);

    for (i = 1; i < N; i++) {
    rn = l + (u-l) * (double)rand() / RAND_MAX;
    printf("%10.3f", rn);

    if (i % 10 == 0)
    printf("\n");
    }

    return 0;
    }


    ama hala üretilen sayıların 0.01 şeklinde artmasını sağlayamadım :((((
  • Yardımcı olabilecek kimse yok mu?
  • Ne yapmak istediğiniz tam olarak anlaşılmıyor. Bu yüzden cevap alamıyorsunuz.

    Yapmak istediğiniz şey; -1 ve 20 arası bir sayı üreteceksiniz ve bu sayıyı 104 kere 0.01 arttıracaksınız. Yani toplamda 105 sayınız olacak. Böyle mi?

    Biraz daha açık yazabilir misiniz amacınızı? Ve çıktının ne olması gerektiğine birkaç örnek verebilir misiniz?



    < Bu mesaj bu kişi tarafından değiştirildi GorunmezBKZ -- 27 Kasım 2016; 23:32:34 >
  • GorunmezBKZ kullanıcısına yanıt
    Random Numbers:
    ---------------
    -0.460 12.930 16.550 12.490 2.600 19.300 7.270 7.490 0.720 10.400
    8.140 9.210 8.330 5.760 3.260 0.070 13.630 11.070 15.500 11.310
    19.170 3.920 16.930 8.110 6.360 6.490 0.520 0.830 16.220 9.310
    5.510 15.690 6.590 13.100 8.530 19.150 10.220 6.870 3.830 5.340
    0.860 7.060 3.540 18.850 1.150 1.190 15.600 18.150 -0.540 0.120
    0.840 16.050 10.910 8.590 4.330 7.990 17.700 10.040 5.170 19.360
    15.880 9.660 10.380 5.010 4.360 17.100 6.890 -0.100 19.930 14.510
    5.060 5.350 5.500 7.680 6.460 2.820 17.750 5.350 0.820 6.600
    19.530 8.400 12.090 14.530 19.850 11.900 9.160 4.390 15.930 14.630
    3.850 4.860 9.840 18.170 9.580 0.780 19.600 1.190 0.670 18.850
    5.000 19.260 18.710 19.800 13.740
    ---------------


    yukarıdaki şekilde 105 tane rastgele sayı üretmek istiyorum -1 ve 20 arasında. fakat bunlar yukarıdaki formatta olmalı yani ilk iki ondalıklı basamağı farklı değer alabilir ama geri kalan ondalıklı basamaklar(3,4,5....) 0 olmalı. Umarım yeterince açıklayıcı olabilmişimdir bu sefer. Şimdiden teşekkürler




  • merselmer M kullanıcısına yanıt
    Keşke önceden böyle yazsaydınız :) Çözümü bu şekilde:

    for (i = 1; i < N+1; i++) {
    rn = rand() % 2100 - 100;
    rn = rn / 100;
    }


    Yani 2000 ila -100 arası bir sayı oluşturuyoruz. Daha sonra bu çıkan sayıyı 100'e bölüyoruz. Bu sayede mesela -46 olan ilk sayımız -0.460 oluyor. En yüksek sayı 19.99, en düşük sayı ise -1 oluyor. Sizin istediğiniz kuralı sağlıyor.



    < Bu mesaj bu kişi tarafından değiştirildi GorunmezBKZ -- 28 Kasım 2016; 2:18:57 >
  • GorunmezBKZ kullanıcısına yanıt
    Çok teşekkür ederim çok yardımcı oldunuz. son olarak

    int main() {  
    int i,l=-1,u=20,M=5,N=105;
    double rn;



    burada tanımlanan değerleri dikkate alarak düzenlersek:

    for (i = 1; i < N + 1; i++) { 
    rn = l/s +rand() % (u-l)/s;
    rn = rn*s;


    şeklinde ifade edebilir miyiz? Bu şekilde ifade etmek istiyorum çünkü u,l ve s değerleri değiştirilirse kod çalışmaya devam etsin istiyorum. Fakat kodu bu şekilde düzenlediğim zaman "Error C2297'%': illegal, right operand has type 'double' " şeklinde hata alıyorum. Bunu aşmanın bir yolu var mıdır? Tekrar çok teşekkür ederim




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • merselmer M kullanıcısına yanıt
    fmod ile çözdüm sorunumu :) tekrar çok teşekkürler.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.