Lösningsförslag till datorövning 2, Programmering C. /* uppg2a.c */ #include #include #define G 9.81 int main() { const double g = 9.81; double massa, hojd; printf("Ge massa: "); scanf("%lf", &massa); printf("Ge hojd: "); scanf("%lf", &hojd); printf("Makroberäknad energi: %.2f\n", G*massa*hojd); printf("Constberäknad energi: %.2f\n", g*massa*hojd); getch(); return 0; } /* uppg2b.c */ #include #include int main() { int timme, minut, sekund; int sekund_total; printf("Ge timme, minut, sekund: "); scanf("%d%d%d", &timme, &minut, &sekund); sekund_total = 3600 * timme + 60 * minut + sekund; printf("Totalsekunder = %d\n", sekund_total); getch(); return 0; } /* uppg2c.c */ #include #include /* för att kunna anropa sin(v) */ #include int main() { const double pi = 3.141592; double vinkel, radianer; double asida, bsida, area; printf("Ge vinkel i grader: "); scanf("%lf", &vinkel); printf("Ge två sidlängder: "); scanf("%lf%lf", &asida, &bsida); /* Räkna om till radianer, annars ger sin fel */ radianer = vinkel * pi / 180.0; /* Beräkna area med areaformeln, skriv ut */ area = 0.5 * asida * bsida * sin( radianer); printf("Area = %.2f\n", area); getch(); return 0; } /* uppg2d.c */ #include #include int main() { int sekunder; int timme, minut, sekund; printf("Ge dagtid i sekunder: "); scanf("%d", &sekunder); timme = sekunder / 3600; minut = sekunder % 3600 / 60; sekund = sekunder % 60; printf("Klockan var %02d : %02d : %02d\n", timme, minut, sekund); getch(); return 0; } /* uppg2e.c */ #include #include int main() { int datum; int ar, manad, dag; printf("Ge ett datum med sex siffror: "); scanf("%d", &datum); ar = datum / 10000; manad = datum % 10000 / 100; dag = datum % 100; printf("År = 20%02d\nMånad = %02d\nDag = %02d\n", ar, manad, dag); getch(); return 0; } /* uppg2f.c */ #include #include int main() { int heltal; printf("Skriv ett tresiffrigt heltal: "); scanf("%d", &heltal); if ( ( heltal / 100 ) == ( heltal % 10 ) ) { printf("Det var visst ett spegeltal!\n"); } else { printf("Nä, nä! Det var inget spegeltal.\n"); } getch(); return 0; } /* uppg2g.c */ #include #include int main() { char bokstav; printf("Skriv en stor bokstav: "); bokstav = getchar(); printf ("Här kommer switch-lösningen\n"); /* Lösning med switch-sats. Specialbehandla Z */ switch ( bokstav ) { case 'Z': puts("Detta är den sista stora bokstaven!"); break; default: printf("Nästa är %c\n", bokstav + 1); } printf("Här kommer if-lösningen\n"); /* Lösning med if-sats, samma effekt som ovan */ if ( bokstav == 'Z' ) { printf("Detta är den sista stora bokstaven!\n"); } else { printf("Nästa är %c\n", bokstav + 1); } getch(); return 0; } /* uppg2h.c */ #include int main() { int sekunder; int timme, minut, sekund; /* Läs in startvärde INNAN loopen */ printf("Ge dagtid i sekunder: "); scanf("%d", &sekunder); while ( sekunder != 0 ) { timme = sekunder / 3600; minut = sekunder % 3600 / 60; sekund = sekunder % 60; printf("Klockan var %02d : %02d : %02d\n", timme, minut, sekund); /* Läs in nästa värde INNAN nästa loopsteg */ printf("Ge dagtid i sekunder: "); scanf("%d", &sekunder); } return 0; } /* uppg2i.c */ #include #include int main() { char ch_10, ch_1; int int_10, int_1, resultat; printf("Ge 10-talssiffra: "); ch_10 = getchar(); getchar(); /* rensa undan ENTER */ printf("Ge 1-talssiffra: "); ch_1 = getchar(); getchar(); /* rensa undan ENTER */ int_10 = ( ch_10 - '0' )*10; int_1 = ch_1 - '0'; resultat = 25*( int_10 + int_1 ); printf("%c%c * 25 = %d\n", ch_10, ch_1, resultat ); getch(); return 0; } /* upg2j.c */ #include #include /* MIN, MAX för heltal */ #include /* MIN, MAX för flyttal */ #include int main() { /* char */ printf("%s%d\n", "CHAR_MIN = ", CHAR_MIN); printf("%s%d\n", "CHAR_MAX = ", CHAR_MAX); /* int */ printf("%s%d\n", "INT_MIN = ", INT_MIN); printf("%s%d\n", "INT_MAX = ", INT_MAX); /* long */ printf("%s%ld\n", "LONG_MIN = ", LONG_MIN); printf("%s%ld\n", "LONG_MAX = ", LONG_MAX); /* float */ printf("%s%e\n", "FLT_MIN = ", FLT_MIN); printf("%s%e\n", "FLT_MAX = ", FLT_MAX); /* double */ printf("%s%e\n", "DBL_MIN = ", DBL_MIN); printf("%s%e\n", "DBL_MAX = ", DBL_MAX); /* long double */ printf("%s%Le\n", "LDBL_MIN = ", LDBL_MIN); printf("%s%Le\n", "LDBL_MAX = ", LDBL_MAX); getch(); return 0; }