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

Создание класса дробей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передод числа с мантиссой в обычное десятичное http://www.cyberforum.ru/cpp-beginners/thread695268.html
Доброго времени суток. У меня следующая проблема:вычисляю разницу очень маленьких чиссел, результат вычисления в переменной представляется в виде: 1,6600353E-05(ну к примеру), можно ли как-то пепевести это число в обычное десятичное, т.к. мне потом эту переменную нужно перевести в String^ и вывести на экран. Заранее очень признателен всем отозвавшимся.
C++ Функция удаления подстроки из строки Начал читать книжку, в ней задание накидать такую функцию. Вроде написал, но безумно коряво с костылями, поэтому она почемуто иногда наращивается результирующую строку мусором... Может у когонибудь есть нормальный код данной функции ? P.S. для уточнения: нужно чтобы из подстроки "строка для удаления другой строки" при удалении "строк" получилось "а для удаления другой и". http://www.cyberforum.ru/cpp-beginners/thread695244.html
Цикл замены мест элементов C++
Помогите пожалуйста разобраться что не так с циклом замены мест элементов ?? #include "stdafx.h" #include <iostream> #include <fstream> #include <locale> #include <time.h> using namespace std;
C++ описать данные и связи по данным
после программки: #include "stdafx.h" #include "conio.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) {
C++ GetVolumeInformation() http://www.cyberforum.ru/cpp-beginners/thread695213.html
я использую функцию GetVolumeInformation(), чтоб определить файловую систему диска Е:. почему, если я использую константу в качестве пути, она работает wchar_t FileSystemNameBuffer; GetVolumeInformation(L"E:\\", NULL, NULL, NULL, NULL, NULL, FileSystemNameBuffer, 100); а если использую переменную с тем же значением, она не работает? s = 'E';
C++ Не работает srand в многомерном массиве Здравствуйте, прошу помочь мне с задачей на двумерные/многомерные массивы. Перепробовал несколько функций rand - ни одна не заполняет массив псевдорандомными значениями. Выдает нули всегда. А если не обнулять - выдает мусор. Вот код. Цель задачи найти среднее арифметическое каждой строки, и расположить значения по убыванию. #include "stdafx.h" #include "stdio.h" #include "conio.h" #include... подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2913 / 1342 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
12.11.2012, 14:01     Создание класса дробей
Цитата Сообщение от Maksimyshka Посмотреть сообщение
использовать только библиотеку иостриам
Можешь сам реализовать функцию pow, и fabs и придумать, как обрабатывать деление на ноль. Тогда остальные библиотеки не понадобятся. Но думаю и так пойдет.

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
#include <iostream>
#include <stdexcept>
#include <cstdlib>
#include <cmath>
 
class Fraction {
 private:
  int nominator;
  int denominator;
  void simplify() {
    if (denominator < 0) {
      nominator *= -1;
      denominator *= -1;
    }
    if (abs(nominator) < 2) return;
    std::cout << nominator << "/" << denominator << std::endl;
    int gcd = getGCD(std::abs(nominator), denominator);
    nominator /= gcd;
    denominator /= gcd;
  }
 public:
  Fraction(int nominator, int denominator) : nominator(nominator), denominator(denominator) {
    if (this->denominator == 0) throw std::logic_error("Division by zero.");
    simplify();
  }
  Fraction() : nominator(0), denominator(1) {}
  Fraction(const Fraction &other) : nominator(other.getNominator()), denominator(other.getDenominator()) {}
  Fraction(int value) : nominator(value), denominator(1) {}
  int getNominator() const {
    return nominator;
  }
  int getDenominator() const {
    return denominator;
  }
  double getValue() const {
    return static_cast<double>(getNominator()) / static_cast<double>(getDenominator());
  }
  int compareTo(const Fraction &other) const {
    return getNominator() * other.getDenominator() - getDenominator() * other.getNominator();
  }
  static int getGCD(int a, int b) {
    while (a != b)
      if (a > b) a -= b; else b -= a;
    return a;
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Fraction &fraction) {
  return stream << fraction.getNominator() << "/" << fraction.getDenominator();
}
 
Fraction operator-(const Fraction &a) {
  return Fraction(-a.getNominator(), a.getDenominator());
}
 
Fraction operator+(const Fraction &a, const Fraction &b) {
  int commonDenominator = a.getDenominator() * b.getDenominator();
  int commonNominator = a.getNominator() * b.getDenominator() + b.getNominator() * a.getDenominator();
  return Fraction(commonNominator, commonDenominator);
}
 
Fraction operator-(const Fraction &a, const Fraction &b) {
  return a + -b;
}
 
Fraction operator*(const Fraction &a, const Fraction &b) {
  return Fraction(a.getNominator() * b.getNominator(), a.getDenominator() * b.getDenominator());
}
 
Fraction operator/(const Fraction &a, const Fraction &b) {
  return Fraction(a.getNominator() * b.getDenominator(), a.getDenominator() * b.getNominator());
}
 
bool operator==(const Fraction &a, const Fraction &b) { return a.compareTo(b) == 0; }
bool operator<(const Fraction &a, const Fraction &b) { return a.compareTo(b) < 0; }
bool operator>(const Fraction &a, const Fraction &b) { return a.compareTo(b) > 0; }
bool operator<=(const Fraction &a, const Fraction &b) { return a.compareTo(b) <= 0; }
bool operator>=(const Fraction &a, const Fraction &b) { return a.compareTo(b) >= 0; }
 
Fraction power(const Fraction &fraction, int power) {
  if (power < 0)
    return Fraction((int)pow(fraction.getDenominator(), -power), (int)pow(fraction.getNominator(), -power)); 
  else
    return Fraction((int)pow(fraction.getNominator(), power), (int)pow(fraction.getDenominator(), power)); 
}
 
int main(int argc, char **argv) {
    Fraction a(-4, 7), b(1, 3), c(0, 4);
    std::cout << c << " " << a * c << std::endl;
    std::cout << (a < b) << " " << power(Fraction(1, 4), -1) << std::endl;
}
 
Текущее время: 05:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru