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

Liczba losowa z przedziału

VPS Starter Arubacloud
0 głosów
851 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,020 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,020 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,020 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 (156,260 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,020 p.)
Tylko, że to C.
komentarz 9 listopada 2019 przez mokrowski Mędrzec (156,260 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ź 393 wizyt
pytanie zadane 23 października 2019 w C i C++ przez Olfux Nowicjusz (120 p.)
0 głosów
1 odpowiedź 960 wizyt
0 głosów
0 odpowiedzi 73 wizyt
pytanie zadane 26 marca 2021 w Sieci komputerowe, internet przez LittleGoat Nowicjusz (180 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...