Hogy tudom rendes működésre bírni a programot?
Kitaláltam hogy írok egy programot ami random számokat generál de nem engedi az ismétlődést.
#include <iostream>
#include <stdlib.h>
#include <ctime>
#define N 5
using namespace std;
int z=1;
int t[N];
int tilt(int a)
{
int j;
for(j=1;j<=N;j++)
{
z=-1;
if (a==t[j])
{
z=0;
return z;
}
}
}
int main()
{
srand(time(NULL));
int i;
for (i=1;i<=N;i++)
{
t[i]=rand()%20+1;
while (z!=0)
{
t[i]=rand()%25+1;
int u=t[i];
tilt(u);
}
cout << t[i] << " ";
}
}
Ezt hoztam ki de mindig ad ki ismétlődést.
Ha másképp írod fel a tilt() függvényt, látszik, hogy csak a==t[j] esetén van return, kétségtelen, hogy z be van állítva, de nem valami elegáns:
int tilt(int a){
int j;
for(j=1;j<=N;j++){
z=-1;
if (a==t[j]) {z=0; return z;}
}}
De a fő baj a teljesen értelmetlen while (z!=0) vizsgálat. Ha jól értem, a program akkor fogadja el t[i] értékét, ha tilt() értéke 0. Ez, mivel a teljes tömb hosszában vizsgálsz, mindenképpen bekövetkezik. Első eset, ha talált egy régebbi ugyanolyan számot -- ekkor miért is kell megnyugodva elfogadnia, és továbblépnie? Második eset, hogy a ciklus előbb-utóbb beleütközik az imént beírt t[i] értékbe, amely értelemszerűen azonos a-val. Magyarán: Akár volt azonos érték, akár nem, a programnak tökmindegy, el fogja fogadni a generált számot.
Ritka igénytelen és gyenge próbálkozás.
Így néz ki valahogy gusztusosan:
pastebin(dot)com/cZxZA0Wr
Fú, de jó, hogy nem kell C++-ban programoznom... Viszont most jól jön, hogy kábé Kérdező szintjén állok. Egy próbálkozás, programozók ne nézzenek ide:
#include <iostream>
#include <stdlib.h>
#define N 15
using namespace std;
int i=0;
int t[N];
int tilt(int szam){
int oke,j;
oke=0;
for(j=0;j<i;j++){if (t[j]==szam) oke=-1;}
return oke;
}
int main(){
int veletlen,mehet;
srand(time(NULL));
for (i=0;i<N;i++){
do{
veletlen=rand()%20+1;
mehet=tilt(veletlen);
}while (mehet!=0);
t[i]=veletlen;
cout << t[i] << " ";
}
cin.get();
}
Rövid összefoglaló (a kérdezőnek, nem tabakinak):
-Globális változók: NE!
-C-szerű int-es feltétel vizsgálat logikai változók helyett: Ne...
-C-s makrós konstansok helyett használj valódi konstansokat.
-"tilt(u);" Ez a függvényhívás például az égvilágon semmit nem csinál.
Gondold át mit akarsz csinálni, mert ez káosz.
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!