==FLOD==Zajász és Webizé

A metszet tétele

 

Fú most valami nagyon durvát és összetettet fogunk tanulni! Meg fogjuk állapítani, hogy két tömbnek vannak-e közös elemei. Nem lesz egyszerű, úgyhogy lassan írom 🙂

 

var tomb1 = [5,7,15,20,38,43,52,67,2];
var tomb2 = [24,56,93,15,47,2,13,38];
var tomb1_meret=tomb1.length;
var tomb2_meret=tomb2.length;
var metszet = [];

var j;
var k=0;

for(var i=0; i<tomb1_meret; i++){

j=0;
while(j<tomb2_meret && tomb1[i]!=tomb2[j]){
j++;
}

if(j<tomb2_meret){
metszet[k++]=tomb1[i];
}

}

var metszet_meret=metszet.length;

document.write(“Közös elemek: “);
for(var i=0;i<metszet_meret; i++){
document.write(metszet[i]+”, “);
}

 

Nateatyaúristen! Mi volt ez? Létrehoztunk először is két tömböt (“tomb1” és “tomb2“). Ezek elemeit fogjuk összehasonlítani. Külön változókban lementettük a tömbök méreteit (“tomb1_meret” és “tomb2_meret“). Létrehoztunk egy további változót is “metszet” néven mindazon számoknak, mellyek mind a kettő tömbben szerepelnek. Ezután jön két segédváltozó: “j” és “k“. Ezt a két segédvváltozót a következő ciklusokban fogjuk használni. A “j” nem kapott kezdőértéket és mindjárt megtudjuk azt is, hogy miért nem. Elindítunk egy for ciklust, amely addig fog futni, amíg az “i” értéke kisebb a “tomb1” méretével. Ebből már tudunk következtetni arra, hogy a “tomb1“-et vetjük össze a “tomb2“-velMind látható, a “j” változónk a for cikluson belül már kapott értéket, még pedig 0-t. Így tudtuk elérni, hogy a “j” nevű változónk minden egyes körben lenullázódjon. A for cikluson belül helyet kapott egy while ciklus is, ami addig fut, amíg a értéke kisebb, mint a “tomb2” változónk mérete, valamint megszabtuk azt is, hogy a “tomb1i. eleme nem lehet egyenlő a “tomb2i. elemével. Ha mindkét feltétel igaznak bizonyult, az azt jelenti, hogy a for ciklusunk aktuális körében nem talált olyan elemet a “tomb2“-ben, amely megegyezne a “tomb1” i. (azaz az aktuális elemével). Így növeljük a “j” értékét is eggyel. Ezután egy if feltételbe botlunk, amely azt nézi, hogy “j” kisebb tudott-e maradni a “tomb2” méreténél. Ha igen, az azt jelenti, hogy van találat, hiszen mindaddig növeljük minden egyes körben a “j” értékét, amíg nincs találat. Ergo, ha “j” értékét fel tudtuk tornázni a “tomb2” méretére, az mit jelent? Hogy nem volt az aktuális körben találat! Úgy van! Viszont ha volt (tehát “j” kisebb maradt, mint “tomb2” mérete), akkor a “tomb1i. eleme már íródik is bele a “metszet” nevű tömbünk k+1. helyére. Ezzel sikerült is összegyűjteni az egyezéseket és nem maradt más hátra, mint a felhasználót értesíteni a végeredményekről, a már korábban jól begyakorolot módon (document.write, for…stb).

Fú! Nem volt egyszerű ezt megfogalmazni sem. Remélem, érthetően sikerült megfogalmaznom itt fent a dolgokat! 🙂

 

<<< Előző lecke