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

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

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

Author24 — интернет-сервис помощи студентам
Получить массив 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
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
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
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
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
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
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
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
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
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
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
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
22.10.2019, 00:41
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2019, 00:41
Помогаю со студенческими работами здесь

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

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

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

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


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

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

Новые блоги и статьи
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru