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

Компилятор сломался или ошибка? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выход по нажатию клавиши из терминала (Linux(UNIX) http://www.cyberforum.ru/cpp-beginners/thread629180.html
Уважаемые программисты, возникла проблема. Есть клиент, в нем 2 потока. Нужно организовать выход из программы по нажатию комбинации клавиш "Ctrl + D". Вот примерная схема. void *runStdIn() { char message listenSocket(sock, message); printf("%s", message); }
C++ Создайте класс с именем Employee, включающий в качестве элементов данных три информационных пункта: имя, фамилию и месячную зарплату Дело обстоит так: Прочитав и, как я думал, поняв 3ю главу книги "Как программировать на с++" Дейтелов пришло время задачек. Немного собравшись я решил задачи 3.11 и почти правильно сделав 3.12 (потом я нашёл где же я сделал промах, благодаря этому форуму :) и ошибка оказалась совсем мелкой ). Казалось бы всё, остальные пойдут хорошо и мне не прийдётся задалбывать кого-либо тупыми вопросами,... http://www.cyberforum.ru/cpp-beginners/thread629111.html
C++ Надо ускорить алгоритм вычисления чисел с не повторяющимися цифрами
Помогите ускорить алгоритм. Надо определить все числа с не повторяющимися цифрами от 0 до 9876543210. У меня время просчета занимает очень длительное время уже на 8-значном числе. Что-то не могу догнать как сделать быстрее. Вот код: #include <iostream> #include <vector> #include <time.h> #include <Windows.h> using namespace std; const int size = 1000000; //нужно ускорить алгоритм до...
C++ Считывание символа с потока для дальнейших действий
Пользователь должен по запросу ввести символ для определения операции: сложения, вычитания или умножения матрицы на число. Не получается считать этот символ с потока. VC++.6 #include <stdio.h> const int m = 2; const int n = 3; void InitMatrix(int A); void PrintMatrix(int A); void Addition(int A1,int A2,int A3);
C++ Компилятор просит указать const в конструкторе http://www.cyberforum.ru/cpp-beginners/thread629094.html
Всем привет. Изучаю С++ по Р.Лафоре. В одном из заданий, к главе 8 понадобилось написать класс, представляющий простую дробь, и написать перегруженные операторы: -, +, * и /. Собственно проблем никаких - написал, перегрузил. Решил перегрузить заодно и оператор присваивания, путём указания соответствующего конструктора с одним аргументом того же типа: ... код ... Fract(Fract fr) : ...
C++ MessageBox API MessageBox API: не получаеться обработать выбор. Мой код: int SELECT = MessageBox(hwnd, _T("Вы действительно хотите завершить работу программы? ВНИМАНИЕ! В случае завершения работы программы, клиенты не смогут подключиться."), _T("Завершение работы"), MB_OKCANCEL | MB_ICONQUESTION); if (SELECT = MB_OK) { PostQuitMessage(0); } подробнее

Показать сообщение отдельно
gmb124
8 / 4 / 1
Регистрация: 11.04.2012
Сообщений: 54
26.07.2012, 17:08     Компилятор сломался или ошибка?
Требуется написать программу, которая делает перевод вещественного числа в строку.
Возникает ошибка во время получения дробной части числа.
Например:

C++
1
2
3
double f = 12.23;
int whole = (int) f; //=12
double real = f - whole;  // должно быть 0.23 но может получиться = 0.2300000012
Почему так и как это можно исправить?
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
//обращение строки
void RevStr(char *str){
    char *start,*end;
    char t;
    
    start = str;
    end = &str[strlen(str) -1];
 
    while(end > start){
        t = *end;
        *end = *start;
        *start = t;
        start++; end--;
    }
}
 
//перевод вещественного числа в строку
char * ConvertToString(double f){
    char result[80];
    int whole;
    double real;
    
    whole = (int) f;    //переменная для целой части
    real = f - whole;   //переменная для вещественной части
    
    int i = 0;
    
    //целую часть заносим в строку в обратном порядке
    do{
        result[i] = (whole % 10) + '0';
        i++;
    }while(whole /= 10);
    
    result[i] = 0;
    
    //развернём строку
    RevStr(result);
 
    result[i++] = '.';
    
 
    if(real == 0){
        result[i] = result[i+1] = '0';
        result[i+2] = 0;
        return result;
    }
    
    int serv;
 
 
    //заносим в строку вещественную часть
    while(real){
        serv = (int)(real * 10);
        result[i] = serv + '0';
        real = real * 10 - serv;
        i++;
    }
 
    result[i] = 0;
    return result;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru