Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczba losowa i 2^n

Ostatnio zmodyfikowano 2016-03-08 14:54
Autor Wiadomość
Talamak
Temat założony przez niniejszego użytkownika
Liczba losowa i 2^n
» 2016-03-06 02:17:32
Serdeczne cześć wszystkim użytkownikom! Jest to mój pierwszy post, a więc szybciutko zrobię wprowadzenie, a następnie przejdę do meritum.
Jestem studentem automatyki i robotyki na politechnice, przyszedł przedmiot zwany informatyką i trzeba zacząć uczyć się programować. Nigdy nie miałem z tym styczności, ale teraz dzielnie brnę przez tajniki C++. Cieszę się, bo bardzo mi się to podoba, a z drugiej strony często jest z tym sporo problemów. Z większością sobie radziłem, ale teraz napotkałem coś, czego przeskoczyć nie potrafię, a więc proszę Was o pomoc. Skoro już się tu zarejestrowałem - myślę, że to nie będzie mój ostatni temat na tym forum. Przez całe studia mogę tu zajrzeć jeszcze parę razy. (:
A teraz do rzeczy:
Mam zrobić program, który wyświetla wszystkie potęgi liczby 2 mniejsze od m, gdzie m możemy wprowadzić lub, jeśli zechcemy, komputer ma wybierać m losowo. Dla przykładu, jeśli m = 129, to program wyswietli: 1, 2, 4, 8, 16, 32, 64, 128. Problem siedzi właśnie w tym losowaniu m. Wybierając m samodzielnie, nie ma żadnego problemu. Program działa idealnie, wszystko tak jak być powinno (stąd domyślam się, że sam moduł wyświetlania potęg jest prawidłowy). Gdy tylko wybieram opcję, żeby komputer losował m i podawał wszystkie potęgi, pojawia się multum problemów. Potęgi dwójki w ogóle się nie zgadzają z m (jest ich mniej), sama liczba m ograniczona funkcją modulo w ogóle nie trzyma się ograniczonego przedziału, a na dodatek jako pierwsza potega (2^0) nie pojawia się jedynka. Podsumowując: obłęd w ciapki.
Przypuszczam, że to nie jakiś głupi błąd, a po prostu grubsza sprawa, o której nie mam pojęcia. Mam nadzieję tylko, że jako bardzo świeży mam do takowego prawo. Mógłby mi ktoś powiedzieć, co tu jest nie tak i jak to poprawić?
Z góry dziękuję.

C/C++
#include <iostream>
#include <time.h>
#include <windows.h>

using namespace std;

int liczba = 1, wybor, m;

int main()
{
    srand( time( NULL ) );
    cout << "Wyswietlam kolejne potegi liczby 2, ktore sa mniejsze od m." << endl << endl;
    cout << "Aby wprowadzic m wcisnij 1." << endl;
    cout << "Aby wylosowac m wcisnij 2." << endl;
   
    cin >> wybor;
   
    switch( wybor )
    {
    case 1:
        cout << "Prosze wprowadzic m: ";
        cin >> m;
        break;
       
    case 2:
        m = rand() % 10000;
        cout << "wylosowano m= " << m;
        break;
    }
   
    while( liczba < m )
    {
        cout << liczba;
        liczba = liczba * 2;
        cout << endl;
    }
   
   
    return 0;
}
P-145601
BadBullPL
» 2016-03-06 07:19:23
Dodaj tu:
cout << "wylosowano m= " << m;
endl
 i wszytkie problemy znikną.
P-145604
carlosmay
» 2016-03-06 07:38:09
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib> // tutaj windows.h moze byc, choc wystarczy ten
Jeszcze nagłówki. Współczesne C++.
P-145605
Talamak
Temat założony przez niniejszego użytkownika
» 2016-03-06 13:04:51
Rany, patent z endlinem działa! Rzeczywiście wszystkie problemy zniknęły!
Bardzo dziękuję za pomoc. Pytanie tylko: czemu endline robi tutaj taką różnicę? Ktoś mi wytłumaczy, dlaczego bez tej komendy pojawiają się takie problemy?

I jeszcze a propos uwagi z bibliotekami. Dziękuje, też będę je stosować, ale czy ma to rzeczywiście jakieś znaczenie, czy po prostu używa się ich, bo są nowe?
Z góry dziękuje za odpowiedzi.
P-145621
carlosmay
» 2016-03-06 13:45:53
Pytanie tylko: czemu endline robi tutaj taką różnicę?
Bez
std::endl
:
124816

Z
std::endl
1
2
4
8
16
Tyle w znaczeniu przejścia do nowej linii.

czy po prostu używa się ich, bo są nowe?
W większości przypadków są przepisane dla nowszego standardu i
biblioteki z dopiskiem 'c' przed nazwą mogą mieć dodatkowe usprawnienia.
Przyjęto w C++ stosować zamiast
#include <stdlib.h>
 wersję
#include <cstdlib>
.
P-145622
Talamak
Temat założony przez niniejszego użytkownika
» 2016-03-08 14:54:54
Wszystko już rozumiem, bardzo dziękuję!
P-145723
« 1 »
  Strona 1 z 1