Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2014, 19:57   #41
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Учту, спасибо!
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 20:28   #42
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Пожалуйста, исправьте ошибки, переведите на английский и выложите код

Я не могу ввести даже 23 часа. А полночь?

А почему программа позволяет вводить 60 секунд?
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 21:32   #43
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Исправил
Код:
#include <iostream>
using namespace std;

class Time
{
private:
    int hour;
    int min;
    int sec;
    
public:
    void get_time ();
    void show_time ();
    bool isHour () {return (hour >= 0 && hour < 24);}
    bool isMin () {return (min >= 0 && min < 60);}
    bool isSec () {return (sec >= 0 && sec < 60);}
};
//----------------------------------------------------
void Time::get_time ()
{
    while (true)
    {
        cout << "\nEnter the hours: ";
        cin >> hour;
        if (isHour () && cin.good() )
        { break; }
        cin.clear(); cin.ignore(10, '\n');
        cerr << "Wrong format!!!";
    }
    while (true)
    {
        cout << "Enter the minutes: ";
        cin >> min;
        if (isMin() && cin.good())
        {  break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "Wrong format!!!\n";
    }
    while (true)
    {
        cout << "Enter the seconds: ";
        cin >> sec;
        if (isSec() && cin.good())
        {  break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "Wrong format!!!\n";
    }
}
//----------------------------------------------------
void Time::show_time ()
{
    cout << endl  << '\t' << '\t' << '\t' << '\t';
    if (hour<10) cout << '0';
    cout << hour  << " : ";
    if (min<10) cout << '0';
    cout << min  << " : ";
    if (sec<10) cout << '0';
    cout << sec;
}
//-----------------------------------------------------
int main()
{
    Time *t=new Time();
    t->get_time();
    cout << endl;
    for (int i=0; i<80; i++)
        cout << '*';
    t->show_time();
    delete t;
    cout << endl;
    system ("pause");
    return 0;
}
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 21:52   #44
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Отлично! Этот пример можно развить немного. Сможете сделать так, чтобы часы тикали?

Код:
#include <iostream>
#include <windows.h>

int main()
{
    for ( int i = 10; i >= 0; i-- ) {
        std::cout.fill( '0' );
        std::cout.width( 2 );
        std::cout << i << "\r";
        Sleep( 1000 );
    }
}
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 21:55   #45
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Отлично! Этот пример можно развить немного. Сможете сделать так, чтобы часы тикали?

Код:
#include <iostream>
#include <windows.h>

int main()
{
    for ( int i = 10; i >= 0; i-- ) {
        std::cout.fill( '0' );
        std::cout.width( 2 );
        std::cout << i << "\r";
        Sleep( 1000 );
    }
}
Не
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 22:06   #46
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

А вы запускали этот пример? Что он делает?
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 22:10   #47
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Отсчитывает секунды!
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 22:21   #48
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Не прячьтесь за то, что вы начинающий. Это уже не работает. Очевидно, что вашу программу с классом "Time" можно доработать, чтобы она что-то полезное делала. Вот на таких заданиях и происходит реальный рост. А не то, что ввёл три числа и тебе их показали. Детский сад закончился! Если сейчас не хотите, то просто запишите в свой ТаймМенеджер это задание в графу "когда-нибудь\может быть"

На будущее вам оставлю код из книжки (как есть, я ничего не менял в классе "myclock"). Там может быть полезное что-то увидете. Запустите его, он рабочий:

main.cpp
Код:

#include <iostream>
#include "myclock.h"
#include <windows.h>

int main()
{
    myclock c;

    while( true ) {
        std::cout << c;
        c++;
        Sleep( 1000 );
    }
}
myclock.h
Код:
#ifndef MYCLOCK_H
#define MYCLOCK_H

// А.Крупник "Самоучитель по С++"
// Файл myclock5.cpp c функциями чтения  установки времени

#include <iostream>

class myclock
{
    friend std::ostream& operator<<(std::ostream& stream, myclock a);
public:

    myclock( int h, int m, int s )
    {
        sec_ = s;
        min_ = m;
        hour_ = h;
    }

    myclock( )
    {
        min_ = hour_ = sec_ = 0;
    }

    myclock & operator++()
    {
        tick( );
        return *this;
    }

    myclock operator++( int )
    {
        myclock tmp = *this;
        tick( );
        return tmp;
    }

    int geth( )
    {
        return hour_;
    }

    int getm( )
    {
        return min_;
    }

    int gets( )
    {
        return sec_;
    }

    void puth( int h )
    {
        hour_ = h;
    }

    void putm( int m )
    {
        min_ = m;
    }

    void puts( int s )
    {
        sec_ = s;
    }

    void disp( );

    void tick( )
    {
        if ( sec_ == 59 ) {
            sec_ = 0;
            min_++;
        } else sec_++;
        if ( min_ == 60 ) {
            min_ = 0;
            hour_++;
        }
    }
private:

    void sw( )
    {
        std::cout.fill( '0' );
        std::cout.width( 2 );
    };
    int hour_;
    int min_;
    int sec_;
};

std::ostream& operator<<(std::ostream& stream, myclock a)
{
    a.sw( );
    std::cout << a.hour_;
    std::cout << ':';
    a.sw( );
    std::cout << a.min_;
    std::cout << ':';
    a.sw( );
    std::cout << a.sec_;
    std::cout << '\r';
    return stream;
}

#endif // MYCLOCK_H

Последний раз редактировалось 8Observer8; 08.10.2014 в 22:24.
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 22:25   #49
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

ОК! Спасибо)

Попробовал сделать таймер, не пойму что за ошибка! Обьявил метод
Код:
Time& operator-- ();
При определении всплывает
Код:
operator must be declared as function
Вот здесь:
Код:
Time::Time& operator-- ()
{
   if (sec == 1)
    {
        if (min == 0)
            if (hour == 0) {cout << endl; system ("pause"); exit (1);}
        sec = 60; min--; }
    sec--;
    if (min == 0)
    {
        if (hour == 0)
        { cout << endl; system ("pause"); exit (1); }
        min = 60;
        hour--;
    }
    return *this;
}

Последний раз редактировалось Stilet; 18.10.2014 в 11:25.
igoreshka3333 вне форума Ответить с цитированием
Старый 11.10.2014, 16:52   #50
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Уберите из тела оператора вывод на экран. Хотя дело не в этом

Напишите такой же минимальный код, который демонстрирует проблему

Код:
#include <iostream>

class Time
{
public:
    Time( int sec = 10 ) : m_sec( sec ) {}

    int sec() const
    {
        return m_sec;
    }

    Time& operator--()
    {
        m_sec--;
        return *this;
    }

private:
    int m_sec;
};

int main()
{
    Time time;

    for( int i = 0; i < 10; i++ ) {
        --time;
        std::cout << time.sec() << std::endl;
    }

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описать класс в с# volkodinocka Помощь студентам 0 09.11.2013 22:05
Описать класс С# NeoX_2011 Помощь студентам 1 19.03.2012 00:10
C# исправление ошибки. Описать класс, реализующий шестнадцатеричный счетчик PROkaZZZniK Помощь студентам 7 09.02.2012 16:29
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Описать класс. Telec Общие вопросы C/C++ 1 30.04.2010 18:43