Miért nem jó ez a véletlenszámokkal történő tömbfeltöltés, ha nem szabad 2 ugyanolyat tartalmaznia?
#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;
}
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?
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!