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

5 м/с и 5 км/ч. Что больше? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В чем ошибка? http://www.cyberforum.ru/cpp-beginners/thread237101.html
Здраствуйте читаю книгу Джесса Либерти С++ за 21 день, там вот такая функция: функция которая принимает два целочисленных параметра и возвращает целочисленное значение. #include <iostream> using namespace std; int Add (int x, int y) { cout <<"In Add(),received "<<x << "and "<< y <<"\n"; } int main() {
C++ Почему массив не переполняется? Вот в одной книге есть задание создать вектор и скопировать элементы в массив. Почему массив не переполняется в следующем коде, какая-то загадка для меня. Вроде бы после введения 2-3 элементов он не должен больше принимать, а он принимает, и только после введения 6 элементов программа завершается с ошибкой, а 5 спокойно запоминает, ладно бы вектор, а тут массив, вроде бы с определенным размером:... http://www.cyberforum.ru/cpp-beginners/thread237087.html
C++ Чётные слова в строке
Ввести строку. На экран вывести все чётные слова. #include "StdAfx.h" #include<conio.h> #include <ctime> #include <iostream> #include <math.h> #include <string> using namespace std;
C++ Программа перевода систем счисления
Не могу написать программу по переводу числа из 10-ой в 2-ую. Смотрел другие темы не понял да и программы там не понятные были. Если поможете, то не могли бы написать комментарии чтобы мне было понятно (я только учусь)
C++ Обработка массива строк http://www.cyberforum.ru/cpp-beginners/thread237021.html
Вот мой массив строк: #include <iostream.h> #include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> struct pupil { char name; int age; float rating;
C++ Слова входного потока Вывести самые длинные слова входного потока! если во вх потоке самое длинное слово одно,то программа должна вывести одно слово,а если несколько,то прога должна их показать!прога на С/ . подробнее

Показать сообщение отдельно
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
03.02.2011, 14:01     5 м/с и 5 км/ч. Что больше?
Если опустить все подробности, то расширяемая программа может выглядеть, например, так:
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <limits>
#include <map>
 
typedef std::map<std::string, double> quantities_table_type;
typedef quantities_table_type::value_type quantity;
 
// ---- Универсальный конвертор -------------------------------------------------------------------
 
class converter {
public:
    // Добавление единицы измерения и её отношения к базовой величине в таблицу.
    void insert (const std::string & units, double value) { m_quantities_table.insert(quantity(units, value)); }
    
    // Если обе единицы измерения "old_units" и "new_units" есть в таблице, то возвращается их
    // отношение. В противном случае возвращается "NaN".
    double convert (const std::string & old_units, const std::string & new_units) const {
        quantities_table_type::const_iterator      source = m_quantities_table.find(old_units);
        quantities_table_type::const_iterator destination = m_quantities_table.find(new_units);
        
        if (source != m_quantities_table.end() && destination != m_quantities_table.end())
            return source->second / destination->second;
            
        return std::numeric_limits<double>::quiet_NaN();
    }
 
private:
    quantities_table_type m_quantities_table;
};
 
// ---- Конвертор расстояний ----------------------------------------------------------------------
 
class distance_converter {
public:
    static double convert (const std::string & old_units, const std::string & new_units) {
        return instance().m_converter.convert(old_units, new_units);
    }
 
private:
    distance_converter () {
        // Базовая единица измерения — метр.
        m_converter.insert("м", 1);
        m_converter.insert("км", 1000);
    }
    
    static distance_converter & instance () {
        static distance_converter converter;
        return converter;
    }
 
private:
    converter m_converter;
};
 
double convert_distance (const std::string & old_units, const std::string & new_units) {
    return distance_converter::convert(old_units, new_units);
}
 
// ---- Конвертор времён --------------------------------------------------------------------------
 
class time_converter {
public:
    static double convert (const std::string & old_units, const std::string & new_units) {
        return instance().m_converter.convert(old_units, new_units);
    }
 
private:
    time_converter () {
        // Базовая единица измерения — секунда.
        m_converter.insert("с", 1);
        m_converter.insert("мин", 60);
        m_converter.insert("ч", 3600);
    }
    
    static time_converter & instance () {
        static time_converter converter;
        return converter;
    }
 
private:
    converter m_converter;
};
 
double convert_time (const std::string & old_units, const std::string & new_units) {
    return time_converter::convert(old_units, new_units);
}
 
// ---- Конвертор скорости ------------------------------------------------------------------------
 
double convert_speed (const std::string & s1, const std::string & s2) {
    size_t pos1 = s1.find('/');
    size_t pos2 = s2.find('/');
    
    return convert_distance(s1.substr(0, pos1), s2.substr(0, pos2)) / convert_time(s1.substr(pos1 + 1), s2.substr(pos2 + 1));
}
 
// ------------------------------------------------------------------------------------------------
 
int main (int argc, char * const argv[]) {
    // Где-то взяли конвертируемые размерности.
    std::string first_dimension("км/ч");
    std::string second_dimension("м/с");
    
    // Где-то раздобыли конвертуремую величину.
    double value = 60;
    
    double result = value * convert_speed(first_dimension, second_dimension);
    std::cout << result << ' ' << second_dimension << std::endl;
 
    return 0;
}
Если нужны дополнительные измерения длины или времени, то добавляется одна строчка в соответствующий конвертор.

И, разумеется, можно конвертировать не только км/ч в м/с, но и любые комбинации доступных величин, например, м/ч в км/мин.
 
Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru