Lösningsförslag till datorövning 2 i Programmeringsmetodik /* Uppg2a.c */ #include int main() { int tal, *talpek; printf("Tal : "); scanf("%d", &tal); /* sätt talpek att peka på tal */ talpek = &tal; /* skriv ut det som talpek pekar på */ printf("Tal : %d\n", *talpek); return 0; } /* Uppg2b.c */ void medsprid(float v[], int nr, float *medp, float *spridp) { int i; float sum, min, max; /* startvärden med första elementet */ sum = min = max = v[0]; /* resterande element */ for (i = 1; i < nr; i++) { sum += v[i]; if (v[i] < min) min = v[i]; else if (v[i] > max) max = v[i]; } /* tilldela parametrarna värden */ *medp = sum / nr; *spridp = max - min; } #include int main() { float med, sprid, vek[5] = {2.3, 1.2, 3.4, 5.6, 4.5}; medsprid(vek, 5, &med, &sprid); printf("Medel : %.2f\n", med); printf("Spridning : %.2f\n", sprid); return 0; } /* Uppg2c.c */ #include #include int main() { float *fp; /* allokera minne */ fp = malloc(sizeof(float)); /* läs tal */ printf("Reellt tal : "); scanf("%f", fp); /* skriv ut 3*talet */ printf("Tre ggr talet : %f", 3 * (*fp)); /* frigör minne */ free(fp); fp = NULL; return 0; } /* Uppg2d.c */ #include #include int main() { char *sfp, *sep, *tp; /* allokera minne */ sfp = calloc(31, sizeof(char)); sep = calloc(31, sizeof(char)); /* läs namn */ printf("Förnamn : "); gets(sfp); printf("Efternamn : "); gets(sep); /* ställ om pekare */ tp = sep; sep = sfp; sfp = tp; /* skriv ut strängarna nu*/ printf("Förnamn : %s\n", sfp); printf("Efternamn : %s\n", sep); /* frigör minne */ free(sfp); sfp = NULL; free(sep); sep = NULL; return 0; } /* Uppg2e.c */ #include #include int main() { struct mes { int nr; float x; struct mes *next; } *mesp = NULL, *tp; int lnr; float sum; /* läs första */ printf("Mätnr : "); scanf("%d", &lnr); while (lnr != 0) { /* allokera minne */ tp = malloc(sizeof(struct mes)); /* Ge posten värden */ tp->nr = lnr; printf("X : "); scanf("%f", &tp->x); tp->next = mesp; /* sätt mesp att peka på sist instoppade länken */ mesp = tp; /* läs nästa */ printf("Mätnr : "); scanf("%d", &lnr); } /* skriv ut x, summera, räkna och frigör minne*/ lnr = 0; sum = 0; while (mesp != NULL) { printf("%f\n", mesp->x); lnr++; sum += mesp->x; tp = mesp; mesp = mesp->next; free(tp); tp = NULL; } /* skriv medel */ printf("Medel : %f\n", sum / lnr); return 0; } /* Uppg2f.c */ #include #include struct mes { int nr; float x; struct mes *next; }; float search(int snr, struct mes *tp) { while (tp != NULL && snr != tp->nr) { tp = tp->next; } return tp->x; } int main() { struct mes *mesp = NULL, *tp; int lnr; FILE *tsin; tsin = fopen("xindata.txt","r"); /* läs från fil och skriv i lista */ while (fscanf(tsin, "%d", &lnr) != EOF) { /* allokera minne */ tp = malloc(sizeof(struct mes)); /* Ge posten värden */ tp->nr = lnr; fscanf(tsin, "%f", &tp->x); tp->next = mesp; /* sätt mesp att peka på sist instoppade länken */ mesp = tp; } printf("Sökt nr : "); scanf("%d", &lnr); printf("Sökt x : %f\n", search(lnr, mesp)); return 0; }