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

Выводит отрицательный ноль - C++

Восстановить пароль Регистрация
 
banda
1 / 1 / 0
Регистрация: 06.02.2011
Сообщений: 46
19.12.2012, 22:26     Выводит отрицательный ноль #1
Столкнулся с такой проблемой:
Ввожу с клавиатуры массив чисел действительных
Сортирую их по модулю
А когда вывожу, если изначально вводил ноль, то выводит он -0.

Не знаю в чем ошибка, и что это такое.
Да и как устранить такую проблему.

Помогите пожалуйста.

Воткод(пишу весь, потому что не представляю в чем может быть ошибка):

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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    double k,min,j,index,sum,c;
    int N;
    double *a=new double[N];
 
    cout<<"Vvedite kol-vo el-ov v massive"<<endl;
    cin>>N;
    
    
    k=0;
 
    // Первое задание
    for (int i=0; i<N; i++){
    cout<<"a["<<i<<"]=";
    cin>>a[i];
 
    if (a[i]==0) k++;
 
    }
 
    cout<<"Kol-vo nulei v massive a="<<k<<endl;
 
    // Второе задание
    index=0;
    min=a[0];
    for (int i=0; i<N; i++) {
    
        if (a[i]<min) {min=a[i]; index=i;}
    
    }
 
    sum=0;
 
 
    for (int i=index+1; i<N; i++)
        sum=sum+a[i];
    
    if (index+1==N) cout<<"sumi nety"<<endl;
 
    else
        cout<<"Summa elementov, raspolozhenix posle min-ogo elementa ravna="<<sum<<endl<<endl<<endl<<endl;
        
 
    // Третье задание
 
    for (int i=0; i<N; i++){
    for (int j=0; j<N; j++){
        if (abs(a[j])>abs(a[j+1])){
            c=a[j];
            a[j]=a[j+1];
            a[j+1]=c;
 
        }
    }
    }
    
    cout<<"TRRTIE ZADANIE"<<endl<<endl<<endl;
    for (int i=1; i<N+1; i++){
        cout<<fixed;
        cout<<setprecision(2);
        cout<<"a["<<i<<"] = "<<a[i]<<endl;}
    
    system("pause");
    return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 22:26     Выводит отрицательный ноль
Посмотрите здесь:

выводит ноль C++
ноль в результате C++
При компиляции объект cout выводит ноль C++
Написать программу, которая выводит пример на вычитание, запрашивает ответ пользователя, проверяет его и выводит сообщение о правильности C++
с++,циклическая очередь, сразу норм выводит, а потом на где-то логика нарушается и неправильно выводит C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
19.12.2012, 22:30     Выводит отрицательный ноль #2
Цитата Сообщение от banda Посмотреть сообщение
int N;
* * double *a=new double[N];
Переменная N неизвестно что содержит и тут же создается динамический массив неизвестного размера
banda
1 / 1 / 0
Регистрация: 06.02.2011
Сообщений: 46
19.12.2012, 22:45  [ТС]     Выводит отрицательный ноль #3
v.a.l.i.d, Не понимаю, что ты имеешь ввиду
И причем тут это
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
19.12.2012, 22:59     Выводит отрицательный ноль #4
Поменять строчки
C++
1
2
3
4
cout<<"Vvedite kol-vo el-ov v massive"<<endl;
cin>>N;
 
double *a=new double[N];
banda
1 / 1 / 0
Регистрация: 06.02.2011
Сообщений: 46
19.12.2012, 23:09  [ТС]     Выводит отрицательный ноль #5
v.a.l.i.d, Расположение этих строчек ни как не отражается на работе программы
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
19.12.2012, 23:24     Выводит отрицательный ноль #6
Я кажется понял в чем тут дело. Вот простенькая программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#include "iostream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    double d1 = -1e-1000;
    cout << d1 << endl;     // -0
 
    double d2 = 1e-1000;
    cout << d2 << endl;     // 0
 
    system("pause");
    return 0;               
}
В первом случае печатает -0 а во втором просто 0. Это получается что число вроде бы не равно нулю, но в памяти компьютера не хватает места чтобы сохранить все эти числа. И он этим минусом показывает что число очень-очень близко к нулю но оно отрицательное.
banda
1 / 1 / 0
Регистрация: 06.02.2011
Сообщений: 46
19.12.2012, 23:33  [ТС]     Выводит отрицательный ноль #7
В теории понятно, но как исправить мою программу? и почему так происходит, если я ввожу с клавиатуры 0.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
19.12.2012, 23:42     Выводит отрицательный ноль #8
Вот как исправить это я не знаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2012, 00:16     Выводит отрицательный ноль
Еще ссылки по теме:

Почему выводит ноль? C++
C++ Разработать программу которая выводит на экран, которая выводит содержимое текущего каталога, упорядоченное по времени
C++ Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла

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

Или воспользуйтесь поиском по форуму:
banda
1 / 1 / 0
Регистрация: 06.02.2011
Сообщений: 46
20.12.2012, 00:16  [ТС]     Выводит отрицательный ноль #9
Знающие и умные, помогите пожалуйста (

Добавлено через 18 минут
Я нашел ошибку, ошибки
Они тут объединились, а именно
Неправильная сортировка+неправильный вывод

Все работает
Yandex
Объявления
20.12.2012, 00:16     Выводит отрицательный ноль
Ответ Создать тему
Опции темы

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