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

Программа для представления дроби в виде суммы различных дробей. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Простой ввод / вывод http://www.cyberforum.ru/cpp-beginners/thread167589.html
Следующая программа: Ввод переменных a и b -> c=a+b -> вывод с -> d=a-b -> вывод d -> f=a*b -> вывод f -> конец Мой код: #include <stdio.h> #include <conio.h> int main (void) { int a, b, c, d, f; printf("vvedite a and b\n"); scanf("%d,%d",&a,&b);
C++ как получить HANDLE моей программы? доброе время суток, как мне получить HANDLE моей программы на С++? http://www.cyberforum.ru/cpp-beginners/thread167582.html
C++ Не работает программа по выводу чисел.
#include <iostream> using namespace std; void main () { int n, i=0, x, y; cout<<"Vvediten\n"; cin>>n; cout<<"Vvedite x\n"; cin>>x; y=x+1;
C++ Найти среднее арифметическое и среднее геометрическое чисел
Доброго времени суток.Прошу помощи по решает задачу.Данные два действительных числа.Найти средни арифметическое и средни геометрическое этих чисел.
C++ std::vector<char**> http://www.cyberforum.ru/cpp-beginners/thread167565.html
Может конечно боян, но похожей темы я не нашел. И так в чем проблема... Пишу программу для работы со своей базой данных. Решил базу данных держать в векторе чаров. Все вроде нормально, но при обращении к последней записи вылетает эррор: Вот проблемный код, я привел всего лишь пример: #include <iostream> #include <fstream> #include <time.h>
C++ Класс треугольник Алоха всем!:) В институте задали задачу по классам, класс треугольник, материалу дали 0, вообщем ищи где хочешь, по шарил по инету, такие решения меня пугают=-O Хотелось бы человеческий вариант решения на уровне первого курса первого семестра. Спасибо:) подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
28.09.2010, 14:27     Программа для представления дроби в виде суммы различных дробей.
Цитата Сообщение от dyap Посмотреть сообщение
Сказали почитать Приближение числа в виде дроби. Там написано: Для действительного числа r>0 и натурального числа qmax необходимо найти наилучшее приближение r в виде рациональной дроби p/q, где q<=qmax.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
p:=0; q:=1;
metka:
     if p/q < r then p:=p+1;
     if p/q = r then stop;
     if p/q > r then q:=q+1;
     if q > qmax then stop;
     goto metka;
PROGRAM ratap;
VAR p,q,qmax:integer;
    d, r, min: real;
BEGIN
   write('r,qmax='); readln(r,qmax);
   p:=0; q:=1; min:=r; REPEAT
   IF p/q<r THEN p:=p+1 ELSE q:=q+1;
   d:=abs(r-p/q);
   IF d<min THEN BEGIN min:=d; writeln(p:7,'/',q) END
UNTIL (q>=qmax) OR (d=0);
readln; END.
Пример я так понял написан на Паскале. Как это использовать в данной задаче не представляю... Может кто-нибудь понял?...
Идея здесь следующая:
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
//////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
//////////////////////////////////////////////////////////////////////////////////
typedef long double  T_real;
typedef long long    T_int;
//////////////////////////////////////////////////////////////////////////////////
T_real  div_real(T_int  p, T_int  q)
{
    return static_cast<T_real>(p) / static_cast<T_real>(q);
}
//////////////////////////////////////////////////////////////////////////////////
T_real  get_delta
    (
        T_real  r,
        T_int   p,
        T_int   q
    )
{
    return abs(r - div_real(p, q));
}
//////////////////////////////////////////////////////////////////////////////////
void  get_p_q
    (
        T_real   r, 
        T_int    q_max,         
        T_int&   p_best,
        T_int&   q_best,
        T_real&  delta_best 
    )
{        
    delta_best = r;    
 
    for(T_int  p_cur = 0, q_cur = 1; 
        delta_best && q_cur <= q_max; 
        div_real(p_cur, q_cur) < r ? ++p_cur : ++q_cur)
    {
        T_real  delta_cur = get_delta(r, p_cur, q_cur);     
        if(delta_cur < delta_best)
        {            
            p_best      = p_cur;
            q_best      = q_cur;
            delta_best  = delta_cur;
        }                                    
    }
}
//////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_real  r;
    do
    {
        std::cout << "Введите действительное число > 0: ";    
        std::cin >> r;   
    }while(r <= 0);
 
    T_int  q_max;
    do
    {
        std::cout << "Введите максимальное значение знаменателя дроби >= 1: ";
        std::cin >> q_max;    
    }while(q_max < 1);  
    
    T_int   p      = 0;
    T_int   q      = 0;
    T_real  delta  = 0;
    get_p_q(r, q_max, p, q, delta);
    std::cout << "Число " 
              << r
              << " приблизительно равно дроби "
              << p
              << " / "
              << q
              << " с точностью "
              << delta
              << "."
              << std::endl;
}
 
Текущее время: 01:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru