Kezdőoldal » Számítástechnika » Programozás » Hogy tudom rendes működésre...

Hogy tudom rendes működésre bírni a programot?

Figyelt kérdés

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.



2014. ápr. 23. 17:23
 1/5 anonim ***** válasza:
Első ránézésre a tilt függvény nem jó, mert vagy 0-val tér vissza vagy return nélkül tér vissza.
2014. ápr. 23. 18:01
Hasznos számodra ez a válasz?
 2/5 tabaki ***** válasza:

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.

2014. ápr. 23. 20:27
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Ritka igénytelen és gyenge próbálkozás.

Így néz ki valahogy gusztusosan:


pastebin(dot)com/cZxZA0Wr

2014. ápr. 23. 20:41
Hasznos számodra ez a válasz?
 4/5 tabaki ***** válasza:

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();

}

2014. ápr. 23. 21:30
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

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.

2014. ápr. 23. 21:56
Hasznos számodra ez a válasz?

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

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!