C++ матрицы

Ответить
h0h0h0
Сообщения: 4
Зарегистрирован: 16 мар 2011, 05:08

Программа должна запрашивать размеры матрицы и самостоятельно заполнять ее с помощью генератора случайных чисел (динамический массив). Верхняя граница для значения элементов матрицы также вводится с клавиатуры.
Дана целочисленная прямоугольная матрица. Определить:
а) произведение элементов тех строк, которые не содержат ни одного нулевого элемента;
б) максимум среди сумм элементов диагоналей, параллельных главной диагонали.

Я находил решения подобных задач со статическим массивом, но с динамическим, через указатели сделать затрудняюсь.
h0h0h0
Сообщения: 4
Зарегистрирован: 16 мар 2011, 05:08

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
int main()
{
int x, y, z, e,i,j,;
while (true)
{
cout << "vvedite razmer matrici";
cin >> x; 
cout << "vvedite maximalnoe znachenie elementa :";
cin >> z;
z=z+1;
int **matrix = new int *[x]; 
for ( i=0; i<x; i++)
matrix[i] = new int [x]; 
for ( i=0; i<x; i++)
for (j=0; j<x; j++)
{
matrix[i][j] = rand()%z; 
}
а дальше как верно сделать вот этот кусок:

Код: Выделить всё

 for (i=0;i<n;i++)
  {
      proizv[i]=1;
   for(j=0;j<n;j++)
   {
          if(a[i][j]!=0) proizv[i]*=a[i][j]; 
         else proizv[i]=0;                         
   }    
      if(proizv[i]>0) printf("Proizvedenie elementov stroki %d ravno %d\n",i+1,proizv[i]);     
  }
и этот:

Код: Выделить всё

 for (j=0;j<(2*n);j++) s[j]=0;
  for (i=0;i<n;i++)
  {
      for (j=0;j+i<n;j++)
      {
          s[j]+=a[i][i+j];
          s[n+j]+=a[i+j][i]; 
      }      
  }
  for (j=0;j<n;j++) printf("%d\n",s[j]);
  for (j=n+1;j<(2*n);j++) printf("%d\n",s[j]);
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Код: Выделить всё

#include <iostream>
using namespace std;
int main(){
	int		**a;
	int		n,m,
			i,j;

	cout<<"n: ";
	cin>>n;
	cout<<"m: ";
	cin>>m;

	a=new int*[n];
	for(i=0;i<n;i++)
		a[i]=new int[m];

	//а дальше все также как со статическим массивом,т.е. ввод,
	//выполнить то что вам надо по заданию и вывод.

	for(i=0;i<n;i++)
		for(j=0;j<m;j++){
			cout<<"a["<<i<<"]["<<j<<"]: ";
			cin>>a[i][j];
		}

	cout<<endl<<"-----------------"<<endl;

	for(i=0;i<n;i++){
		for(j=0;j<m;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	//вот только в конце надо совободить память
	for(i=0;i<n;i++)
		delete []a[i];

	cin.get(),cin.get();
	return 0;
}
ввод замените на генератор случайных чисел. как вам надо, сами :)
Приглашаю на свой блог о программировании: pro-prof.com
Ответить