Kiválogatás tétele?
Nem ertem miert ir ki egyeseket es nullakat a miutan kiiratom a tombot. Igy irja ki:
1 nem egy
nem egy
1
1
0
0
1
//Kivalogatas 2tombbe
//Egy tomb elemi kozul szeretnenk kivalogatni egy bizonyos tulajdonsagot teljesito elemeket
//Valogassuk ki az 1eseket
int[] a = { 1, 2, 2, 1 };
int[] b = new int[a.Length];
int db = 0;
for (int i = 0; i <a.Length; i++)
{
if (a[i] == 1)
{
Console.WriteLine("1");
b[i] = a[i];
}
else
{
Console.WriteLine("nem egy");
}
}
for (int i = 0; i <b.Length; i++)
{
Console.WriteLine(b[i]);
}
Console.ReadKey();
mert amikor b-t deklarálod, minden elemét 0-ra inicializálja, te pedig csak azokon az indexeken adsz értéket ahol az eredeti tömbben 1-es van
egyébként meg debuggolásról hallottál már?!?!
Mert ez a kód azt csinálja amit mondtál neki.
Mindenesetre ez minden csak nem kiválogatás.
Egzszerüsítsük le egy kicsit.
Van egy tömbünk.
int arr[10] = {1,2,3...10};
és ebből szeretnénk a párosokat (2vel osztható)
for(int i=0;i<10/*arr.length*/;++i)
if(arr[i]%2==0)
Console.WriteLine(arr[i].toString());
Végigmegyünk a tömbön egy ciklussal.
Megnézzük, hogy a tömb jelenlegi elemére igaz-e a feltételünk
Ha igaz csinálunk vele valamit.
Ha az a valami a másik tömbbe való beletevés, akkor kell egy változó amibe elraktározzuk, hogy melyik a legelső szabad hely, abba átmásoljuk a jelenlegi vizsgált elemet (ha igaz a feltétel) majd mivel a másik tömbben már írtunk arra a helyre ami a változó szerint a legelső helyet indexeli a változót meg kell változtatni az újabb pozira, ami az előző után van.
A kód:
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
int arr2[10]; //azonos hosszú mivel lehet mindegyik elemére igaz a feltétel
int firstIndex=0;
for(i=0;i<arr.length;i++)
If(feltétel){
arr2[firstIndex]=arr[i];
firstIndex++;
}
Ui:a firstIndex++-t beteheted az arr2[firstIndex++]-e is és megspórolsz egy sort
Pszeudo kod
Kivalogatas tetel
BE: x-T tomb, n-egesz(tomb hossza),P-logikai
KI: y-Tömb, db-egesz
fgv Kivalogatas (x,n,P)
y=Létrehoz(T)[n]
ciklus i=1 tol n-ig
ha P(x[i])akkor
db=db+1
y[db]=x[i]
elagazas vege
ciklus vege
vissza (y,db)
fgv vege
(az egyenloseg jel nyil akar lenni)
ezt a kodot szeretnem c# ban megvalositani egy egyszeru peldaval
Minden valaszt megkoszonok de nem kell anyazni igy is ki van a fa...
a feladat a tombbol b tombbe az egyeseket atiratni
int[] a = { 1, 2, 2, 1 };
int[] b = new int[a.Length];
int db = 0;
for (int i = 0; i <a.Length; i++)
{
if (a[i]==1)
{
db++;
b[db] = a[i];
}
}
Console.WriteLine(db);
for (int i = 0; i <b.Length; i++)
{
Console.WriteLine(b[i]);
}
Console.ReadKey();
Ok szal az elso hibam az volt h a db++ es az b[db]=a[i] sorokat felcsereltem
A masodik amit meg nem tom h fixaljak az hogy a a tomb ures (fel nem toltott elemeit (00)) hogy ne irattassam ki
ByDöVéj:
var b = a.Where(x => x == 1).ToArray();
Vaaagy:
var b = Enumerable.Repeat(1, a.Count(x => x == 1)).ToArray();
"A masodik amit meg nem tom h fixaljak az hogy a a tomb ures (fel nem toltott elemeit (00)) hogy ne irattassam ki"
Szó szerint így ahogy írod.
Csak annyi darab elemet írass ki, ahányat kiválogattál (db).
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!