nefunkcna fcia (C)
pritom su vsetky fcie takmer identicke (co sa tyka parametrov)
zdrojovy kod programu:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DLZKA 20
#define POCET 30
#define SUBOR "znamky.txt"
void nacitaj(float **znamky, char meno[], int *pocet, float *sucet);
void uloz(float **znamky, char meno[], int pocet);
void vypis(float **znamky, char meno[], int pocet, float sucet);
int main(void) {
// deklarovanie premennych
struct predmet {
float *znamky;
char meno[DLZKA];
int pocet;
float sucet;
} sjl, mat;
// nazvy predmetov
strcpy(sjl.meno, "Slovencina");
strcpy(mat.meno, "Matematika");
// nacitanie znamok
nacitaj(&sjl.znamky, sjl.meno, &sjl.pocet, &sjl.sucet);
nacitaj(&mat.znamky, mat.meno, &mat.pocet, &mat.sucet);
// ulozenie znamok
uloz(&sjl.znamky, sjl.meno, sjl.pocet);
uloz(&mat.znamky, mat.meno, mat.pocet);
// vypisanie znamok
vypis(&sjl.znamky, sjl.meno, sjl.pocet, sjl.sucet);
vypis(&mat.znamky, mat.meno, mat.pocet, mat.sucet);
// uvolnenie pamete
free(sjl.znamky);
free(mat.znamky);
return 0;
}
void nacitaj(float **znamky, char meno[], int *pocet, float *sucet) {
if ((*znamky = malloc(POCET * sizeof(float))) == NULL) {
printf("Chyba pri pridelovani pameti!\n");
exit(1);
}
float pom;
int i = 0;
*sucet = 0;
printf("\n%s\n", meno);
printf("Zadajte, prosim vase znamky:\n");
while (scanf("%f", &pom) == 1) {
if (pom >= 1 && pom <= 5) {
*sucet += pom;
(*znamky)[i++] = pom;
if (i % POCET)
if ((*znamky = realloc(*znamky, (POCET + i) * sizeof(float))) == NULL) {
printf("Chyba pri pridelovani pameti!\n");
exit(1);
}
} else {
printf("Cislo %3.2f neni znamka!\n", pom);
}
}
*pocet = i;
return;
}
// funkcia je este nedorobena..ale mala by byt funkcna
void uloz(float **znamky, char meno[], int pocet) {
FILE *f;
int i;
if ((f = fopen(SUBOR, "a")) == NULL) {
printf("Chyba pri otvarani suboru!\n");
exit(1);
}
for (i = 0; i < pocet; i++) {
fprintf(f, "%d\n", (*znamky)[i]);
}
if (fclose(f) == EOF)
printf("Chyba pri zatvarani suboru!\n");
return;
}
void vypis(float **znamky, char meno[], int pocet, float sucet) {
int i;
printf("\n%s", meno);
printf("\nVypisanie znamok, pocet=%d:\n", pocet);
for (i = 0; i < pocet; i++) {
printf("%3.2f\n", (*znamky)[i]);
}
printf("Vas priemer je %3.2f.\n", sucet / pocet);
return;
}
Pre pridávanie komentárov sa musíte prihlásiť.
PS: najlahsie chyby sa hladaju najtazsie ;)