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

Jak dalej kontynuować?

Object Storage Arubacloud
0 głosów
216 wizyt
pytanie zadane 6 kwietnia 2020 w C i C++ przez xxlkuba1234 Nowicjusz (230 p.)

Napisz program, który wczytuje z klawiatury 2 liczbę naturalne a następnie losuje liczbę, która zawiera się pomiędzy tymi dwiema liczbami.

Dotarłem do połowy tego programu, niestety nie wiem jaka komenda sprawi że wylosuje mi liczbe z przedziału podanego przez nas (przez klawiaturę).

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <time.h>

using namespace std;

int main(array<System::String ^> ^args)
{
    int liczba3;
    
    int liczba1;
    cout << "Podaj swoja 1 liczbe: ";
    cin >> liczba1;

    int liczba2;
    cout << "Podaj swoja 2 liczbe: ";
    cin >> liczba2;

    while (liczba3 < liczba2)
{
    
    srand(time(NULL));
    std::cout << "Wylosowanie pierwsze: " << std::rand() << std::endl;
    
    }


    system("PAUSE"); 
    

}

 

1 odpowiedź

0 głosów
odpowiedź 6 kwietnia 2020 przez tangarr Mędrzec (154,860 p.)
wybrane 6 kwietnia 2020 przez xxlkuba1234
 
Najlepsza

Żeby uzyskać losową liczbę z przedziału musisz wykonać kilka obliczeń.

Ale zacznijmy od początku: funkcja rand() zwraca liczbę z przedziału od 0 do RAND_MAX (wartość zależy od implementacji, standard zakłada, że musi to być minimum 32767).
Jeżeli otrzymaną liczbę podzielisz z resztą (modulo) przez X otrzymasz liczbę z przedziału od 0 do X-1.
Jeżeli do tej liczby dodasz liczbę A wówczas przesuniesz przedział. Nowy przedział zawiera liczby od A do X-1+A.
Teraz trochę matematyki:
B = X-1+A
X = B-A+1
Żeby wylosować liczbę z przedziału od A do B musisz wylosować liczbę z przedziału od 0 do X i dodać do niej A.
Czyli musisz wylosować liczbę z przedziału 0 do (B-A+1) i dodać do niej A.

int losuj_z_przedziału(int A, int B) {
    int X = B - A +1;
    return rand() % X + A;
}


 

komentarz 6 kwietnia 2020 przez xxlkuba1234 Nowicjusz (230 p.)
error C2601: 'losuj_z_przedziału' : local function definitions are illegal

Wyświetla mi się takie coś :/

komentarz 6 kwietnia 2020 przez KumberTwo Dyskutant (8,270 p.)
Umieściłeś funkcję w poprawnym miejscu? Powinna znajdować się poza funkcją main().
komentarz 6 kwietnia 2020 przez xxlkuba1234 Nowicjusz (230 p.)
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <time.h>

using namespace std;

int main(array<System::String ^> ^args)
{  
    
    int A;
    int B;
    int X;
    
    cout << "Podaj swoja 1 liczbe: ";
    cin >> A;

    cout << "Podaj swoja 2 liczbe: ";
    cin >> B;

    srand(time(NULL));
    
    int zakres(int A, int B) {
    int X = B - A +1;
    return rand() % X + A;

    cin >> X;
    cout << "Liczba:";
    
    
    system("PAUSE"); 

}

Jestem początkujący i nie za bardzo czasem rozumiem :/

komentarz 6 kwietnia 2020 przez tangarr Mędrzec (154,860 p.)

Widzę, że stworzyłeś projekt Visual C++ zamiast C++
Jeżeli nie musisz to tego nie używaj wink

Biblioteki <time.h> i <ctime> to zasadniczo to samo (ctime jest zawarta w przestrzeni nazw std). Wybierz jedną.

#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;

int losuj_z_przedzialu(int A, int B) {
    int X = B - A +1;
    return rand() % X + A;
}
 
int main(int argc, char **argv)
{
    int A;
    int B;
     
    cout << "Podaj swoja 1 liczbe: ";
    cin >> A;
 
    cout << "Podaj swoja 2 liczbe: ";
    cin >> B;
    
    if (B <= A) {
        cout << "Druga liczba musi byc wieksza od pierwszej";
        return 1;
    }
 
    srand(time(NULL));
     
    int liczba = losuj_z_przedzialu(A,B);
    cout << "Liczba:" << liczba << endl;
     
     
    system("PAUSE"); 
    return 0;
}

 

komentarz 6 kwietnia 2020 przez KumberTwo Dyskutant (8,270 p.)

Poczytaj sobie o funkcjach. Bardzo przydatne narzędzie. Twój kod powinien wyglądać tak:

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <time.h>
 
using namespace std;
 
int losuj_z_przedzialu(int A, int B) {
    int X = B - A +1;
    return rand() % X + A;
}

int main(array<System::String ^> ^args)
{
    int liczba3;
     
    int liczba1;
    cout << "Podaj swoja 1 liczbe: ";
    cin >> liczba1;
 
    int liczba2;
    cout << "Podaj swoja 2 liczbe: ";
    cin >> liczba2;
 
    while (liczba3 < liczba2)
{
     
    srand(time(NULL));
    std::cout << "Wylosowanie pierwsze: " << losuj_z_przedzialu(liczba1, liczba2) << std::endl;
     
    }
 
 
    system("PAUSE"); 
     
 
}

 

komentarz 6 kwietnia 2020 przez KumberTwo Dyskutant (8,270 p.)

@tangarr, o co chodzi z argumentami funkcji main()? Pierwszy raz widzę coś takiego

komentarz 6 kwietnia 2020 przez xxlkuba1234 Nowicjusz (230 p.)

Dziękuje wam, wszystko już działa :)

Podobne pytania

0 głosów
1 odpowiedź 531 wizyt
0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 8 sierpnia 2018 w C i C++ przez Krzymado Początkujący (370 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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!

...