Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Одномерные динамические массивы (http://forum.oszone.net/showthread.php?t=230967)

keks666sex 22-03-2012 02:50 1884374

Одномерные динамические массивы
 
Помогите пожалуйста разобраться, задали задание:
В целочисленном динамическом массиве Х(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");
}

ViRTaCe 23-03-2012 02:31 1885075

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

El Scorpio 30-03-2012 08:01 1889772

Цитата:

Цитата 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++)
{
  ЧТО_ТО_ДЕЛАЕШЬ...
}
}


keks666sex 01-04-2012 22:34 1891568

Спасибо всем.. я все таки решил...
Код:

#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"); //Задержка экрана
}



Время: 07:34.

Время: 07:34.
© OSzone.net 2001-