0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 15
1

Неинициализированные переменные

03.04.2020, 20:59. Показов 422. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте. Возникла проблема с инициализацией переменных и конструкторов производного класса, из-за чего неправильно работает вычисление средней оценки студента. Я новичок, делаю задание по образцу и в нем производный класс выглядел так, хотя понимаю, что это всего лишь шаблон.. Можете пожалуйста ответить, желательно исправленным кусочком кода, как записать правильно в данном случае, в чем принцип? Заранее спасибо

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
students.h
class students
{
private:
protected:
    char fio[100];
    int numberphone;
    int id;
public:
    static int count;
    students() :numberphone(0)
    {
        fio[0] = 0;
        id = 0;
    }
    students(char* c, int b) :numberphone(b)
    {
        strcpy_s(fio, c); 
        id = count; 
        count++;
    }
    students(students &ff) : numberphone(ff.numberphone)
    {
        strcpy_s(fio, ff.fio); 
        id = count; 
        count++;
    }
    students operator=(students & ff) {
        if (this != &ff)
        {
            strcpy_s(fio, ff.fio); 
            numberphone = ff.numberphone;
        }
        return *this;
    }
     
    //students operator+(students ff);
    virtual void Display(HWND);
    void Input(FILE* fin);
};
class Examsstudents :public students
{
private:
    int n; // количество оценок
    int balls[10]; // оценки 
    char exams;
public:
    double Average() // вычисление средней оценки
    {
        double k = 0;
        for (int i = 0; i < n; i++)
            k += balls[i];
        return k / n;
    }
    Examsstudents() :students() {}
    Examsstudents(char* c, int b) :students(c,b) {}
        
    Examsstudents(Examsstudents& ff) :students(ff.fio, ff.numberphone) {}
    Examsstudents operator=(Examsstudents &ff) {
        char* fio = ff.fio; numberphone = ff.numberphone;
        return *this;
    }
    void Display(HWND);
};
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
students.cpp
#include <windows.h>
#include <stdio.h>
#include <string>
#include "resource.h"
#include "students.h"
 
const int MAX_COUNT = 10;
 
students *mfrac[MAX_COUNT];
 
//int count=0;
students test;
int WINAPI fn(HWND hwnd, int cmd, WPARAM wp, LPARAM lp)
{
    switch (cmd)
    {
    case WM_INITDIALOG:
        SetDlgItemText(hwnd, IDC_FIO,"Иванов");
        SetDlgItemInt(hwnd, IDC_NUMBERPHONE, 3, true);
        SetDlgItemText(hwnd, IDC_SUBJECT,"Физика");
        SetDlgItemInt(hwnd, IDC_MARK, 5, true);
        SetDlgItemInt(hwnd, IDC_KOL, 3, true);
        students::count = 0;
        //mfrac[i]->count=0;
        return 1;
    case WM_CLOSE:
        for (int i = 0; i < students::count; i++)
            delete mfrac[i];
        EndDialog(hwnd, 3);
        return 1;
    case WM_SIZE:
        InvalidateRect(hwnd, NULL, false);
        return 1;
    case WM_COMMAND:
        switch (LOWORD(wp))
        {
        case IDOK:
            SendMessage(hwnd, WM_CLOSE, 0, 0);
            return 1;
        case IDC_CREATE:
        {
            if (students::count < MAX_COUNT - 1)
            {
                char fi[100];//фио
                GetDlgItemText(hwnd, IDC_FIO, fi, 100);
                int num = GetDlgItemInt(hwnd, IDC_NUMBERPHONE, NULL, true);//номер
                mfrac[students::count - 1] = new students(fi, num);
                //count++;
            }
            InvalidateRect(hwnd, NULL, true);
            return 1;
        }
        case IDC_CREATE2:
        {
            if (students::count < MAX_COUNT - 1)
            {
                int mar  = GetDlgItemInt(hwnd, IDC_MARK, NULL, true); //mark
                char sub[100]; //subject
                GetDlgItemText(hwnd, IDC_SUBJECT, sub, 100);
                mfrac[students::count - 1] = new Examsstudents(sub,mar);
                //count++;
            }
            InvalidateRect(hwnd, NULL, true);
            return 1;
        }
        case IDC_AVERAGE: 
            double k = 0;
        {
                if (students::count < MAX_COUNT - 1)
                    k = static_cast<Examsstudents*>(mfrac[students::count - 1])-> Average();
                
            char t[50];
            sprintf_s(t, "Средняя оценка=%6.2lf", k);
            MessageBox(hwnd, t, "Средняя оценка", MB_OK);
        }
        return 1;
        }
        return 0;
        
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
 
        for (int i = 0; i < students::count; i++)
            mfrac[i]->Display(hwnd);
 
        EndPaint(hwnd, &ps);
    }
    return 1;
    }
    return 0;
    
}
int WINAPI WinMain(HINSTANCE hi, HINSTANCE, LPSTR, int)
{
    return DialogBox(hi, "SIMPLE", NULL, (DLGPROC)fn);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2020, 20:59
Ответы с готовыми решениями:

Неинициализированные переменные
пишет типа не инициализированы d1 и d2,хотя они объявлены#include &quot;iostream&quot; using namespace std;...

Ошибка: неинициализированные переменные
Требовалось оформить класс ORDER, ошибка на 103-ей строке про неинициализированные переменные,...

Неинициализированные локальные переменные
Меня интересует как обходить данные ошибки. В чем соль ошибок? Проблема даже не в том что они...

Ошибка, указывающая на неинициализированные переменные
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; int main() { setlocale(0, &quot;&quot;);...

6
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
03.04.2020, 21:07 2
Цитата Сообщение от Elizavettt Посмотреть сообщение
Возникла проблема с инициализацией переменных и конструкторов производного класса
Где конкретное описание проблемы? Как проявилась проблема? О каких именно переменных идет речь?

Цитата Сообщение от Elizavettt Посмотреть сообщение
неправильно работает вычисление средней оценки студента
О каком вычислении средней оценки может идти речь, если у вас нигде не вводятся вообще никакие оценки?
0
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,768
03.04.2020, 21:16 3
Добавлено через 3 минуты
Цитата Сообщение от Elizavettt Посмотреть сообщение
k = static_cast<Examsstudents*>(mfrac[students::count - 1])-> Average();
А вы уверены в корректности этого каста, ведь у вас есть
mfrac[students::count - 1] = new students(fi, num);
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 15
03.04.2020, 21:36  [ТС] 4
Цитата Сообщение от zayats80888 Посмотреть сообщение
Добавлено через 3 минуты

А вы уверены в корректности этого каста, ведь у вас есть
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
О каком вычислении средней оценки может идти речь, если у вас нигде не вводятся вообще никакие оценки?
у меня оконное приложение(в первом сообщении только 2/5 файлов проекта). признаю, что не до конца понимаю, как оно работает, но предполагаю, что оценки берутся из соответствующего текстового поля IDC_MARK..
Цитата Сообщение от Elizavettt Посмотреть сообщение
case IDC_CREATE2:
        {
            if (students::count < MAX_COUNT - 1)
            {
                int mar  = GetDlgItemInt(hwnd, IDC_MARK, NULL, true); //mark
                char sub[100]; //subject
                GetDlgItemText(hwnd, IDC_SUBJECT, sub, 100);
                mfrac[students::count - 1] = new Examsstudents(sub,mar);
                //count++;
            }
            InvalidateRect(hwnd, NULL, true);
            return 1;
        }
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Где конкретное описание проблемы? Как проявилась проблема? О каких именно переменных идет речь?
средняя оценка всегда 0. int n, int balls[10] и char exams остались не инициализированы.
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
03.04.2020, 21:41 5
Цитата Сообщение от Elizavettt Посмотреть сообщение
что оценки берутся из соответствующего текстового поля IDC_MARK..
То, что в вашем коде берется из поля IDC_MARK, передается вторым параметром в конструктор Examsstudents, а оттуда - вторым параметром в конструктор students. То есть IDC_MARK - это номер телефона студента. Это то, что написано в вашем коде.

И никакого ввода оценок в вашем коде нет. И попыток инициализации int n, int balls[10] в вашем коде нет тоже.
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 15
03.04.2020, 21:51  [ТС] 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И никакого ввода оценок в вашем коде нет.
но при этом кнопка "показать данные об экзамене" выводит предмет и оценку, а не фио и номер. почему тогда так?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И попыток инициализации int n, int balls[10] в вашем коде нет тоже.
нет, потому что не получилось правильно. это файлы при котором программа хоть как-то запускается. помогите, пожалуйста, наглядно с исправлением кода
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
03.04.2020, 22:32 7
Цитата Сообщение от Elizavettt Посмотреть сообщение
но при этом кнопка "показать данные об экзамене" выводит предмет и оценку, а не фио и номер. почему тогда так?
Я не вижу в вашем коде реализации кнопки "показать данные об экзамене", но несложно догадаться, эта кнопка выводит именно фио и номер телефона. Просто вы в "фио" запихали "предмет", а в "номер телефона" запихали "оценку", как я уже объяснил выше.

Цитата Сообщение от Elizavettt Посмотреть сообщение
помогите, пожалуйста, наглядно с исправлением кода
У вас пока нечего исправлять. У вас пока вообще нет ввода оценок.

Я вообще не понимаю, что вам нужно сделать. У вас создан некий массив оценок, но никакого ввода этого массива нет. Почему средняя оценка "вычисляется" только для одного студента? Что вообще такое "средняя оценка"? Средняя среди всех студентов? Или средняя для каждого студента?

Сколько можно дылдонить одно и то же: Вы должны здесь изложить подробно расписать постановку задачи, с детальным описанием и примерами входа и выхода. Это примерно полстраницы текста. Где все это?
0
03.04.2020, 22:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2020, 22:32
Помогаю со студенческими работами здесь

Неинициализированные локальные переменные warning C4700
// Laboratornaa.cpp: определяет точку входа для консольного приложения. // #include&quot;stdafx.h&quot;...

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа,...

Переменные,значение функции,вспомогательные переменные.
1)Даны переменные A,B,C.Изменить их значения,переместив их содержимое из A-в B,B-в C,C-в A,и...

Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар
Здравствуйте. Необходимо создать бинарное дерево, по правой ветке - переменные типа инт, по левой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru