Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
bujlka
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 18
1

Дана целочисленная прямоугольная матрица

22.11.2012, 19:37. Просмотров 1467. Ответов 7
Метки нет (Все метки)

Вообщем сделал 2\3 задания не могу разобраться с последним пунктом

Вот собственно код
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
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "iomanip"
#include "ctime"
using namespace std;
void rand(int **arr, int n, int m)
{
    srand(time(NULL));
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            *(*(arr + i) + j) = rand() % 50;
    }
}
void print(int **arr, int n, int m)
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            cout << setw(3) << *(*(arr + i) + j);
        cout << "\n\n";
    }
}
int max_count(int *arr, int n)
{
    int max = arr[0];
    for(int i = 1; i < n; i++)
    {
        if(arr[i] > max)
            max = arr[i];
    }
    return max;
}
void count_kop(int *arr, int n)
{
    int *res = new int[n];
    int k = 0;
    for(int i = 0; i < n; i++)
    {
        int t = arr[i];
        int count = 0;
        for(int j = 0; j < n; j++)
        {
            if(t == arr[j])
                count++;
        }
        if(count != 1)
            res[k++] = arr[i];
    }
    cout << "\n\nМаксимальное из чисел, встречающихся в заданной матрице более одного раза: ";
    cout << max_count(res,k);
    delete []res;
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");
    int n, m, **arr, *res, k;
    cout << "Введите размер строк: ";
    cin >> n;
    cout << "\n\nВведите размер столбцов: ";
    cin >> m;
    arr = new int*[n];
    for(int i = 0; i < n; i++)
        *(arr + i) = new int[m];
    cout << "\n\nМатрица имеет вид: \n\n";
    rand(arr,n,m);
    print(arr,n,m);
    int count = 0;
    for(int i = 0; i < n; i++)
    {
        bool b = false;
        for(int j = 0; j < m; j++)
        {
            if(arr[i][j] == 0)
                b = true;
        }
        if(!b)
            count++;
    }
    cout << "\n\nКоличество строк, не содержащих нулевых элементов: " << count;
    k = 0;
    res = new int[n * m];
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            res[k++] = arr[i][j];
    }
    count_kop(res,k);
    delete []res;
    for(int i = 0; i < n; i++)
        delete[] arr[i];
    delete []arr;
    _getch();
    return 0;
}
а вот собственно задание
Дана целочисленная прямоугольная матрица . Написать программу, определяющую величины:
1) количество строк, не содержащих ни одного нулевого элемента;
2) максимальное значение из чисел, встречающихся в заданной матрице более одного раза;
3) суммы элементов строк и столбцов матрицы
Прошу помочь с 3 пунктом Кто откликнется заранее огромное спасибо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 19:37
Ответы с готовыми решениями:

Дана целочисленная прямоугольная матрица
Дана целочисленная прямоугольная матрица. Определить: 1) сумму элементов в тех строках, которые...

Дана целочисленная прямоугольная матрица.
Дана целочисленная прямоугольная матрица. Определить: 1.) количество столбцов, содержащих хотя бы...

дана целочисленная прямоугольная матрица
определить -сумму элементов в тех строках,которые содержат хотя бы один отрицательный элемент...

Дана целочисленная прямоугольная матрица
Дана целочисленная прямоугольная матрица.Определить: 1)Количество строк,не содержащих ни одного...

Дана целочисленная прямоугольная матрица
)Дана целочисленная прямоугольная матрица. определить: 1) Количество отрицательных элементов в...

7
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
22.11.2012, 20:17 2
чет я не понял, если всех строк и всех столбцов, то сумма будет равна...или каждого по отдельности?..)
0
bujlka
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 18
22.11.2012, 20:50  [ТС] 3
Походу вообще всех , и всех элементов столбцов и всех элементов строк хД Просто такая супер огромная сумма получается
0
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
22.11.2012, 21:07 4
если мы так посчитаем сумму элементов строк, зачем нам считать сумму элементов столбцов?..)
0
22.11.2012, 21:07
bujlka
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 18
22.11.2012, 22:11  [ТС] 5
Какой проныра а я и не подумал что это одно и тоже наверно я каким-то образом случайно удалил "четных"
так что скорее всего задание выглядит так

суммы элементов четных строк и столбцов матрицы

скорее всего
0
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
22.11.2012, 22:54 6
ну пусть так будет...)
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 "stdafx.h"
#include "iostream"
#include "conio.h"
#include "iomanip"
#include "ctime"
using namespace std;
int Sum (int** arr, int N, int i)
{
    int sum = 0;
    for (int j=0; j<N; j++) 
    {
        sum += arr[j][i];
    }
    return sum;
}
int Sumstr (int** arr, int N, int i)
{
    int sum = 0;
    for (int j=0; j<N; j++) 
    {
        if(j%2!=0)sum += arr[j][i];
    }
    return sum;
}
void rand(int **arr, int n, int m)
{
    srand(time(NULL));
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            *(*(arr + i) + j) = rand() % 50;
    }
}
void print(int **arr, int n, int m)
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            cout << setw(3) << *(*(arr + i) + j);
        cout << "\n\n";
    }
}
int max_count(int *arr, int n)
{
    int max = arr[0];
    for(int i = 1; i < n; i++)
    {
        if(arr[i] > max)
            max = arr[i];
    }
    return max;
}
void count_kop(int *arr, int n)
{
    int *res = new int[n];
    int k = 0;
    for(int i = 0; i < n; i++)
    {
        int t = arr[i];
        int count = 0;
        for(int j = 0; j < n; j++)
        {
            if(t == arr[j])
                count++;
        }
        if(count != 1)
            res[k++] = arr[i];
    }
    cout << "\n\nМаксимальное из чисел, встречающихся в заданной матрице более одного раза: ";
    cout << max_count(res,k);
    delete []res;
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");
    int n, m, **arr, *res, k,sum=0,sumstr=0;
    cout << "Введите размер строк: ";
    cin >> n;
    cout << "\n\nВведите размер столбцов: ";
    cin >> m;
    arr = new int*[n];
    for(int i = 0; i < n; i++)
        *(arr + i) = new int[m];
    cout << "\n\nМатрица имеет вид: \n\n";
    rand(arr,n,m);
    print(arr,n,m);
    int count = 0;
    for(int i = 0; i < n; i++)
    {
        bool b = false;
        for(int j = 0; j < m; j++)
        {
            if(arr[i][j] == 0)
                b = true;
        }
        if(!b)
            count++;
    }
    cout << "\n\nКоличество строк, не содержащих нулевых элементов: " << count<<endl;
    k = 0;
    res = new int[n * m];
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            res[k++] = arr[i][j];
    }
    count_kop(res,k);
    for (int i=0; i<n; i++) //по столбцам
    {
        if(i%2!=0)  sum =sum+ Sum (arr, m, i);
    }
    for (int j=0; j<m; j++) //по строкам
    {
        sumstr += Sumstr (arr, n, j);
    }
    cout <<endl<<endl<< "Sum of the column "<<" = "<< sum << endl;
    cout <<endl<<endl<< "Sum of the strok "<<" = "<< sumstr << endl;
    delete []res;
    for(int i = 0; i < n; i++)
        delete[] arr[i];
    delete []arr;
    _getch();
    return 0;
}
1
bujlka
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 18
23.11.2012, 05:46  [ТС] 7
что-то не так код нормально считает матрицы 5х5 6х6 3х3 а 8х10 которая заданна мне по программе выдает ошибку ( крит эрор) и всё конец останавливается (
Первый этап обработки исключения в "0x0084157e" в "kaaba namba 10 qwe.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfe01". Вот это пишет когда ввожу матрицу х-у а не х-х
0
LVV
132 / 119 / 40
Регистрация: 15.02.2010
Сообщений: 576
23.11.2012, 11:18 8
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
#include "iostream"
#include "iomanip"
#include "ctime"
using namespace std;
 
//глобальные переменные и константы 
int m,n,**arr,h,z,*pov;
 
//прототипы функций
void Arr();
void Print();
void StrNoK(int);
void Pov();
void Max(int);
void SumChStlb();
void SumChStr();
 
int main()
{
    setlocale(0,"");
   
    cout << "Введите количество строк: m=";
    cin >> m;
    cout << "Введите количество столбцов: n=";
    cin >> n;
//определение динамического двумерного массива
    arr = new int*[m];
    for(int i = 0; i < m; i++)
        arr[i] = new int[n];
        
    
    cout << "Введите минимальное значение элемента мавссива (oт 0 до 32768) ";
    cin >> h;
 
    cout << "Введите максимальное значение элемента мавссива (oт "<<h<<" до 32768) ";
    cin >> z;
 
    Arr();
    
    cout << "\n\nМатрица имеет вид: \n\n";
    Print();
 
    int k=0;
    cout << "\n\nЧисло строк, не содержащих " << k << ", равно: ";
    StrNoK(k);
    
    cout << "\n\nЧастота повторений элементов матрицы:\n";
    pov = new int [z+1];
    Pov();
 
    k=1;
    cout << "\n\nMаксмальное значение из чисел,\n"
        <<"встречающихся в заданной матрице более " << k << " раз(a), равно: ";
    Max(k);
 
    cout << "\n\nСуммы элементов четных строк (с четными индексами 0,2,4 и т.д.):\n";
        SumChStr();
 
    cout << "\n\nСуммы элементов четных столбцов (с четными индексами 0,2,4 и т.д.):\n";
        SumChStlb();
    
    cout << endl;
        
        for(int i = 0; i < m; i++)
        delete[] arr[i];
    delete []arr;
    
    system ("pause");
    return 0;
}
 
 
//заполнение (инициалазация) массива значениями
// от h до z включительно
void Arr()
{
    srand(time(NULL));
      for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
        {
           arr[i][j] = h + rand()%(z-h+1);
        }
}
 
//вывод исходного массива
void Print()
{
    for(int i=0; i<m; i++)
    {
        for(int j = 0; j < n; j++)
            cout << setw(6) << arr[i][j];
        cout << endl;
     }
}
 
//число строк без элементов имеющих значение k 
void StrNoK (int k)
{
    int yes=0;
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
            if (arr[i][j]==k)
            {
                yes++;
                break;
            }
    }
cout << m-yes << endl;
}
 
//учет и вывод количества повторений чисел
void Pov()
{
    for(int i=h; i<=z; i++) pov[i]=0;
    cout << endl;
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
            pov[arr[i][j]]++;
    for(int i=h; i<=z; i++)
        cout<<"\""<<i<<"\""<<"-"<<pov[i]<<" раз(a), "; 
}
 
//определение максимального из элементов
//встречающтхся более k раз
void Max(int k)
{
    int max=-1;
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
            if (pov[arr[i][j]]>k)
            {
                max=arr[i][j];
                break;
            }
if (max!=-1)
{
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
            if (arr[i][j]>max && pov[arr[i][j]]>k)
                max = arr[i][j];
                cout << max << endl;
 
}
else 
                cout << "(таких элементов нет)" << endl;
}
 
// суммы четных строк
void SumChStr()
{
    int s;
        for(int i=0; i<m; i+=2)
        {
            s=0;
                for(int j=0; j<n; j++)
                    s+=arr[i][j];
            cout << s << "  ";
        }    
}
 
// суммы четных столбцов
void SumChStlb()
{
    int s;
        for(int j=0; j<n; j+=2)
        {
            s=0;
                for(int i=0; i<m; i++)
                    s+=arr[i][j];
            cout << s << "  ";
        }    
}
1
23.11.2012, 11:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 11:18

Дана целочисленная прямоугольная матрица
Дана целочисленная прямоугольная матрица. 1) Найдите наименьший элемент среди четных строк этой...

Дана целочисленная прямоугольная матрица
Здравствуйте уважаемые программисты. Помогите пожалуйста с заданием. Дана целочисленная...

Дана целочисленная прямоугольная матрица
Дана целочисленная прямоугольная матрица. Упорядочить столбцы целочисленной прямоугольной матрицы...


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

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

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