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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
bujlka
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 18
#1

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

22.11.2012, 19:37. Просмотров 1088. Ответов 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 пунктом Кто откликнется заранее огромное спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 19:37     Дана целочисленная прямоугольная матрица
Посмотрите здесь:

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

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

скорее всего
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 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;
}
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". Вот это пишет когда ввожу матрицу х-у а не х-х
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 11:18     Дана целочисленная прямоугольная матрица
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
LVV
57 / 57 / 4
Регистрация: 15.02.2010
Сообщений: 245
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 << "  ";
        }    
}
Yandex
Объявления
23.11.2012, 11:18     Дана целочисленная прямоугольная матрица
Ответ Создать тему
Опции темы

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