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

Удалить из матрицы нулевые строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
AcetoN
0 / 0 / 0
Регистрация: 27.05.2007
Сообщений: 3
27.05.2007, 02:46     Удалить из матрицы нулевые строки #1
Господа уважаемые программеры!
Пожалуйста помогите доделать детскую прогу.

Имеется матрица NxM элементов. Нужно удалить методом сдвига все строки, состоящие из нулей.

Вот то что писал сам, может пригодится:
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
#include <stdio.h>
#include <conio.h>
 
void main(void)
{
 
int i,j,l=0,k,q,v,g=0,lmax=0,
    n=4,                                            //kolvo strok
    m=2,                                            //kolvo stolbcov
    a[20][20];                                      //maks dlina massiva
 
clrscr();                                           //o4istka ekrana
printf("Vvod matrici %dx%d\n",n,m);
for (i=0;i<n;i++) {
    for (j=0;j<m;j++) {
        printf("Vvedite element a[%d][%d]: ",i,j);
        scanf("%d",&a[i][j]);
        }
    }
 
/* output matrix */
clrscr();
printf("Icxodnaya matrica:\n\n");
for (i=0;i<n;i++) {
    for (j=0;j<m;j++) {
        printf("%3d",a[i][j]);
        if (j==m-1) printf("\n");
        }
    }
/* poisk nylevoi stroki */
 
for(i=0;i<n;i++) {
    for (j=0;j<m;j++) {
        if (a[i][j]==0) {
       //   printf("%d[%d][%d]=0\n",a[i][j],i,j);
            l++;
            lmax++;
            if (l==m) {
            //printf("nlystrk\n");
                l=0;
                g++;
// ydalenie stroki
                //n--;
                for(v=i;v<n;v++) {
                    printf("v= %d\n",v);
                    for(q=0;q<m;q++) {
                        a[i][q]=a[i+1][q];
                    }
                }
 
            }
        }// else printf("%d[%d][%d]!=0\n",a[i][j],i,j);
 
    }
 
    l=0;
    //printf("\n");
    //printf("i=%d\n",i);
}
printf("naideno nulei: %d",lmax);
printf("\nPoly4ennaya matrica:\n\n");
printf("g= %d\n",g);
for(i=0;i<n;i++) {
    for (j=0;j<m;j++) {
        printf("%3d",a[i][j]);
        if (j==m-1) printf("\n");
        }
    }
 
printf("\npress any key to continue");
getch();
}
i,j,v,q - переменные для циклов
lmax - считает вбщее кол-во найденых нулей
l - считает нули в текущей строке
g - кол-во найденых нулевых строк
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2007, 02:46     Удалить из матрицы нулевые строки
Посмотрите здесь:

Матрицы. нулевые и одинаковые строки. C++
Удалить из матрицы строки и стольбцы C++
Нужно из массива удалить нулевые элементы C++
Удалить из каждой строки матрицы все элементы, величина которых находится в отрезке (a,b) C++
C++ Удалить все строки матрицы, которые содержат нули
Удалить из матрицы A все строки, сумма элементов которых четна, а из матрицы B – строки, сумма элементов которых нечетна(функции) C++
Удалить из массива действительных чисел нулевые элементы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rich
12 / 12 / 1
Регистрация: 16.03.2007
Сообщений: 108
28.05.2007, 00:15     Удалить из матрицы нулевые строки #2
Я так быстренько взглянул, вроде бы всё правильно.
Скажи что именно тебя не устраивает?
AcetoN
0 / 0 / 0
Регистрация: 27.05.2007
Сообщений: 3
28.05.2007, 02:57  [ТС]     Удалить из матрицы нулевые строки #3
сдвиг (удаление) строки неправильно работает, допустим если ввести все нули а последний элемент поставить 1, то выведется две строки
0 0 0 0
0 0 0 1
Rich
12 / 12 / 1
Регистрация: 16.03.2007
Сообщений: 108
28.05.2007, 23:19     Удалить из матрицы нулевые строки #4
Я тут кое-что набросал. Посмотри, что не устроит напиши
Вложения
Тип файла: zip nuli.zip (597 байт, 79 просмотров)
AcetoN
0 / 0 / 0
Регистрация: 27.05.2007
Сообщений: 3
28.05.2007, 23:57  [ТС]     Удалить из матрицы нулевые строки #5
здорово! а можно сделать без второго массива F ?
Rich
12 / 12 / 1
Регистрация: 16.03.2007
Сообщений: 108
29.05.2007, 19:18     Удалить из матрицы нулевые строки #6
Я тут кое-что исправил
Вложения
Тип файла: zip nuli.zip (623 байт, 112 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2009, 12:50     Удалить из матрицы нулевые строки
Еще ссылки по теме:

C++ Матрицы. Необходимо найти значение среднего арифметического строк матрицы, исключая нулевые, в случае, если строка имеет отрицательный элемент(ы)
Списки двунаправленные. Удалить все нулевые элементы C++
В одномерном массиве удалить нулевые элементы C++
Найти нулевые строки матрицы C++
C++ Удалить из массива все нулевые элементы

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

Или воспользуйтесь поиском по форуму:
kuchok
Сообщений: n/a
07.02.2009, 12:50     Удалить из матрицы нулевые строки #7
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
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
void main(void)
{
 
int i,j,l=0,k,q,v,g=0,lmax=0,
    n=4,                                            
    m=2,                                            
    a[4][2];                                        
int *f;
f=(int*)malloc(n*sizeof(int));                                          
printf("Vvod matrici %dx%d\n",n,m);
for (i=0;i<n;i++) {
    for (j=0;j<m;j++) {
        printf("Vvedite element a[%d][%d]: ",i,j);
        scanf("%d",&a[i][j]);
        }
    }
 
/* output matrix */
 
printf("Icxodnaya matrica:\n\n");
for (i=0;i<n;i++) {
    for (j=0;j<m;j++) {
        printf("%3d",a[i][j]);
        if (j==m-1) printf("\n");
        }
    }
/* poisk nylevoi stroki */
 
for(i=0;i<n;i++) 
{
    for (j=0;j<m;j++) 
    {
        if(a[i][j]==0) {l++; if(m==l) {f[i]=1;g++;}}
    }
    lmax+=l;
    l=0;
}
 
 
printf("naideno nulei: %d",lmax);
printf("\nPoly4ennaya matrica:\n\n");
printf("g= %d\n",g);
for(i=0;i<n;i++) 
{
    for (j=0;j<m;j++) 
    {
        if( f[i]==1) break;
        else printf("%3d",a[i][j]);
        
    }
if(f[i]!=1)printf("\n");
}
 
printf("\npress any key to continue");
getch();
}
Yandex
Объявления
07.02.2009, 12:50     Удалить из матрицы нулевые строки
Ответ Создать тему
Опции темы

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