rekenen in c++

Status
Niet open voor verdere reacties.

manhaeve5

Gebruiker
Lid geworden
9 jan 2007
Berichten
276
hoe laat je c++ kijken voor delbaarheid en of de vierkantswortel bestaat?

alvast bedankt

robin
 
het % teken: daarmee krijg je de rest van een deling
bijvoorbeeld:
7 % 2 = 1 want 2 past 3 keer in 7 en dan hou je 1 over.

Als een getal deelbaar is door een ander getal dan is de rest 0
dus if((getal % andergetal) == 0){ //getal is deelbaar }

die van de wortel weet ik zo gauw niet, probeer eens te googlen

c++ square root
 
als ik deze code gebruik:
Code:
do{
int a = rand() %10;
int b = rand() %10;
}
while((a % b) != 0);
crasht mijn programma
 
om de rand() functie te gebruiken moet je eerste een seed zetten. Want random is eigenlijk gewoon een algoritme dat bij een basisgetal vertrekt. Je programma crasht dus omdat het niet weet op welke waarde het zijn algoritme moet starten.

Een voorbeeldje (ongetest):
Code:
#include <cmath>
#include <iostream>
using namespace std;

int main()
{
    cout << "Rol de dobbelsteen (druk op een toets)" << endl;
    cin.get();
    srand(2);
    int result = (rand() % 6) + 1;
    cout << "Resultaat = " << result << endl;
    cout << endl << "Druk op een toets om af te sluiten... ";
    cin.get();
    return 0;
}

------------------------------
De vierkantswortel van een getal krijg je met de functie sqrt()
Ik denk wel dat je eerst moet testen of je getal wel positief is, anders kom je wschl weer rare dingen tegen :)

--Johan
 
ik denk dat de oorzaak is dat hij zoveel verschillende cijfers probeert dat het op den duur vastgeraakt en ik had die srand eruit gelaten omdat dat vrij logisch is (denk ik toch):confused:
 
je zult toch echt een seed moeten geven voor een random getal...

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
srand(time(0)); //Seed het random number op de tijd
int a = rand() % 10;
int b = rand() % 10;

cout << "A: " << a << endl;
cout << "B: " << b << endl;

cin.get();

return 0;
}


En wat jij in je code doet is eerst a de rest maken van een random getal / 10, dan hetzelfde bij b, en dan kijken of de rest van a gedeeld door b niet 0 is.
Geen idee of dat is wat je wilde doen.. :P

Maar zie hierboven een voorbeeld van hoe je random getallen maakt..
 
Je hoeft een random geen seed te geven....
zodoende hou je een vaste random chart wat je wel eens nodig kan hebben in sommige gevallen.
seeden is een optie, niks meer.....en seeden op de tijd is een poging tot het creeren van een 'echte' random, maar das een technisch moeilijk begrip in computer land

misschien bedoel je met 'crash', dat het programma errors geeft bij compilen, en dat is omdat a en b in de do zijn gedefinieerd, en dus niet de scope voor de while statement hebben.
a & b undeclared identifier.

int a,b;
do{
a = rand() %10;
b = rand() %10;
}
while((a % b) != 0);


verder, check wat rand() returned. in meeste gevallen een int met oneindig domein. maar dat maakt weinig uit voor je crash. wellicht wel voor de runbaarheid in het geval rand () een getal {0...1} returned.

dit maakt echter wel veel uit:
Als je wel echt een crash hebt, en die heb je ook, is dat door een deling door 0...
a%b deelt, en b kan 0 worden, en dat wordt t ook.....(ergens in je random)

hier komt het niet seeden van pas, omdat je nu altijd dezelfde gang van zaken hebt. als je seed weet je niet wanneer die 0 komt (tenzij je je random chart uit je hoofd kent)
als je gaat seeden kan het zijn dat het niet meer crashed, maar das puur toeval, en in dat geval lijkt het helemaal apart....
maar zorg ervoor dat b niet nul kan worden en alles verloopt ok...

dit is trouwens ook meteen iets wat de debugger je had kunnen vertellen

PS, wat ist doel van dit stukje code ? gewoon probeersel ?
 
Laatst bewerkt:
Don GL heeft gelijk je hoeft niet te seeden voor rand() maar dan is het wel iedere keer dat je je programma opstart hetzelfde "willekeurige" getal
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan