Lösningsförslag till datorövning 6 i Programmeringsmetodik /* Uppg6a.c */ #include int udda(int tal) { return tal & 1; } int main() { int heltal; printf("Heltal : "); scanf("%d", &heltal); if (udda(heltal)) printf("Talet är udda!\n"); else printf("Talet är jämnt!\n"); return 0; } /* Uppg6b.c */ #include void utskrift(unsigned char uch) { int i; for (i = 7; i >= 0; i--) { if (uch & (1< int udda(int tal) { return tal & 1; } void utskrift(unsigned char uch) { int i; for (i = 7; i >= 0; i--) { if (uch & (1< int tvaprodukt(int tal, int antal) { return tal << antal; } int main() { int heltal, ggr; printf("Heltal : "); scanf("%d", &heltal); printf("Antal ggr 2 : "); scanf("%d", &ggr); printf("Resultat : %d\n", tvaprodukt(heltal, ggr)); return 0; } /* Uppg6e.c */ #include void till_byte(int dag, int manad, unsigned char *uchp) { *uchp = 0; *uchp = dag; /* Tre minst signifikanta */ *uchp |= (manad << 3); /* Fem mest signifikanta */ } void fran_byte(unsigned char uch, int *dagp, int *manadp) { *dagp = uch & 7; /* 7 = 00000111 */ *manadp = (uch >> 3) & 31; /* 31 = 00011111 */ } int main() { int dag, manad; unsigned char uch; printf("Dag (1-7) : "); scanf("%d", &dag); printf("Månad (1-12) : "); scanf("%d", &manad); till_byte(dag, manad, &uch); dag = manad = 0; fran_byte(uch, &dag, &manad); printf("Dag : %d\n", dag); printf("Månad : %d\n", manad); return 0; } /* Uppg6f.c */ #include #include #include #include struct enbyte { unsigned int x : 4; unsigned int y : 4; }; void skapa_punkt(struct enbyte *punktp) { punktp->x = rand() % 16; punktp->y = rand() % 16; } float avstand(struct enbyte p1, struct enbyte p2) { return sqrt(pow(abs(p1.x-p2.x), 2) + pow(abs(p1.y-p2.y), 2)); } int main() { struct enbyte punkt1, punkt2; srand((unsigned)time(NULL)); skapa_punkt(&punkt1); skapa_punkt(&punkt2); printf("P1 : (%d, %d)\n", punkt1.x, punkt1.y); printf("P2 : (%d, %d)\n", punkt2.x, punkt2.y); printf("Avstånd : %.2f\n", avstand(punkt1, punkt2)); return 0; }