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;
}
#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!