Kezdőoldal » Számítástechnika » Programozás » Random számok ismétlődés...

Random számok ismétlődés nélkül Pascalban?

Figyelt kérdés

Ilyet szeretnék:

tömb elemeinek száma pl. 10,

ebből kiválaszt 5 random számot, és kiírja őket. (Eddig megy is), de azt hogyan kéne, hogy ebben az 5 számban ne legyen ismétlődés, tehát egy szám csak 1x szerepeljen?



2013. ápr. 17. 15:51
 1/8 anonim ***** válasza:

A.) megjegyzed egy másik tömbben, hogy már miket húztál ki és ezeket minden húzásnál ellenőrzöd

B.) a tömb kihúzott elemeit megjelölöd (pl -1-et írt a szám helyére), és húzásnál figyeled, hogy ne húzz ki -1-et

2013. ápr. 17. 15:54
Hasznos számodra ez a válasz?
 2/8 iostream ***** válasza:

A tömb 10 eleme mind különböző (mert akkor a kérdés ekvivalens a tömbindexek egyediségével)? Ha igen, akkor itt egy statisztikai megoldás (C++-ban és ötöslottóra, de könnyedén átírhatod, hogy 1-10 válasszon számot és Pascal nyelven):


#include <iostream>

#include <cstdlib>

#include <ctime>


int main(int argc, char* argv[])

{

int pool(std::atoi(argv[1]));

int sample(std::atoi(argv[2]));

const int poolOrig(pool + 1);


std::srand(std::time(0));


for (; pool > 0; --pool)

{

if (std::rand() % pool < sample)

{

std::cout << poolOrig - pool << '\n';

--sample;

}

}

}


Ha nem, akkor vagy azt csinálod, mint az előző megoldás, vagy fogod a tömböt, és kiírtod belőle az ismétlődéseket (pl rendezed, és az egymás utána azonos értékű elemeket kilököd), és utána visszavezettük a kérdést az előzőre (csak nem 10 lesz az elemszám).

2013. ápr. 17. 15:58
Hasznos számodra ez a válasz?
 3/8 StarCry666 ***** válasza:

iostream: gratulálok az nem is pascal!

kérdező:

Program halmaz;

{A For ciklusban a ciklusváltozót nem ajánlatos piszkálni... ellenben a while és a repeat ciklusban igen...}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

program halmaz;


var

szam: integer;

h: set of byte;

i: byte;


BEGIN

h:= []; {uresre allitjuk a halmazt...}

randomize; {kell a veletlenszam generalashoz...}

repeat {ciklus amig...}

szam:= random(5)+1; {szam veletlenszeruen kap erteket 1..5 kozott}

if szam in h then continue {ha benne van, folytatjuk a ciklust..}

else begin {különben..}

include(h, szam); {szam-ot berakjuk a halmazba..}

write(szam, ' '); {kiiratjuk a kimenetre}

inc(i); {noveljuk i erteket...}

end;

until i = 5; {i egyenlove nem valik 5-el...}

readln;

END.

2013. ápr. 17. 17:44
Hasznos számodra ez a válasz?
 4/8 StarCry666 ***** válasza:
bocs a számok miatt xD
2013. ápr. 17. 17:45
Hasznos számodra ez a válasz?
 5/8 iostream ***** válasza:
B@szki, ez nem Pascal? :O 15 éve élek tévedésben akkor :'(
2013. ápr. 17. 21:05
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
#5, aljas leszek, de ha már a nagy felismeréseknél tartunk: a húsvéti nyúl és a Mikulás sem létezik.
2013. ápr. 17. 21:07
Hasznos számodra ez a válasz?
 7/8 tabaki ***** válasza:
Meglepett volna, ha iostream pascal-programot ír, szerintem előbb követ el harakirit. Viszont tisztességgel közölte, hogy ez C++, tessék lefordítani. Kéretik nem csak a kódot olvasni.
2013. ápr. 17. 21:26
Hasznos számodra ez a válasz?
 8/8 Srapnel ***** válasza:
CSinálhatod azt is, hogy csinálsz egy másik "index"-tömböt, amiben az 1..n számsorozat van (n itt most 10), majd csinálsz egy ciklust mondjuk 2*n ciklusszámmal, amiben véletlenszerűen kiválasztasz két számot az index tömbben és megcseréled őket. Ez után fogod az első m (m itt most 5) számot az indextömbből és az eredeti tömbből kiolvasod az így kapott m számnak megfelelő indexű elemeket.
2013. ápr. 18. 20:55
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!