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

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

Восстановить пароль Регистрация
 
Ramesses
0 / 0 / 0
Регистрация: 02.03.2014
Сообщений: 5
23.06.2014, 20:28     Неправильный вывод. Преобразовать массив: сначала расположить элементы, модуль которых не больше 1 #1
Основное условие: В одномерном массиве, состоящем из n-вещественных элементов. вычислить:
1) номер минимального элемента массива;
2) Сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
Преобразовать массив так, чтобы сначала располагались элементы. которые по модулю не превышающие 1, а потом все остальные.
Все сделал, но есть проблема - уже преобразованый массив выдается правильно, но лишь пока числа не превысили 1, потом оно меняет числа местами.
Пример: массив 11 -0.3 2 5 0.11 0.05 -3 0 -0.11 0.29
Должно быть: -0.3 0.11 0.05 0 -0.11 0.29 11 2 5 -3
А выдает: -0.3 0.11 0.05 0 -0.11 0.29 -3 5 11 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
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include "stdio.h"
#include <cmath> 
#include <iomanip>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Ukrainian");
    cout << "Введiть елементи послiдовностi:\n";
    const int n = 10;
    float array[n];
    for (int i = 0; i<n; i++)
    {
        cin >> array[i];
    }
    float min = array[0];
 
    {int d = 0;
    for (int i = 1; i < n; i++)
    {
        if (array[i] < min)
        {
            min = array[i];
            d = i;
        }
    }
    cout << "Номер мiнiмального елемента: " << d << endl;
 
    }
 
 
    float sum = 0;
    int fne = n;
    for (int i = 0; i<n; i++)
    {
        if (array[i] < 0)
        {
            fne = i;
            break;
        }
    }
    for (int i = fne + 1; i<n; i++)
    {
        if (array[i] < 0)
        {
            break;
        }
        else
        {
            sum += array[i];
        }
    }
    cout << "sum: " << sum << endl;
 
    int j = 0,buf;
    for (int i = 0; i < n; i++)
    {
        if (array[i] > 1){
            j = i;
            while (j<n){
                if (array[j]<=1){
                    buf = array[i];
                    array[i] = array[j];
                    array[j] = buf;
                    break;
                }
                j++;
            }
        }
    }
    cout << "New array :" << endl;
    for (int j = 0; j<n; j++){ cout << array[j]<<"\t" ; }
 
    _getche();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2014, 20:28     Неправильный вывод. Преобразовать массив: сначала расположить элементы, модуль которых не больше 1
Посмотрите здесь:

Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых не превышает 1, а потом все остальные C++
C++ Преобразовать массив, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%
C++ Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1 C++
C++ Преобразовать массив: сначала расположить все элементы, целая часть которых не превышает 1, потом - остальные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
23.06.2014, 20:51     Неправильный вывод. Преобразовать массив: сначала расположить элементы, модуль которых не больше 1 #2
Цитата Сообщение от Ramesses Посмотреть сообщение
А выдает: -0.3 0.11 0.05 0 -0.11 0.29 -3 5 11 2
А чем такой вывод не удовлетворяет условию ? Или нужно сохранить порядок следования элементов ?
Ramesses
0 / 0 / 0
Регистрация: 02.03.2014
Сообщений: 5
23.06.2014, 21:00  [ТС]     Неправильный вывод. Преобразовать массив: сначала расположить элементы, модуль которых не больше 1 #3
Цитата Сообщение от BatonPro Посмотреть сообщение
А чем такой вывод не удовлетворяет условию ? Или нужно сохранить порядок следования элементов ?
Да, сохранить порядок следования. Если б не надо бьіло, я б и так оставил
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
23.06.2014, 21:47     Неправильный вывод. Преобразовать массив: сначала расположить элементы, модуль которых не больше 1 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include "stdio.h"
#include <cmath> 
#include <iomanip>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Ukrainian");
    cout << "Введiть елементи послiдовностi:\n";
    const int n = 10;
    float array[n];
    for (int i = 0; i<n; i++)
    {
        cin >> array[i];
    }
    float min = array[0];
 
    {int d = 0;
    for (int i = 1; i < n; i++)
    {
        if (array[i] < min)
        {
            min = array[i];
            d = i;
        }
    }
    cout << "Номер мiнiмального елемента: " << d << endl;
 
    }
 
 
    float sum = 0;
    int fne = n;
    for (int i = 0; i<n; i++)
    {
        if (array[i] < 0)
        {
            fne = i;
            break;
        }
    }
    for (int i = fne + 1; i<n; i++)
    {
        if (array[i] < 0)
        {
            break;
        }
        else
        {
            sum += array[i];
        }
    }
    cout << "sum: " << sum << endl;
 
    int j = 0;
    float buf;
    for (int i = 0; i < n; i++)
    {
        if (abs(array[i]) <= 1){
            j=i;
            while (abs(array[j-1])>1 && j>0){
                    buf = array[j];
                    array[j] = array[j-1];
                    array[j-1] = buf;
                j--;
            }
        }
    }
    cout << "New array :" << endl;
    for (int j = 0; j<n; j++){ cout << array[j]<<"\t" ; }
 
    _getche();
    return 0;
}
Yandex
Объявления
23.06.2014, 21:47     Неправильный вывод. Преобразовать массив: сначала расположить элементы, модуль которых не больше 1
Ответ Создать тему
Опции темы

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