Lösningsförslag till datorövning 5, Programmering C. (Senaste ändring av denna fil: 14 december 2006) /* uppg5a.c */ #include #include void skriv_tecken(char tecken, int antal) { int i; for (i = 0; i < antal; i++) printf("%c", tecken); } int main() { char ch; int nr; /* läs tecknet */ printf("Tecken: "); scanf("%c", &ch); /* läs önskat antal */ printf("Antal tecken: "); scanf("%d", &nr); /* anropa utskriftsfunktionen */ skriv_tecken(ch, nr); printf("\n"); getch(); return 0; } /* uppg5b.c */ #include #include int primtal(int tal) { int i; for (i = 2; i < tal; i++) { if (tal % i == 0) return 0; } return 1; } int main() { int nr; /* läs tal */ printf("Tal: "); scanf("%d", &nr); /* anropa testfunktion och skriv resultat */ if (primtal(nr)) printf("Talet %d är ett primtal!\n", nr); else printf("Talet %d är inte ett primtal!\n", nr); getch(); return 0; } /* uppg5c.c */ #include #include double avrundat(double pris) { int kr, ore; /* Dela upp pris i hela kr och ören */ kr = pris; ore = (pris - kr) * 100; /* testa ören och returnera avrundat pris */ if (ore < 25) return kr; else if (ore < 75) return kr + 0.50; else return kr + 1; } int main() { double pris; /* läs pris */ printf("Pris: "); scanf("%lf", &pris); /* anropa avrundningsfunktion och skriv resultat */ printf("Avrundat pris: %.2f\n", avrundat(pris)); getch(); return 0; } /* uppg5c.c, alternativ lösning */ #include #include void avrundat(double *prispek) { int kr, ore; /* Dela upp pris i hela kr och ören */ kr = *prispek; ore = (*prispek - kr) * 100; /* testa ören och returnera avrundat pris */ if (ore < 25) *prispek = kr; else if (ore < 75) *prispek = kr + 0.50; else *prispek = kr + 1; } int main() { double pris; /* läs pris */ printf("Pris: "); scanf("%lf", &pris); /* anropa avrundningsfunktion och skriv resultat */ avrundat(&pris); printf("Avrundat pris: %.2f\n", pris); getch(); return 0; } /* uppg5d.c */ #include #include int vinst(int lott[], int lottnr) { int i; /* Kolla om vinst och returnera vinstnr */ for (i = 0; i < 10; i++) { if (lottnr == lott[i]) return i + 1; } /* nitlott */ return 0; } int main() { int lottvek[10] = {123, 156, 234, 213, 678, 567, 456, 879, 734, 512}; int lottnummer, vinstnummer; /* läs lottnr */ printf("Lottnr: "); scanf("%d", &lottnummer); /* anropa vinstfunktionen och skriv resultat */ vinstnummer = vinst(lottvek, lottnummer); if (vinstnummer != 0) printf("Vinstnummer: %d\n", vinstnummer); else printf("Nitlott!\n"); getch(); return 0; } /* uppg5e.c */ #include #include int pnr_kontroll(char *persnr) { int i; /* Kolla om något tecken felaktigt */ for (i = 0; i < 11; i++) { if (i != 6) { if(persnr[i] < '0' || persnr[i] > '9') return 0; } else { if (persnr[i] != '-' && persnr[i] != '+') return 0; } } /* korrekt personnummer */ return 1; } int main() { char pnr[12]; /* läs personnummer */ printf("Personnummer: "); gets(pnr); /* anropa kontrollfunktionen och skriv resultat */ if (pnr_kontroll(pnr)) printf("Personnumret är ok!\n"); else printf("Felaktigt personnummer!\n"); getch(); return 0; } /* uppg5f.c */ #include #include int pnr_kontroll(char *persnr) { int i; /* Kolla om något tecken felaktigt */ for (i = 0; i < 11; i++) { if (i != 6) { if(persnr[i] < '0' || persnr[i] > '9') return 0; } else { if (persnr[i] != '-' && persnr[i] != '+') return 0; } } /* korrekt personnummer */ return 1; } int datum_kontroll(char *persnr) { int manad, dag; /* konvertera månad till heltal och kolla om felaktig */ manad = (persnr[2]-'0')*10 + persnr[3]-'0'; if (manad < 1 || manad > 12) return 0; /* konvertera dag till heltal och kolla om felaktig */ dag = (persnr[4]-'0')*10 + persnr[5]-'0'; if (dag < 1 || dag > 31) return 0; /* korrekt datum */ return 1; } int main() { char pnr[12]; /* läs personnummer */ printf("Personnummer: "); gets(pnr); /* anropa kontrollfunktionen och skriv resultat */ if (pnr_kontroll(pnr)) printf("Personnumrets tecken är ok!\n"); else printf("Felaktiga tecken i personnumret!\n"); /* anropa datumkontrollfunktionen och skriv resultat */ if (datum_kontroll(pnr)) printf("Personnumrets datum är ok!\n"); else printf("Felaktigt datum i personnumret!\n"); getch(); return 0; } /* uppg5g.c */ #include #include #include #include struct matdata { int nr; double x; }; void slumpa(struct matdata mvek[], int antal) { int i; for (i = 0; i < antal; i++) { mvek[i].nr = 100 + i; mvek[i].x = (rand() % 101 + 100)/10.0; } } void sortera(struct matdata mvek[], int antal) { int i, j; struct matdata temp; for (i = 0; i < antal-1; i++) { for (j = i + 1; j < antal; j++) { if (mvek[j].x < mvek[i].x) { /* byt */ temp = mvek[i]; mvek[i] = mvek[j]; mvek[j] = temp; } } } } void skriv(struct matdata mvek[], int antal) { int i; for (i = 0; i < antal; i++) { printf("\n"); printf("Nr: %d\n", mvek[i].nr); printf("X: %.1f\n", mvek[i].x); } } int main() { struct matdata matvek[10]; srand((unsigned)time(NULL)); slumpa(matvek, 10); printf("Mätdata före sortering:\n"); skriv(matvek, 10); sortera(matvek, 10); printf("\n"); printf("Mätdata efter sortering:\n"); skriv(matvek, 10); getch() return 0; }