XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
jeD_wc3
Изучаю C++
offline
Опыт: 4,038
Активность:
Задача по C++.
Код:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    setlocale(0,"rus");
    int hou, min;
    string h, m, time;
    cout << "Введите время суток hh mm\n ";
    cin >> hou >> min;

    if ( hou < 0 || hou > 23 || min < 0 || min > 59 ) 
    {cout << "Неверные данные!" << endl;
    system("pause");
    return(0);}

     if ( hou == 0 && min == 0 ) 
     {cout << "Полночь" << endl;
     system("pause");
     return(0);}
     if ( hou == 12 && min == 0 )
     {cout << "Полдень" << endl;
     system("pause");
     return(0);}

     //Проверка падежного окончания часов
     if ( hou == 1 || hou == 21 || hou == 13 )
          h = "час";
     if ( hou >= 2 && hou <= 4 || hou >= 14 && hou <=16 )
          h = "часа";
     if ( hou >= 5 && hou <= 12 || hou >= 17 && hou <=23 || hou == 0 )
          h = "часов";

     //Проверка падежного окончания минут
     if ( min%10 == 1 )
          m = "минута";
     if ( min%10 >= 2 && min%10 <= 4 )
          m = "минуты";
     if ( min%10 > 4 && min%10 < 10 || min%10 == 0 || min >10 && min < 20 )
          m = "минут"; 
     
     //Проверка времени суток
     if ( hou <= 5 && hou >= 0 )
          time = "ночи";
     if ( hou >= 6 && hou <= 11 )
          time = "утра";
     if ( hou >= 12 && hou <= 17 )
          time = "дня";
     if ( hou >= 18 && hou <= 23 )
          time = "вечера";

     //Вывод данных
     if ( min == 0 && hou >= 0 && hou <=11 )
     {cout << hou << " " << h << " " << time << " " << "ровно" << endl;
     system("pause");
     return(0);}
     if ( min == 0 && hou >= 12 && hou <=23 )
     {cout << hou - 12 << " " << h << " " << time << " " << "ровно" << endl;
     system("pause");
     return(0);}
     if ( hou >= 0 && hou <= 11 && min >= 0 && min < 60 )
     cout << hou << " " << h << " " << min << " " << m << " " << time << endl; 
     if ( hou >= 12 && hou <= 23 && min >= 0 && min < 60 )
     cout << hou - 12 << " " << h << " " << min << " " << m << " " << time << endl; 
     system("pause");
    return(0);
}


Вообщем дали вот это на дом. Я новичок в C++, поэтому хотелось бы спросить, будет ли препод бить меня клавиатурой по башке за этот код? =) Ну то есть нормально написал?
Старый 21.09.2010, 21:53
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
     //Проверка падежного окончания часов
     if ( hou == 1 || hou == 21 || hou == 13 )
          h = "час";
     if ( hou >= 2 && hou <= 4 || hou >= 14 && hou <=16 )
          h = "часа";
     if ( hou >= 5 && hou <= 12 || hou >= 17 && hou <=23 || hou == 0 )
          h = "часов";
Какая оценка по русскому-то?
И вы слышали про else if ?
Т.к. вы в каждом ифе делаете min%10 логичнее будет вынести это в переменную перед блоком ифов и уже потом использовать эту переменную.
Старый 21.09.2010, 22:18
jeD_wc3
Изучаю C++
offline
Опыт: 4,038
Активность:
Hellfim, забыл объяснить. Если время больше 12 часов то на экран выводится это время - 12. так что тут всё правильно.

Насчёт того чтобы вынести min%10 в переменную, хз. А вот про if else... последний if при проверке можно заменить на else. Забыл совсем)
Старый 21.09.2010, 22:22
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Я понял, что делает код.
Не 13 час, а 13 часов, к примеру.
А else if - так:
     if ( hou == 1 || hou == 21 || hou == 13 )
          h = "час";
     else if ( hou >= 2 && hou <= 4 || hou >= 14 && hou <=16 )
          h = "часа";
     else if ( hou >= 5 && hou <= 12 || hou >= 17 && hou <=23 || hou == 0 )
          h = "часов";
Старый 21.09.2010, 22:24
jeD_wc3
Изучаю C++
offline
Опыт: 4,038
Активность:
Hellfim, да не , ты не понял он срезает 12 и получается 1 час дня
Старый 21.09.2010, 22:27
H
hello world
offline
Опыт: 130,725
Активность:
без else if красивее, а потери при лишних расчетах в данном коде минимальны )
Старый 21.09.2010, 22:28
jeD_wc3
Изучаю C++
offline
Опыт: 4,038
Активность:
упс, почему у меня там 21 тогда? О_о ))

jeD_wc3 добавил:
Цитата:
Сообщение от Ahelhot
без else if красивее, а потери при лишних расчетах в данном коде минимальны )

это всё что я хотел услышать))) Спасибо) Тему можно закрывать наверное
Старый 21.09.2010, 22:32
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:03.