Hogy lehet megvalósítani a ismétlődés kiszűrését?
Egy do..while elég, ahol a kilépési feltétel az, hogy (i = bevitt_elem_indexe) VAGY (aktuális tömbelem = bevitt új elem). Fontos a sorrend, hogy ne teszteljünk tömbön kívüli indexű elemet.
Nyilván a ciklusmagban inkrementálsz egy i változót, amit a ciklus előtt inicializálsz (célszerűen -1-re, mert hátultesztelős ciklus azzal indít, hogy hozzáad 1-et, gondolom 0-tól indexeljük a tömböt, melyik nyelv ez?).
Maga az ellenőrzés annyi, hogy i kisebb-e a bevinni kívánt elem indexénél. Mert ha nem, akkor végigpörgettük a tömböt, tehát nem volt egyezés.
Ha a nyelvedben van halmaz típus, és csak beviszel elemeket, nem szabad törölnöd utána, akkor jó dolog egy halmazba is bedobálni a bevitt elemeket a tömb mellett, és csak tesztelni, hogy benne van-e.
Legtöbb nyelv támogatja a halmazok használatát (set) ami többek között azért jó mert egy elemet csak egyszer tesz be, azaz minden eleme egyedi. Akkor a program így néz ki:
Létrehozol egy halmazt;
Amíg a halmazod elemszáma kisebb mint 10:
. . Bekérsz egy számot;
. . Berakod a halmazba.
Másik lehetőség hogy valamilyen dinamikus tárolóval csinálod (lista, vektor vagy amit támogat a nyelv), ekkor a kódod annyival egészül ki hogy a berakás előtt megnézed egy ciklussal vagy egy beépített metódussal hogy a listád hogy tartalmazza e az elemet:
Létrehozol egy listát;
Amíg a listád elemszáma kisebb mint 10:
. . Bekérsz egy számot;
. . Megnézed hogy a listád tartalmazza e már;
. . Ha nem tartalmazza:
. . . . Berakod a listába.
Harmadik lehetőség amikor valóban tömbbel csinálod. Ekkor megint csak ki kell egészíteni az előzőt, egy változóval tárolni kell a tömb elemeinek számát és növelni azt, ha új elemet tettél a tömbbe:
Létrehozol egy tömböt;
Létrehozod a tömb méretét ami kezdetben 0;
Amíg a tömb elemszáma kisebb mint 10:
. . Bekérsz egy számot;
. . Megnézed hogy a tömb tartalmazza e már (0-tól "méret-1"-ig mész);
. . Ha tartalmazza:
. . . . Berakod a tömb következő helyére, amit a mérete határoz meg;
. . . . Növeled a tömb méretét tároló változót.
Haha működik a Simko csali. Amint meghallotta van kód arra reagált, nem megpróbálta megoldani a többi válasz alapján vagy esetleg megköszönni a segítséget :D Minek törje magát ha lesz kód..
Szeretném látni a próbálkozásaidat és azt hogy az előző válaszok alapján mit hoztál össze mielőtt segítenénk megoldani.
static void Main(string[] args)
{
SortedSet<double> szamok = new SortedSet<double>();
for(string s; szamok.Count < 10;)
{
Console.WriteLine("Add meg a {0} szamot: ", szamok.Count + 1);
s = Console.ReadLine();
try
{
if(!szamok.Add(Int32.Parse(s)))
{
Console.WriteLine("Ez a szam mar szerepel!");
}
}
catch (Exception)
{
Console.WriteLine("Csak szamokat adhatsz meg!");
}
}
}
Nincs itt semmiféle csali nem sikerül visszaírnom bővebben :) amúgy így megoldottam csak 2 for ciklus meg do while kellett:
int n = 3;
int[] t = new int[n];
Random r = new Random();
for (int i = 0; i < t.Length; i++)
{
int seged = 0; // segéd alapértékbe állítása
bool letezik; // bool változó létrehozása, ez fogja ellenőrizni a létezését az ismétlődésnek
int j; // második ciklus változó
do
{
letezik = false;
Console.WriteLine("Add meg {0}. elemet: ",i);
seged = r.Next(0, n + 1);
//seged = int.Parse(Console.ReadLine());
for (j = 0; j < t.Length; j++)
{
if (seged == t[j]) letezik = true;
}
}
while (letezik);
t[i] = seged;
}
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!