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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 19:15   #1
Яна696
Пользователь
 
Аватар для Яна696
 
Регистрация: 07.11.2011
Сообщений: 53
Сообщение Динамические массивы

У меня задача, чтобы найти сумму тех элементов,которые расположены выше главной диагонали,а так же перезаписать их в одномерный динамический массив по столбцам. В своей программе я организовала ввод\вывод массива, так же перезаписала результат в одномерный массив, но у меня не получается найти элементы,которые выше главной диагонали. В результате работы той программы которая у меня есть,перезаписываются абсолютно все элементы..Как бы можно было это организовать?
Вот код,который у меня:
Код:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>

void main()
{
	int n,i,j;

	srand(time(0));

	cout<<"N=";
	cin>>n;

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

	for (i=0;i<n;i++)
		for (j=0;j<n;j++)
			*(*(mas+i)+j)=rand()%10;	
	
	for (i=0;i<n;i++)
		{	
			for (j=0;j<n;j++)
			{
				cout.width(4);
				cout<<*(*(mas+i)+j)<<" ";
			}
			cout<<"\n";
		}

	int n1,k=0;
	
		int *mas1=new int[n1];

	for (j=0;j<n;j++)
		for (i=0;i<n;i++)
			if (*(*(mas+i)+j)>0) 
				for (j=0;j<n;j++)
						{
							*(mas1+k)=*(*(mas+j)+i);
							k++;
						}
					
			
	for (i=0;i<k;i++)
		{	
			cout.width(2);
			cout<<*(mas1+i);
		}

	cout<<"\n";

	delete[] mas1;
	delete[] mas;
}
А может я слегка обнаглела?...
Яна696 вне форума Ответить с цитированием
Старый 26.05.2012, 19:53   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

void main()
{
	int n,i,j;

	srand(time(0));

	cout<<"N=";
	cin>>n;

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

	for (i=0;i<n;i++)
		for (j=0;j<n;j++)
			*(*(mas+i)+j)=rand()%10;	
	
	for (i=0;i<n;i++)
		{	
			for (j=0;j<n;j++)
			{
				cout.width(4);
				cout<<*(*(mas+i)+j)<<" ";
			}
			cout<<"\n";
		}

	int k=0, n1 = n*(n-1)/2; //количество элементов выше главной диагонали
	//если матрица имеет размеры N*N, то в первой строке над гл.диаг. N-1 элемент, во второй N-2 и т.д. до 1
	//арифметическая прогрессия, сумма = ((N-1)+1)*(N-1) / 2
	int summa=0;
	
		int *mas1=new int[n1];

	//выше главной диагонали лежат те, у которых номер столбца больше номера строки
	for (i = 0; i < n; i++) {
		for (j = i+1; j < n; j++) {
			summa += mas[i][j];
			mas1[k] = mas[i][j];
			k++;
		}
	}
			
	cout << "Summa: " << summa << "\n";
	for (i=0;i<n1;i++)
		{	
			cout.width(2);
			cout<<*(mas1+i);
		}

	cout<<"\n";

	delete[] mas1;
	delete[] mas;

	system("pause");
}
А зачем Вы так извращаетесь с адресацией в массиве? Это не ошибка, но можно же просто писать mas[i][j]
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 26.05.2012, 20:05   #3
Яна696
Пользователь
 
Аватар для Яна696
 
Регистрация: 07.11.2011
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение

А зачем Вы так извращаетесь с адресацией в массиве? Это не ошибка, но можно же просто писать mas[i][j]
Можно,но у меня задание такое...обращаться к элементам массива через указатели..Спасибо за помощь, сейчас попробую разобраться
А может я слегка обнаглела?...
Яна696 вне форума Ответить с цитированием
Старый 26.05.2012, 20:15   #4
Яна696
Пользователь
 
Аватар для Яна696
 
Регистрация: 07.11.2011
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Код:
	int k=0, n1 = n*(n-1)/2; //количество элементов выше главной диагонали
	//если матрица имеет размеры N*N, то в первой строке над гл.диаг. N-1 элемент, во второй N-2 и т.д. до 1
	//арифметическая прогрессия, сумма = ((N-1)+1)*(N-1) / 2
	int summa=0;
	
		int *mas1=new int[n1];

	//выше главной диагонали лежат те, у которых номер столбца больше номера строки
	for (i = 0; i < n; i++) {
		for (j = i+1; j < n; j++) {
			summa += mas[i][j];
			mas1[k] = mas[i][j];
			k++;
		}
	}
			
	cout << "Summa: " << summa << "\n";
	for (i=0;i<n1;i++)
		{	
			cout.width(2);
			cout<<*(mas1+i);
		}

	cout<<"\n";

	delete[] mas1;
	delete[] mas;

	system("pause");
}
А...в какой части мы пишем это условие, что "//выше главной диагонали лежат те, у которых номер столбца больше номера строки"? наверное, глупый вопрос...
А может я слегка обнаглела?...
Яна696 вне форума Ответить с цитированием
Старый 26.05.2012, 20:33   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Вот
Код:
for (i = 0; i < n; i++) {
		for (j = i+1; j < n; j++) {
на i-ой строке мы смотрим столбцы начиная с i+1го
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 26.05.2012, 20:36   #6
Яна696
Пользователь
 
Аватар для Яна696
 
Регистрация: 07.11.2011
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Вот
Код:
for (i = 0; i < n; i++) {
		for (j = i+1; j < n; j++) {
на i-ой строке мы смотрим столбцы начиная с i+1го
точно! Спасибо=)
А может я слегка обнаглела?...
Яна696 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы c++ cheef Помощь студентам 4 19.11.2011 12:53
Динамические массивы Наташок Паскаль, Turbo Pascal, PascalABC.NET 6 12.04.2011 12:03
динамические массивы veter_s_morya Общие вопросы C/C++ 2 05.03.2011 17:08
Динамические массивы volchik1991 Общие вопросы C/C++ 1 14.06.2010 01:57
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09