Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 16:54   #1
Ирина1992
Новичок
Джуниор
 
Регистрация: 19.11.2011
Сообщений: 7
Стрелка С++.три матрицы, упорядочить строки той матрицы у которой больше нулевых строк

Условие звучит так: даны три матрицы M*N, найти ту, в которой больше нулевых строк (все элементы-нули), в этой матрице посчитать сумму элементов каждой строки и затем упорядочить строки по возрастанию их суммы, все операции с матрицами реализовать, используя только УКАЗАТЕЛИ, а не индексы, т. е.:

например в матрице:
4 5 2 1
0 1 2 1
3 0 7 2
0 0 0 0
сумма элементов каждой строки:
4 5 2 1=12
0 1 2 1=4
3 0 7 1=11
0 0 0 0=0
в итоге должна получиться матрица:
0 0 0 0
0 1 2 1
3 0 7 2
4 5 2 1

Помогите пожалуйста, что-то совсем не знаю как написать
Ирина1992 вне форума Ответить с цитированием
Старый 19.11.2011, 17:05   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

И что конкретно тебя тут смущает? )
Son Of Pain вне форума Ответить с цитированием
Старый 19.11.2011, 17:18   #3
Ирина1992
Новичок
Джуниор
 
Регистрация: 19.11.2011
Сообщений: 7
По умолчанию

то, что я не знаю как написать эту программу!)
Ирина1992 вне форума Ответить с цитированием
Старый 19.11.2011, 17:25   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

) Ну давай смотреть. Сначала, видимо, нужно ввести с клавиатуры эти три матрицы. Потом в цикле пройтись по ним и сосчитать нулевые строки. Потом посчитать сумму строк и отсортировать их, как обычный массив.
Что из этого ты умеешь? )
Son Of Pain вне форума Ответить с цитированием
Старый 19.11.2011, 17:31   #5
Ирина1992
Новичок
Джуниор
 
Регистрация: 19.11.2011
Сообщений: 7
По умолчанию

Вот мой ввод/вывод, дальше что-то не придумаю как реализовать:


Код:
include <iostream>
using namespace std;
int main(){
int n,i,j;
int **a;
сout<<"Введите размерность матрицы"<<endl;
cin>>n;
a=new int*[n];

for (i=0;i<=n;i++){
        a[i]=new int[n];
        }
 
cout<<"Введите элементы матрицы"<<endl;
for (i=0;i<=n;i++){
                for (j=0; j<=n; j++){
                        cin>>a[i][j];
                        }
                }
        
        
cout<<"Введенная матрица"<<endl;
        for (i=0;i<=n;i++){
                for (j=0;j<=n;j++){
                        cout<<a[i][j]<<" ";
                }
        cout<<endl;
        }
 
 
return 0;
}
Ирина1992 вне форума Ответить с цитированием
Старый 19.11.2011, 17:36   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Вот, теперь давай дописывать ее. Во-первых в задании не сказано же, что матрицы квадратные. Нужно отдельно вводить ширину и высоту.
Во-вторых везде вместо <= у тебя должно быть написано просто < .

Дальше допиши в нее еще две матрицы и покажи, что получится
Son Of Pain вне форума Ответить с цитированием
Старый 19.11.2011, 18:03   #7
Ирина1992
Новичок
Джуниор
 
Регистрация: 19.11.2011
Сообщений: 7
По умолчанию

Я не дописала в условии-матрицы все квадратные.

Код:
include <iostream>
using namespace std;
int main(){
int m,n,i,j;
int **a, **b, **c;
сout<<"Введите размерность матриц"<<endl;
cin>>n;
a=new int*[n];
b=new int*[n];
c=new int*[n];

for (i=0;i<n;i++){
        a[i]=new int[n];
	b[i]=new int[n];
	c[i]=new int[n];
        }
 
cout<<"Введите элементы первой матрицы"<<endl;
for (i=0;i<n;i++){
                for (j=0; j<n; j++){
                        cin>>a[i][j];
                        }
                }
        
        
cout<<"Введите элементы второй матрицы"<<endl;
for (i=0;i<n;i++){
                for (j=0; j<n; j++){
                        cin>>b[i][j];
                        }
                }
        
        
cout<<"Введите элементы третьей матрицы"<<endl;
for (i=0;i<n;i++){
                for (j=0; j<n; j++){
                        cin>>c[i][j];
                        }
                }
        
        
cout<<"Введенные матрицы:"<<endl;
        for (i=0;i<n;i++){
                for (j=0;j<n;j++){
                        cout<<a[i][j]<<" ";
                }
        cout<<endl;
        }
	
	cout<<endl;
	for (i=0;i<n;i++){
                for (j=0;j<n;j++){
                        cout<<b[i][j]<<" ";
                }
        cout<<endl;
        }
	
	cout<<endl;
	for (i=0;i<n;i++){
                for (j=0;j<n;j++){
                        cout<<c[i][j]<<" ";
                }
        cout<<endl;
        }
 
 
return 0;
}
Ирина1992 вне форума Ответить с цитированием
Старый 19.11.2011, 18:25   #8
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Видишь, ничего сложного Теперь едем дальше. Давай думать, как проще всего сосчитать количество нулевых строк в матрицах? Сначала нам в любом случае нужны будут три переменные, в которые запишется их количество для трех матриц. И четвертая временная переменная-счетчик.
Проходим в цикле по всем трем матрицам. И для каждой строки сначала обнуляем счетчик, а потом увеличиваем его, если встречается ненулевой элемент. И после прохода одной строки проверяем - если счетчик (количество ненулевых элементов) больше 0, увеличиваем переменную, в которой будет храниться количество нулевых строк в этой матрице. Ну или можно считать количество нулевых элементов, и если их окажется в строке ровно n - увеличить счетчик. Как больше нравится.

А еще по-хорошему надо бы вынести все одинаковые операции с матрицами в отдельные функции, если вы их уже проходили. Чтобы не повторять по три раза.

Да, еще из кода придется убрать все индексы, судя по заданию, и заменить их адресной арифметикой- т. е. вместо a[i] писать *(a+i).

Дерзай )

Последний раз редактировалось Son Of Pain; 19.11.2011 в 18:31.
Son Of Pain вне форума Ответить с цитированием
Старый 19.11.2011, 20:28   #9
Ирина1992
Новичок
Джуниор
 
Регистрация: 19.11.2011
Сообщений: 7
По умолчанию

Код:

//поиск нулевых строк

int k1=0, k2=0, k3=0, k;
for (i=0;i<n;i++){
	k=0;
	for (j=0;j<n;j++){
	if (*(p+j)!=0) k++;
	}
	if (k=0) k1++;
}

for (i=0;i<n;i++){
	k=0;
	for (j=0;j<n;j++){
	if (*(b+j)!=0) k++;
	}
	if (k=0) k2++;
}

for (i=0;i<n;i++){
	k=0;
	for (j=0;j<n;j++){
	if (*(c+j)!=0) k++;
	}
	if (k=0) k3++;
}

if (k1>=k2) {

for (i=0;i<n;i++){
for (j=0;j<n;j++){
*(matr+j)=*(a+j);
	}
	}

} else {
	
for (i=0;i<n;i++){
for (j=0;j<n;j++){
*(matr+j)=*(b+j);
	}
	}
};

if ((k1<k3)&&(k2<k3)) {

for (i=0;i<n;i++){
for (j=0;j<n;j++){
*(matr+j)=*(c+j);
	}
	}

};
if ((k1=0)&&(k2=0)&&(k3=0)){
cout<<"Не найдено матрицы с нулевыми строками"<<endl;
return 0;
}
matr-тоже матрица, мы ее инициализировали раньше, допустим. Вот только с указателями на элемент матрицы я что-то не совсем разобралась, скорей всего не правильное обращение делаю. Вот если элемент одномерного массива, то проблем нет, а если двумерный, то путаюсь..
И дальше сумму строк записывать в одномерный массив, или как?
Ирина1992 вне форума Ответить с цитированием
Старый 19.11.2011, 20:54   #10
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Вот, молодец, почти все правильно )

Для обращения к элементам двухмерного массива из-за приоритетов операций приходится использовать такую стремную конструкцию - вместо a[i][j] получается *(*(a+i)+j)

В этой проверке
Код:
	if (k=0) k1++;
ты пропустила второй знак = . И в самой последней тоже.

Осталось только отсортировать строки любым алгоритмом. Можно записать суммы в одномерный массив и сортировать по нему.

Ну и мелочь - вместо
Код:
int k1=0, k2=0, k3=0, k;
можно написать короче
Код:
int k1=k2=k3=k=0;


Напиши потом, что получится в итоге.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ф-ия, определяющая сумму строк матрицы, если на главной диагонали матрицы имеется отрицательный эл-т. Volk_xD Помощь студентам 6 05.01.2011 13:39
Найти строки и индексы нулевых элементов матрицы, на паскале serrga Помощь студентам 1 18.12.2009 02:46
Получить матрицу B[1..N-1,1..M-1] из матрицы A[1..N,1..M] удалением какой-либо х-той строки и k-го столбц kempers Помощь студентам 2 18.12.2008 10:53
Вывести на экран матрицу, в которой наибольшее число нулевых строк Александр НИК-В Паскаль, Turbo Pascal, PascalABC.NET 0 05.12.2008 20:49
Помогите упорядочить строки матрицы по убыванию kitty Помощь студентам 1 06.12.2007 23:23