b) 2
struct Radio { double effekt; double frekvens; double kanslighet; double latitud; double longitud; };
struct Radio radion = { 1.5, 75.95, 0.13, 59.25393, 15.24727 };
void visa_radio(struct Radio *rp) { printf("Effekt: %f\n", rp->effekt); printf("Frekvens: %f\n", rp->frekvens); printf("Känslighet: %f\n", rp->kanslighet); printf("Position: lat %f, long %f\n", rp->latitud, rp->longitud); }
void las_radio(struct Radio *rp) { printf("Ange radions effekt: "); scanf("%lf", &rp->effekt); printf("Ange frekvens: "); scanf("%lf", &rp->frekvens); printf("Ange känslighet: "); scanf("%lf", &rp->kanslighet); printf("Ange latitud: "); scanf("%lf", &rp->latitud); printf("Ange longitud: "); scanf("%lf", &rp->longitud); }
double avstand(struct Radio r1, struct Radio r2) { return sqrt(pow(57.03*(r1.longitud - r2.longitud), 2) + pow(111.40*(r1.latitud - r2.latitud), 2)); }
int kan_kommunicera(struct Radio r1, struct Radio r2) { return avstand(r1, r2) < 5; }
int main(void) { struct Radio radio1, radio2; las_radio(&radio1); las_radio(&radio2); if (kan_kommunicera(radio1, radio2)) printf("De kan kommunicera.\n"); else printf("De kan inte kommunicera.\n"); return 0; }
#include <stdlib.h> #include <stdio.h> /* Definitioner av posten struct Radio och funktionen las_radio */ int main(void) { FILE* f = fopen("radiosar.txt", "w"); if (f == NULL) { fprintf(stderr, "Kunde inte skriva filen 'radiosar.txt'.\n"); exit(EXIT_FAILURE); } printf("Mata in radioapparater. Avsluta med en radio med effekten 0.\n"); printf("\n"); struct Radio r; las_radio(&r); while (r.effekt > 0) { fprintf(f, "%f %f %f %f %f\n", r.effekt, r.frekvens, r.kanslighet, r.latitud, r.longitud); las_radio(&r); } fclose(f); return EXIT_SUCCESS; }
#include <stdlib.h> #include <stdio.h> #include <math.h> /* Definitioner av posten struct Radio och funktionerna las_radio, avstand och kan_kommunicera */ int main(void) { printf("Mata in en radioapparat!\n"); struct Radio basstationen; las_radio(&basstationen); FILE* f = fopen("radiosar.txt", "r"); if (f == NULL) { fprintf(stderr, "Kunde inte läsa filen 'radiosar.txt'.\n"); exit(EXIT_FAILURE); } struct Radio r; int antal_som_kan_kommunicera = 0; while (fscanf(f, "%lf %lf %lf %lf %lf", &r.effekt, &r.frekvens, &r.kanslighet, &r.latitud, &r.longitud) == 5) { if (kan_kommunicera(basstationen, r)) ++antal_som_kan_kommunicera; } fclose(f); printf("Antal som kan kommunicera: %d\n", antal_som_kan_kommunicera); return EXIT_SUCCESS; }
Om man inte kommer ihåg funktionen fabs kan man skriva så här i stället:#include <stdio.h> #include <math.h> int main() { double t1, t2; printf("Ge två temperaturer: "); scanf("%lf %lf", &t1, &t2); while (t1 != 0.0 && t2 != 0.0) { if (fabs(t1 - t2) > 2.5) printf("Differensen är %f grader! För hög!\n", fabs(t1 - t2)); else printf("Temperaturerna OK!\n"); scanf("%lf %lf", &t1, &t2); } return 0; }
#include <stdio.h> int main() { double t1, t2; printf("Ge två temperaturer: "); scanf("%lf %lf", &t1, &t2); while (t1 != 0.0 && t2 != 0.0) { double differens; if (t1 > t2) differens = t1 - t2; else differens = t2 - t1; if (differens > 2.5) printf("Differensen är %f grader! För hög!\n", differens); else printf("Temperaturerna OK!\n"); scanf("%lf %lf", &t1, &t2); } return 0; }
Kommentarer:#include <stdio.h> #include <math.h> int main() { char personnummer[13 + 2]; /* 19631211-1658 = 13 positioner, plus och \0 */ int personer[2011]; /* Slöseri med plats, men det blir enklare så! */ for (int i = 1900; i < 2011; ++i) personer[i] = 0; printf("Ange ett personnummer (avsluta med tom rad): "); fgets(personnummer, sizeof personnummer, stdin); while (personnummer[0] != '\n') { int artal; sscanf(personnummer, "%4d", &artal); ++personer[artal]; printf("Ange ett personnummer (avsluta med tom rad): "); fgets(personnummer, sizeof personnummer, stdin); } int max_ar = 1900; for (int i = 1901; i < 2011; ++i) if (personer[i] > personer[max_ar]) max_ar = i; printf("Flest personer var födda %d.\n", max_ar); return 0; }