Gyakorlati alapok

2 tömb összefuttatása külön függvényekkel

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!

 

Amennyiben a Tisztelt Olvasó tanulmányai során fentről lefelé halad a Honlaptérképben, ez a fejezet garantáltan még meg fogja haladni aktuális tudásszintjét, hiszen különutas függvénymegoldásokat tartalmaz (Gyakorlati alapok II. (main() + külön eljárás / függvény) című fejezetcsomagtól kezdve felfelé). A fejezetet azért illesztettem mégis ide, hogy a tömbműveletek 1 helyen, logikus egységben legyenek.

 

A fejezet tartalmi előzményei a következő fejezetekben olvashatók:

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Az összefuttatás hasonló az unióhoz, tőle csupán abban különbözik, hogy maguk az alaptömbök is rendezettek, ezért az eredménytömbnek is rendezettnek kell lennie. A közös részek csak egyszer fordulhatnak elő. Ha nincs közös rész, azt az összefuttatási módot összefésülésnek nevezzük.

 

2 tömb uniója külön függvényekkel című fejezetben felvázoltuk az ott szükséges alapmetódusokat...

...amelyeket most az összefuttatás jellegéből adódóan a következő metódusokkal kell helyettesítetnünk, illetve kiegészítenünk:

Nézzük meg a futtatható Java-kódot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


import java.util.Random;

public class Main {

public static boolean benneVan(int szam, int[] tomb) {
    boolean vanIlyenSzam = false;
    for (int i = 0; i < tomb.length; i++) {
        if (szam == tomb[i]) {
            vanIlyenSzam=true;
            break;
        }
    }
    return vanIlyenSzam;
}

public static int[] tombFeltoltes() {
    int[] tomb = new int[10];
    Random rnd = new Random();
    int szam;
    for(int i = 0; i < tomb.length; i++) {
        do {
            szam = rnd.nextInt(100) + 1;
            }while(benneVan(szam, tomb));
        tomb[i] = szam;
    }
    return tomb;
}

public static void tombRendezes(int[] tomb) {
    for(int i = tomb.length-1; i > 0; i--)
        for(int j = 0; j < i; j++)
            if(tomb[j] > tomb[j+1]){
                int tarolo = tomb[j];
                tomb[j] = tomb[j+1];
                tomb[j+1] = tarolo;
    }
}

public static void tombKiiras(int[] tomb) {
    for (int i = 0; i < tomb.length; i++) {
        System.out.print(tomb[i] + " ");
    }
    System.out.println();
}

public static int[] tombOsszefuttatas(int[] tomb1, int[] tomb2) {
    int[] tombOsszefuttatott = new int[tomb1.length + tomb2.length];
    int i = 0;
    int j = 0;
    int szamlalo = -1;
    while(i < tomb1.length && j < tomb2.length) {
        szamlalo++;
        if(tomb1[i] < tomb2[j]) {
            tombOsszefuttatott[szamlalo] = tomb1[i++];
        }else if(tomb1[i] == tomb2[j]) {
            tombOsszefuttatott[szamlalo] = tomb1[i];
            i++;
            j++;
        }else if(tomb1[i] > tomb2[j]) {
            tombOsszefuttatott[szamlalo] = tomb2[j++];
        }
    }
    while(i < tomb1.length)
        tombOsszefuttatott[++szamlalo] = tomb1[i++];
    while(j < tomb2.length)
        tombOsszefuttatott[++szamlalo] = tomb2[j++];

    return tombOsszefuttatott;
}

public static void main(String[] args) {
    int[] tomb1 = new int[10];
    int[] tomb2 = new int[10];
    int[] tombOsszefuttatott = new int[tomb1.length + tomb2.length];

    tomb1 = tombFeltoltes();
    tomb2 = tombFeltoltes();

    tombKiiras(tomb1);
    tombKiiras(tomb2);

    tombRendezes(tomb1);
    tombRendezes(tomb2);

    System.out.println();

    tombKiiras(tomb1);
    tombKiiras(tomb2);

    System.out.println();

    tombOsszefuttatott = tombOsszefuttatas(tomb1, tomb2);
    tombKiiras(tombOsszefuttatott);
    }
}

 

Végeredmény (például):

75 71 52 11 72 1 87 49 28 43
26 57 5 62 87 72 35 14 39 80

1 11 28 43 49 52 71 72 75 87
5 14 26 35 39 57 62 72 80 87

1 5 11 14 26 28 35 39 43 49 52 57 62 71 72 75 80 87 0 0