[ Slaughter @ 24.12.2008. 23:12 ] @
Radim jedan zadatak, u sustini razumem sta treba da se uradi i kako da se uradi ali ne znam zbog cega ne funkcionise.Ako moze neko da pogleda kod i pronadje gresku ako postoji.

Zadatak glasi:

Napisati C program koji vrši pakovanje vremena oblika DD:MM:GG:HH:MM:SS u jednu reč tako da se zauzme što manje memorije. Prikazati i štampati datu reč u heksadecimalnom brojevnom sistemu.I takodje napraviti raspakivanje podatka o vremenu.

Ja sam to uradio ovako, samo nisam radio za prikazivanje u heksadecimalnom obliku posto nisam uspeo da zavrsim pakovanje i raspakivanje te reci.

Code:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    unsigned vreme=0, dan, mesec, godina, sat, min, sek;

    printf("\n\tUnesite dan: ");
    scanf("%d",&dan);

    vreme=(vreme << 0x5) | dan;       

    printf("\n\tUnesite mesec: ");
    scanf("%d",&mesec);

    vreme=(vreme << 0x5) | mesec;

    printf("\n\tUnesite godine: ");
    scanf("%d",&godina);

    vreme=(vreme << 0xC) | godina;     //moglo se siftovati i za manje mesta

    printf("\n\tUnesite sate: ");
    scanf("%d",&sat);

    vreme=(vreme << 0x5) | sat;

    printf("\n\tUnesite minute: ");
    scanf("%d",&min);

    vreme=(vreme << 0x5) | min;

    printf("\n\tUnesite sekunde: ");
    scanf("%d",&sek);

    vreme=(vreme << 0x5) | sek;

    //Ukupno zauzeto 37 bita

    printf("\n\tUneto vreme je: %.2d:%.2d:%.2d:%.2d:%.2d:%.2d",dan,mesec,godina,sat,min,sek);
    printf("\n\n\tKodirana rec vreme je: %d",vreme);

    sek=vreme & 0x1F;               //nalazi se na kraju kodne reci ne treba siftovanje 
                                                          //izdvajamo sam funkcijom & onoliko mesta koliko nam treba (1F=5 mesta)
    min=(vreme >> 0x5) & 0x1F;         //siftujemo za 5 mesta i izdvajamo 5
    sat=(vreme >> 0xA) & 0x1F;         //za 10 izdvajamo 5
    godina=(vreme >> 0xF) & 0xFFF;   //za 15 izdvajamo 12
    mesec=(vreme >> 0x1B) & 0x1F;   //za 27 izdvajamo 5
    dan=(vreme >> 0x20) & 0x1F;      //za 32 izdvajamo 5
                                                  //za ovo mi izbavuje gresku:"Possible overflow in shift operation".
                                                         //Samo sam pomerio za 32 bita a rec ima 37 ???
    printf("\n\n\tDekodirana rec sadrzi vreme: %.2d:%.2d:%.2d:%.2d:%.2d:%.2d",dan,mesec,godina,sat,min,sek);

    printf("\n\n\n\t");
    system("PAUSE");

    return 0;
}


Hvala unapred za bilo kakvu pomoc!
[ Slaughter @ 27.12.2008. 11:21 ] @
Uspeo sam da resim ovo, problem je bio sto sam ja u rec od 4 bajta (32 bita) pokusavao da smestim rec koja je imam 37 bita.
I godina treba da sadrzi 2 cifre a ne 4 kako sam ja pokusavao.

Poz.