Kezdőoldal » Számítástechnika » Programozás » Miért nem jó ez a véletlenszám...

Miért nem jó ez a véletlenszámokkal történő tömbfeltöltés, ha nem szabad 2 ugyanolyat tartalmaznia?

Figyelt kérdés

#include <iostream>

#include <time.h>

#include <stdlib.h>

#define N 5


using namespace std;


int tomb [N];


bool benne_van_e (int szam)

{

bool igen=false;


for (int i=0; i<N; i++)

{

if (tomb[i]==szam)

{

igen=true;

}

}


return igen;

}


int main ()

{

srand (time(NULL));

int szam;

for (int i=0; i<N; i++)

{

szam=rand()%5+1;

while (benne_van_e(szam))

{

szam=rand()%5+1;

}

}


for (int i=0; i<N; i++) cout<<tomb[i]<<" "<<endl;


return 0;

}


2016. febr. 24. 20:54
 1/2 anonim ***** válasza:

Először is döntsd el, hogy ez most C vagy C++ akar lenni, de ne keverd őket:

#include <time.h>

#include <stdlib.h>

Ezek C++-ban így néznek ki:

#include <ctime>

#include <cstdlib>


Ezt illetően:

bool benne_van_e (int szam) {

bool igen=false;


for (int i=0; i<N; i++) {

if (tomb[i]==szam) {

igen=true;

}

}


return igen;

}

1) Változóknak hasonló neveket még véletlenül se adj, mert bekavar.

2) Ha egyszer már megtaláltad a számot a tömbben, akkor minek nézed meg a hátralévő elemeit?

3) Célszerű lenne, ha a tömb, amiben keresel, szintén paraméter lenne. Ebben az esetben még azt is át kell adnod paraméterként, hogy hány elemű a tömb. Viszont egyszerűen copy-paste-elhető más programjaidba, vagy egy programon belül többször is felhasználhatod különböző tömbökre.

Szóval én ezt így írnám meg:

bool benne_van_e(int tomb[], int tombmeret, int keresett) {

.. for (int i = 0; i < tombmeret; i++) {

.. .. if (tomb[i] == keresett)

.. .. .. return true;

.. }

.. return false;

}


Ha pedig ezt nézzük:

int szam;

for (int i=0; i<N; i++) {

szam=rand()%5+1;

while (benne_van_e(szam)) {

szam=rand()%5+1;

}

}

Szóval, ezt magyarra lefordítva:

1) Legyen szam egy egész szám

2) Amíg meg nincs az N darab számunk:

.. a) szam legyen egy véletlen szám

.. b) Amíg a tömbben benne van a szam:

.. .. - szam legyen egy véletlen szám

Te itt látsz olyat, hogy "tároljuk el szam-ot a tömbben az i. helyre"?


Először magyarul próbáld meg megfogalmazni, hogy mit akarsz, és ha az sikerült, utána fordítsd le C++-ra. Sokan ezzel cseszik el ezt az egész "programozni akarok" dolgot. Ha magyarul nem megy, szerinted C++ nyelven menni fog?

2016. febr. 24. 21:13
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:

Mindenben egyetértek az előzővel, én még annyit fűznék hozzá hogy az N a tömb mérete és nem a tömb elemeinek száma! A benne_van_e(int) függvényed N darab elemet vizsgál mikor lehet hogy még nincs is benne N elem. Itt ez nem számít mert a tömb elemei 0 értéket vesznek fel és a vizsgált szám biztosan nem 0, de érdemes erre figyelni és kijavítani.


szam=rand()%5+1;

while (benne_van_e(szam))

{

szam=rand()%5+1;

}


helyett használj do-while ciklust a kódismétlés elkerüléséhez


do

{

szam=rand()%5+1;

} while (benne_van_e(szam)) ;



C++-ban érdemes kerülni a preprocesszor makrókat és a konstansokat konstansként definiálni:

const int N = 5;


Ez nem igaz C-re.

2016. febr. 24. 21:56
Hasznos számodra ez a válasz?

További 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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!