Показать сообщение отдельно

  #966  
Старый 30.12.2008, 21:42
Cereus
Новичок
Регистрация: 09.11.2008
Сообщений: 15
Провел на форуме:
59870

Репутация: 16
По умолчанию

Цитата:
Сообщение от HencH_MaN  
Помогите с заданием по С++
Дан вещественный массив длины N. Разработать программу, которая сортирует массив так, что все его положительные числа находятся в начале, все отрицательные в конце, причем сохраняется исходный порядок следования элементов в соответствующих группах.
Как отсортировать по знаку что нужно использовать?
Данный способ основан на использовании двух дополнительных матриц - одна хранит положительные значения из входного массива, а вторая отрицательные. При данном способе можно было бы обойтись и без входного массива, но в ТВОЕМ задании сказано... Короче вот:

Код:
# include <cstdio>
# include <cstdlib>
# include <iostream>

using namespace std;

int main(){
cout<<"Введите количество элементов в матрице: ";
int n=1; //переменная хранящая количество элементов в марице
cin>>n;
double mas1[n];//главный массив
double masOtr[n];//массив для хранения отрицательных значений
double masPol[n];//массив для хранения положительных значений
int pol=0,otr=0;//переменные для хранения количества положительных и отрицательных элементов
for (int i=0;i<n;i++){//начало цикла заполняющего массивы
    cout<<"Вводится элемент №"<<i<<" ";
    cin>>mas1[i];//заполняем основной массив
    if (mas1[i]<0) {masOtr[otr]=mas1[i];otr++;} else {masPol[pol]=mas1[i];pol++;}; //выбираем положительные и отрицательные числа
}; //конец цикла заполняющего массивы
cout<<"\nСодержание матрицы до изменения\n";
for (int i=0;i<n;i++){
cout<<mas1[i]<<endl; //выводим содержание массива до сортировки
}
otr=0;
for (int i=0;i<n;i++){//начало сортировки массива
    if (i<pol) {mas1[i]=masPol[i];} else {mas1[i]=masOtr[otr];otr++;}; //собственно сортировка массива
                                                                       //отрицательные числа сортируются после всех
}//конец сортировки массива
cout<<"\nСодержание матрицы после фильтрации\n";
for (int i=0;i<n;i++){
cout<<mas1[i]<<endl; //вывод содержания массива после сортировки
}
system ("pause");//пауза для того чтобы посмотреть результат
return 0;
}
P.S.
Обращаюсь к знающим античатовцам: мои познания в C++ весьма скудны и поэтому прошу тех кто знает посмотреть на данный код и оптимизировать его и/или предложить более рациональный способ (мне самому уже интересны варианты решения данной задачи).
 
Ответить с цитированием