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

Матрица (двумерный массив). Преобразовать элементы построчно

13.01.2015, 20:13. Просмотров 1224. Ответов 20
Метки нет (Все метки)

Ребят,всем добрый вечер !
Очень и очень срочно нужна помощь,вообще не пойму как делать ...помогите пжл

Дано такое задание :
Каждый элемент строки прямоугольной матрицы заменить приращением к мини¬мальному элементу этой строки, если сумма элементов строки положительна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2015, 20:13
Ответы с готовыми решениями:

Дан двумерный массив. Преобразовать его так, чтобы новый массив содержал элементы старого, циклически сдвинутые на 2 элемента влево.
Уважаемые форумчане, такая проблема, не знаю как решить задачу, в моём городе...

Элементы заданной матрицы A(N, N) переписывайте построчно в одномерный массив до тех пор, пока не встретится нулевой элемент.(Матрица задается динами)
#include "stdafx.h" #include <iostream> using namespace std; void main()...

Элементы матрицы переписать построчно в одномерный массив
Задача - элементы заданой матрицы A(N,N) переписовать построчно в одномерный...

Переслать элементы матрицы построчно в одномерный массив
Строки матрицы A(m,n)заполнены не полностью: в одномерном массиве L(m) указано...

Преобразовать двумерный массив
Добрый день.Требуется преобразовать двумерный массив в одномерный по...

20
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 20:37 2
Если бы вы скинули код, можно было бы и написать.
Что значит приращение к минимальному, я не совсем понял, но думаю, что если a[j] - элементы массива с N элементами, то приращение к минимальному равно a[j] = a[j] - min(a)
Программа пишется очень легко.
Каждая строка, это у нас отдельный массив. Суммируем элементы каждой строки. Что-то вроде цикла a[const][i] по i. За одно в этом же цикле находим минимум и записываем его в переменную min
Проверяем, если больше нуля, то в этой строке каждый элемент меняем на такое a[const][i] -= min; выполняем для всех i.
В принципе, можно переделать в один цикл.
1
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 20:51  [ТС] 3
Мне же код и нужен,т.к ,что было в условие ,я это и написал,а сам код вот составить не могу...
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 21:20 4
Лучший ответ Сообщение было отмечено Skyflow как решение

Решение

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>
 
using namespace std;
 
int main() {
    int n,m,sum,min;
    cin >> n >> m; //Здесь мы получаем размер матрицы
    int a[n][m];
    //Здесь в цикле мы заполним матрицу
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> a[i][j];
        }
    }
    //Печатаем что получилось
    cout << endl;
    cout << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << a[i][j] << ' ';
        }
        cout << endl;
    }
    cout << endl;
    cout << endl;
    //начинаем наше вычисление
    //Здесь цикл для каждой строки
    for (int i = 0; i < n; i++) {
        //Здесь в цикле считаем сумму строки
        //и находим минимум
        //начальный минимум задаем как первый элемент строки
        //а сумму зануляем
        min = a[i][0];
        sum = 0;
        for (int j = 0; j < m; j++) {
            sum += a[i][j];
            if(min > a[i][j])
                min = a[i][j];
        }
        //теперь проверяем, если сумма больше 0, т.е. положительна
        //то вычитаем из каждого элемента минимальный
        //иначе ничего не делаем
        if(sum > 0) {
            for (int j = 0; j < m; j++) {
                a[i][j] -= min;
            }
        }
        else
            continue;
    }
    //И наконец печатаем нашу матрицу
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << a[i][j] << ' ';
        }
        cout << endl;
    }
}
1
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 21:49  [ТС] 5
Попробовал запустить компилятор , но он выдает 5 ошибок и ни в какую не запускается , скрин приложил

Кликните здесь для просмотра всего текста
Матрица (двумерный массив). Преобразовать элементы построчно
Матрица (двумерный массив). Преобразовать элементы построчно
0
stchest
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 8
13.01.2015, 22:04 6
Попробуйте удалить "#include "stdafx.h".
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 22:07 7
Можете заменить cin на scanf, а cout на printf, но придется тогда сделать #include <stdio.h>
Кстати, функции scanf и printf работают в разы быстрее.
Я запускал на компиляторе gcc 4.8.2
Конфигурацию скидывать не буду, она стандартная.
Можно также попробовать заменить cin -> std::cin; cout -> std::cout;
0
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 22:09  [ТС] 8
Удалил , теперь выдает 3 ошибки , скрин приложил
Кликните здесь для просмотра всего текста
Матрица (двумерный массив). Преобразовать элементы построчно
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 22:11 9
Skyflow, может попробуете запустить через cmd в mingw?
0
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 22:18  [ТС] 10
The535 , я бы с радостью , но требования выполнения работы строго в Visual Studio
Думаете,если cout/cin заменить на scanf/print, то ошибки уберутся ?
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 22:23 11
Skyflow, думаю, да. Все же, с языком Си проблем возникнуть не должно.
Синтаксис таков:
C++
1
2
scanf("%d", &a);
printf("%d", a);
Перенос строки:
C++
1
printf("\n");
Не забудьте
C++
1
#include <stdio.h>
1
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 22:37  [ТС] 12
The535, вот от так должно получится ?
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
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main() 
{
int n, m, sum, min;
scanf_s (m); //Здесь мы получаем размер матрицы
int a[n][m];
//Здесь в цикле мы заполним матрицу
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        scanfs (a[i][j]) ;
    }
}
//Печатаем что получилось
printf("%d", a);
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        printf (a[i][j]) ;
    }
    printf("%d", a);
}
printf("%d", a);
//начинаем наше вычисление
//Здесь цикл для каждой строки
for (int i = 0; i < n; i++) {
    //Здесь в цикле считаем сумму строки
    //и находим минимум
    //начальный минимум задаем как первый элемент строки
    //а сумму зануляем
    min = a[i][0];
    sum = 0;
    for (int j = 0; j < m; j++) {
        sum += a[i][j];
        if (min > a[i][j])
            min = a[i][j];
    }
    //теперь проверяем, если сумма больше 0, т.е. положительна
    //то вычитаем из каждого элемента минимальный
    //иначе ничего не делаем
    if (sum > 0) {
        for (int j = 0; j < m; j++) {
            a[i][j] -= min;
        }
    }
    else
        continue;
}
//И наконец печатаем нашу матрицу
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        printf ( a[i][j] );
    }
    printf("%d", a);
}
}
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 22:42 13
Элементы массива, как бы, тоже являются обычными переменными. Поэтому синтаксис тот же.
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>
 
using namespace std;
 
int main() {
    int n,m,sum,min;
    scanf("%d %d", &n, &m); //Здесь мы получаем размер матрицы
    int a[n][m];
    //Здесь в цикле мы заполним матрицу
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    //Печатаем что получилось
    printf("\n");
    printf("\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    printf("\n");
    //начинаем наше вычисление
    //Здесь цикл для каждой строки
    for (int i = 0; i < n; i++) {
        //Здесь в цикле считаем сумму строки
        //и находим минимум
        //начальный минимум задаем как первый элемент строки
        //а сумму зануляем
        min = a[i][0];
        sum = 0;
        for (int j = 0; j < m; j++) {
            sum += a[i][j];
            if(min > a[i][j])
                min = a[i][j];
        }
        //теперь проверяем, если сумма больше 0, т.е. положительна
        //то вычитаем из каждого элемента минимальный
        //иначе ничего не делаем
        if(sum > 0) {
            for (int j = 0; j < m; j++) {
                a[i][j] -= min;
            }
        }
        else
            continue;
    }
    //И наконец печатаем нашу матрицу
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}
1
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 22:53  [ТС] 14
The535, все равно, те же 3 ошибки ,основные 2 ошибки - "выражение должно иметь константное выражение"
Кликните здесь для просмотра всего текста
Матрица (двумерный массив). Преобразовать элементы построчно
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 23:02 15
А вам не кажется, что вся проблема в том, что Visual Studio просто не может выделять память после компиляции?
Попробуйте заменить строку
C++
1
int a[n][m];
на
C++
1
int a[50][50];
Ну, или какие цифры у вас стоят в максимальном ограничении. Думаю, ошибка в этом.

Добавлено через 3 минуты
Думаю, можно было бы обойтись без констант, и выделить память malloc-ом, но я сейчас навряд ли вспомню синтаксис выделения памяти под двумерный массив. Хотя, если очень нужно будет...

Добавлено через 1 минуту
Может еще можно через new int[n][m]. Честно говоря, не знаю плохо помню, разрешен ли такой синтаксис.
0
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 23:11  [ТС] 16
The535, заменил строку
C++
1
int a[n][m];
на
C++
1
int a[50][50];
и ошибки пропали .
Теперь все компилируется,но при компиляции нет никакой матрицы,просто ничего нет,будто printf не правильный
Скрин приложил .
Кликните здесь для просмотра всего текста
Матрица (двумерный массив). Преобразовать элементы построчно
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 23:13 17
Лучший ответ Сообщение было отмечено Skyflow как решение

Решение

Так введите матрицу. Сначала вводите N и M - количество строк и столбцов.
Потом построчно вводите элементы. После программа печатает всю матрицу, выполняет над ней действия, печатает обработанную матрицу.
0
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
13.01.2015, 23:25  [ТС] 18
The535, чтобы не вводил,ничего не происходит...мб я что-то ввожу не то,скажите какие значения ввести и я предоставлю скрин,что компилятор не корректно работает .
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
13.01.2015, 23:38 19
Лучший ответ Сообщение было отмечено Skyflow как решение

Решение

Вот, пожалуйста.
1
Миниатюры
Матрица (двумерный массив). Преобразовать элементы построчно  
Skyflow
1 / 1 / 0
Регистрация: 30.11.2014
Сообщений: 17
14.01.2015, 00:03  [ТС] 20
The535, понял свою ошибку ! Большое тебе спасибо,прям очень большое,можно сказать - спас меня

PS. извиняюсь за тупость,только начал изучать.
1
14.01.2015, 00:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2015, 00:03

Преобразовать в двумерный массив
Помогите преобразовать в двумерный массив, заранее спасибо #include...

Преобразовать двумерный массив в одномерный
Дано двумерный массив a. Необходимо создать одномерный массив b, располагая в...

Преобразовать одномерный массив в двумерный
Кусок кода. который должен был создавать таблицу с заданного текста. на вид он...


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

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

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