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

Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
01.03.2014, 22:04     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #1
В одномерном массиве, состоящей из n вещественных элементов, вычислить:
1) номер минимального элемента массива;
2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale> 
 
using namespace std;
 
double minElem(double *arr, int n);
double summElem(double *arr, int n);
 
int main() {
    int n = 0;
    
    setlocale(0, "rus");
    srand((unsigned)time(NULL));
 
    cout << "Введите количество элементов: ";
    cin >> n;
 
    double *arr = new double [n];
    
    for(int i = 0; i < n; i++) {
         arr[i]=rand() % 20 - 10;
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма элементов: " << summElem(arr, n) << endl;
    delete [] arr;
    
    system("PAUSE");
    return 0;
}
 
double minElem(double *arr, int n) 
{
    double min = arr[0];
 
    for(int i = 1; i < n; i++) {
        if(arr[i] < min)
            min = arr[i];
    }
    return min;
}
 
double summElem(double *arr, int n)
{
    double summ = 0.0;
    bool flag = false;  // Флаг
    int begin = 0;
    int end = 0;    
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < 0 && !flag) {
            begin = i;
            flag = true;
        }
        else if(arr[i] < 0 && flag) {
            end = i;
            break;
        }
    }
    
    for(int i = begin + 1; i < end; i++) {
        summ += arr[i];
    }
    return summ;
}
Пожалуйста, помогите сделать вот это:
3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale> 
 
using namespace std;
 
double minElem(double *, int);
double summa(double *, int);
 
int main() {
    int n = 0;
    
    setlocale(0, "rus");
    srand((unsigned)time(NULL));
 
    cout << "Введите количество элементов: ";
    cin >> n;
 
    double *arr = new double [n];
 
    for(int i = 0; i < n; i++) {
        cout << " [" << i << "] = ";
        cin >> arr[i];
    }
    cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма: " << summa(arr, n) << endl;
 
    delete [] arr;
    
    system("PAUSE");
    return 0;
}
 
double minElem(double *arr, int n) 
{
    double min = arr[0];
 
    for(int i = 1; i < n; i++) {
        if(arr[i] < min)
            min = arr[i];
    }
    return min;
}
 
double summa(double *arr, int n)
{
    bool flag = false;
    int one, two;
    double sum = 0.0;
 
    for(int i = 0; i < n; i++)
    {
        if(arr[i] < 0 && !flag)
        {
            one = i;
            flag = true;
            continue;
        }
        else if(arr[i] < 0 && flag)
        {
            two = i;
            break;
        }
    }
 
    for(int i = (one + 1); i < two; i++)
    {
        sum += arr[i];
    }
    return sum;
}
Желательно, обернуть классы и методы структурой, было бы хорошо... Заранее всем спасибо отписавшимся.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2014, 22:04     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1
Посмотрите здесь:

Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых не превышает 1, а потом все остальные C++
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом все отрицательные C++
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом - все остальные C++
C++ Преобразовать массив таким образом чтобы сначала располагались все элементы равные нулю а потом остальные
C++ Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
01.03.2014, 23:17     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void preobr(double *arr, int n)
{
int k=0;
double buf;
for(int i=0;i<n;i++)
if(abs(a[i])<=1)
{
buf=a[k];
a[k]=a[i];
a[i]=buf;
k++;
}
 
}
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
01.03.2014, 23:27  [ТС]     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #3
эмм что то не совсем понятно как это добавить в мою программу, чтобы выводила на экран исходный масив, а потом преобразованный..Как?
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
01.03.2014, 23:48     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #4
Цитата Сообщение от alucard115 Посмотреть сообщение
эмм что то не совсем понятно как это добавить в мою программу, чтобы выводила на экран исходный масив, а потом преобразованный..Как?
Вначале выводите исходный,затем вызываете функцию,которую вам написали и снова выводите уже преобразованный массив.
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
01.03.2014, 23:54  [ТС]     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #5
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale> 
 
using namespace std;
 
double minElem(double *arr, int n);
double summElem(double *arr, int n);
 
int main() {
    int n = 0;
    
    setlocale(0, "rus");
    srand((unsigned)time(NULL));
 
    cout << "Введите количество элементов: ";
    cin >> n;
 
    double *arr = new double [n];
    
    for(int i = 0; i < n; i++) {
         arr[i]=rand() % 20 - 10;
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма элементов: " << summElem(arr, n) << endl;
    delete [] arr;
    
    system("PAUSE");
    return 0;
}
 
double minElem(double *arr, int n) 
{
    double min = arr[0];
 
    for(int i = 1; i < n; i++) {
        if(arr[i] < min)
            min = arr[i];
    }
    return min;
}
 
double summElem(double *arr, int n)
{
    double summ = 0.0;
    bool flag = false;  // Флаг
    int begin = 0;
    int end = 0;    
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < 0 && !flag) {
            begin = i;
            flag = true;
        }
        else if(arr[i] < 0 && flag) {
            end = i;
            break;
        }
    }
    
    for(int i = begin + 1; i < end; i++) {
        summ += arr[i];
    }
    return summ;
}
 
cout << arr[i];
 
void preobr(double *arr, int n)
{
int k=0;
double buf;
for(int i=0;i<n;i++)
if(abs(a[i])<=1)
{
buf=a[k];
a[k]=a[i];
a[i]=buf;
k++;
}
 cout << a[i];
}
так что ли??
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
01.03.2014, 23:55     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #6
Цитата Сообщение от alucard115 Посмотреть сообщение
так что ли??
А вы запустите и сами скажете,подходит вам такой вариант или нет.
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
02.03.2014, 00:05  [ТС]     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #7
не компилируется...(
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
02.03.2014, 00:46     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #8
Цитата Сообщение от alucard115 Посмотреть сообщение
double minElem(double *arr, int n);
double summElem(double *arr, int n);
C++
1
2
3
double minElem(double *arr, int n);
double summElem(double *arr, int n);
void preobr(double *arr, int n);
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
02.03.2014, 13:13  [ТС]     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #9
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale> 
 
using namespace std;
 
double minElem(double *arr, int n);
double summElem(double *arr, int n);
double preobr(double *arr, int n); 
int main() {
    int n = 0;
    
    setlocale(0, "rus");
    srand((unsigned)time(NULL));
 
    cout << "Введите количество элементов: ";
    cin >> n;
 
    double *arr = new double [n];
    
    for(int i = 0; i < n; i++) {
         arr[i]=rand() % 20 - 10;
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма элементов: " << summElem(arr, n) << endl;
    cout << "\n Массив: " << preobr(arr, n) << endl;
    delete [] arr;
    
    system("PAUSE");
    return 0;
}
 
double minElem(double *arr, int n) 
{
    double min = arr[0];
 
    for(int i = 1; i < n; i++) {
        if(arr[i] < min)
            min = arr[i];
    }
    return min;
}
 
double summElem(double *arr, int n)
{
    double summ = 0.0;
    bool flag = false;  // Флаг
    int begin = 0;
    int end = 0;    
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < 0 && !flag) {
            begin = i;
            flag = true;
        }
        else if(arr[i] < 0 && flag) {
            end = i;
            break;
        }
    }
    
    for(int i = begin + 1; i < end; i++) {
        summ += arr[i];
    }
    return summ;
}
 
 
double preobr(double *arr, int n)
{
int k=0;
double buf;
for(int i=0;i<n;i++)
if(abs(arr[i])<=1)
{
buf=arr[k];
arr[k]=arr[i];
arr[i]=buf;
k++;
return buf;
}
 
}
Что то не то выводит.. Что возвращать нужно?
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
02.03.2014, 13:40     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #10
ты пытаешся вывести то что функция возвращает, а так как она ничего невозвращает то и выводит не то что нужно, в функцию preobr в конец добавь вывод массива, сейчас у тебя массив преобразуется но не выводится, либо после вызова этой функции выведи массив
C++
1
2
3
4
5
6
7
8
cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма элементов: " << summElem(arr, n) << endl;
    preobr(arr, n);
     for(int i = 0; i < n; i++) {
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    delete [] arr;
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
02.03.2014, 13:50  [ТС]     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #11
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale> 
 
using namespace std;
 
double minElem(double *arr, int n);
double summElem(double *arr, int n);
void preobr(double *arr, int n); 
int main() {
    int n = 0;
    
    setlocale(0, "rus");
    srand((unsigned)time(NULL));
 
    cout << "Введите количество элементов: ";
    cin >> n;
 
    double *arr = new double [n];
    
    for(int i = 0; i < n; i++) {
         arr[i]=rand() % 20 - 10;
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма элементов: " << summElem(arr, n) << endl;
    preobr(arr, n);
     for(int i = 0; i < n; i++) {
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    delete [] arr;
    
    system("PAUSE");
    return 0;
}
 
double minElem(double *arr, int n) 
{
    double min = arr[0];
 
    for(int i = 1; i < n; i++) {
        if(arr[i] < min)
            min = arr[i];
    }
    return min;
}
 
double summElem(double *arr, int n)
{
    double summ = 0.0;
    bool flag = false;  // Флаг
    int begin = 0;
    int end = 0;    
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < 0 && !flag) {
            begin = i;
            flag = true;
        }
        else if(arr[i] < 0 && flag) {
            end = i;
            break;
        }
    }
    
    for(int i = begin + 1; i < end; i++) {
        summ += arr[i];
    }
    return summ;
}
 
 
void preobr(double *arr, int n)
{
int k=0;
double buf;
for(int i=0;i<n;i++)
if(abs(arr[i])<=1)
{
buf=arr[k];
arr[k]=arr[i];
arr[i]=buf;
k++;
 
}
 
}
Сделал. Но он все равно не правильно выводит массив... Выбрал 4 элемента, и он их просто повторил, хотя там были и отрицательные значения..
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
02.03.2014, 13:55     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #12
программа работает правильно, она в начало массива помещает все числа модуль которых меньше или равен 1 и плоложительные и отрицательные в порядке встречаемости в массиве, т.е. если -1 встретилось раньше 0 то и после преобразования -1 будет стоять раньше
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2014, 14:10     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1
Еще ссылки по теме:

C++ Преобразовать массив таким образом, чтобы сначала располагались все по- ложительные элементы, а потом все остальные.как доработать?
C++ Преобразовать массив таким образом, чтобы сначала располагались четные, а потом нечетные элементы
C++ Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1

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

Или воспользуйтесь поиском по форуму:
alucard115
10 / 1 / 1
Регистрация: 07.05.2013
Сообщений: 67
02.03.2014, 14:10  [ТС]     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 #13
Всем спасибо, вот готовый вариант:
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale> 
 
using namespace std;
 
double minElem(double *arr, int n);
double summElem(double *arr, int n);
void preobr(double *arr, int n); 
int main() {
    int n = 0;
    
    setlocale(0, "rus");
    srand((unsigned)time(NULL));
 
    cout << "Введите количество элементов: ";
    cin >> n;
 
    double *arr = new double [n];
    
    for(int i = 0; i < n; i++) {
         arr[i]=rand() % 20 - 10;
        cout << " [" << i << "] = ";
        cout << arr[i];
    }
    cout << "\n Минимальный элемент: " << minElem(arr, n) << endl;
    cout << "\n Сумма элементов: " << summElem(arr, n) << endl;
    cout << "\n Преобразованный массив:"<<endl;
    preobr(arr, n);
     for(int i = 0; i < n; i++) {
        
        cout << " [" << i << "] = ";
        cout << arr[i]<<endl;
    }
    delete [] arr;
    
    system("PAUSE");
    return 0;
}
 
double minElem(double *arr, int n) 
{
    double min = arr[0];
 
    for(int i = 1; i < n; i++) {
        if(arr[i] < min)
            min = arr[i];
    }
    return min;
}
 
double summElem(double *arr, int n)
{
    double summ = 0.0;
    bool flag = false;  // Флаг
    int begin = 0;
    int end = 0;    
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < 0 && !flag) {
            begin = i;
            flag = true;
        }
        else if(arr[i] < 0 && flag) {
            end = i;
            break;
        }
    }
    
    for(int i = begin + 1; i < end; i++) {
        summ += arr[i];
    }
    return summ;
}
 
 
void preobr(double *arr, int n)
{
int k=0;
double buf;
for(int i=0;i<n;i++)
if(abs(arr[i])<=1)
{
buf=arr[k];
arr[k]=arr[i];
arr[i]=buf;
k++;
 
}
 
}
Yandex
Объявления
02.03.2014, 14:10     Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1
Ответ Создать тему
Опции темы

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