C++ véletlen számot csak egyféleképpen lehet számítani?
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(0));
int szam;
for(int i=0; i<100; i=i+1)
{
szam = rand()%(100-10+1)+10;
cout <<szam<< endl;
}
return 0;
}Ehhez hasonlót írtam a dolgozatban, de mivel rossz helyen volt a zárójel, nem működött. Viszont a tanár ctime-t, a cstdlib-t, srand time-t, int szam-ot húzta át, mint hibásat.
Az órai anyagok közt ilyen megoldást találtam (nem voltam ezen az órán)
#include <iostream>
#include <ctime>
#include <cstdlib>
#define maxn 100
using namespace std;
int main ()
{
srand(time(NULL));
for(int i=0;i<maxn;i++)
{
cout<<rand()%451+50<<" ";
}
return 0;
}
Miért ezt a megoldást kéri a tanár ? Tőle nem tudom megkérdezni.
Ennél miért csak EGY véletlen számot ad ? Mi a hiba ?#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(0));
int szam;
{
for(int i=0; i<30; i=i++)
szam = rand()%(20-10+1)+10;
cout<<szam<<endl;
}
return 0;
}
#1-es hozzászólásodra: talán így:
1. A main függvényen belül, a kezdő kapcsos zárójel a for után kell, és nem elé.
2, A for ciklusnál az i=i++ helyett szimplán i++ kell növekményként. Vagy i = i + 1 vagy i += 1
"Viszont a tanár ctime-t, a cstdlib-t, srand time-t, int szam-ot húzta át, mint hibásat. "
A time()-ra még esetleg tudom a megoldást: a time paraméterként egy adott fajta objektumra - time_t ( [link] ) - mutató pointert vár, vagy NULL pointert, nem számot.
A többi kérdéses - talán ha beidéznéd a feladatot, meg lehetne mondani.
A feladat: töltsön fel egy tömböt legfeljebb 100 darab egész számmal.
Erre épül a többi feladat, ha ez nincs kész, nem tudom folytatni. Valamit mondott erre nekem a tanár, de ne értettem. Kérdés, ha valamiért nem működne a tömb feltöltése véletlen számokkal, hogyan tudnék tovább menni a többire ? Csak programozási tételek lesznek a többi feladatban.
"A feladat: töltsön fel egy tömböt"
Te nem tömböt töltesz fel, csak egy int típusú változónak adsz véletlen értékeket, és írod ki.
A szam változó helyett hozz létre egy tömböt - például:
int szamok[30];
majd a ciklusmagban a tömb ciklusváltozó által meghatározott elemének állítsd be a véletlen számot:
szamok[i] = rand() % (20 - 10 + 1) + 10;
majd ki is írhatod,
cout << szamok[i] << endl;
stb...
„Ennél miért csak EGY véletlenszámot ad? Mi a hiba?”
Nem tudom -- nálam ugyanis nem EGY véletlenszámot ír ki, hanem semennyit.
Megjegyzések:
1. A kapcsos zárójelet nem a for-ciklus elé tesszük, hanem a feltétel után.
2. Az i=i++; nem növelés, hanem értékadás, emiatt mindig ugyanazt az eredményt adja, tehát végtelen ciklust eredményez. Javaslom, hogy fordításkor ne csak a működésképtelenséget okozó hibákra figyelj, hanem a figyelmeztetésekre is, azokat se véletlenül írja ki a fordító.
3. Bár nem hiba, de a (20-10+1) kifejezés értéke egyszerűen 11.
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(0));
int szam;
for(int i=0; i<30; i++)
{
szam = rand()%11+10;
cout << szam << endl;
}
return 0;
}
#include <cstdlib>
100+rand()%50 ;100 és 150 között
#include <cstdlib>
#include <ctime>
srand(time(0));
és ezután már nem a 42vel való sorozatot ismétli, hanem egy minden futáskor különböző sorozatot.
@#8:
Azért ezt a hozzászólásodat megmagyarázhatnád. Én legalábbis nem tudom hova tenni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!