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

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

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

Очень нужен совет где найти ошибки в программе - C++

13.03.2013, 20:06. Просмотров 322. Ответов 4
Метки нет (Все метки)

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
//Obrabotka rezulitatov sessii s ispolizovaniem functii
#include<iostream>
#include<iomanip>
#include<string.h>
#include<assert.h>
#include<conio.h>
#include<cstdlib>
 
using namespace std;
 
void MemoryAllocation(int,int,char**,int**,float *,float *);//Prototip funk. dinamiceskogo videlenie pameati  
void Inputdata(char**,int**,int,int);//Prototip funktii vvod dannih
void StudSortirovka(char**,float*,int);//Prototip funk. sortirovka studentov po uspevaemosti 
void ExSortirovka(int,float*);//Prototip funktii sortirovki distiplin 
void Avball(int**,float*,int,int);//Prototip fun . vicislenie srednego balla kajdogo studenta 
void Avexball(int**,float*,int ,int);//Prototip funk. vicisleniea srednego bala po distipline
void OsvobojdeniePam(int,int,char**,int**,float *,float *);//Prototip funktii osvobojdeniea pameati
 
void main(){
    char**fio={0};
    int** stball=0;
    float* stavball=0;
    float*exavball=0;
    unsigned int ex;
    unsigned int nstud;
    bool flag=false;
    
    do{
    cout<<"Vvedite kolicestvo studentov"<<endl;
    cin>>nstud;
    if(!cin.good())
    { 
        cout<<"Error"<<endl;
        cin.clear();
        cin.ignore(255,'\n');
    }
    else flag=true;}while(!flag);
    flag=false;
    do{
    cout<<"Vvedite kolicestvo examenov"<<endl;
    cin>>ex;
    if(!cin.good())
    {
        cout<<"Error"<<endl;
        cin.clear();
        cin.ignore(255,'\n');
    }
    else flag=true;
    }while(!flag);
    
    MemoryAllocation(nstud,ex,fio,stball,stavball,exavball);
    Avball(stball,stavball,nstud,ex);
    Avexball(stball,exavball,nstud,ex);
    StudSortirovka(fio,stavball,nstud);
    ExSortirovka(ex,exavball);
    OsvobojdeniePam(nstud,ex,fio,stball,stavball,exavball);
 
    system("pause");
    return ;
}
//Opredelenie funktii 
void MemoryAllocation(int nstud,int ex ,char**fio,int**stball,float*stavball,float*exavball)
{
    //Videlenie pameati dlea familii studentov i proverka na ee nalicie
    fio=new char*[nstud];
    if(fio==NULL)
    {
       cout<<"Not enough memory"<<endl;
       exit(1);
    }
    for(int i=0 ; i<nstud;i++)
        if(fio[i]==NULL)
        {
        cout<<"Not enough memory"<<endl;
        exit(1);
        }
    
    //Videlenie pameati dlea otsenok studentov i proverka na ee nalicie
    stball=new int*[nstud];
    if(stball==NULL)
    {
      cout<<"Not enough memory"<<endl;
       exit(1);
    }
    for(int i=0 ; i<ex;i++)
        if(stball[i]==NULL)
        {
         cout<<"Not enough memory"<<endl;
         exit(1);
        }
    //Videlenie pameati pod srednii ball studentov
        stavball=new float [nstud];
        if(stavball==NULL)
        {
          cout<<"Not enough memory"<<endl;
          exit(1);
        }
    //Videlenie pameati pod srednii ball po distipline
        exavball=new float [ex];
        if(exavball==NULL)
        {
          cout<<"Not enough memory"<<endl;
          exit(1);
        }
        
    Inputdata(fio,stball,nstud,ex);
}
 //Opredelenie Funktii vvoda dannih
void Inputdata(char**fio1,int**stball1 ,int nstud1,int ex1 )
{   
    
    bool flag=false;
    do
    {
    cout<<"Vvedite imea studenta"<<endl;
    for(int i=0 ; i<nstud1 ;i++)
    {
        cin>>fio1[i];
        if(!cin.good())
        {
            cout<<"Error"<<endl;
            cin.clear();
            cin.ignore(255,'\n');
        }
        else flag=true;
    }}while(!flag);
    
    for(int i=0;i<nstud1;i++)
     {   flag=false;
      do{
         cout<<"Vvedite otsenki studenta"<<endl;
         for(int j=0;j<ex1;j++)
         {
            cin>>stball1[i][j];
            if(!cin.good())
            { 
                cout<<"Error"<<endl;
                cin.clear();
                cin.ignore(255,'\n');
             }
            else flag=true;
         }}while(!flag);
       }
    cout<<"Familii studentov i ih otsenki"<<endl;
    for(int g=0;g<nstud1;g++)
    {
        cout<<setw(15)<<setiosflags(ios::right)<<fio1[g]<<'  ';
        for(int v=0;v<ex1;v++)
            cout<<setw(3)<<stball1[g][v]<<' ';
        cout<<endl;
    }
    
    }
//Opredelenie Funktii vicisleniea srednego bala studentov 
void Avball(int**stball1,float*stavball1,int nstud,int ex)
{
 
    for(int i=0;i<nstud ;i++)
    {
        int sum=0;
        for(int j=0 ; j<ex ; j++)
            sum+=stball1[i][j];
        stavball1[i]=sum/ex;
    }
}
//Opredelenie funktii vicisleniea srednego bala po distipline
void Avexball(int**stball1,float*exavball,int nstud,int ex)
{  
    for(int i=0; i<ex;i++)
    {
        int sum=0;
        for(int j=0 ; j<nstud ; j++)
            sum+=stball1[i][j];
        exavball[i]=sum/nstud;
    }
}
//Opredelenie funktii sortirovki studentov po sr balu i vivod na ekran
void StudSortirovka(char**fio,float*stavball,int nstud)
{
    for(int k=0 ;k<nstud;k++)
        for(int i=0 ; i<nstud-1;i++)
            if(stavball[i]<stavball[i+1])
            { float tmp=0;
               char*tmp1={0};
              tmp=stavball[i];
              tmp1=fio[i];
              stavball[i]=stavball[i+1];
              fio[i]=fio[i+1];
              stavball[i+1]=tmp;
              fio[i+1]=tmp1;
             }
    for(int d=0; d<nstud ;d++)
        cout<<setw(15)<<setiosflags(ios::right)<<fio[d]<<setiosflags(ios::left|ios::showpoint)<<setprecision(2)<<setw(6)<<stavball[d]<<endl;
}
//Opredelenie funktii sortirovki po disciplinam i vivod na ekran
void ExSortirovka(int ex,float*exavball)
{
    for(int i=0;i<ex;i++)
        for(int j=0;j<ex-1;j++)
            if(exavball[j]<exavball[j+1])
            {
                float tmp3=0;
                tmp3=exavball[i];
                exavball[i]=exavball[i+1];
                exavball[i+1]=tmp3;
            }
    cout<<"Sortirovka distiplin po ubivaniu srednego bala za distiplinu"<<endl;
    for (int d=1;d<=ex;d++)
        cout<<setw(5)<<ex<<setiosflags(ios::showpoint)<<setprecision(2)<<exavball[d]<<endl;
 
}
//Opredelenie funktii osvobojdeniea pameati
void OsvobojdeniePam(int nstud,int ex,char** fio,int**stball,float *stavball,float *exavball)
{
     for(int i=0; i<nstud;i++)
         delete [] fio[i];
     delete [] fio;
     for(int j=0;j<ex;j++)
         delete [] stball[j];
     delete [] stball;
     delete [] stavball;
     delete [] exavball ;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 20:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очень нужен совет где найти ошибки в программе (C++):

Очень нужен Borland C++ 5.0, подскажите где найти можно? - C++
очень нужен Borland C++ 5.0, подскажите где найти можно, уже перелазил в гугле хрен знает сколько страниц

Нужен совет по программе - C++
Здравствуйте, есть задача, дано 2 массива, первый-упорядочен по возрастанию, второй-контейнер элементов, индексы нахождения которых в 1...

Нужен совет в программе! - C++
Програма такого типа: 1.Вивести в левый угол екрана компютера в столбик 5 слов разного цвета! 2.Обеспечить изменение цветах фона экрана...

Нужен совет с исправлением ошибки - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;locale.h&gt; #include &lt;Windows.h&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; using...

Нужен совет, доработка по программе (матрица) - C++
Задаём матрицу 6x6, заполняем числами, если есть повторяющиеся выводим максимальное из них на экран. Вроде как написал программу , но есть...

Нужен совет по исправлению ошибки в функции - C++
Помогите исправить ошибку в функции GetName. Все файлы прилагаю: myclass.h #ifndef MYCLASS_H #define MYCLASS_H class persona {...

4
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
14.03.2013, 00:02 #2
В первой же функции(остальное не смотрел)
Цитата Сообщение от Candace Посмотреть сообщение
void MemoryAllocation(int nstud,int ex ,char**fio,int**stball,float*stavball,float*exavball)
{
* * //Videlenie pameati dlea familii studentov i proverka na ee nalicie
* * fio=new char*[nstud];
* * if(fio==NULL)
* * {
* * * *cout<<"Not enough memory"<<endl;
* * * *exit(1);
* * }
* * for(int i=0 ; i<nstud;i++)
* * * * if(fio[i]==NULL)
* * * * {
* * * * cout<<"Not enough memory"<<endl;
* * * * exit(1);
* * * * }
.//..
}
1) fio, stball, stavball, exavball это копии тех переменных, что находятся в функции main. Присваивая им возвращаемые с помощью new адреса, вы никак не влияете на переменные с аналогичными именами в main.
2) по умолчанию, new не возвращает NULL в случае нехватки памяти, а генерирует исключение. Для того чтобы он вернул NULL, после слова new в скобках пишется слово nothrow.
3) проверки в цикле for вообще не имеют смысла(и здесь и далее)
Исправленный вариант может выглядеть приблизительно так
C++
1
2
3
4
5
6
7
8
9
10
11
void MemoryAllocation(int nstud, int ex, char**& fio, int**& stball, float*& stavball, float*& exavball)
{
    //Videlenie pameati dlea familii studentov i proverka na ee nalicie
    fio = new (nothrow) char* [nstud];
    if(fio == NULL)
    {
        cout << "Not enough memory" << endl;
        exit(1);
    }
//...
}
1
Candace
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 8
14.03.2013, 11:25  [ТС] #3
насчёт проверки на наличие памяти согласна но насчёт переменных это ведь указатели содержащие адреса и все изменения в функции непосредственно выполняются по этим адресам
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
14.03.2013, 12:57 #4
Цитата Сообщение от Candace Посмотреть сообщение
насчёт проверки на наличие памяти согласна но насчёт переменных это ведь указатели содержащие адреса и все изменения в функции непосредственно выполняются по этим адресам
так указатели на что??? У тебя в функции изменяется значение самого указателя, а не данных по нему.
нужно различать, что такое fio, что такое *fio и что такое **fio - это принципиально разные вещи.
Сколько бы "звёздочек" ни стояло в объявлении указателя, при изменении его значения (т.е. без разыменования) он ведёт себя точно также как и любая переменная - передаётся в функцию в виде копии, например.
1
Candace
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 8
14.03.2013, 13:46  [ТС] #5
"И вот тут до неё дошло(((" т.е. получается независимо от типа аргумента только в том случае если он передан по ссылке он имеет непосредственный доступ к оригиналу
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 13:46
Привет! Вот еще темы с ответами:

Подскажите, где ошибки в программе - C++
#include &lt;conio.h&gt;//підключеннябібліотек #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; class Och//класочередь { ...

Где ошибки в программе? Чего не хватает? - C++
Здравствуйте,задали задание в универе: &quot;Заданные два одномерных массива {ai} и {bi} (i=1,2...n). Сформировать два новых массива {ci} и...

Не могу найти ошибку, нужен совет. Строки - C++
Осваиваю перегрузки. Цель состоит в том, чтобы суммировать два объекта. Числовые значения без проблем суммировались, а вот с текстом...

Найти ошибки в программе - C++
Ребята помогите пожалуйста найти ошибки, программа простая с математическими уравнениями, проблема скорее всего в скобках, а может в чём то...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
14.03.2013, 13:46
Ответ Создать тему
Опции темы

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