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

Баги в коде. Одномерные массивы - C++

Восстановить пароль Регистрация
 
haseki
 Аватар для haseki
2 / 2 / 1
Регистрация: 02.11.2013
Сообщений: 151
28.11.2013, 18:14     Баги в коде. Одномерные массивы #1
Собственно, задание, на которое написана прога:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
— количество элементов массива, равных нулю;
— сумму элементов массива, расположенных после минимального элемента.
Упорядочить элементы массива по возрастанию модулей.

Собственно, код:
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
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n;
    cout << "Введите число элементов массива: ";
    cin >> n;
 
    double a[n], k = 0, j, s, x,temp;
    cout << "Введите числа через пробел: ";
 
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        if (!a[i]) k++;
    }
 
    cout << "Число элементов, равных 0: " << k << endl;
    
    j=a[0];
    for(int i=0; i<n; i++)
  {
    if(a[i]<j)
    {
    j=a[i];
    x=i+1;
    }
  
  }
    for(int i=x; i<n; i++)
    s+=a[i];
    cout << "\nСумма  элементов массива, расположенных после минимального значения " << s << endl;
      cout << "\nЭлементы в порядке возрастания модулей: " << endl;
    for(int i = 0; i < n - 1; ++i)
        for( int j = 0; j < i; ++j)
            if(fabs(a[i]) > fabs(a[i++]))
            {
                temp = a[i];
                a[i] = a[i++];
                a[i++] = temp;
            }
 
    for(int i = 0; i < n; ++i)
        cout<< a[i] << " ";
        cout << endl;
    
    system("pause");
    return 0;
}
В чём проблема?
В следующем.
http://s7.uploads.ru/sRL1t.png
Так работает программа без элемента сортировки. Работает, в общем-то, правильно.
Но стоит только задать другие значения элементов массива, например, поставить нулевым элементов отрицательное число, как:
http://s6.uploads.ru/WgdVi.png
Разумеется, число -7 в данном массиве наименьшее, а сумма элементов, стоящих после него, 9. Но программа суммирует все элементы массива.
А вот код с блоком сортировки. И здесь чудеса: если последний элемент массива - нуль, то выдает следующее:
http://s7.uploads.ru/tzCnG.png

Кроме неправильной суммы, неправильная сортировка. То есть нуль должен быть, по логике вещей, самым первым, а потом элементы по возрастанию их модулей. Здесь же нуль в середине.


Помогите, пожалуйста, обнаружить и исправить ошибки. Если можно, с комментариями. Буду очень признательна.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 18:14     Баги в коде. Одномерные массивы
Посмотрите здесь:

C++ одномерные массивы
C++ Одномерные массивы!!!
C++ Одномерные массивы
одномерные массивы C++
одномерные массивы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dj_Death87
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 36
28.11.2013, 18:29     Баги в коде. Одномерные массивы #2
if(fabs(a[i]) > fabs(a[i++]))
{
temp = a[i];
a[i] = a[i++];
a[i++] = temp;
}
Как минимум должно быть так:
if(fabs(a[i]) > fabs(a[i+1]))
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
qwestcl
10 / 10 / 1
Регистрация: 30.09.2012
Сообщений: 172
28.11.2013, 19:07     Баги в коде. Одномерные массивы #3
Сумму находит неверно, т.к. не задано начальное условие s = 0;
При сортировки вы сравниваете только соседние элементы, что и ведет к таким последствиям. Эта строка(40): for( int j = 0; j < i; ++j) вообще ничего не делает, кроме пустых интераций.
Dj_Death87
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 36
28.11.2013, 20:17     Баги в коде. Одномерные массивы #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
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    setlocale(0,"");
    int n;
    cout<<"Введите размер масива - "; cin>>n;
    cout<<"Введите элементы масива через пробел: ";
    double *a=new double[n];
    int k(0);
    for (int i = 0; i < n; i++)
    {
        cin>>a[i];
        if (!a[i]) k++;
    }
    cout<<"Число элементов, равних 0: "<<k<<endl;
    double j(a[0]);
    int x(0);
    for (int i = 0; i < n; i++)
        if (a[i]<j)
        {
            j=a[i];
            x=i+1;
        }
        else
            x=1;
    double s(0.0);
    for(int i=x; i<n; i++)
        s+=a[i];
    cout << "\nСумма  элементов массива, расположенных после минимального значения " << s << endl;
    cout << "\nЭлементы в порядке возрастания модулей: " << endl;
    double temp;
    for (int i = 0; i < n-1; i++)
        for (int j = 1; j < n; j++)
            if (fabs(a[j])<fabs(a[j-1]))
            {
                temp=a[j];
                a[j]=a[j-1];
                a[j-1]=temp;
            }
    for (int i = 0; i < n; i++)
        cout<<a[i]<<" ";
    cout<<endl;
    delete [] a;
    system("pause");
    return 0;
}
haseki
 Аватар для haseki
2 / 2 / 1
Регистрация: 02.11.2013
Сообщений: 151
28.11.2013, 21:14  [ТС]     Баги в коде. Одномерные массивы #5
qwestcl,
Благодарю за пояснение)

Dj_Death87,
Огромное спасибо! И +, разумеется)
Yandex
Объявления
28.11.2013, 21:14     Баги в коде. Одномерные массивы
Ответ Создать тему
Опции темы

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