• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczba losowa z przedziału

Object Storage Arubacloud
0 głosów
716 wizyt
pytanie zadane 9 listopada 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
edycja 9 listopada 2019 przez Hubertius

Cześć :)

Miałem do rozwiązania zadanie związane z losowaniem liczby całkowitej z przedziału od <30;40>;

Napisałem kod:

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	srand(time(NULL));
	printf("Podaj losowa liczbe z zakresu <30;40>:");
	printf("\t%d",30+ rand() % 10);
	return 0;
}

No i klops. Program dokonuje losowego wyboru liczby z przedziału od 30 do 40. Jednak po wysłaniu tego do sprawdzenia na stronie Dante otrzymałem takie coś.

"Błąd: Wylosowane wartości nie są losowe!".

Mam natomiast  pytanie... może chodzi po prostu o rozwiązanie zadania w inny sposób? Np. jeśli to możliwe za pomocą pętli i instrukcji iteracyjnych (bo właśnie to zadanie jest z tego działu) i  o to właśnie chodzi?

komentarz 9 listopada 2019 przez tkz Nałogowiec (42,000 p.)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main(int argc, char *argv[]) 
{
    srand(time(NULL));
    printf("Podaj losowa liczbe z zakresu <30;40>:");
    printf("\t%d",rand() % (40 + 1 - 30) + 30);
    return 0;
}

A spróbuj z tym.

komentarz 9 listopada 2019 przez Hubertius Bywalec (2,970 p.)
Dalej ten sam komunikat :/
komentarz 9 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Podasz polecenie?
komentarz 9 listopada 2019 przez Hubertius Bywalec (2,970 p.)
Napisz program wyświetlający całkowitą liczbę losową z zakresu <30;40>.
komentarz 9 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Dość lakoniczne polecenie, skoro to nie przechodzi, to nie mam pojęcia.

2 odpowiedzi

0 głosów
odpowiedź 9 listopada 2019 przez mmarszik Mądrala (7,390 p.)

Może tak (nie sprawdzałem czy działa):

 

#include <cstdio>
#include <cstdlib>
#include <ctime>

#define MINR (39)
#define MAXR (40)

int main(int argc, char *argv[]) {
    srand(time(NULL));
    printf("Liczba z przedziału <%d,%d> wynosi %d\n",(int)MINR,(int)MAXR,(int)(rand()%(MAXR-MINR+1)+MINR) );
    return 0;
}

 

0 głosów
odpowiedź 9 listopada 2019 przez mokrowski Mędrzec (155,460 p.)

W C++ już od bardzo dawna nie używa się rand(...). On ma bardzo kiepską losowość. Na stronie dokumentacji https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution masz na dole przykład losowania z przedziału domkniętego.

komentarz 9 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Tylko, że to C.
komentarz 9 listopada 2019 przez mokrowski Mędrzec (155,460 p.)
edycja 9 listopada 2019 przez mokrowski

O widzisz.. złapałem się na głupie przyzwyczajenie kolegi @mmarszik do podawania rozwiązań w C++ :-/

@Hubertius, a jesteś pewien że sędzia wymaga wyświetlania "uprzejmej konwersacji 'Podaj los....'"? Z tego co wiem raczej nie jest to w zwyczaju systemów testujących. @tkz podał CI poprawny wzór jeśli jesteś zmuszony do używania rand(...). Podtrzymuję jednak. rand() to bardzo zła funkcja do używania: https://wiki.sei.cmu.edu/confluence/display/c/MSC30-C.+Do+not+use+the+rand%28%29+function+for+generating+pseudorandom+numbers

Podobne pytania

0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 23 października 2019 w C i C++ przez Olfux Nowicjusz (120 p.)
0 głosów
1 odpowiedź 806 wizyt
0 głosów
0 odpowiedzi 66 wizyt
pytanie zadane 26 marca 2021 w Sieci komputerowe, internet przez LittleGoat Nowicjusz (180 p.)

92,577 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...