Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jim_Hunter
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 17
#1

Указатель на функцию - C++

28.05.2016, 17:44. Просмотров 138. Ответов 5
Метки нет (Все метки)

Преподаватель сказал написать еще одну функцию, и добавить указатель на функцию.
Объясните пожалуйста по-проще что мне надо сделать, вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
 
#define SUBJECT 5
 
 
typedef struct
{
    char FIO[256];
    float Ball[SUBJECT]; // оценки по каждому из предметов
    float Reit; // Рейтинг
}student;
 
typedef struct
{
    int Students; // количество студентов
    char predm[5][255]; // названия предметов
    student *st; // указатель на массив студентов
    float sr_bal; // средний балл студента
}Group;
 
void Vvod(Group *mag)
{
    printf(" Колличество студентов: ");
    scanf_s("%d", &mag->Students);
    getchar();
 
    if (mag->Students > 0)
    {
        mag->st = (student*)malloc(sizeof(student)* mag->Students);
        if (!mag->st)
        {
            printf("Ошибка");
            mag->Students = 0;
            return;
        }
        printf(" Введите %d предметов: \n\n", SUBJECT);
        for (int i = 0; i < SUBJECT; i++)
        {
            printf("\t Предмет %d: ", i + 1);
            gets(mag->predm[i]);
        }
        printf("\n\n\t Информация о студентах:\n");
        for (int i = 0; i < mag->Students; i++)
        {
            printf(" Студент %d \n", i + 1);
            printf("\t ФИО: ");
            gets(mag->st[i].FIO);
            for (int j = 0; j < SUBJECT; j++)
            {
                printf("\t\t Балл по %s: ", mag->predm[j]);
                scanf_s("%f", &mag->st[i].Ball[j]);
                getchar();
            }
        }
        printf("\n Ввод завершен \n");
 
        return;
 
    }
    else
    {
        printf(" Ошибка: Неверное введено колличество студентов");
 
        mag->Students = 0;
    }
}
 
 
float Raschet(Group *mag)
{
    float sum = 0 ; // суммарный рейтинг студентов
    for (int i = 0; i < mag->Students; i++)
    {
        printf(" ФИО студента: ");
        puts(mag->st[i].FIO);
        mag->st[i].Reit = 0;
        for (int j = 0; j < SUBJECT; j++)
        {
            printf("\t%f\n", mag->st[i].Ball[j]);
            mag->st[i].Reit += mag->st[i].Ball[j];
        }
        mag->st[i].Reit /= (float)SUBJECT; // формула рейтинга: R = среднее баллов по предметам
        sum += mag->st[i].Reit;
 
        printf("\t Рейтинг: %f\n", mag->st[i].Reit);
    }
    return sum /= mag->Students;
}
 
 
int main()
{
 
    setlocale(0,"");
 
    Group magistratura={0} ;
 
    bool finish = false;
 
    while(!finish)
    {
    printf("\n Введите команду \n");
 
    printf("1 - ввести информацию о группе \n");
    printf("2 - расчет рейтинга \n");
    printf("3 - выход \n\n");
    printf("\t ->");
    
    int key = _getche();
    
    if(key =='3')
    {
        finish=true;
        break;
    }
 
        switch (key)
        {
 
        case '1': Vvod(&magistratura);
            break;
 
        case '2':
            printf("Рейтинг :%f\n", Raschet(&magistratura));
            break;
 
        default:
            printf("\n - Некорректный ввод \n");
        }
 
    }
 
    if (magistratura.Students)
        free(magistratura.st);
 
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2016, 17:44     Указатель на функцию
Посмотрите здесь:

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Шаблоны функции и указатель на функцию передаваемый в функцию - C++
Привет! Вопрос такой: Если я пишу сортировку, например, bubbleSort и хочу помимо массива и его размера передать ещё и указатель на функцию,...

Указатель на функцию - C++
подскажите пожалуйста в чём ошибка: объявляю указатель int (analizator::*q)(char); потом пытаюсь через него вызвать функцию ...

С++ - указатель на функцию. - C++
Вот такой вот кодик: int main() { int *x = (int*) printf(&quot;%s&quot;,&quot;fuck!!!&quot;); cout &lt;&lt; *x; getch();

Указатель на функцию - C++
Проверял, что быстрее работает и столкнулся с дилеммой - по идее, ссылаться на функцию через указатель быстрей, чем просто вызывать ее, но...

Указатель на функцию - C++
float ( *f)(float, float); float rosenbrock(float x1, float x2) { return 100*pow((x2-x1*x1),2)+pow((1-x1),2); } ...

Указатель на функцию - C++
Доброго времени суток, коллеги! Навоял код - хочу с помощью указателя на функцию вывести значения массива с их адресами, но выводит...

Указатель на функцию - C++
Уже сломал всю голову, на что здесь может ругаться компилятор, выдавая такую ошибку? main.cpp:23: error: invalid use of non-static...

Указатель на функцию - C++
Доброго времени суток! Возник такой вопрос, вот есть прототип функции: auto function(const string&amp; str) -&gt; decltype(str.size()); ...

Указатель на функцию - C++
Такая сточка кода: double (*ptr)(int, int); в контексте: double foo(int x, int y) { return x+y; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1853 / 1271 / 290
Регистрация: 05.06.2014
Сообщений: 3,627
28.05.2016, 21:30     Указатель на функцию #2
Причем тут раздел по плюсам, если код на чистом Си?
C++
1
2
void (*array[2])(Group *mag)={&Vvod,&Raschet};
(*array[key-'1'])(&magistratura);
Raschet при этом должен возвращать тоже что и Vvod. "Еще одну функцию" уже сочиняйте сами.
Jim_Hunter
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 17
29.05.2016, 23:15  [ТС]     Указатель на функцию #3
А как мне вызвать через него в саse 2 Raschet а в case 3 какую нибудь другую функцию?
Renji
1853 / 1271 / 290
Регистрация: 05.06.2014
Сообщений: 3,627
29.05.2016, 23:18     Указатель на функцию #4
Цитата Сообщение от Jim_Hunter Посмотреть сообщение
А как мне вызвать через него в саse 2 Raschet а в case 3 какую нибудь другую функцию?
Это вместо switch/case.
Jim_Hunter
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 17
29.05.2016, 23:33  [ТС]     Указатель на функцию #5
Спасибо!!!))) не подскажешь, удаление памяти я правильно сделал?
Renji
1853 / 1271 / 290
Регистрация: 05.06.2014
Сообщений: 3,627
29.05.2016, 23:37     Указатель на функцию #6
Не вникал, но проблем с удалением не вижу.
Yandex
Объявления
29.05.2016, 23:37     Указатель на функцию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru