0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
1

Составить массив по указанному правилу

14.10.2019, 21:02. Показов 3699. Ответов 15

Получить массив X1,X2...,Xn по правилу Xi=1, если элемент Ai больше каждого из элементов i-ой строки матрицы, иначе X=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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int i, j, N;
    double S = 0.0;
 
    cout << "\n Input the number of rows and columns N: "; // Начало цикла ввода значений матрицы
    cin >> N;
    int** A = new int* [N];
    for (i = 0; i < N; i++)
    {
        A[i] = new int[100];
        for (j = 0; j < N; j++)
        {
            cout << "\n Input A[i][j]: ";
            cin >> A[i][j];
        }
    }                                                     // Конец цикла 
 
    for (int i = 0; i < N; i++)     // Вывод матрицы
    {
        for (int j = 0; j < N; j++)
        {
            S += A[i][j];           // Суммирование элементов
            cout << A[i][j] << '\t';
        }
        cout << endl;               // Конец вывода матрицы               
    }
    cout << endl;
    double *X = new double[N];
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (A[i][i] > A[i][j])   // Условие: если элемент A[i] больше каждого из элементов i-ой строки, то X[i]=1, иначе X[i]=0 (неправильное)
            {
                X[i] = 1;
            }
            else
            {
                X[i] = 0;
            }
            cout << " X[i]:" << X[i];
        }
    }
    cout << endl;
    cout << "Sum of matrix elements= " << S << endl; // Вывод суммы
    delete[] A;
    delete[] X;
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2019, 21:02
Ответы с готовыми решениями:

Сформировать массив по указанному правилу
Всем привет, помогите пожалуйста решить задание, не понимаю как это реализовать с указанным...

Заполнить двумерный массив по указанному правилу
Нужно заполнить двумерный массив размера 5×4 за правилом: 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 10 0

Построить новый массив по указанному правилу
Нужно создать программу для построения нового массива - b2m-1, b0, b2m-2, b1, …, bm, bm-1, если...

Сформировать новый массив по указанному правилу
Дан массив а0, а1, …, а15. Сформировать новый массив b по правилу: b0=а0* a1, b1=а2* a3, …, b8=а14*...

15
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
21.10.2019, 21:03  [ТС] 2
Получить массив X1,X2...,Xn по правилу Xi=1, если элемент Ai больше каждого из элементов i-ой строки матрицы, иначе X=0. Найти также сумму элементов матрицы. Массив должен быть динамическим и обязательно всё через указатели.

Почему-то первый элемент в массиве X1, X2,...,Xn равен 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
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int i, j, N;
    double S = 0.0;
 
    cout << "\n Input the number of rows and columns N: "; 
    cin >> N;                       // Ввод количества строк и столбцов
    int** A = new int* [N];
    for (i = 0; i < N; i++)
    {
        A[i] = new int[N];
        for (j = 0; j < N; j++)
        {
 
            cin >> *(*(A + i) + j);
        }
    }                                                    
 
    for (int i = 0; i < N; i++)     // Цикл для суммирования элементов
    {
        for (int j = 0; j < N; j++)
        {
            S += *(*(A + i) + j);           // Суммирование элементов
        }               
    }
    cout << endl;
    int* X = new int[N];
    for (int i = 0; i < N; i++)
    {
        double max = *(*(A + i));   // Объявляем переменную max, и присваиваем ей значение A[i][i]
        for (int j = 1; j < N; j++)
        {
            if ((max < *(*(A + i) + j)) & (j != i))
                max = *(*(A + i) + j);
        }
        if (*(*(A + i) + i) > max) // Если элемент A[i][i] больше max
        {
            *(X + i) = 1;       // То Xi=1
        }
        else
        {
            *(X + i) = 0;       // Иначе Xi=0
        }
    }
    for (i = 0; i < N; i++)
        cout << " X[" << i + 1 << "]:" << *(X + i); // Вывод массива Xn
    cout << endl;
    cout << "Sum of matrix elements=" << S << endl; // Вывод суммы
    delete[] A;
    delete[] X;
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
21.10.2019, 21:14  [ТС] 3
Получить массив X1,X2...,Xn по правилу Xi=1, если элемент Ai больше каждого из элементов i-ой строки матрицы, иначе X=0. Найти также сумму элементов матрицы. Всё должно быть выполнено в динамике и обязательно через указатели.

Почему-то при любых тестах первый элемент полученного массива Xn всегда равен 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
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int i, j, N;
    double S = 0.0;
 
    cout << "\n Input the number of rows and columns N: "; 
    cin >> N;                       // Ввод количества строк и столбцов
    int** A = new int* [N];
    for (i = 0; i < N; i++)
    {
        A[i] = new int[N];
        for (j = 0; j < N; j++)
        {
 
            cin >> *(*(A + i) + j); // Ввод значений матрицы
        }
    }                                                    
 
    for (int i = 0; i < N; i++)     // Цикл для суммирования элементов
    {
        for (int j = 0; j < N; j++)
        {
            S += *(*(A + i) + j);           // Суммирование элементов
        }               
    }
    cout << endl;
    int* X = new int[N];
    for (int i = 0; i < N; i++)
    {
      double max = *(*(A + i));     // Объявляем переменную max, и присваиваем ей значение A[i][i]
        for (int j = 1; j < N; j++)
        {
            if ((max < *(*(A + i) + j)) & (j != i))
                max = *(*(A + i) + j);
        }
        if (*(*(A + i) + i) > max)  // Если элемент A[i][i] больше max
        {
            *(X + i) = 1;           // То Xi=1
        }
        else
        {
            *(X + i) = 0;           // Иначе Xi=0
        }
    }
    for (i = 0; i < N; i++)
        cout << " X[" << i + 1 << "]:" << *(X + i); // Вывод массива Xn
    cout << endl;
    cout << "Sum of matrix elements=" << S << endl; // Вывод суммы
    delete[] A;
    delete[] X;
    system("pause");
    return 0;
}
0
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
21.10.2019, 22:03 4
Цитата Сообщение от BlvckSnake Посмотреть сообщение
int** A = new int* [N];
Это, всего лишь, строка, размером N, указателей на int...
Надо еще по каждому указателю выделить память...

C++
1
2
3
4
5
// объявление двумерного динамического массива на 10 элементов:
float **ptrarray = new float* [2]; // две строки в массиве
    for (int count = 0; count < 2; count++)
        ptrarray[count] = new float [5]; // и пять столбцов
//  где ptrarray  – массив указателей на выделенный участок памяти под массив вещественных чисел  типа float
0
Диссидент
Эксперт C
26961 / 16839 / 3702
Регистрация: 24.12.2010
Сообщений: 37,800
21.10.2019, 22:23 5
Цитата Сообщение от БедолагаЖека Посмотреть сообщение
Надо еще по каждому указателю выделить память...
Да есть там это выделение. Строчка 16. Смотрите внимательней, перед тем как давать советы.

Добавлено через 6 минут
Но с указателями с кодом действительно сложно разобраться. Тут они действительно только мешают, наводят тень на плетень.
Используя обычные A[i][j] все могло бы получиться и прозрачнее, и проще.
BlvckSnake, это вам такие дурные задания дают? Ничем не могу помочь, кроме искреннего сочувствия.
0
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
21.10.2019, 22:28 6
Цитата Сообщение от Байт Посмотреть сообщение
Да есть там это выделение. Строчка 16. Смотрите внимательней, перед тем как давать советы.
Точно, замылились глазья
0
7421 / 5016 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
21.10.2019, 22:59 7
Цитата Сообщение от BlvckSnake Посмотреть сообщение
если элемент Ai
уточните условие. что это за элемент Ai ?
0
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
21.10.2019, 23:21 8
Цитата Сообщение от Yetty Посмотреть сообщение
что это за элемент Ai ?
думаю условие опечатано надо A[i][i]
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
21.10.2019, 23:44  [ТС] 9
1 курс в ВУЗе, лабораторные))) Много где читал, что так использовать указатели - это извращение

Добавлено через 1 минуту
Цитата Сообщение от Yetty Посмотреть сообщение
уточните условие. что это за элемент Ai ?
Переписал условие из задачника, но думаю что имеют ввиду A[i][i], иначе не пойму
0
Диссидент
Эксперт C
26961 / 16839 / 3702
Регистрация: 24.12.2010
Сообщений: 37,800
21.10.2019, 23:50 10
Цитата Сообщение от BlvckSnake Посмотреть сообщение
Много где читал, что так использовать указатели - это извращение
Вы читали правильные вещи.
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
21.10.2019, 23:55  [ТС] 11
Цитата Сообщение от Байт Посмотреть сообщение
Вы читали правильные вещи.
Увы, с обычными A[i][j], только на троечку)) Но, думается мне, что программа и без указателей не выводила бы значения правильно. Как я понимаю, проблема где-то в самом выводе, но не вижу её. Пробовал переписывать заново всю программу - тот же результат.
0
Диссидент
Эксперт C
26961 / 16839 / 3702
Регистрация: 24.12.2010
Сообщений: 37,800
21.10.2019, 23:57 12
BlvckSnake, если вас устроит решение в "A[i][j]", то вот завтра утречком готов подсобить
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
22.10.2019, 00:01  [ТС] 13
Цитата Сообщение от Байт Посмотреть сообщение
BlvckSnake, если вас устроит решение в "A[i][j]", то вот завтра утречком готов подсобить
Да, конечно устроит)) Заранее огромное спасибо!
0
7421 / 5016 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
22.10.2019, 00:10 14
Лучший ответ Сообщение было отмечено BlvckSnake как решение

Решение

Цитата Сообщение от BlvckSnake Посмотреть сообщение
если элемент Aii больше каждого из всех остальных элементов i-ой строки матрицы
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m, b;
    cout << "n="; cin >> n;
    cout << "m="; cin >> m;
    
      double **A = new double*[n], sum=0.0; 
    for (int i = 0; i < n; i++)
       A[i]=new double[m];
       
       int* X = new int[n];
       
    cout << "Matrix A\n";   
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
        *(*(A+i)+j)=rand()%9 + 1;
        sum+=*(*(A+i)+j);
        cout << *(*(A+i)+j) << " ";
        }
    cout << "\n";
    }  
    
    cout << "sum=" << sum; 
 
    cout << "\nArray X\n";    
    for (int i = 0; i < n; i++)
    {
        b=1;
        for (int j = 0; j < m; j++)                    
        if (i!=j && *(*(A+i)+i)<=*(*(A+i)+j)) {b=0; break;} 
        if(b) *(X + i)=1;
        else *(X + i)=0;
        cout << *(X + i) << " ";            
    }  
    cout << "\n";
    
    for (int i = 0; i < n; i++)
    delete[]A[i];
    delete[]A;
    delete[]X;
system("pause");
return 0;
}
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 32
22.10.2019, 00:16  [ТС] 15
Цитата Сообщение от Yetty Посмотреть сообщение
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m, b;
    cout << "n="; cin >> n;
    cout << "m="; cin >> m;
    
      double **A = new double*[n], sum=0.0; 
    for (int i = 0; i < n; i++)
       A[i]=new double[m];
       
       int* X = new int[n];
       
    cout << "Matrix A\n";   
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
        *(*(A+i)+j)=rand()%9 + 1;
        sum+=*(*(A+i)+j);
        cout << *(*(A+i)+j) << " ";
        }
    cout << "\n";
    }  
    
    cout << "sum=" << sum; 
 
    cout << "\nArray X\n";    
    for (int i = 0; i < n; i++)
    {
        b=1;
        for (int j = 0; j < m; j++)                    
        if (i!=j && *(*(A+i)+i)<=*(*(A+i)+j)) {b=0; break;} 
        if(b) *(X + i)=1;
        else *(X + i)=0;
        cout << *(X + i) << " ";            
    }  
    cout << "\n";
    
    for (int i = 0; i < n; i++)
    delete[]A[i];
    delete[]A;
    delete[]X;
system("pause");
return 0;
}
Большое спасибо! А можно уточнить какую функцию в себе несёт b?
0
7421 / 5016 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
22.10.2019, 00:41 16
BlvckSnake, не берите предложенный код в цитату - зачем дублировать.
Цитата Сообщение от BlvckSnake Посмотреть сообщение
какую функцию в себе несёт b?
изначально перед внутренним циклом (циклом по по строке) b=1, как только ловим первое условие
A[i][i]<=A[i][j] b=0 и брекаемся (выходим) из внутреннего цикла, если b=0 X[i]=0.
если условие A[i][i]<=A[i][j] ни разу за проход по строке не выполнилось b по-прежнему равен 1, в этом случае X[i]=1
Цитата Сообщение от BlvckSnake Посмотреть сообщение
Помогите пожалуйста поправить код.
проверьте строку 36 Вашего варианта. почему цикл начинается c 1 ?

Добавлено через 7 минут
можно и без b обойтись - изначально забить массив X единичками, в строке 38 вместо b=0 написать X[i]=0, а строки 39-40 убрать. но на мой взгляд с b получше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2019, 00:41
Помогаю со студенческими работами здесь

Сформировать новый массив по указанному правилу
Задание: Дан массив A размера N. Сформировать новый массив B того же раз- мера, элементы которого...

Сформировать массив из другого массива по указанному правилу
Ребят помогите пожалуйста написать код! Вот условие:Создать одномерный массив А размером N,...

Получить массив, элементы которого формируются из двух других массивов по указанному правилу
Ввести массивы А (8) и В (8). Получить массив С (8), элементы которого формируются по правилу:...

Получить массив, элементы которого формируются из двух других массивов по указанному правилу
Ввести массивы А (8) и В (8). Получить массив С (8), элементы которого формируются по правилу:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru