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

лабораторная с дин. матрицами - C++

Восстановить пароль Регистрация
 
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
05.05.2011, 13:50     лабораторная с дин. матрицами #1
есть динамическая целочисленная матрица,элементы которой из диопозона -15:88. Найти максимум. Делители максимума перезаписать в другой массив. По параметру передавать адрес первого нечетного числа в матрице.
Я все написал,только что то не правильно работает.

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
void MatrixInput(int** x,int n);
void MatrixOutput(int** x,int n);
int MaximumOfMatrix(int** x,int n);
int CountingDividers(int** x,int n,int max);
void ArrayInput(int** x, int n,int* y,int max);
void ArrayOutput(int* y,int n);
void FirstOddNumber(int** x,int n,int& a,int& b);
 
void main()
{
    int n=5;
    int** x=new int*[n];
    int* y;
 
    int max;
    int m;
    int a=0,b=0;
 
    for(int i=0;i<n;i++)
        x[i]=new int[n];
 
///////////////////////////
 
    MatrixInput(x,n);
    max=MaximumOfMatrix(x,n);
    m=CountingDividers(x,n,max);
    y=new int[m];
    ArrayInput(x,n,y,m);
    FirstOddNumber(x,n,a,b);
 
    cout<<"MATRIX"<<endl;
    MatrixOutput(x,n);
    cout<<endl<<"MAXIMUM IS "<<max<<endl;
    cout<<endl<<"ADDRES OF THE FIRST ODD NUMBER IN MATRIX IS: "<<a<<" "<<b<<endl;
    cout<<endl<<"ARRAY"<<endl;
    ArrayOutput(y,m);
    
 
///////////////////////////
 
    for(int i=0;i<n;i++)
        delete[] x[i];
    delete []x;
    delete[] y;
 
}
 
void MatrixInput(int** x,int n)
{
    srand(time(0));
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            *(*(x+i)+j)=rand()%104-15;
}
 
void MatrixOutput(int** x,int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<*(*(x+i)+j)<<" ";
        cout<<endl;
    }
}
 
int MaximumOfMatrix(int** x,int n)
{
    int max=x[0][0];
 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max<*(*(x+i)+j))
                max=*(*(x+i)+j);
 
    return max;
}
 
 
int CountingDividers(int** x, int n,int max)
{
    int s=0;
 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                s++;
 
    return s;
}
 
void ArrayInput(int** x,int n,int* y,int max)
{
    int c=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                *(y+c++)=*(*(x+i)+j);
}
 
void ArrayOutput(int* y,int n)
{
    for(int i=0;i<n;i++)
        cout<<*(y+i)<<" ";
    cout<<endl;
}
 
void FirstOddNumber(int** x,int n,int& a,int& b)
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(*(*(x+i)+j)%2!=0)
            {
                a=i;
                b=j;
                i=n;
                break;
            }
}
При тестировании программы максимум был 75. Внизу увидел что число -6 делится на 75 без остатка...-_-.это раз.
И два, что функция считает к примеру 5 чисел, которые делятся на макс, а другая функция не записывает числа. В итоге вижу на экране -87841568654....

Если надо коменты оставлю к коду
ПС на завтра нужно(

Добавлено через 2 минуты
вот пример

MATRIX
22 31 79 12 -13
9 19 26 31 65
-3 74 55 -12 81
5 85 -11 74 6
85 51 49 20 37

MAXIMUM IS 85

ADDRES OF THE FIRST ODD NUMBER IN MATRIX IS: 0 1

ARRAY
-3 -842150451 -842150451
Для продолжения нажмите любую клавишу . . .
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2011, 13:50     лабораторная с дин. матрицами
Посмотрите здесь:

C++ Внешний файл и дин.память
C++ Программа через дин.память
C++ дин. матрица
C++ Работа с дин.памятью
2 задачки на дин. пр-е C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
05.05.2011, 15:51     лабораторная с дин. матрицами #2
^Tecktonik_KiLLeR, если вы в функцию передаете двойной указатель и размер матрицы, в функции к матрице можно обращаться по индексам, как и всегда.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
05.05.2011, 19:18  [ТС]     лабораторная с дин. матрицами #3
neske, но это же не ошибка тут..нам препод сказал,если объявить дин матрицу,то нету смысла писать такое к примеру: х[i][j]
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
05.05.2011, 19:22     лабораторная с дин. матрицами #4
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
neske, но это же не ошибка тут..нам препод сказал,если объявить дин матрицу,то нету смысла писать такое к примеру: х[i][j]
С точностью да наоборот!
Нет смысла писать
C++
1
*(*(x+i)+j)
. А преподу по башке за такое издевательство.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
05.05.2011, 19:44  [ТС]     лабораторная с дин. матрицами #5
а как на счет по теме?

Добавлено через 4 минуты
я думаю проблема в этих функциях.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int CountingDividers(int** x, int n,int max)
{
    int s=0;
 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                s++;
 
    return s;
}
 
void ArrayInput(int** x,int n,int* y,int max)
{
    int c=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                *(y+c++)=*(*(x+i)+j);
}
первая считает кол-во этих цифр(которые делятся на макс без остатка), это же кол-во и есть размер Y массива, а вторая функция-заполняет массив этими числами.

Добавлено через 7 минут
я понял..первая функция считает правильно,а вторая, которая заполняет-на самом деле не заполняет.
что такое

Добавлено через 2 минуты
нет..я не прав,вроде не правильно считает...ну кто же помогте
rrrFer
Заблокирован
05.05.2011, 20:28     лабораторная с дин. матрицами #6
вызов функции:
C++
1
ArrayInput(x,n,y,m);
тут m - количество делителей
смотрим реализацию:
C++
1
2
3
4
5
6
7
8
void ArrayInput(int** x,int n,int* y,int max)
{
    int c=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                *(y+c++)=*(*(x+i)+j);
}
тут последний параметр - это максимум, тоесть вместо максимума вы передаете в функцию число делителей, именно по этому массив может заполнится не полностью и вы увидите что-то типа:
-3 -842150451 -842150451
а также, выдать ошибку при выполнении, если количество делителей максимума меньше количестве делителей количества делителей максимума xD.

Добавлено через 1 минуту
работающий код:
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
void MatrixInput(int** x,int n);
void MatrixOutput(int** x,int n);
int MaximumOfMatrix(int** x,int n);
int CountingDividers(int** x,int n,int max);
void ArrayInput(int** x, int n,int* y, int m, int max);
void ArrayOutput(int* y,int n);
void FirstOddNumber(int** x,int n,int& a,int& b);
 
void main()
{
    int n=5;
    int** x;
    x = new int*[n];
    int* y;
 
    int max;
    int m;
    int a=0,b=0;
 
    for(int i=0;i<n;i++)
        x[i]=new int[n];
 
///////////////////////////
 
    MatrixInput(x,n);
    max=MaximumOfMatrix(x,n);
 
    cout<<"MATRIX"<<endl;
    MatrixOutput(x,n);
 
    m=CountingDividers(x,n,max);
    y=new int[m];
    ArrayInput(x,n,y,m,max);
    FirstOddNumber(x,n,a,b);
 
    cout<<endl<<"MAXIMUM IS "<<max<<endl;
    cout<<endl<<"ADDRES OF THE FIRST ODD NUMBER IN MATRIX IS: "<<a<<" "<<b<<endl;
    cout<<endl<<"ARRAY"<<endl;
    ArrayOutput(y,m);
    
 
///////////////////////////
 
    for(int i=0;i<n;i++)
        delete[] x[i];
    delete []x;
    delete[] y;
    cin.get(),cin.get();
 
}   
 
void MatrixInput(int** x,int n)
{
    srand(time(0));
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            *(*(x+i)+j)=rand()%104-15;
}
 
void MatrixOutput(int** x,int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<*(*(x+i)+j)<<" ";
        cout<<endl;
    }
}
 
int MaximumOfMatrix(int** x,int n)
{
    int max=x[0][0];
 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max<*(*(x+i)+j))
                max=*(*(x+i)+j);
 
    return max;
}
 
 
int CountingDividers(int** x, int n,int max)
{
    int s=0;
 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                s++;
 
    return s;
}
 
void ArrayInput(int** x,int n,int* y,int m, int max)
{
    int c=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(max%*(*(x+i)+j)==0)
                *(y+c++)=*(*(x+i)+j);
}
 
void ArrayOutput(int* y,int n)
{
    for(int i=0;i<n;i++)
        cout<<*(y+i)<<" ";
    cout<<endl;
}
 
void FirstOddNumber(int** x,int n,int& a,int& b)
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(*(*(x+i)+j)%2!=0)
            {
                a=i;
                b=j;
                i=n;
                break;
            }
}
хотя, код-то кривой )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 20:28     лабораторная с дин. матрицами
Еще ссылки по теме:

Дин. выделение памяти, конструкторы/деструкторы C++
Дин. массивы. Матрицы C++
C++ Дин. память и таблица NxN

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
05.05.2011, 20:28  [ТС]     лабораторная с дин. матрицами #7
rrrFer, спасибо большое))
Yandex
Объявления
05.05.2011, 20:28     лабораторная с дин. матрицами
Ответ Создать тему
Опции темы

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