Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Андрей Индранил
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 12
#1

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

26.09.2011, 20:49. Просмотров 601. Ответов 10
Метки нет (Все метки)

Как сделать что бы вместо сортировки массива (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;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2011, 20:49
Ответы с готовыми решениями:

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005:...

Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке
Задан массив из k символов. Преобразовать массив следующим образом: расположить...

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент
1. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую...

Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() {...

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

10
xAtom
918 / 743 / 299
Регистрация: 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++;
          }
     }
}
1
Net_Wanderer
235 / 208 / 29
Регистрация: 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 / 0
Регистрация: 26.09.2011
Сообщений: 12
26.09.2011, 21:30  [ТС] #4
да только можешь переделать мою програму ? )
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2011, 21:32 #5
Цитата Сообщение от Андрей Индранил Посмотреть сообщение
да только можешь переделать мою програму ? )

Не по теме:

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

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

Преобразовать массив следующим образом: сначала должны стоять цифры, входящие в массив, а затем все остальные символы
помогите пожайлуста с задачей. Задан массив из k символов. Преобразовать...

Дан двумерный массив. Преобразовать его так, чтобы новый массив содержал элементы старого, циклически сдвинутые на 2 элемента влево.
Уважаемые форумчане, такая проблема, не знаю как решить задачу, в моём городе...

Преобразовать массив Int в массив строк
Помогите пожалуйста с решением. Нужно в каждый элемент массива string положитm...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru