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

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

Войти
Регистрация
Восстановить пароль
 
HappyFanik
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 39
#1

Поменять 1 столбец с последним, у которого все элементы положительные - C++

29.11.2011, 09:01. Просмотров 374. Ответов 6
Метки нет (Все метки)

Дан массив размерности M<=N. Поменять 1 столбец с последним у которого все элементы положительные. Пользоваться вспомогательными массивами нельзя.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 09:01     Поменять 1 столбец с последним, у которого все элементы положительные
Посмотрите здесь:

C++ Поменять местами столбец матрицы с номером 1 и последний из столбцов, содержащий только положительные элементы
Поменять местами столбец с номером 1 и последний из столбцов, содержащих только положительные элементы C++
Поменять местами столбец с номером 1 и последний из столбцов, содержащих только положительные элементы C++
найти все кратные 7 положительные элементы столбца, у которого произведение отрицательных элементов четно C++
C++ Динамическая память.Матрица. После каждого столбца, все элементы которого положи-тельные, добавить новый столбец и заполнить его нулями
Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их местами с первым и последним элементом C++
Дан массив A[1.50], элементы которого отличны от нуля. Расположить их в таком порядке, чтобы первыми были все положительные элементы, а затем - все о C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
29.11.2011, 10:06     Поменять 1 столбец с последним, у которого все элементы положительные #2
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
#include <iostream>
using namespace std;
const int N = 3;
const int M = 2;
 
void Swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}
 
int main()
{
    int m[N][M];
    int i, j;
    for (i = 0; i < N; i++)
        for(j = 0; j < M; j++) {
            cout << "a[" << i << "][" << j << "] = ";
            cin >> m[i][j];
        }
    cout << endl;
    for (i = 0; i < N; i++) {
        for(j = 0; j < M; j++) 
            cout << m[i][j] << " ";
        cout << '\n';
    }
    j = 0;
    for (i = 0; i < N; i++)
            Swap(m[i][j],m[i][j + M - 1]);
    for (i = 0; i < N; i++) {
        for(j = 0; j < M; j++) 
            cout << m[i][j] << " ";
        cout << '\n';
    }
        
    system("pause");
    return 0;
}
держи
HappyFanik
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 39
29.11.2011, 17:56  [ТС]     Поменять 1 столбец с последним, у которого все элементы положительные #3
Цитата Сообщение от LostCoast Посмотреть сообщение
держи
Спасибо! Но если я ввожу матрицу 2х2 например
1 -2
2 3
он все равно поменяет местами так:
-2 1
3 2
хотя менять не должен т.к. есть отрицательный элемент!

Добавлено через 23 минуты
Нужно чтобы программа меняла 1 столбец с последним столбцом который содержит только положительные элементы, а если таких нет то вывести массив без перемен. Т.е.
Матрица:
1 2 3
4 5 6
7 8 9 сдесь поменяеться так:

3 2 1
6 5 4
9 8 7 т.к. в 3-й столбец последний в котором все элементы положительные. А если такая матрица:

1 2 -3
4 5 6
7 8 9 то поменяется так:

2 1 -3
5 4 6
8 7 9 т.к. 2-й столбец последний с положительными элементами.

Добавлено через 5 часов 12 минут
Как реализовать?
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
29.11.2011, 21:41     Поменять 1 столбец с последним, у которого все элементы положительные #4
Цитата Сообщение от HappyFanik Посмотреть сообщение
содержит только положительные элементы
это я понял, без 2 массива пока не могу ничего придумать.

Добавлено через 22 минуты
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
#include <iostream>
using namespace std;
const int N = 3;
const int M = 3;
 
void Swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}
 
int main()
{
    int m[N][M];
    int s[M];
    int i, j, n = M - 1;
    for (i = 0; i < N; i++)
        for(j = 0; j < M; j++) {
            cout << "a[" << i << "][" << j << "] = ";
            cin >> m[i][j];
            s[j] = 0;
        }
    cout << endl;
    for (i = 0; i < N; i++) {
        for(j = 0; j < M; j++) {
            if ( m[i][j] < 0 ) s[j] = 1;
            cout << m[i][j] << " ";
        }
        cout << '\n';
    }
    j = 0;
    for (i = 0; i < M; i++) 
        if (s[i] != 0) 
            n--;
    for (i = 0; i < N; i++) {
        if ( n == 0 ) break;
        Swap(m[i][j],m[i][j + n]);
    }
        
    for (i = 0; i < N; i++) {
        for(j = 0; j < M; j++) 
            cout << m[i][j] << " ";
        cout << '\n';
    }   
    system("pause");
    return 0;
}
в общем вот код, без второго массива тут никак, думаю сам понимаешь почему.(ИМХО без 2-ого массива тут и не сделаешь)
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
29.11.2011, 22:03     Поменять 1 столбец с последним, у которого все элементы положительные #5
вот функция для обмена столбцов двумерного массива:
C
1
2
3
4
5
6
7
8
9
10
11
#define xor_swap(a, b) ((a) ^= (b) ^= (a) ^= (b))
/*
 * swap_columns: swap two columns of two-dimensional static array
 * does not handle dynamic arrays 
 */
void swap_columns(int *arr, int nrow, int ncol,
    int i, int j)
{
    for ( ; j < (nrow * ncol); i += ncol, j += ncol)
        xor_swap(arr[i], arr[j]);
}
думаю будет полезна...
Цитата Сообщение от LostCoast Посмотреть сообщение
без второго массива тут никак, думаю сам понимаешь почему.(ИМХО без 2-ого массива тут и не сделаешь)
можно обменивать столбцы поэлементно
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
29.11.2011, 22:05     Поменять 1 столбец с последним, у которого все элементы положительные #6
Net_Wanderer, просто проблема в том что количество столбцов может быть разным, и ещё ,если поэлементно, то не поменяется только один элемент а нужен переброс на предыдущий столбец(сойдет если первый элемент в столбце отрицательный, а если он в середине или в конце?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 21:38     Поменять 1 столбец с последним, у которого все элементы положительные
Еще ссылки по теме:

В массив X записать сначала все положительные элементы M1 а затем все отрицательные элементы M2 C++
Столбец, содержащий минимальный элемент, поменять местами с последним столбцом C++
Есть ли в матрице столбец, элементы которого образуют возрастающую последовательность? C++
C++ Поменять элементы массива следующим образом: первый с последним, второй с предпоследним и т.д.
Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их местами с первым и последним C++

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

Или воспользуйтесь поиском по форуму:
HappyFanik
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 39
30.11.2011, 21:38  [ТС]     Поменять 1 столбец с последним, у которого все элементы положительные #7
Грусть пичаль ))) Придётся с двумерным писать, скажу что не смог придумать подругому )) Спасибо всем кто помогал !
Yandex
Объявления
30.11.2011, 21:38     Поменять 1 столбец с последним, у которого все элементы положительные
Ответ Создать тему
Опции темы

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