Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

Код:

#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,960
Репутация: 6799
По умолчанию

Цитата:
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
Репутация: 10
По умолчанию

Верно! Сравнение мое ни к черту.Спасибо!
Только вот теперь "особых" элементов оказалось 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,960
Репутация: 6799
По умолчанию

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

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,960
Репутация: 6799
По умолчанию

А-а-а вон что имеется ввиду. Я тебя разочарую, у тебя не матрица )
Видимо в таком случае твое условие будет таким
Код:

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
Репутация: 10
По умолчанию

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

Дело в том, что необходимо составить 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
Репутация: 10
По умолчанию

Немного поменял код
Код:

#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,699
Репутация: 615

icq: 426824418
По умолчанию

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 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




06:07.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru