Hirdetés

Új hozzászólás Aktív témák

  • modder

    aktív tag

    válasz Brumi˘ #2070 üzenetére

    Hali,

    Csinálsz egy 10 elemű segédtömböt, amibe a 10, tag1 attribútum szerinti legkisebb értéket fogod tárolni. Ez a segédtömb tag1 szerinti NÖVEKVŐ sorrendben fogja tartalmazni az Adatszerk típusú adatokat.
    Végigiterálsz az eredeti tömbön, és minden egyes elemére megnézed, hogy a tag1 attribútuma kisebb-e, mint a legnagyobb tag1 attribútum a segédtömbödben. Ha igen, akkor az addigi 10 legkisebb közé be fog kerülni, err szolgál a pushMin() metódus.

    struct Adatszerk {
    int tag1;
    int tag2;
    }

    // legyen egy listád az adatszerkezettel
    Adatszerk adatok[] = { Adatszerk(1,1), Adatszerk(1,2), ... }
    int adatokSize = 50 // vagy akármennyi

    Adatszerk[] legkisebb10 = Adatszerk[10];
    initLegkisebb10( legkisebb10 ); // mindegyiket feltöltöd legalább akkora értékkel, amekkora maximum értéke lehet tag1-nek

    for( int i = 0; i < adatokSize; i++ ){
    if( adatok[i].tag1 < legkisebb10[9].tag1 ) {
    pushMin( legkisebb10, adatok[i] );
    }
    }

    // ezzel a függvénnyel növekvő sorrendbe szúrjuk be 'legkisebb10'-be a legkisebb tag1 attribútum szerinti
    // adatokat
    void pushMin( Adatszerk[] legkisebb10, Adatszerk adat ) {
    int i = 0;
    for ( i = 0; i < 10 ; i++ ) {
    if ( adat.tag1 < legkisebb10[i].tag1 ) {
    break;
    }
    }

    // a legkisebb10 tömbben az i. helyen volt az elem, ami már nagyobb volt 'adat'-nál
    // ezért oda tesszük be az 'adat'-ot, és a maradékot hátra toljuk a tömbben
    // fontos, hogy a for-ciklus a tömb hátulja felől menjen i-ig
    for( int k = 9 ; k > i ; k-- ) {
    legkisebb10[k] = legkisebb10[k-1];
    }

    // i-edig helyre beszúrjuk az új 'adat'-ot
    legkisebb[i] = adat;
    }

    Amit WonderCSabo is említett, ha nem olyan nagy a listád, szóval lemásolhatod, akkor lehet, hogy egyszerűbb először rendezve lemásolni, majd az első 10-et kiírni

Új hozzászólás Aktív témák