Найти общее число учащихся школ - C (СИ)
Формулировка задачи:
Известны данные о количестве учащихся в каждом из 15 учебных заведений и о типе этого заведения (школа, техникум или училище). Найти общее число учащихся школ. Количество задается рандомно.
Очень нужно сделать с указателем на функцию.
Решение задачи: «Найти общее число учащихся школ»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ALL 15 /* количество заведений */
typedef struct /* структура на заведение */
{
unsigned short count; /* число учащихся */
unsigned char type; /* переменная под тип заведения */
}Pls;
void average(const Pls x[],const int size); /* прототипы функций */
void generate(Pls x[],const int size);
void (*select[])()={generate,average}; /* массив указателей на функции */
char * type[3]={"Shkola","Technikum","Ucilishe"};
int main(void)
{
Pls p[ALL]; /* массив структур с учебными заведениями */
(*select[0])(p,ALL); /*вызов 0 функции из массива указателей т.е. generate(p,ALL); */
(*select[1])(p,ALL); /*вызов 1 функции из массива указателей т.е. average(p,ALL); */
return 0;
}
void generate(Pls x[],const int size)
{
int i;
srand(time(NULL));
for (i=0;i<size;i++) /* рандомно заполняем тип и количество */
{
x[i].type = rand()%3; /* рандомный тип заведения */
x[i].count = 300+rand()%300; /* рандомное число учащихся */
printf("#%3d Zavedeni: %s Kol-vo: %hu\n",i+1, type[x[i].type],x[i].count);
}
}
void average(const Pls x[],const int size)
{
int sum=0,k=0;
int i;
for (i=0;i<size;i++)
{
if (!(x[i].type)) /* если школа */
{
sum+=x[i].count; /* суммируем учащихся */
k++; /* считаем количество школьников */
}
}
puts("-----------------------------------");
printf("Shkolnikov: %d\n",(sum)); /* вывод количества школьников */
puts("-----------------------------------");
}