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

Ошибка в функции - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 02:44     Ошибка в функции #1
Не могу исправить ошибки можете помочь, тут в dynamic::dynamic(int n, int m, float l) ошибки:
1.error C2109: для индекса требуется массив или указатель
2.error C2660: dynamic::Create: функция не принимает 2 аргументов


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
#include "dynamic.h"
 
using namespace std;
 
dynamic::dynamic()
{
    m = 0;
    n = 0;
    z = NULL;
}
 
dynamic::dynamic(int n, int m, float l)
{
    Create((n,m) true);
 
    z[0][0] = l;
 
    for (int i = 1; i < n; i++)
        for(int j = 1; j < m; j++)
            z[i][j] = (rand() % 99 + 1);
}
 
void dynamic::Write()
{
    printf("Введите размер матрицы: ");
    cin >> n; 
    cin >> m;
}
 
void dynamic::NewMemory (int n, int m)
{
    this->n = n;
    z = new float [n];
 
    this->m = m;
    z = new float [m];
}
 
void dynamic::DelMemory ()
{
    delete []z;
    m = 0;
    n = 0;
    z = NULL;
}
 
void dynamic::Create ()
{
    if (m && n) DelMemory ();
        NewMemory (m,n);
}
 
void dynamic::Destroy ()
{
    if (m && n) DelMemory();
}
 
void dynamic::Napus()
{
    printf("Наша матрица\n");
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(4) << z[i][j] << "   ";
            cout << endl;
    }
    
    if(n%2==1 && m%2==1)
        printf("Середнiй елемент: z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2], n/2, m/2, z[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2], n/2, m/2, z[n/2][m/2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%d\n", (n-1)/2, (m-1)/2, z[(n-1)/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2]);
        printf("z[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]);
    }
 
    system("pause");
}
 
dynamic::~dynamic()
{
    Destroy();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 02:44     Ошибка в функции
Посмотрите здесь:

C++ Функции. Ошибка(
Ошибка в функции C++
C++ Ошибка в Функции
Ошибка в функции C++
Ошибка в функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 06:45  [ТС]     Ошибка в функции #41
StackOverflow, не(

Добавлено через 1 минуту
Croessmah,
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
#pragma once
 
#include <string.h>
#include <iostream>
#include <cstdlib>
#include <clocale>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <ctime>
#include <iomanip>
 
class Dynamic
{
    int         m;
    int         n;
 
    float       **z;
 
    void newMemory();
public:
    Dynamic();
    Dynamic(int,int,float);
    ~Dynamic();
 
    void write();
    void napus();
};
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
#include "dynamic.h"
 
using namespace std;
 
Dynamic::Dynamic() : z ( NULL ), n( n ), m( m )
{
    m = 0;
    n = 0;
 
    newMemory();
}
 
Dynamic::Dynamic(int n, int m, float l) : z ( NULL ), n( n ), m( m )
{
    newMemory();
 
    srand(time(NULL));
 
    for (int i = 1; i < n; i++)
        for(int j = 1; j < m; j++)
            z[ i ][ j ] = (rand() % 99 + 1);    
}
 
void Dynamic::write()
{
    cout << "Введите n и m: ";
    cin >> n >> m;
}
 
void Dynamic::newMemory ()
{
    z = new float * [ n ];
        for (int i = 0; i < n; i++)
            z [ i ] = new float [ m ];
}
 
void Dynamic::napus()
{
    printf("Наша матрица\n");
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(4) << z[ i ][ j ];
            cout << endl;
    }
        
    if(n%2==1 && m%2==1)
        printf("Середнiй елемент: z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2], n/2, m/2, z[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2], n/2, m/2, z[n/2][m/2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%d\n", (n-1)/2, (m-1)/2, z[(n-1)/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2]);
        printf("z[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]);
    }
 
    system("pause");
}
 
Dynamic::~Dynamic()
{
    for ( int j = 0; j < m; j++ )
    {
        delete [] z[ j ];
    }
    delete [] z;
 
    z = 0;
}
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
#include "dynamic.h"
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    Dynamic dynamic;
 
    do
    {
        cout << "Виберiть один з запропонованих варiантiв" << endl;
        cout << "1. Ввести даннi" << endl;
        cout << "2. Вивести даннi" << endl;
        cout << "e. Вихiд" << endl << endl;
 
        int key = _getch ();
 
        switch (key)
        {
            case '1':   dynamic.write();                break;
            case '2':   dynamic.napus();                break;
 
            case 'e':
            {return 0;}
            default:
                cout << "Невiрний вибiр! Натиснiть будь-яку клавiшу для продовження..." << endl;
                _getch ();
        }
 
    } while (true);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
15.11.2013, 06:48     Ошибка в функции #42
tAruuuch,
строки 7 и 8 уже не нужны.
write поправьте, как я говорил. Киньте туда заполнение массива рандомом.
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 06:50  [ТС]     Ошибка в функции #43
StackOverflow, так при запуске выдает ошибку
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
15.11.2013, 06:53     Ошибка в функции #44
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Так, попробуйте сделать так:
Dynamic::Dynamic() : z ( NULL ), n( 0 ), m( 0 )
{}
 
void Dynamic::write()
{
    cout << "Введите n и m: ";
    cin >> n >> m;
 
    newMemory();
    
    for (int i = 1; i < n; i++)
        for(int j = 1; j < m; j++)
            z[ i ][ j ] = (rand() % 99 + 1);
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
15.11.2013, 06:54     Ошибка в функции #45
tAruuuch, а код main где?
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 06:57  [ТС]     Ошибка в функции #46
Croessmah, там 3 кода один dynamic.h второй dynamic.cpp третий test.cpp

я там 3 выложил

Добавлено через 22 секунды
Croessmah,
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
#include "dynamic.h"
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    Dynamic dynamic;
 
    do
    {
        cout << "Виберiть один з запропонованих варiантiв" << endl;
        cout << "1. Ввести даннi" << endl;
        cout << "2. Вивести даннi" << endl;
        cout << "e. Вихiд" << endl << endl;
 
        int key = _getch ();
 
        switch (key)
        {
            case '1':   dynamic.write();                break;
            case '2':   dynamic.napus();                break;
 
            case 'e':
            {return 0;}
            default:
                cout << "Невiрний вибiр! Натиснiть будь-яку клавiшу для продовження..." << endl;
                _getch ();
        }
 
    } while (true);
}
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
15.11.2013, 06:57     Ошибка в функции #47
В main() return 0 не хватает (как то хитро у вас там реализовано...)
Сделайте вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    bool checking = true;
    do {
    ....
        case 'e':
            checking = false;
            break;
        default:
            break;
    ....
    } while ( checking == true )
 
    return 0
}
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 06:58  [ТС]     Ошибка в функции #48
StackOverflow, теперь оно запустило сгенерировало массив но ответы выводит не правельные( и при выходе ошибку выдает и крешит
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
15.11.2013, 07:02     Ошибка в функции #49
Ну уже лучше
Выкладывайте сюда всю "ругань" компилятора!)
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 07:05  [ТС]     Ошибка в функции #50
StackOverflow, вот сейчас запустило рандомит массив, закрывает прогу, но когда выводить центральную точку или две центральные то выводит просто 0
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
15.11.2013, 07:08     Ошибка в функции #51
проверьте, не проверял
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Ваши includ'ы (некоторые не нужны)
class Dynamic
{
    float       **z;
    int         n; 
    int         m;
    void deallocate() ;
    void newMemory();
public:
    Dynamic();
    Dynamic(int,int,float);
    ~Dynamic();
 
    void write();
    void napus();
};
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
#include "dynamic.h"
 
using namespace std;
 
Dynamic::Dynamic() : z ( NULL ), n( 0 ), m( 0 )
{
    newMemory();
}
 
Dynamic::Dynamic(int n_, int m_, float l) : z ( NULL ), n( n_ ), m( m_ )
{
    newMemory();
 
    srand(time(NULL));
 
    for (int i = 1; i < n; i++)
        for(int j = 1; j < m; j++)
            z[ i ][ j ] = (rand() % 99 + 1);    
}
 
void Dynamic::write()
{
    cout << "Введите n и m: ";
    cin >> n >> m;
    newMemory ( ) ;//n и m поменяли, значит нужно перевыделить память
}
 
void Dynamic::newMemory ()
{
    if ( m == 0 || n == 0 )
        return ;
    deallocate ( ) ;//сначала удалим старую память, если такая была выделена
    z = new float * [ n ];
    for (int i = 0; i < n; i++) {
        z [ i ] = new float [ m ];
        for ( int d = 0 ; d < m ; ++ d ) // инициализируем нулями
            z [ i ] [ d ] = 0.0f ;
    }
}
 
void Dynamic::napus()
{
    printf("Наша матрица\n");
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(4) << z[ i ][ j ];
            cout << endl;
    }
        
    if(n%2==1 && m%2==1)
        printf("Середнiй елемент: z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2], n/2, m/2, z[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2], n/2, m/2, z[n/2][m/2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%d\n", (n-1)/2, (m-1)/2, z[(n-1)/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2]);
        printf("z[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]);
    }
 
    system("pause");
}
 
Dynamic::~Dynamic()
{
    deallocate ( ) ; 
    z = 0;
}
 
void Dynamic::deallocate ( ) {
    if ( z == NULL )//если память не выделена, тогда ничего не делаем
        return ;
    for ( int j = 0; j < m; j++ )
    {
        delete [] z[ j ];
    }
    delete [] z;
    z = NULL ;
}
так же нужен оператор присваивания и конструктор копий, а вообще класс построен не ахти

Не по теме:

Добавлено через 33 секунды

Цитата Сообщение от StackOverflow Посмотреть сообщение
В main() return 0 не хватает
он не обязателен в main

StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
15.11.2013, 07:08     Ошибка в функции #52
Ээм, не совсем представляю, о чём вы, к сожалению)
Дело скорее всего уже в вашем алгоритме нахождения.
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 07:11  [ТС]     Ошибка в функции #53
Croessmah, теперь оно не выходить с программы опять, но и матрицу не генерирует( все 0 выводит

Добавлено через 1 минуту
StackOverflow, просто алгорит не в классе работает все нормально находит, да и в классе находило нормально но вот когда дело дошло до конструктора все пошло жопой(
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
15.11.2013, 07:12     Ошибка в функции #54
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
void Dynamic::napus()
{
    if ( z == NULL ) { //Здесь тоже на NULL проверяем
        printf("Матрица еще не создана\n\n"); 
        return ;
    }
    printf("Наша матрица\n");
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(4) << z[ i ][ j ];
            cout << endl;
    }
        
    if(n%2==1 && m%2==1)
        printf("Середнiй елемент: z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2], n/2, m/2, z[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Середнiй елемент:\nz[%d][%d]=%d\nz[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2], n/2, m/2, z[n/2][m/2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%d\n", (n-1)/2, (m-1)/2, z[(n-1)/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", (n-1)/2, m/2, z[(n-1)/2][m/2]);
        printf("z[%d][%d]=%d\n", n/2, (m-1)/2, z[n/2][(m-1)/2]);
        printf("z[%d][%d]=%d\n", n/2, m/2, z[n/2][m/2]);
    }
 
    system("pause");
}
Добавлено через 54 секунды
Цитата Сообщение от tAruuuch Посмотреть сообщение
но и матрицу не генерирует
так у Вас нет кода, вызывающего генерацию матрицы.
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 07:26  [ТС]     Ошибка в функции #55
Croessmah, а если мне нужно в 3 моих конструкторах какие есть по заданию, в каждом разные матрицы генерировать как мне быть? просто гененрировать в той же ф-ции napus() я могу и тогда все будет ровно но тогда конструкторы вообще не нужны тут( а мне нужно реализовать 3 конструктора

Добавлено через 9 минут
вот такое вот кончиное задание

• с тремя аргументами ( третий аргумент - по умолчанию ) - динамично резервирует память на заданное количество строк и столбцов и заполняет матрицу заданным значением; если значение ( третий аргумент ) отсутствует , заполняет матрицу случайными числами из диапазона 0 ... 99;
• с тремя аргументами - динамично резервирует память на заданное количество строк и столбцов и заполняет матрицу значениями из вещественной матрицы , указатель на которую передан в третьем аргументе ;
• с шестью аргументами - динамично резервирует память на заданное количество строк и столбцов и заполняет случайными числами из диапазона 0 ... 99 подматрицу , заданную парой координат (левого верхнего и правого нижнего угла) .
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
15.11.2013, 07:28     Ошибка в функции #56
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Dynamic
{
    float       **z;
    int         n; 
    int         m;
    void deallocate() ;
    void newMemory();
public:
    Dynamic();
    Dynamic(int,int,float);
    Dynamic(int,int);
    ~Dynamic();
    void randomGenerate ( ) ;
    void write();
    void napus();
    void fillMatrix ( float ) ;
};
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
#include "dynamic.h"
 
using namespace std;
 
Dynamic::Dynamic() : z ( NULL ), n( 0 ), m( 0 )
{
    newMemory();
    fillMatrix ( 0.0f ) ;
}
 
Dynamic::Dynamic(int n_, int m_, float l) : z ( NULL ), n( n_ ), m( m_ )
{
    newMemory ( ); 
    fillMatrix ( l ) ;
}
 
Dynamic::Dynamic(int n_, int m_) : z ( NULL ), n( n_ ), m( m_ )
{
    newMemory ( ); 
    randomGenerate ( ) ; 
}
 
void Dynamic::randomGenerate ( ) {
    if ( z == NULL )
        return ;
    srand(time(NULL));
    for (int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            z[ i ][ j ] = (rand() % 99 + 1);   
}
 
 
void Dynamic::write()
{
    cout << "Введите n и m: ";
    cin >> n >> m;
    newMemory ( ) ;//n и m поменяли, значит нужно перевыделить память
}
 
 
 
void Dynamic::newMemory ()
{
    if ( m == 0 || n == 0 )
        return ;
    deallocate ( ) ;//сначала удалим старую память, если такая была выделена
    z = new float * [ n ];
    for (int i = 0; i < n; i++) {
        z [ i ] = new float [ m ];
    }
}
 
void Dynamic::fillMatrix ( float val ) {
    if ( z == NULL )
        return ;
    for (int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            z[ i ][ j ] = val ;  
}
 
 
void Dynamic::napus()
{
    if ( z == NULL ) {
        printf("Матрица еще не создана\n\n"); 
        return ;
    }
    printf("Наша матрица\n");
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(4) << z[ i ][ j ];
            cout << endl;
    }
        
    if(n%2==1 && m%2==1)
        printf("Середнiй елемент: z[%d][%d]=%f\n", n/2, m/2, z[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Середнiй елемент:\nz[%d][%d]=%f\nz[%d][%d]=%f\n", n/2, (m-1)/2, z[n/2][(m-1)/2], n/2, m/2, z[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Середнiй елемент:\nz[%d][%d]=%f\nz[%d][%d]=%f\n", (n-1)/2, m/2, z[(n-1)/2][m/2], n/2, m/2, z[n/2][m/2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%f\n", (n-1)/2, (m-1)/2, z[(n-1)/2][(m-1)/2]);
        printf("z[%d][%d]=%f\n", (n-1)/2, m/2, z[(n-1)/2][m/2]);
        printf("z[%d][%d]=%f\n", n/2, (m-1)/2, z[n/2][(m-1)/2]);
        printf("z[%d][%d]=%f\n", n/2, m/2, z[n/2][m/2]);
    }
 
    system("pause");
}
 
Dynamic::~Dynamic()
{
    deallocate ( ) ; 
    z = 0;
}
 
void Dynamic::deallocate ( ) {
    if ( z == NULL )//если память не выделена, тогда ничего не делаем
        return ;
    for ( int j = 0; j < m; j++ )
    {
        delete [] z[ j ];
    }
    delete [] z;
    z = NULL ;
}
C++
1
2
3
4
5
6
7
8
int main ( ) {
//...
        switch (key)
        {
            case '1':   dynamic.write(); dynamic.randomGenerate ( );    break;
            case '2':   dynamic.napus();                break;
//...
}
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 07:49  [ТС]     Ошибка в функции #57
Croessmah, спасибо работает, а вы бы не могли мне еще чучуть помочь с 2мя конструкторами просто очень нужно сделать и сдать ибо не допуск будет и кранты( а сдавать через 3 часа(

Добавлено через 13 минут
Croessmah, если вам не сложно вы сможете сделать эти 3 конструктора, потому что я очень плохо с ними лажу( сколько сидел разбирался ну вот не могу, а сдать сегодня нужно(, если вам конечно не сложно
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
15.11.2013, 08:21     Ошибка в функции #58
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Dynamic
{
    float       **z;
    int         n; 
    int         m;
    void deallocate() ;
    void newMemory();
    void randomGenerateSubMatrix ( int , int , int , int ) ;
    void fillFromMatrix ( float ** ) ;
public:
    Dynamic(int,int);
    Dynamic(int,int,float);
    Dynamic(int,int,float**);
    Dynamic(int,int,int,int,int,int);
    ~Dynamic();
    void randomGenerate ( ) ;
    void write();
    void napus();
    void fillMatrix ( float ) ;
};
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
#include "dynamic.h"
 
using namespace std;
 
 
Dynamic::Dynamic(int n_, int m_, float l) : z ( NULL ), n( n_ ), m( m_ )
{
    newMemory ( ); 
    fillMatrix ( l ) ;
}
 
void Dynamic::randomGenerateSubMatrix ( int left , int top , int right , int bottom ) {
    srand(time(NULL));
    if ( left >=0 && left < n 
            && right >= left && right < n 
            && top >= 0 && top < m &&
            bottom >= top && bottom < m ) {
        for ( int x = left ; x <= right ; ++x )
            for ( int y = top ; y <= bottom ; ++y )
                z[ x ][ y ] = (rand() % 99 + 1); 
    } 
}
 
void Dynamic::fillFromMatrix ( float ** p ) {
    if ( p == NULL )
        return ;
 
    for ( int i = 0 ; i < n ; ++i )
        for ( int j = 0 ; j < m ; ++j ) 
            z [ i ] [ j ] = p [ i ] [ j ] ;
}
 
 
Dynamic::Dynamic(int n_, int m_) : z ( NULL ), n( n_ ), m( m_ )
{
    newMemory ( ); 
    randomGenerate ( ) ; 
}
Dynamic::Dynamic(int w,int h ,int l ,int t ,int r ,int b): z (NULL) , n(w) , m(h){
    newMemory ( ) ;
    fillMatrix ( 0.0f ) ;
    randomGenerateSubMatrix ( l , t , r , b ) ;
}
 
Dynamic::Dynamic(int w ,int h ,float** p ): z(NULL ) , n(w) , m (h) {
    newMemory ( ) ;
    fillFromMatrix ( p ) ;
}
 
 
void Dynamic::randomGenerate ( ) {
    if ( z == NULL )
        return ;
    srand(time(NULL));
    for (int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            z[ i ][ j ] = (rand() % 99 + 1);   
}
 
 
void Dynamic::write()
{
    cout << "Введите n и m: ";
    int temp_n , temp_m ;
    cin >> temp_n >> temp_m;
    if ( temp_n > 0 && temp_m > 0 ) {
        newMemory ( ) ;//n и m поменяли, значит нужно перевыделить память
        n = temp_n ;
        m = temp_m ;
    }
}
 
 
 
void Dynamic::newMemory ()
{
    if ( m == 0 || n == 0 ) {
        return ;
    }
    deallocate ( ) ;//сначала удалим старую память, если такая была выделена
    z = new float * [ n ];
    for (int i = 0; i < n; i++) {
        z [ i ] = new float [ m ];
    }
}
 
void Dynamic::fillMatrix ( float val ) {
    if ( z == NULL )
        return ;
    for (int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            z[ i ][ j ] = val ;  
}
 
 
void Dynamic::napus()
{
    if ( z == NULL ) {
        printf("Матрица еще не создана\n\n"); 
        return ;
    }
    printf("Наша матрица\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
            cout << setw(4) << z[ j ][ i ];
            cout << endl;
    }
        
    if(n%2==1 && m%2==1)
        printf("Середнiй елемент: z[%d][%d]=%f\n", n/2, m/2, z[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Середнiй елемент:\nz[%d][%d]=%f\nz[%d][%d]=%f\n", n/2, (m-1)/2, z[n/2][(m-1)/2], n/2, m/2, z[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Середнiй елемент:\nz[%d][%d]=%f\nz[%d][%d]=%f\n", (n-1)/2, m/2, z[(n-1)/2][m/2], n/2, m/2, z[n/2][m/2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%f\n", (n-1)/2, (m-1)/2, z[(n-1)/2][(m-1)/2]);
        printf("z[%d][%d]=%f\n", (n-1)/2, m/2, z[(n-1)/2][m/2]);
        printf("z[%d][%d]=%f\n", n/2, (m-1)/2, z[n/2][(m-1)/2]);
        printf("z[%d][%d]=%f\n", n/2, m/2, z[n/2][m/2]);
    }
 
    system("pause");
}
 
Dynamic::~Dynamic()
{
    deallocate ( ) ; 
}
 
void Dynamic::deallocate ( ) {
    if ( z == NULL )//если память не выделена, тогда ничего не делаем
        return ;
    for ( int i = 0; i < n; i++ )
    {
        delete [] z[ i ];
    }
    
    delete [] z;
    
    z = NULL ;
}
а вообще лучше всё переделать, имхо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 08:45     Ошибка в функции
Еще ссылки по теме:

C++ Ошибка в функции!
C++ Ошибка в функции
C++ Ошибка в функции

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

Или воспользуйтесь поиском по форуму:
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
15.11.2013, 08:45  [ТС]     Ошибка в функции #59
Croessmah, мне это сдать, и работать совсем с другим проектом, это было тупое задание прилягающее, а дальше у меня просто улучшение одного проекта

Добавлено через 18 минут
Croessmah, а как в главное программе вывести эти конструкторы?
Yandex
Объявления
15.11.2013, 08:45     Ошибка в функции
Ответ Создать тему
Опции темы

Текущее время: 02:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru