Keresés

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

  • Jester01

    veterán

    válasz hoffman_ #4100 üzenetére

    A maszkolás az bináris dolog, akkor jó ha bitekkel dolgozol. Jelen esetben az alsó két bitet kell leválasztani erre az & 3 az pont jó is, vizsgálni viszont az 10 kombinációt kell aminek az értéke 2.

    A helyiértékes dolog ennek a tízes megfelelője és arra az osztás művelet jó. Ugye az egyesek száma az simán 10-el vett maradék, tehát x % 10. A tízesek száma ugyanez csak még egy tízzel való osztás is van benne: (x / 10) % 10. A százas helyiértéknél már 100-al kell osztani és így tovább.

  • Jester01

    veterán

    válasz hoffman_ #4098 üzenetére

    Van pár probléma:

    10 karaktert kell olvasni, tehát scanf %d nem jó.
    A helyiértékeket decimálisan kell érteni
    temp & 3 sose lesz 3-nál több. A feladat szerint 0. bit 0 és 1. bit 1 tehát (x & 3) == 2 (de itt x ugye már a 10-es helyiérték)

  • hoffman_

    nagyúr

    válasz hoffman_ #4097 üzenetére

    senki többet harmadszor? :( nagyon fontos lenne.

    illetve még egy kérdés. írtam én is valamit egy feladatra, természetesen nem jó, és nem tudom, hogy miért. valaki meg tudja javítani esetleg?

    feladat: bekérni s1 tömbbe 10 karaktert úgy, hogy ascii kód szerint a 1-es és 100-as helyiértéken csak 6 vagy 7 állhat. ezután s2-be másolni az elemeket(ha van), amelyeknél a 10-es helyiértéken lévő szám 0. bitje 0, az 1. bitje pedig 1, utána az első 4 elem minimumát kell megadni. mindent függvénnyel.

    - min függvény ebben még nincs is benne, de így se ok

    void beker(unsigned char *s1);
    int masol(unsigned char *s1, unsigned char *s2);

    int main()
    {
    unsigned char s1[10], s2[10];
    beker(s1);
    masol(s1, s2);
    return 0;
    }

    void beker(unsigned char *s1)
    {
    int i=0;
    unsigned int temp;
    /*while(i<10)
    {
    scanf("%d", temp);
    if((temp[i] &0x3 == 0x6) || (temp[i] &0x3 == 0x7)) s1[i]=temp;
    i++;
    }*/
    while(i<10)
    {
    scanf("%d", temp);
    if((temp &0x3 == 0x6) || (temp &0x3 == 0x7)) s1[i]=temp;
    else s1[i]=0;
    i++;
    }
    }

    int masol(unsigned char *s1, unsigned char *s2)
    {
    int i=0, j=0;
    while(i<10) s2[i++]=0;
    i=0;
    while(i<10)
    {
    if(s1[i] &0x5 == 0x1) s2[j++]=s1[i];
    i++;
    printf("%d, ", s2);
    }
    }

  • bucsupeti

    senior tag

    válasz hoffman_ #4043 üzenetére

    100-tól csökkenve 100 db páratlan szám csak úgy van, ha negatív számokat is veszünk, vagy ha egy páratlan számot többször is értékül adunk. Van valami pontosítás a feladattal kapcsolatban ezen a téren?
    Mert ha nincs akkor én úgy csinálnám hogy 99-től visszafelé indítok egy ciklust (for), úgy hogy kettesével lépked visszafelé. Tárolnám a számot az aktuális és az aktuális+1 indexű elemben.
    Ezzel kész is a feltöltés csökkenő sorrendben.
    Ezután egy újabb ciklusban feldolgoznám a tömböt. A ciklus végigmegy a tömbön és összeadogatom két változóban az elemeket. Egyikben a páros indexűeket, másikban a páratlan indexűeket. (Vedd észre, hogy mivel két egyforma elem követi egymást, ezért az összeg pontosan ugyan annyi lesz a végén mindkét változóban, mivel a tömb valahogy így néz ki: 99,99,97,97,95,95...1,1)
    Ezután kiírom a páros indexűek összegét, majd a páratlan indexűek összegét elosztom 50-el és azt írom ki (ez lesz az átlag).

    Ne erőltesd bele egy ciklusba az egészet (persze úgy is meg lehet csinálni).

    Számomra a kérdés a tömb feltöltésének pontos szabálya.

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

Hirdetés