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

С++... сортировка по модулю. - C++

Восстановить пароль Регистрация
 
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
10.12.2010, 01:09     С++... сортировка по модулю. #1
В одномерном массиве, состоящим из n вещественных элементов вычислить
1)Номер минимального элемента массива
2)Сумму элементов массива расположенных между первым и вторым отрицательным элементами массива.
Преобразовать массив таким образом что бы сначала располагались все элементы модуль которых не превышает 1, а потом – все остальные.

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <cmath>
using namespace std;
//Прототип функции для ввода вектора
void inputv(double x[],int n);
//Прототип функции для вывода вектора
void outputv(double x[],int n);
//Прототип функции для вычисления индекса минимального элемента
void min(double x[],int n,int&m);
//Прототип функции для вычисления суммы между первым и вторым отрицательными элементами
void summ(double x[],int n, double&S);
//Прототип функци для сортировки
void sort(double x[],int n);
//Главная функция
void main()
{//Руссификация
    setlocale(LC_ALL,"Russian");
//Объявляем вектор и переменные
    double a[5],S;
    int m,j,i;
//Ввод вектора
    cout<<"\n Ввести через пробел координаты вектора \n";
    inputv(a,5);
 
//Вычисления индекса минимального элемента
    min(a,5,m);
    cout<<"\n Индекс минимальной координаты вектора ="<<m;
    cout<<endl;
//Вычисления суммы между первым и вторым отрицательными элементами
    summ(a,5,S);
    cout<<"\n Сумма между первым и вторым отрицательными элементами="<<S;
    cout<<endl;
//Сортировка
    sort(a,5);
    cout<<"\n ***Вектор В***\n";
    cout<<endl;
}
//Функция для ввода координат вектора
void inputv(double x[],int n)
{//Объявляем переменную
    int i;
    for(i=0;i<n;i++)
    cin>>x[i];
}
//Функция для вывода вектора
void outputv(double x[],int n)
{//Объявление переменной
int i;
for (i=0;i<n;i++)
cout<<x[i];
}
//Вычисление номера минимального элемента массива
void min(double a[],int n,int&m)
{//Объявляем переменные
    int i;
    double k=a[0];
    //Вычисления
    for(i=1;i<n;i++)
        if (a[i]<k)
            {k=a[i];
            m=i;
            }
        
}
//Определение функции для суммы
void summ(double a[], int n, double&S)
{
    //Объявляем переменные
    int i,j;
    //Вычисления
    S=0;
    for(i=1;i<n;i++)
    {if(a[i]<0)
        {for(j=i+1;j<n;j++)
            {   if(a[j]<0) break;
                S=S+a[j];
            }
            break;
        }
    }
}
//Определение функции для сортировки
void sort(double a[], int n)
{//Объявляем переменные
    double b[5];
    int i,j=0;
//Вычисления
    for(i=0;j<n;i++)
    {if (fabs(a[i])<=1)
        {b[j]=a[i];
         j++;
        }
    
        for (i=0;i<n;i++)
        if (fabs(a[i])>1)
        {   b[j]=a[i];
            j++;
        }
    }
}

Работает все кроме сортировки!!! что не так сделал!?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2010, 01:09     С++... сортировка по модулю.
Посмотрите здесь:

C++ Деление по модулю
Произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами C++
Сортировка массива по модулю C++
Одномерный массив ( вычислить произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами) C++
Найти произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.12.2010, 02:07     С++... сортировка по модулю. #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
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <cmath>
using namespace std;
//Прототип функции для ввода вектора
void inputv(double x[],int n);
//Прототип функции для вывода вектора
void outputv(double x[],int n);
//Прототип функции для вычисления индекса минимального элемента
void min(double x[],int n,int&m);
//Прототип функции для вычисления суммы между первым и вторым отрицательными элементами
void summ(double x[],int n, double&S);
//Прототип функци для сортировки
void sort(double x[],int n);
//Главная функция
void main()
{//Руссификация
setlocale(LC_ALL,"Russian");
//Объявляем вектор и переменные
double a[5],S;
int m;
//Ввод вектора
cout<<"\n Ввести через пробел координаты вектора \n";
inputv(a,5);
 
//Вычисления индекса минимального элемента
min(a,5,m);
cout<<"\n Индекс минимальной координаты вектора ="<<m;
cout<<endl;
//Вычисления суммы между первым и вторым отрицательными элементами
summ(a,5,S);
cout<<"\n Сумма между первым и вторым отрицательными элементами="<<S;
cout<<endl;
//Сортировка
sort(a,5);
cout<<"\n ***Вектор В***\n";
outputv(a, 5);
cout<<endl;
}
//Функция для ввода координат вектора
void inputv(double x[],int n)
{//Объявляем переменную
int i;
for(i=0;i<n;i++)
cin>>x[i];
}
//Функция для вывода вектора
void outputv(double x[],int n)
{//Объявление переменной
int i;
for (i=0;i<n;i++)
cout<<x[i]<<" ";
}
//Вычисление номера минимального элемента массива
void min(double a[],int n,int&m)
{//Объявляем переменные
int i;
double k=a[0];
//Вычисления
for(i=1;i<n;i++)
if (a[i]<k)
{k=a[i];
m=i;
}
 
}
//Определение функции для суммы
void summ(double a[], int n, double&S)
{
//Объявляем переменные
int i,j;
//Вычисления
S=0;
for(i=1;i<n;i++)
{if(a[i]<0)
{for(j=i+1;j<n;j++)
{ if(a[j]<0) break;
S=S+a[j];
}
break;
}
}
}
//Определение функции для сортировки
void sort(double a[], int n)
{//Объявляем переменные
int i,j=0;
//Вычисления
for(i=0;i<n;i++)
{if (fabs(a[i])<=1)
{
    double temp=a[i];
    a[i]=a[j];
    a[j]=temp;
j++;
}
}
}
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
12.12.2010, 17:56  [ТС]     С++... сортировка по модулю. #3
Вот еще вопрос... а почему когда я ввожу массив и в не присутствует 0. То у меня не получается ни номер минимального элемента ни сумма. ?


Ввести через пробел координаты вектора
-8 4 68 0 -7

Индекс минимальной координаты вектора =-858993460

Сумма между первым и вторым отрицательными элементами=0

***Вектор В***
0 4 68 -8 -7
Для продолжения нажмите любую клавишу . . .
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.12.2010, 18:25     С++... сортировка по модулю. #4
BorAl, У Вас написаны функции для вычисления номера минимального элемента и суммы не правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
void min(double a[],int n,int&m)
{//Объявляем переменные
int i;
double k=a[0];
//Вычисления
for(i=1;i<n;i++)
if (a[i]<k)
{k=a[i];
m=i;
} 
}
когда осуществляется вход в функцию min() у переменной m нет вообще никакого значения. И если окажется что минимальный элемент самый первый, то m остается такой же как и была (с никаким значением).
А насчет суммы:
эту строку в функции summ():
C++
1
for(i=1;i<n;i++)
замените на эту:
C++
1
for(i=0;i<n;i++)
Yandex
Объявления
12.12.2010, 18:25     С++... сортировка по модулю.
Ответ Создать тему
Опции темы

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