Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Лысков Игорь Витальевич
Статус: Профессионал
Рейтинг: 190
∙ повысить рейтинг >>
Micren
Статус: Студент
Рейтинг: 117
∙ повысить рейтинг >>
Person
Статус: 3-й класс
Рейтинг: 73
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1252
от 27.02.2009, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 490, Экспертов: 47
В номере:Вопросов: 2, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 161062: Доюрое время суток! Подскажите как решить задачу: дано натуралное число n определить какая цифра в нём расположена левее: максимальная или минимальная?...


Вопрос № 161095: Здравия желаю Уважаемые Эксперты !! Я начинающий кодер в С++, и хотелось бы для начала разобраться с данной задачей: "Даны целые числа M и N (0<M<=12, 0<=N<=60), указывающие момент времени: «M часов, N минут». Определить на...

Вопрос № 161.062
Доюрое время суток! Подскажите как решить задачу: дано натуралное число n определить какая цифра в нём расположена левее: максимальная или минимальная?
Отправлен: 21.02.2009, 12:28
Вопрос задал: XaciH (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Evgenijm
Здравствуйте, XaciH!

Хорошая задачка. Выглядит заковыристо, а решается очень легко. Самая правая цифра числа = Num%10. Чтобы убрать самую последнюю цифру надо сделать Num/=10. Проходим все цифры слева направо и обновляем свои индексы. Осталось вставить это в код функции и прописать вывод.


//Нам нужны: цифры
int Min, Max;

//Индексы цифр (справа)
int iMin, iMax;

//Текущий индекс
int CurIndex;

//Устанавливаем все на самую правую цифру
CurIndex = iMin = iMax = 0;
Min = Max = Num%10;

while((Num/=10)!=0)//Еще остались циферки
{
int Z=Num%10;
CurIndex++;

if(Z<=Min)
{
Min=Z;
iMin=CurIndex;
}

if(Z>=Max)
{
Max=Z;
iMax=CurIndex;
}
}

if(iMax > iMin)
{
//Max левее
}
else if(iMin > iMax)
{
//Min левее
}
else
{
//Min=Max
}
Ответ отправил: Evgenijm (статус: 3-й класс)
Ответ отправлен: 21.02.2009, 13:21

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244171 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 161.095
    Здравия желаю Уважаемые Эксперты !!
    Я начинающий кодер в С++, и хотелось бы для начала разобраться с данной задачей:

    "Даны целые числа M и N (0<M<=12, 0<=N<=60), указывающие момент времени: «M часов, N минут». Определить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелки совпадут"

    Если я Вас не сильно утруждаю, не могли бы вы написать исходный код для данной программы?
    Заранее Благодарю.
    Отправлен: 21.02.2009, 21:39
    Вопрос задал: Ковальчук Константин Константинович (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Micren
    Здравствуйте, Ковальчук Константин Константинович!
    Эта задача скорее не на программирование, а на математические способности. Фактически сводится к нахождению следующего решения:
    t=(60*M-11*N+720*i)/11, где i=0,1,2,3...
    Вот пример программы:
    Код:

    #include <locale>
    #include <limits>
    #include <iostream>

    using namespace std;

    unsigned int InputUInt(const wchar_t* const msg,unsigned int maxvalue)
    {
    while(true)
    {
    unsigned int res;
    wcout<<msg<<L"(0.."<<maxvalue<<L"):";
    wcin>>res;
    if(wcin.fail())
    {
    wcout<<L"Неверный ввод"<<endl;
    wcin.clear();
    wcin.ignore(numeric_limits<streamsize>::ma x(),L' ');
    }
    else
    {
    wcin.ignore(numeric_limits<streamsize>::max(),L' ');
    if(res>maxvalue)
    {
    wcout<<L"Неверный диапазон введенного значения"<<endl;
    wcout<<L"Допускается от 0 до "<<maxvalue<<endl;
    }
    else return res;
    }
    }
    }

    int main()
    {
    locale::global(locale("rus_rus.866"));
    int M=InputUInt(L"Введите количество часов",11),
    N=InputUInt(L"Введите количество минут",59);
    int tmp=60*M-11*N;
    wcout<<L"Время до совпадения минутной и часовой стрелок(ближайшие 10 событий):"<<endl;
    int count=10;
    unsigned int i=0;
    while(count)
    {
    int res=(720*(i++)+tmp)/11;
    if(res>0)
    {
    wcout<<res<<L"(мин)"<<endl;
    count--;
    }
    }
    system("PAUSE");
    return 0;
    }

    А вот пример ее работы:
    Код:

    Введите количество часов(0..11):9
    Введите количество минут(0..59):35
    Время до совпадения минутной и часовой стрелок(ближайшие 10 событий):
    14(мин)
    79(мин)
    145(мин)
    210(мин)
    275(мин)
    341(мин)
    406(мин)
    472(мин)
    537(мин)
    603(мин)
    Ответ отправил: Micren (статус: Студент)
    Ответ отправлен: 21.02.2009, 22:56

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244201 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное