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

Найти все ненулевые элементы матрицы и записать их в новый массив - C++

Восстановить пароль Регистрация
 
lexatigr
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 76
11.04.2011, 22:15     Найти все ненулевые элементы матрицы и записать их в новый массив #1
Вроде все правильно, но находит почему то не все элементы!
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
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
 
 
int main(int argc, char *argv[])
{
        int i,j,N,M;
        float** X;
       
       cout << "kol-vo strok v matr"; cin >> N;
       cout << "kol-vo stolbtsov v matr"; cin >> M;
  //выделяем память
             X = new float*[N];
             for (i = 0; i < N; i++)
          
                        X[i] = new float[M];
                        
 //ввод матрицы
        for ( i = 0; i < N; i ++ )
                for ( j = 0; j < M; j ++ ) {
                        printf ("X[%d][%d]=", i, j);
                        scanf ("%f", & X[i][j]);
                }
 
 
                printf("Matrica X\n");
                for ( i = 0; i < N; i ++ ) {
                        for ( j = 0; j < M; j ++ )
                                printf ( "%5.1f", X[i][j] );
                        printf("\n");
                         printf("\n");
                }
  float *Z;
  Z = new float[N]; 
  for (i = 0; i < N; i++)
 
   
   for ( i = 0; i < N; i ++ ) {
                        for ( j = 0; j < M; j ++ ){
                            if (X[i][j]!=0)
                             Z[i] = X[i][j];}
                           
                        printf ( "%5.1f", Z[i] );
  
                
}                    
//освобождаем, когда массив больше не нужен
   for (i = 0; i < N; i++)
                        delete X[i];
        delete[] X;
  
                system("PAUSE");
                return EXIT_SUCCESS;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2011, 22:15     Найти все ненулевые элементы матрицы и записать их в новый массив
Посмотрите здесь:

Все ненулевые элементы матрицы D(k,l) расположить в начале массива E(k∙l) и подсчитать из количество C++
C++ Записать все нечетные элементы матрицы в один массив, а четные - в другой
C++ Все отрицательные элементы матрицы записать в одномерный массив.
C++ Найти минимальный элемент в массиве Y (25). Умножить на него все ненулевые элементы.
C++ Преобразовать массив так чтобы все ненулевые элементы предшествовали нулевым
C++ Все нулевые элементы матрицы увеличить на 5, ненулевые уменьшить в 2 раза
Записать все положительные элементы матрицы в массив arrP, а отрицательные - в массив arrN C++
C++ Все ненулевые элементы матрицы расположить в начале массива и подсчитать их количество

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ailia
27 / 26 / 1
Регистрация: 27.12.2009
Сообщений: 106
12.04.2011, 13:01     Найти все ненулевые элементы матрицы и записать их в новый массив #2
вместо
C++
1
2
3
4
5
6
7
8
9
10
11
  float *Z;
  Z = new float[N]; 
  for (i = 0; i < N; i++)
 
   
   for ( i = 0; i < N; i ++ ) {
                        for ( j = 0; j < M; j ++ ){
                            if (X[i][j]!=0)
                             Z[i] = X[i][j];}
                           
                        printf ( "%5.1f", Z[i] );
вставь это
C++
1
2
3
4
5
6
7
8
9
10
11
12
float *Z; int z = 0;
Z = new float[N];   
for ( i = 0; i < N; i ++ ) 
{
for ( j = 0; j < M; j ++ )
{
if (X[i][j]!=0)
{Z[z] = X[i][j]; z++}
}
}
for(int i = 0; i < z; i++)
printf("%5.1f",Z[i]);
P.S: писал в браузере, так что возможны ошибки
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
12.04.2011, 14:33     Найти все ненулевые элементы матрицы и записать их в новый массив #3
вот так все норм определяет, правда чуток больше кода))
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <conio.h>
#include <iomanip>
 
using namespace std;
 
int nonZeroCount( float ** matr, int row, int col )
{
    int i, j, count = 0;
    for ( i = 0; i < row; i++ )
        for ( j = 0; j < col; j++ )
            if ( matr[ i ][ j ] )
                count++;
 
    return count;
}
 
int main(int argc, char *argv[])
{
    int i , j, rows, cols;
    float ** matrix;
 
    cout << "Input rows amount in matrix: "; 
    cin >> rows;
    cout << "Input cols amount in matrix: "; 
    cin >> cols;
    //выделяем память
    matrix = new float * [ rows ];
    for ( i = 0; i < rows; i++)
        matrix[ i ] = new float[ cols ];
 
    //ввод матрицы
    for ( i = 0; i < rows; i++ ) {
        for ( j = 0; j < cols; j++ ) {
            cout << "matrix[ " << i << " ][ " << j << " ] = ";
            cin >> matrix[ i ][ j ];
        }
    }
 
    cout << "\n\nMatrix:\n\n";
    for ( i = 0; i < rows; i++ ) {
        for ( j = 0; j < cols; j++ ) 
            cout << setw( 5 ) << setprecision( 1 ) << matrix[ i ][ j ];
        cout << "\n";
    }
    cout << endl << endl;
    //определяем количество ненулевых элементов матрицы
    int tmpSize = nonZeroCount( matrix, rows, cols );
 
    if ( tmpSize ) {
        int z = 0;
        //Если количество ненулевых элементов матрицы не равно 0
        //создаем массив размером количеством ненулевых элементов
        float * tmpMatr = new float [ tmpSize ];
        for ( i = 0; i < rows; i++ ) {
            for ( j = 0; j < cols; j++ ) {
                if ( matrix[ i ][ j ] ) {
                    tmpMatr[ z ] = matrix[ i ][ j ];
                    cout << setw( 5 ) << setprecision( 1 ) << tmpMatr[ z ];
                    z++;
                }
            }
        }
 
        delete [] tmpMatr;
 
        cout << endl << endl;
    }
    else
        cout << "\nMatrix does not have NULL elements\n";
             
    //освобождаем, когда массив больше не нужен
    for ( i = 0; i < rows; i++)
        delete matrix[ i ];
    delete [] matrix;
 
    _getch();
 
    return 0;
}
Yandex
Объявления
12.04.2011, 14:33     Найти все ненулевые элементы матрицы и записать их в новый массив
Ответ Создать тему
Опции темы

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