Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

28.05.2016, 17:44. Просмотров 156. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2016, 17:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на функцию (C++):

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

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

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

Передать в неуправляемую функцию указатель на указатель - C++
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr) { FUNC((int **)ptr); ...

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

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

Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) - C++
Подскажите как передать указатель на файл в функцию, как вернуть указатель на файл из функции. void Open() // из этой функции вернуть...

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...

Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? - C++
Собсно. То есть ребята, вот пример отсюда: http://www.cplusplus.com/reference/algorithm/count_if/ // count_if example #include...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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