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

Классы, разобраться с объявлением объектов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Регулярные выражения с игнорированием спецсимволов http://www.cyberforum.ru/cpp-beginners/thread1231732.html
Здравствуйте. Решил попробовать регулярные выражения в Visual C++ 2010. Задача такая: пользователь вводит (считывается параметр) текст и его нужно преобразовать в регулярку с игнорированием всех спецсимволов. Использую стандартную библиотеку <regex>. Предположим что пользователь ввел: .txt, хотя в данном случае он сработает правильно, но если в исходной строке (l) вместо точки будет другой...
C++ Заполнить вектор длиной 10 квадратами целых чисел и вывести его в выходной поток Библиотека STL на С++ помогите исправить ошибки задание: Заполнить вектор длинной 10 квадратами целых чисел и вывести его в выходной поток. решение: #include <vector> #include <algorithm> #include <iostream> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1231707.html
Тернарный оператор и множество ошибок в коде C++
Вот задание: И простой код: #include<iostream> using namespace std; int main() { int n,k; cin>>n; cin>>k;
C++ Dev c++, компилятор не понимает функцию toupper()
Короче, вот такая штука; когда хотел использовать функцию touper(), заголовка <cctype>, компилятор эту функцию воспринимает за переменную( необьявленную). Чуть ранее то же самое делал при любой функции <graphics.h>. Я так понял что dev c++ не содержит эти заголовки. Правильно ли я думаю? И если это так как добавить в компилятор эти файлы, или лучше на visual studio переходить?
C++ Как создать объект класса в динамической памяти? http://www.cyberforum.ru/cpp-beginners/thread1231646.html
привет. я так понял, можно создать объект в динамической области памяти. либо просто создать объект обычным способом, но чтобы его данные-члены были указателями на переменные в динамической памяти. я написал 2 варианта: // Создать объект в динамической памяти #include <iostream> using namespace std; class SimpleCat { public: SimpleCat() {
C++ Получить три копии исходного файла в новой папке Готовой программы не нашёл, решил обратиться к гуру. Понимаю, что задача проста до нельзя, но сам не спец. Люди, набросайте код если есть опыт и время. Нужна простенькая прога. Есть папка 1 «ИСХОДНАЯ», в ней 1 файл «пример.txt» Есть папка 2 «НАЗНАЧЕНИЕ» Есть текстовый файл pattern.txt с названиями (будущих файлов). Например: (каждое наименование с новой строки) файл1.txt... подробнее

Показать сообщение отдельно
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
21.07.2014, 22:48     Классы, разобраться с объявлением объектов
я написала вот такую программу по условию:
Класс должен содержать методы для ввода и вывода данных объектов, а также для выполнения арифметических операций. Кроме того, необходимо включить в состав класса функцию, приводящую дробь к несократимому виду. Функция должна находить наибольший общий делитель числителя и знаменателя и делить числитель и знаменатель на это значение.
Можно вызывать данную функцию в конце каждого метода, выполня-
ющего арифметическую операцию, либо непосредственно перед выводом
на экран результата. Кроме перечисленных методов, вы можете вклю-
чить в класс конструктор с двумя аргументами, что также будет полезно.

программа работает.

C++ (Qt)
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
#include "stdafx.h"
#include <iostream>     
#include <cmath>
using namespace std;
class Fraction
{
    private:
        int numerator, denominator;
    public:
        Fraction():numerator(0), denominator(0)
        {}
        void get_fr()
        {
            char ch;
            cout << "enter fraction" << endl;
            cin >> numerator >> ch >> denominator;
        }
        void add_fr(Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.denominator + f1.denominator * f2.numerator; 
            denominator = f1.denominator * f2.denominator;
        }
        void sub_fr (Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
            denominator = f1.denominator * f2.denominator;  
        }
        void mul_fr (Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.denominator;
            denominator = f1.denominator * f2.denominator; 
        }
        void div_fr (Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.denominator; 
            denominator = f1.denominator * f2.numerator;
        }
        void lowterms ()
        {
            long tnum, tden, temp, gcd;
            tnum = labs(numerator);            // используем неотрицательные 
            tden = labs(denominator);            // значения (нужен cmath)
            if( tden == 0 )              // проверка знаменателя на 0
              { cout << "Недопустимый знаменатель!"; exit(1); }
            else if( tnum == 0 )         // проверка числителя на 0
              { numerator=0; denominator = 1; return; }
// нахождение наибольшего общего делителя
            while(tnum !=0)
            {
              if( tnum < tden )          // если числитель больше знаменателя,
                { temp=tnum; tnum=tden; tden=temp; } //меняем их местами
                 tnum = tnum - tden;        // вычитание
            }
            gcd = tden;                  // делим числитель и знаменатель на
            numerator = numerator / gcd;             // полученный наибольший общий делитель
            denominator = denominator / gcd;
        }
        void disp_fr()const
        { cout << numerator << "/" << denominator << endl; }
};
int main()
{
    char zn;
    do
    {
        Fraction fr1, fr2, fr_sum;
        fr1.get_fr();
        cout << "Enter sign" << endl; cin >> zn;
        fr2.get_fr();
        switch (zn)
        {
            case '+': fr_sum.add_fr(fr1, fr2); break;
            case '-': fr_sum.sub_fr(fr1, fr2); break;
            case '*': fr_sum.mul_fr(fr1, fr2); break;
            case '/': fr_sum.div_fr(fr1, fr2); break;
        }
        fr_sum.lowterms();
        fr_sum.disp_fr();
        cout << "repeat? (y/n)" << endl; cin >> zn;
    }
    while (zn != 'n');
    return 0;
}
но мне не дает покоя вопрос: почему, когда я изначально написала

C++ (Qt)
1
2
3
4
5
6
int main()
{
    char zn;
        Fraction fr1, fr2, fr_sum;
    do
    {
на втором цикле после задания значений дробей она заглючивает?
я только-только начала учить классы. может чего не поняла еще.
и может кто тапками в меня побросает, насчет изящности решения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru