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

Помогите с удалением строки матрицы - C++

Войти
Регистрация
Восстановить пароль
 
Наруто_Узумаки
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 5
08.11.2008, 20:08     Помогите с удалением строки матрицы #1
Доброго времени суток всем!
Такая ситуация, что нужно удалить методом сдвига из матрицы строку, сумма элементов котороя равна 0. Я вот функцию обработки вроде как сделал, то вопрос в правильности ее работы. Посмотрите плиз и скажите что не правильно:
--------------------------------
Код
for(i=0;i<n;i++)
 for(j=0;j<m;j++)
  { while(j<m)
     summ=summ+a[i][j];
    if(summ==0)
     a[i][j]=a[i+1][j];
  }
----------------------------------
С уважением, Наруто!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
08.11.2008, 20:42     Помогите с удалением строки матрицы #2
хмм...я просто обязан здесь отписаться,ув. Наруто

Сейчас ты осваиваешь манипуляции с формой данных. С природой данных потом разберемся,главное помни,чтобы выучить мощную технику,тебе нужно много работать. Как хорошо,что ты такой выносливый.

так вот,у тебя тут вижу три вложенных цикла. for,for,while. Вопрос... Зачем while? суммируешь вторым for-ом очередную строку.После for'a сравниваешь с нулем сумму. Если ноль - делаешь сдвиг(кстати,у тебя сдвига вообще тут нет ). Потом обнуляешь сумму,чтобы при следующем проходе правильно считалось.


P.S с тебя sexy no jitsu
Наруто_Узумаки
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 5
08.11.2008, 21:00  [ТС]     Помогите с удалением строки матрицы #3
а как мне собственно сдвиг зафигачить, сенсей?
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
08.11.2008, 21:09     Помогите с удалением строки матрицы #4
На первом шаге ты научился пробегать по всем строкам,на втором по всем элементам внутри каждой строки.Для третьего шага тебе нужно совместить результаты первых двух,но теперь все сложнее! Вот,не могу я по сюжетной линии отмазаться,там ты должен был сам пройти второй шаг,без подсказок. Здесь же намекну,Что сдвиг - это еще один цикл. Если N-я строка - с суммой ноль,то тебе нужно все строки,начиная с N+1-й скопировать на предыдущую строку. Это и будет сдвиг.Но копировать нужно не только первый элемент,а всю строку целиком.Из какого-то там шага ты знаешь,что делается это циклом.Дерзай,короче. А я пойду добывать информацию,как обычно,ну ты же знаешь меня

Добавлено через 1 минуту 49 секунд
cтоп,я ж акацка. нестыковка. Ты на темную сторону силы ступил,Наруто.
Наруто_Узумаки
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 5
08.11.2008, 21:16  [ТС]     Помогите с удалением строки матрицы #5
спасибо, ну я собственно и скопировал
a[i][j]=a[i+1][j];

или это не то?
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
08.11.2008, 21:36     Помогите с удалением строки матрицы #6
Гхм. Первый цикл for пробегает все строки.
Второй цикл for пробегает от начала строки до конца. Но почему-то внутри него еще один while,который делает то же самое. После этого один(!) раз копируется первый элемент текущей строки в первый элемент следующей,после чего то же самое повторяется для следующих строк.

Вот тебе такой код. Посмотри,что там. Код ужасный,никому не говори,что это я написал,а то акацки высмеют нафиг. Лишь для демонстрации того,что происходит.

Код
#include <stdio.h>
#include <conio.h>
int main () {
    int n = 3,m = 5;
    int ** arr = new int * [n];
    int summ =0;
    int i,j,k;
    for(i=0;i<n;i++) arr[i]=new int[m];
//input
    for (i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            scanf("%d",&arr[i][j] );
        };

    };

    // 
    for(i=0;i<n;i++) { 

        for(j=0;j<m;j++)summ+=arr[i][j];
        
        if(summ==0) {
            for(k=i+1;k<n;k++) { // copying row to previous.
                for(j=0;j<m;j++) {
                    arr[k-1][j]=arr[k][j];
                };
            };
            n--;
            i--;// there is another row there right now.
        };
        summ =0;
    };
    //output
    for (i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            printf("%d ",arr[i][j] );
        };
        printf("\n");

    };

    getch();
    return 0;
};
На самом деле все совсем не так должно быть.Но я не уверен,что с динамической памятью ты уже работал. Поэтому использовал динамическую как статичную,фактически.ладно,развлекайся.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2008, 21:50     Помогите с удалением строки матрицы
Еще ссылки по теме:

СЕДЛОВЫЕ точки матрицы( ПОмогите исправить) C++
Помогите дописать код: Перевернуть все нечетные строки матрицы C++
Помогите с выводом второй матрицы C++
C++ Реализовать функцию Delete(s, i, n), возвращающую строку, полученную удалением из строки s n символов
C++ Игра с удалением шариков из массива

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

Или воспользуйтесь поиском по форуму:
Наруто_Узумаки
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 5
08.11.2008, 21:50  [ТС]     Помогите с удалением строки матрицы #7
Спасибо тебе огромное очень выручил!!! я просто пока учусь в колледже, у нас ета тема ток начинается, думаю скоро буду разбираться лучше в программировании.
Кстати, меня Серегой зовут
Yandex
Объявления
08.11.2008, 21:50     Помогите с удалением строки матрицы
Ответ Создать тему
Опции темы

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