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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 14:07   #1
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
Вопрос Динамическая память (массивы)

Приветствую!
Помогите пожалуйста исправить ошибку. Необходимо выяснить коли-во "особых" элементов двумерного массива, считая элемент "особым", если в его строке слева от него находятся элементы меньшие его, а справа-большие.
Вот мой код:

Код:
#include<iostream>
#include <conio.h>
#include <cstdio>
#include<cstdlib>

using namespace std;
void main()
{
	setlocale(LC_ALL, "RUS");
	int n,i,s=0;//Кол-во элементов строки и кол-во особых элементов
cout<<"Введите кол-во элементов в строке:";
	cin>>n;
	int *mas,*ptr;//Двумерный массив
	mas=new int[n*n];//Выделение памяти матрице
	cout<<"Введите элементы матрицы:\n";
	for(i=0,ptr=mas;i<n*n;i++,ptr++)
		cin>>*ptr;

	//Вывод элементов матрицы
	for(i=0,ptr=mas;i<n*n;i++,ptr++)
	{
		if(i%n==0)
			cout<<"\n";
		cout<<*ptr;
	if(ptr-1<ptr&ptr<ptr+1)
	{
		*ptr=s;
		s++;
	}
	}
	cout<<"\nКол-во особых элементов:"<<s;
	system("pause");
	getch();
}
Компилятор ошибок не выдает. Но в результате я получаю простое количество элементов, а не кол-во так называемых "особых".....

Примерно так:

Введите кол-во элементов в строке:4
Введите элементы матрицы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Кол-во особых элементов:16
Для продолжения нажмите любую клавишу . . .
Доводи начатое до конца прежде чем начать другое дело.....
s_t_c вне форума Ответить с цитированием
Старый 19.11.2012, 14:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if(ptr-1<ptr&ptr<ptr+1)
Это не сравнение. Пробуй так:
Код:
if(*(ptr-1)<*ptr && *ptr<*(ptr+1))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2012, 15:06   #3
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

Верно! Сравнение мое ни к черту.Спасибо!
Только вот теперь "особых" элементов оказалось 15. Судя по заданию их должно оказаться 8:

..... считая элемент "особым", если в его строке слева от него находятся элементы меньшие его, а справа-большие (слева и справа в каждой строке).

Или я что-то не правильно понял?
Доводи начатое до конца прежде чем начать другое дело.....

Последний раз редактировалось s_t_c; 19.11.2012 в 15:09.
s_t_c вне форума Ответить с цитированием
Старый 19.11.2012, 15:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Судя по заданию их должно оказаться 8:
С какого перепугу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2012, 15:41   #5
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

В первой строке-элементы со значениями 2 и 3, так как 3>2>1 и 2<3<4;
Во второй-6 и 7(5<6<7 и 6<7<8);
В третьей- 10 и 11.......
В четвертой 14 и 15.........
Итого 8 элементов.
Или не так?
Доводи начатое до конца прежде чем начать другое дело.....
s_t_c вне форума Ответить с цитированием
Старый 19.11.2012, 16:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а вон что имеется ввиду. Я тебя разочарую, у тебя не матрица )
Видимо в таком случае твое условие будет таким
Код:
if(
 (i%n!=0) &&
 (*(ptr-1)<*ptr && *ptr<*(ptr+1))
)
Или делай матрицу, а не одномерный массив
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2012, 16:22   #7
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

Да... Я такое условие уже попробовал. Ерунда опять получается. Тут действительно матрица нужна. Только вот пока что-то не получается у меня ее сформировать. Запутался совсем. Я ведь только учусь
Не подскажешь что нибудь? А то закипел уже.........

Дело в том, что необходимо составить 2 варианта программы: с использованием индексов и указателей.
Пока речь идет об использовании указателей.
Доводи начатое до конца прежде чем начать другое дело.....

Последний раз редактировалось s_t_c; 19.11.2012 в 16:36.
s_t_c вне форума Ответить с цитированием
Старый 19.11.2012, 16:46   #8
s_t_c
АСУТП
Пользователь
 
Аватар для s_t_c
 
Регистрация: 29.07.2012
Сообщений: 19
По умолчанию

Немного поменял код
Код:
#include<iostream>
#include <conio.h>
#include <cstdio>
#include<cstdlib>

using namespace std;
void main()
{
	setlocale(LC_ALL, "RUS");
	int n,i,s=0;//Кол-во элементов строки и кол-во особых элементов
cout<<"Введите кол-во элементов строк и столбцов:";
	cin>>n;
	int *mas,*ptr;//Двумерный массив
	mas=new int[n*n];//Выделение памяти матрице
	cout<<"Введите элементы матрицы:\n";
	for(i=0,ptr=mas;i<n*n;i++,ptr++)
		cin>>*ptr;

	//Вывод элементов матрицы
	for(i=0,ptr=mas;i<n*n;i++,ptr++)
	{
		if(i%n==0)
			cout<<"\n";
		cout<<*ptr<<"\t";
	}
	for(i=0,ptr=mas;i<n*n;i++,ptr++)
	{
		if(*(ptr+1)>*ptr && *(ptr+1)<*(ptr+2))
			s++;
	}
	cout<<"\nКол-во особых элементов:"<<s<<"\n";
	system("pause");
	getch();
}
По моему стало выглядеть более правдоподобнее

Цитата:
Введите кол-во элементов строк и столбцов:3
Введите элементы матрицы:
1
2
3
4
5
6
7
8
9

1 2 3
4 5 6
7 8 9
Кол-во особых элементов:7
Для продолжения нажмите любую клавишу . . .
Только это все равно это одномерка
Доводи начатое до конца прежде чем начать другое дело.....
s_t_c вне форума Ответить с цитированием
Старый 20.11.2012, 12:23   #9
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

mas[x][y] для 2х мерного массива
mas[x + y*w] тоже для одномерного, w - ширина матрицы
Вывод матрицы на экран:
Код:
for(int j = 0; j < rows; j++)
{
	for(int i = 0; i < cols, i++)
	{
		cout << mas[i + j*cols];
	}
	cout << endl;
}
также можно использовать указатель на указатель:
Код:
int **mas = new int *[rows];
for(int i = 0; i < rows; i++)
	mas[i] = new int[cols];
mas[0][0] = 5;
Kostia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память С++ onewho Помощь студентам 4 04.02.2011 17:27
Динамическая память Ledom Общие вопросы C/C++ 9 26.11.2010 00:07
Динамическая память Astat Помощь студентам 1 30.06.2010 20:40
Динамическая память!!! Doholyan Паскаль, Turbo Pascal, PascalABC.NET 12 30.06.2009 17:11
Динамическая память MadDog__ Помощь студентам 2 22.11.2007 00:05