Форум программистов, компьютерный форум CyberForum.ru

преобразовать массив - C++

Восстановить пароль Регистрация
 
Андрей Индранил
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 12
26.09.2011, 20:49     преобразовать массив #1
Как сделать что бы вместо сортировки массива (sortir) элементы массива распологались сначала отрицательные а потом положительные ?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <cmath>
 
using namespace std;
 
void sortir(double *arr, short n){
    short i;
 
    for(i=0; i<n-1; i++)
    {
        short imax=i;
 
        for(int j=i+1; j<n; j++)
            if(arr[j]<arr[imax])    imax=j;
 
        double a=arr[i];
        arr[i]=arr[imax];
        arr[imax]=a;
    }
};
 
void vivod(double *arr , short n){
    cout<<"Yporyadochennii massiv: ";
    //Вывод упорядоченного массива
    for(int i=0; i<n; i++)  cout<<arr[i]<<" ";
    cout<<endl;
};
 
int multitrd(double *arr, short max, short n){
    double mult=1;
    for(short i=max+1; i<n; i++)
        //подсчет произведения эл-ов массива расположенных после max элемента
        mult*=arr[i];
    return mult;
}
 
int main(){
    short ccol=0, max=0, n=0, c;
 
    cout<<"Vvedite razmernost massiva - n: ";
    cin>>n;
    cout<<endl;
 
    cout<<"Vvedite c: ";
    cin>>c;
    cout<<endl;
 
    //Динамич. массив
    double *arr = new double[n];
    
    cout<<"Vvedite "<<n<<" elementov massiva: ";
 
    for(short i=0; i<n; i++)
    {
        //Заполнение массива
        cin>>arr[i];
        //Нахождение количества элементов > C
        if (arr[i]>c) ccol++;
        //Нахождение позиции макс елемента
        max=fabs(arr[i])>fabs(arr[max])?i:max;
    }
 
    cout<<"Kolvo elementov > C: "<<ccol<<"\n"
        "Proizv elementov massiva, posle maximal'nogo elementa: "<<multitrd(arr,max,n)<<endl;
    
    sortir(arr,n);
    vivod(arr,n);
 
    delete []arr;
 
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2011, 20:49     преобразовать массив
Посмотрите здесь:

C++ преобразовать массив
Преобразовать массив следующим образом: сначала должны стоять цифры, входящие в массив, а затем все остальные символы C++
Дан двумерный массив. Преобразовать его так, чтобы новый массив содержал элементы старого, циклически сдвинутые на 2 элемента влево. C++
C++ Преобразовать массив
Преобразовать массив Int в массив строк C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
26.09.2011, 21:18     преобразовать массив #2
Андрей Индранил, типа этого.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
void  us_sort(int* arr, const int size);
 
int   main(void) {
   const int N = 11;
   int arr[N]   = {  2, -3, 400, 9300, -100, 11, -55, -200, -530, 50, 3 };
 
   us_sort(arr, N);
 
   for(int i = 0; i < N; i++)
           printf("%d, ", arr[i]);
   putchar('\n');
 
    getchar();
    return 0;
}
 
void  us_sort(int* arr, const int size) {
    int tmp, cnt = 0;
    for(int i = 0; i < size; i++) {
         if( arr[i] < 0) {
              for(int j = i; j > cnt; j--) {
                     tmp  = arr[j];
                     arr[j] = arr[j - 1];
                     arr[j - 1] = tmp;
              }
              cnt++;
          }
     }
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.09.2011, 21:25     преобразовать массив #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 10
 
int main()
{
    int i, j, t, a[N];
 
    srand(time(NULL));
    for (i = 0; i < N; i++)
        printf("%d%c", a[i] = rand() % 21 - 10, 
            (i != N-1) ? ' ' : '\n');
 
    for (i = 1, j = 0; i < N; i++)
        if (a[j] < 0)
            j++;
        else if (a[i] < 0) {
            t = a[i], a[i] = a[j], a[j] = t;
            j++;
        }
 
    for (i = 0; i < N; i++)
        printf("%d%c", a[i], (i != N-1) ? ' ' : '\n');
    return 0;
}
Андрей Индранил
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 12
26.09.2011, 21:30  [ТС]     преобразовать массив #4
да только можешь переделать мою програму ? )
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2011, 21:32     преобразовать массив #5
Цитата Сообщение от Андрей Индранил Посмотреть сообщение
да только можешь переделать мою програму ? )

Не по теме:

Очень часто легче сконструировать алгоритм решения задачи в своей голове, чем анализировать чужой, тем более, с ошибками.

Liebe
...
 Аватар для Liebe
891 / 74 / 5
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
26.09.2011, 22:03     преобразовать массив #6
Цитата Сообщение от Андрей Индранил Посмотреть сообщение
Как сделать что бы вместо сортировки массива (sortir) элементы массива распологались сначала отрицательные а потом положительные ?
упорядочить массив по возрастанию - таким образом, у вас будут идти сначала отрицательные элементы, а потом положительные. Вам ведь без разницы в каком порядке располагаются между собой отрицательные и положительные, главное, чтобы положительные были после отрицательных, так?
Андрей Индранил
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 12
26.09.2011, 22:07  [ТС]     преобразовать массив #7
Да вы меня понели
Liebe
...
 Аватар для Liebe
891 / 74 / 5
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
26.09.2011, 22:08     преобразовать массив #8
Цитата Сообщение от Андрей Индранил Посмотреть сообщение
Да вы меня понели
Ну тогда и менять ничего не надо - у вас ведь и так по возрастанию упорядочивается.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2011, 22:11     преобразовать массив #9
Цитата Сообщение от liebe Посмотреть сообщение
упорядочить массив по возрастанию
Не очень умная идея. Можно решить задачу за один проход по массиву без всяких сортировок, сложность которых в лучшем случае для произвольного массива O(n*log n)
Liebe
...
 Аватар для Liebe
891 / 74 / 5
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
26.09.2011, 22:19     преобразовать массив #10
Цитата Сообщение от Thinker Посмотреть сообщение
Не очень умная идея. Можно решить задачу за один проход по массиву без всяких сортировок, сложность которых в лучшем случае для произвольного массива O(n*log n)
Ну так предложите свой очень умный вариант решения )))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2011, 22:19     преобразовать массив
Еще ссылки по теме:

Преобразовать массив C++
C++ Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент
Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2011, 22:19     преобразовать массив #11
Легко, как раз после того поста написал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Transform(int *a, int n)
{
   int i = 0, j = n - 1, buf;
   while (i < j)
   {
       while (i < j && a[i] < 0)
          i++;
       while (i < j && a[j] >= 0)
          j--;
       if (i < j)
       {
           buf = a[i]; a[i] = a[j]; a[j] = buf;
           i++; j--;
       }
   }
}
Yandex
Объявления
26.09.2011, 22:19     преобразовать массив
Ответ Создать тему
Опции темы

Текущее время: 18:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru