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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 12:34   #1
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию Формирование и вывод новой матрицы

Здравствуйте. Я новичок с С++ (пишем, точнее пытаемся, на Microsoft Visual C++). Задача следующая:
Из 20 положительных и отрицательных чисел сформируйте матрицу 5х4. Выдайте все отрицательные элементы, укажите координаты их расположения. Вывод результатов сделать в виде матрицы из трех столбцов: в первом - значения отрицательных элементов, во втором и третьем - координаты расположения элементов в матрице, т.е. номера строк и столбцов элементов.
Матрицу 5х4 задать получилось, как искать отрицательные элементы тоже понятно, но не выходит создание новой матрицы из этих элементов и их индексов:
Код:
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"

int main()
{
	int i,j,kol=0;
	int mas[5][4];
	for(i=0;i<5;i++)
	{
		for(j=0;j<4;j++)
		{
			mas[i][j]=rand()%15-5;			//заполняем массив случайными числами
			if(mas[i][j]<0) kol=kol+1;		//считаем количество отрицательных элементов
		}
	}
	printf("Pervonachalnii massiv:\n");
	for(i=0;i<5;i++)
	{
		for(j=0;j<4;j++)
		{
			printf("%d	",mas[i][j]);		//выводим на экран первоначальный массив
		}
		printf("\n");
	}	

//Как быть дальше?

	return 0;
}

Последний раз редактировалось Stilet; 11.10.2010 в 13:05.
DarkSwan вне форума Ответить с цитированием
Старый 11.10.2010, 12:43   #2
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Код:
int mas1[kol][3]; //где kol количество отрицательных элементов
int a=0;
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{

if(mas[i][j]<0) {matr1[a][0]=mas[i][j];matr1[a][1]=i;matr1[a][2]=j;a++};
}
}
что сложного? =)
на весы кликнуть не забудь =)

Последний раз редактировалось bondik; 11.10.2010 в 12:48.
bondik вне форума Ответить с цитированием
Старый 11.10.2010, 12:53   #3
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию

Код:
	int mas1[kol][3]; //ãäå kol êîëè÷åñòâî îòðèöàòåëüíûõ ýëåìåíòîâ
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'mas1' : unknown size
вот что =(
DarkSwan вне форума Ответить с цитированием
Старый 11.10.2010, 13:01   #4
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

я направление дал,конечно же нельзя писать mas[p][p1]
но что есть матрица?Это указатель на указатель.Например int **mas1.
Например
Код:
int dim1 = 5, dim2 = 5, dim3 = 10, wDim = dim2;
/*
Организация двумерного динамического массива производится в два этапа.
Сначала создаётся одномерный массив указателей, а затем каждому элементу
этого массива присваивается адрес одномерного массива. Для характеристик
размеров массивов не требуется константных выражений.
*/
int **pArr = new int*[dim1];
for (i = 0; i < dim1; i++) pArr[i] = new int[dim2];
pArr[3][3] = 100;
cout << pArr[3][3] << endl;
Вся статья http://www.cyberguru.ru/programming/...ay-page76.html
А вообще читайте страуструпа
bondik вне форума Ответить с цитированием
Старый 11.10.2010, 13:03   #5
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию

За направление спасибо) Фактически так же, как у меня мысль и была) Но вот проблема в том, что до меня никак не доходит объявление динамического массива. И спасибо за ссылку
DarkSwan вне форума Ответить с цитированием
Старый 11.10.2010, 13:06   #6
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

то есть чтобы инициализировать mas1
Код:
int **mas1 = new int*[kol];
   for (i = 0; i < kol; i++) mas1[i] = new int[3];
bondik вне форума Ответить с цитированием
Старый 11.10.2010, 13:09   #7
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

почему kol = 5? Кол количество отрицательных элементов,а так как матрица задается рандомом то и kol меняется
Сорь,я ему по первому примеру сказал =)
bondik вне форума Ответить с цитированием
Старый 11.10.2010, 13:56   #8
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию

Код:
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "iostream.h"

int main()
{
	int i,j,kol=0;
	int mas[5][4];
	for(i=0;i<5;i++)
	{
		for(j=0;j<4;j++)
		{
			mas[i][j]=rand()%15-5;			//çàïîëíÿåì ìàññèâ ñëó÷àéíûìè ÷èñëàìè
			if(mas[i][j]<0) kol=kol+1;		//ñ÷èòàåì êîëè÷åñòâî îòðèöàòåëüíûõ ýëåìåíòîâ
		}
	}
	printf("Pervonachalnii massiv:\n");
	for(i=0;i<5;i++)
	{
		for(j=0;j<4;j++)
		{
			printf("%d	",mas[i][j]);		//âûâîäèì íà ýêðàí ïåðâîíà÷àëüíûé ìàññèâ
		}
		printf("\n");
	}	

	int **mas1 = new int*[kol];									
	for (i = 0; i < kol; i++) 
	mas1[i] = new int[3];

	int a=0;
	for(i=0;i<5;i++)
	{
		for(j=0;j<4;j++)
		{
			if(mas[i][j]<0) {mas1[a][0]=mas[i][j];mas1[a][1]=i;mas1[a][2]=j;a++;}
		}
	}
	printf("\nMassiv otricatelnyh chisel:\n");
	for(a=0;a<kol;a++)
	{
		for(j=0;j<3;j++)
		{
			printf("%d	",mas1[a][j]);;
		}
		printf("\n");
	}
	return 0;
}
...\Lab_6.cpp(34) : error C2057: expected constant expression
...\Lab_6.cpp(34) : error C2466: cannot allocate an array of constant size 0
...\Lab_6.cpp(34) : error C2372: 'mas1' : redefinition; different types of indirection
...\Lab_6.cpp(29) : see declaration of 'mas1'
...\Lab_6.cpp(34) : error C2133: 'mas1' : unknown size

Последний раз редактировалось DarkSwan; 11.10.2010 в 14:02.
DarkSwan вне форума Ответить с цитированием
Старый 11.10.2010, 13:59   #9
DarkSwan
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 20
По умолчанию

Всё! Дошло! Спасибо! На этом форуме предусмотрена кнопка "спасибо" или что-то в этом роде? Вы меня прям-таки наставили на путь истинный))

Последний раз редактировалось DarkSwan; 11.10.2010 в 14:01.
DarkSwan вне форума Ответить с цитированием
Старый 11.10.2010, 16:59   #10
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Весы под ником
bondik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
формирование матрицы связности по списку по контактам hed Помощь студентам 1 19.09.2010 00:58
Формирование матрицы рассечением Mikhail Bakurov Помощь студентам 4 31.01.2010 13:39
Формирование матрицы по спирали RomT24 Помощь студентам 5 18.01.2010 02:38
формирование новой таблицы на основе исходной azov Microsoft Office Excel 2 18.07.2009 22:38
Формирование единичной и нулевой матрицы britva666 Помощь студентам 2 02.06.2009 08:09