Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Одномерные динамические массивы

Ответить
Настройки темы
C/C++ - [решено] Одномерные динамические массивы

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите пожалуйста разобраться, задали задание:
В целочисленном динамическом массиве Х(N) удалить все нечетные числа.
Проверить, как поменялось положение максимального элемента массива.
Найти среднее арифметическое элементов массива до и после удаления. В
программе написать функции: удаления элемента, поиска номера
максимального элемента, вычисления среднего арифметического элементов
массива.
Вроде бы все написал, но не могу написать саму функцию удаления элемента данного массива... Пишет, что нельзя удалить объект не являющийся указателем... Помогите пожалуйста. Можно ли удалить конкретные элементы динамического массива...

Цитата:
#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
void coutt(int *_mass,int _size) //Функция вывода массива на экран
{ for(int i=0;i<_size;i++)
cout<<_mass[i]<<" ";
cout<<endl;
}
void raschet(int *_mass,int _size) //Функция вычисления максимального элемента и среднего значения элементов
{
int max=_mass[0],summ=0,elem;
float elementi=0;
float sred;
for(int i=0;i<_size;i++)
{
if(max<=_mass[i])
{
max=_mass[i];
elem=i;
}
summ=summ+_mass[i];
elementi++;
}

sred=summ/elementi;
cout<<"Maxsimalnii element massiva "<<"[ "<<elem<<" ] "<<max<<endl;
cout<<"Srednee znachenie elementov "<<sred<<endl;
cout<<endl;
}
void delet(int *_mass,int _size) //Функция удаления нечетного элемента массива
{ for(int i=0;i<_size;i++)
{
if(_mass[i]%2!=0)
delete _mass[i];
}
}
void main ()
{
srand(time(0));
int size;
cout<<"\t\t\tVvedite razmer massiva -> ";cin>>size;
cout<<endl;
int *mass=new int[size]();
for(int i=0;i<size;i++)
{
mass[i]=rand()%10;
cout<<mass[i]<<" ";
}
cout<<endl;
raschet(mass,size);
cout<<endl;


delet(mass,size);
coutt(mass,size);
raschet(mass,size);



delete []mass;
system ("pause");
}

Отправлено: 02:50, 22-03-2012

 

Аватара для ViRTaCe

Пользователь


Сообщения: 139
Благодарности: 11

Профиль | Отправить PM | Цитировать


Удалить один элемент из массива нельзя, надо создавать еще один массив. Просто когда ищешь нечетные, помечай их нулями(ну или -1), и счетчик заведи который посчитает их кол-во. Потом от первоначального размера массива отними счетчик, создай полученный массив, и забей его не нулевыми элементами, а старый удали.

-------
Кривые руки исправляются опытом.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:31, 23-03-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата keks666sex:
Можно ли удалить конкретные элементы динамического массива... »
Удалять конкретные элементы можно только в "списке" - массив, как последовательный набор информации, таких действий не позволяет.
Что можно сделать
1. Выделить такой же объём информации под другой массив.
2. Создать отдельную переменную - количество элементов во втором массиве.
3. При совпадении условия копировать элемент из первого массива в конец второго массива (в позицию, определяемую переменной из п.2)
По завершении проверки обработать все актуальные элементы второго массива

Код: Выделить весь код
void raschet(int *_mass,int _size)
{
int *other = new int [_size];
int ocount = 0;
// Цикл проверки 
for (int i = 0; i < _size; i++)
{
  if (УСЛОВИЕ_ПРОВЕРКИ)
    other [ocount++] = _mass [i];
}
// Цикл вывода для второго массива
for (int i = 0; i < ocount; i++)
{
  ЧТО_ТО_ДЕЛАЕШЬ...
}
}

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 08:01, 30-03-2012 | #3


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо всем.. я все таки решил...
Код: Выделить весь код
#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
void coutt(int *_mass,int _size)	//Функция вывода массива на экран
{	for(int i=0;i<_size;i++)
	cout<<setw(4)<<_mass[i];
cout<<endl<<endl;
}
void raschet(int *_mass,int _size) //Функция  вычисления максимального элемента  и среднего значения элементов массива
{
	int max=_mass[0],summ=0,nomer; 
	float elementi=0;
	float sred;
	for(int i=0;i<_size;i++) //Вычисляем максимальный элемент и его номер
	{
		if(max<=_mass[i])
		{	
			max=_mass[i];
			nomer=i;
		}
		summ=summ+_mass[i]; //Вычисляем сумму всех элементов массива
		elementi++; //Вычисляем количество элементов массива
	}

	sred=summ/elementi;	//Вычисляем среднее значение элементов массива
	cout<<"Maxsimalnii element massiva	"<<"[ "<<nomer<<" ] "<<max<<endl;	//Выводим результаты на экран
	cout<<"Srednee znachenie elementov "<<sred<<endl;
	}
void delet(int *_mass,int _size,int _elem) //Функция удаление простых чисел в массиве
{	
	int b; //Будет хранить простое число 
	int a; //Будет хранить номер простого числа
	int del; //Делитель
	for(int i=0;i<_size;i++) //Вычисление и удаление простого числа	
	{ 
		del=2;
		for( ; del <=_mass[i]/ 2 ; del++ ) //Проверка на простое число 
		{
			if( _mass[i]%del == 0 ) //Если условие выполняется то Число Не простое
				break ;	//выход из цикла
		}
		if( del >_mass[i] /2 && _mass[i]!=0 && _mass[i]!=1 ) //Если условие выполняется то Число простое 
		{	
			a=i;  //присваиваем номер простого числа
			b=_mass[i]; //присваиваем простое число
			for(;a<_size;a++) //Поиск Не простое число
			{	
				if(_mass[a]==1 || _mass[a]==0)//Если условие выполняется то
				{
					_mass[i]=_mass[a]; //Меняем простое и не простое число местами
					_mass[a]=b;
					break;	//выход из цикла 				
				} 
				del=2;	//присваиваем делителю значение 2
				for( ; del <=_mass[a]/ 2; del++ ) //Проверка на НЕ простое число 
					if( _mass[a]%del==0) //Если условие выполняется то
						{	//Меняем простое и не простое число местами
							_mass[i]=_mass[a];
							_mass[a]=b;
						a=_size;	//Присваиваем размер, что бы прекратился предыдущий цикл
							break; //выход из цикла
						}

			}		
			
		}
	}
}
void main ()
{
	srand(time(0)); // инициализация генератора случайных чисел
	int size,elem=0; 
    cout<<"\t\t\tVvedite razmer massiva -> ";cin>>size; //Вводим размер массива
	cout<<endl;
	int *mass=new int[size](); //Создаем динамический массив
	cout<<"Massiv:";
	for(int i=0;i<size;i++)	//Заполняем массив 
	{	
		mass[i]=rand()%10; //Заполняем случайными числами
		cout<<setw(4)<<mass[i]; //Выводим на массив экран
	}
	cout<<endl<<endl;
	raschet(mass,size); //Вызываем функцию вычисления максимального элемента  и среднего значения элементов массива
	cout<<endl;
	int del;
	for(int i=0;i<size;i++) //Находим количество Простых чисел
	{del=2; //Задаем делитель
			for( ; del <=mass[i]/ 2 ; del++ )//Проверка на простое число
			{
			if( mass[i]%del == 0 )// Если выполняется число НЕ простое
			break ;	//выход из цикла
			}
			if( del >mass[i] /2 && mass[i]!=0 && mass[i]!=1)	//Если выполняется число  простое
			elem++;	//Увеличиваем число простых чисел на 1
	}
	cout<<"\t\t... Kolichestvo prostih chisel -> "<<elem<<" ..."<<endl<<endl; //Выводим количество простых чисел на экран
	delet(mass,size,elem); //Вызов Функции удаление простых чисел
	size-=elem; //Вычитаем из размера массива количество простых чисел
	cout<<"Massiv posle udaleniya:";
	coutt(mass,size); //Вызываем функцию вывода массива
 	raschet(mass,size); //Вызываем функцию вычисления максимального элемента  и среднего значения элементов массива
	
	delete []mass; //Удаляем динамический массив 
	system ("pause"); //Задержка экрана
}

Отправлено: 22:34, 01-04-2012 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Одномерные динамические массивы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Одномерные массивы Петр2 Программирование и базы данных 2 04-03-2011 17:22
Динамические таблицы в PHP ssdm Вебмастеру 3 12-03-2007 06:47
VBS/WSH/JS - VBS | Динамические массивы, циклы и присваивание mrcnn Программирование и базы данных 5 22-10-2006 14:12
динамические менюшки Surround Вебмастеру 2 20-07-2004 02:42
Динамические двумерные массивы Nealles Программирование и базы данных 3 05-09-2003 21:59




 
Переход