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

Формирование двумерного массива - C++

Восстановить пароль Регистрация
 
Marusya293
0 / 0 / 0
Регистрация: 21.09.2010
Сообщений: 13
06.12.2010, 22:37     Формирование двумерного массива #1
Дана матрица размером (m x n). Нужно из исходной матрицы сформировать новую из тех столбцов исходной, в которых содержится хотя бы два отрицательных элемента. Помогите пожалуйста...очень надо завтра лабу сдать!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2010, 22:37     Формирование двумерного массива
Посмотрите здесь:

формирование массива объектов C++
Формирование из элементов массива A нового массива B C++
залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива C++
Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. C++
Найти номер строки и столбца двумерного массива для минимального элемента этого массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
06.12.2010, 23:49     Формирование двумерного массива #2
создаем массивы.
int A[m][n]; // исходная матрица
int B[m[n]; // новая новая
заведем переменную - счетчик.
заполним A случайным образом.
далее следует пройти по каждому столбцу матрицы A, если текущий элемент меньше нуля, то увеличим счетчик, если счетчик больше двух - перепишем все элементы из текущего столбца в целевой столбец матрицы B и перейдем к следующему столбцу. Для индексации элементов в B потребуется еще пара переменных и еще одна переменная для индексации переписываемого столбца из A.
Marusya293
0 / 0 / 0
Регистрация: 21.09.2010
Сообщений: 13
06.12.2010, 23:54  [ТС]     Формирование двумерного массива #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for (j=0,f=0;j<n;j++)
     {
      for (i=0;(f!=1)&&(i<m);i++)
         if (T[i][j]<0) f++;
      if (f==1)
        {
         for (i=0;i<m;i++)
        result[i][k]=T[i][j];
         k++;
        }
     }
      printf("\nВыбираются столбцы, содержащие более одного отрицательного элемента.");
      if (k==1)
    {
     printf("\nНовая матрица:\n");
     for (i=0;i<m;i++)
        {
         for (j=0;j<n;j++)
        printf("%d ",result[i][j]);
вот фрагмент проги, так правильно?
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
07.12.2010, 02:25     Формирование двумерного массива #4
почти,

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int counter = 0, z = 0;
for (int j = 0; j < n; ++j) {
   for (int i = 0; i<m; ++i) {
       if (A[i][j] < 0) counter++;
       if (counter > 1) { // отрицательных чисел, как минимум два, копируем столбец в B
          for(int k = 0; k < n; ++k) {
              B[k][z] = A[k][j];
          }
          z++;
          break;
       }
   }
   counter = 0;
}
// получили матрицу B размерностью z на n.
Marusya293
0 / 0 / 0
Регистрация: 21.09.2010
Сообщений: 13
08.12.2010, 18:44  [ТС]     Формирование двумерного массива #5
а как мне теперь правильно вывести это массив?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
08.12.2010, 18:50     Формирование двумерного массива #6
Marusya293, Как-то так
C
1
2
3
4
5
6
7
8
for(int i = 0; i < z; ++i)
{
   for(int j = 0; j < n; ++j)
   {
      printf("  %d ", B[i][j]);
   }
   printf("\n");
}
Marusya293
0 / 0 / 0
Регистрация: 21.09.2010
Сообщений: 13
08.12.2010, 19:00  [ТС]     Формирование двумерного массива #7
ох ёлки я ввожу массив размером 2 х 2
-1 3
-4 5
по идее он должен вывести новый массив:
-1
-4
а он выдаёт ответ:
-1
-150
почему???
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
09.12.2010, 04:08     Формирование двумерного массива #8
asics, не совсем
C++
1
2
3
4
5
6
for(int i = 0; i < m; ++i) {
    for(int j = 0; j < z; ++j) {
        printf("  %d ", B[i][j]);
    }
    printf("\n");
}
m и z местами поменять, ибо z - количество скопированных столбцов. Матрица m на z получится, я ошибся вначале. А алгоритм верный, проверил. Раз уж написал, выложу:
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
#include <cstdio>
#include <cstdlib>
#include <ctime>
 
int main () {
    int m = 5 , n = 5;
    int A[m][n], B[m][n];
    srand(time(0));
    for(int i = 0; i < m; ++i) {
        for(int j = 0; j < n; ++j) {
            A[i][j] = rand()%10 - 3;
        }
    }
 
    for(int i = 0; i < m; ++i) {
        for(int j = 0; j < n; ++j) {
            printf("  %d ", A[i][j]);
        }
        printf("\n");
    }
    printf("===========================================\n");
    int counter = 0, z = 0;
    for (int j = 0; j < n; ++j) {
        for (int i = 0; i<m; ++i) {
            if (A[i][j] < 0) counter++;
            if (counter > 1) { // отрицательных чисел, как минимум два, копируем столбец в B
                for(int k = 0; k < n; ++k) {
                    B[k][z] = A[k][j];
                }
                z++;
                break;
            }
        }
        counter = 0;
    }
    for(int i = 0; i < m; ++i) {
        for(int j = 0; j < z; ++j) {
            printf("  %d ", B[i][j]);
        }
        printf("\n");
    }
    return 0;
}
Код
  1   6   -1   2   4
  6   4   -1   2   0
  2   1   2   4   4
  6   3   4   2   -2
  6   0   -2   -1   -1
===========================================
  -1   4
  -1   0
  2   4
  4   -2
  -2   -1

Process returned 0 (0x0)   execution time : 0.109 s
Press any key to continue.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2010, 09:02     Формирование двумерного массива
Еще ссылки по теме:

C++ Формирование одномерного массива из двумерного
C++ Формирование двумерного массива
C++ Формирование двумерного массива

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

Или воспользуйтесь поиском по форуму:
Marusya293
0 / 0 / 0
Регистрация: 21.09.2010
Сообщений: 13
09.12.2010, 09:02  [ТС]     Формирование двумерного массива #9
спасибо огромное :dance3:
Yandex
Объявления
09.12.2010, 09:02     Формирование двумерного массива
Ответ Создать тему
Опции темы

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