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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 6816
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2664
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2269
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1626
Дата выхода:22.01.2011, 17:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:323 / 185
Вопросов / ответов:3 / 6

Вопрос № 181898: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Задача на циклы WHILE, REPEAT Написать консольное приложение C++ Текст задачи: Рассмотрим некоторое натуральное число n. Если это- не палиндром, то изме...


Вопрос № 181899: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: 2 задачи на цикл FOR. Консольное приложение C++. Текст задачи 1: Даны натуральные числа n, m. Получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m. Вопрос № 181917: Здравствуйте! Прошу помощи в следующем вопросе: 2 Задачи на строки Консольное приложение C++ Builder 3.1 Максимально простым кодом, без выделения пространства имен и т.д. Задача 1: Дана символьная строка, содержащая английский ...

Вопрос № 181898:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:


Задача на циклы WHILE, REPEAT
Написать консольное приложение C++

Текст задачи:
Рассмотрим некоторое натуральное число n. Если это- не палиндром, то изменим порядок его цифр на обратный и сложим исходное число с получившимся. Если сумма- не палиндром, то над ним повторяется те же действия и т.д., пока не получится палиндром. До настоящего времени неизвестно, завершается ли этот процесс для любого натурального числа n. Даны натуральные числа n,m. Проверить, верно ли, что для n процесс завершается не позднее, чем после m таких действий.

Отправлен: 16.01.2011, 17:24
Вопрос задал: Denis Loran (4-й класс)
Всего ответов: 1
Страница вопроса »


Отвечает Micren (Профессионал) :
Здравствуйте, Denis Loran!
Программа. C++. Компилировал GCC.
Код:
/* 
* File: main.cpp
* Author: Micren
*
* Created on 16 Январь 2011 г., 16:29
*/

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

using namespace std;

typedef unsigned int uint;

// Используется для ввода данных

template<class T>
T input(const char* const msg)
{
T res = 0;
while (true)
{
cout << msg;
cin >> res;
if (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max (), '\n');
cout << "Ошибка ввода." << endl;
}
else
{
return res;
}
}
}

// Меняет порядок цифр на обратный

uint reverse(uint value)
{
uint result = 0;
while (value)
{
result = result * 10 + value % 10;
value /= 10;
}
return result;
}

// Проверяет является ли число палиндромом

bool isPalindrom(uint value)
{
return value == reverse(value);
}

/*
*
*/
int main()
{
locale::global(locale(""));

uint n = input<uint > ("Введите n:"), m = input<uint > ("Введите m:");

bool flag;
while (!(flag = isPalindrom(n)) && m--)
{
n += reverse(n);
}

cout << "Верно ли, что число стало палиндромом(" << n << "):" ; << boolalpha << flag << endl;

system("pause");

return 0;
}

Пример работы:
Код:
Введите n:239
Введите m:1
Верно ли, что число стало палиндромом(1171):false

Введите n:239
Введите m:10
Верно ли, что число стало палиндромом(2882):true

Ответ отправил: Micren (Профессионал)
Ответ отправлен: 16.01.2011, 17:44
Номер ответа: 265446
Украина, Краматорск

Оценка ответа: 5
Комментарий к оценке:
Отличный ответ

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



    Вопрос № 181899:

    Уважаемые эксперты! Пожалуйста, ответьте на вопрос:


    2 задачи на цикл FOR.
    Консольное приложение C++.

    Текст задачи 1:
    Даны натуральные числа n, m. Получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m.

    Текст задачи 2:
    Даны натуральные числа р и q. Получить все делители числа q, взаимно простые с р.

    Отправлен: 16.01.2011, 17:29
    Вопрос задал: Denis Loran (4-й класс)
    Всего ответов: 3
    Страница вопроса »


    Отвечает Micren (Профессионал) :
    Здравствуйте, Denis Loran!
    Задача 2. C++. Компилировал GCC.
    Код:
    /* 
    * File: main.cpp
    * Author: Micren
    *
    * Created on 16 Январь 2011 г., 16:49
    */

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

    using namespace std;

    typedef unsigned int uint;

    // Используется для ввода данных

    template<class T>
    T input(const char* const msg)
    {
    T res = 0;
    while (true)
    {
    cout << msg;
    cin >> res;
    if (cin.fail())
    {
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max( ), '\n');
    cout << "Ошибка ввода." << endl;
    }
    else
    {
    return res;
    }
    }
    }

    // Наибольший общий делитель

    uint nod(uint a, uint b)
    {
    while (a && b)
    {
    if (a > b)
    {
    a %= b;
    }
    else
    {
    b %= a;
    }
    }
    return a | b;
    }

    /*
    *
    */
    int main()
    {
    locale::global(locale(""));

    uint p = input<uint > ("Введите p:"), q = input<uint > ("Введите q:");

    cout << "Делители " << q << " взаимно простые с " << p << ":" << endl;

    size_t count = 0;

    for (uint i = 0; i++ < q;)
    {
    if (q % i == 0 && nod(i, p) == 1)
    {
    ++count;
    co ut << i << ",";
    }
    }

    if (count)
    {
    cout << "\b " << endl;
    }
    else
    {
    cout << "Нет таких" << endl;
    }

    system("pause");

    return 0;
    }

    Примеры работы:
    Код:
    Введите p:15
    Введите q:25
    Делители 25 взаимно простые с 15:
    1

    Введите p:125
    Введите q:1023
    Делители 1023 взаимно простые с 125:
    1,3,11,31,33,93,341,1023

    Ответ отправил: Micren (Профессионал)
    Ответ отправлен: 16.01.2011, 18:18
    Номер ответа: 265447
    Украина, Краматорск

    Оценка ответа: 5
    Комментарий к оценке:
    Отличный ответ но для меня еще сложноват

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


  • Отвечает Сергей (4-й класс) :
    Здравствуйте, Denis Loran!

    Задача №1, VS 2008
    Исправила на вариант из мини-форума
    -----
    ∙ Отредактировал: Киселёва Алёна aka Verena (Профессор)
    ∙ Дата редактирования: 17.01.2011, 15:48 (время московское)

    Приложение:

    Ответ отправил: Сергей (4-й класс)
    Ответ отправлен: 16.01.2011, 19:44
    Номер ответа: 265449
    Россия, Самара

    Оценка ответа: 5
    Комментарий к оценке:
    Простым, понятным кодом, спасибо.

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


  • Отвечает coremaster1 (Профессионал) :
    Здравствуйте, Denis Loran!
    Задача 2. Неэффективная, но простая реализация:
    Код:

    #include <iostream>

    // Вычисление НОД с помощью алгоритма Евклида
    unsigned nod(unsigned a, unsigned b)
    {
    unsigned n = (a > b) ? a : b;
    unsigned m = (a > b) ? b : a;
    while (m != 0)
    {
    unsigned r = n % m;
    n = m;
    m = r;
    }
    return n;
    }

    int main()
    {
    unsigned q, p;
    std::cout << "Введите p, q: ";
    std::cin >> p >> q;

    std::cout << "Делители: { ";
    for (unsigned d = 1; d <= q; ++d)
    {
    if ((q % d) == 0 && nod(d, p) == 1)
    std::cout < ;< d << ' ';
    }
    std::cout << "}\n";

    system("pause");
    return 0;
    }

    Ответ отправил: coremaster1 (Профессионал)
    Ответ отправлен: 17.01.2011, 10:31
    Номер ответа: 265466
    Россия, Москва

    Оценка ответа: 5
    Комментарий к оценке:
    Благодарю за еще один вариант

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


  • Вопрос № 181917:

    Здравствуйте! Прошу помощи в следующем вопросе:

    2 Задачи на строки
    Консольное приложение C++ Builder 3.1
    Максимально простым кодом, без выделения пространства имен и т.д.

    Задача 1:
    Дана символьная строка, содержащая английский текст. Найти количество слов, начинающихся с буквы b

    Задача 2:
    Символьная строка, содержащая произвольный текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться в грамматически правильной форме: например: а — 25 раз, к — 3 раза и т.д.

    Отправлен: 17.01.2011, 15:46
    Вопрос задал: Denis Loran (4-й класс)
    Всего ответов: 2
    Страница вопроса »


    Отвечает Алексей (1-й класс) :
    Здравствуйте, Denis Loran!
    Ниже привожу листинги.
    В первой задаче на первой итерации идёт сравнение непроинициализированной переменной prev с 32, результат сравнения может быть неопределённым. Во второй задаче неосторожная работа с индексами, и решение не вполне корректно.
    -----
    ∙ Отредактировал: Киселёва Алёна aka Verena (Профессор)
    ∙ Дата редактирования: 17.01.2011, 18:10 (время московское)

    Приложение:

    Ответ отправил: Алексей (1-й класс)
    Ответ отправлен: 17.01.2011, 16:47
    Номер ответа: 265476

    Оценка ответа: 4
    Комментарий к оценке:
    вторая задача немного недоработана

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


  • Отвечает Жерар (8-й класс) :
    Здравствуйте, Denis Loran!

    1. Программа не учитывает слова, начинающиеся с заглавной B.

    Код:

    #include <string.h>
    #include <stdio.h>
    #include <ctype.h>

    int main()
    {
    char s[1024];
    int i, k, m, n;
    puts("Введите строку:");
    gets(s);
    n = strlen(s);
    k = m = 0;
    for (i=0; i<n; i++)
    {
    if (isalpha(s[i])) k++; else k = 0;
    if ((k==1) && (s[i]=='b')) m++;
    }
    printf("Слов, начинающихся с буквы 'b': %d", m);
    return 0;
    }


    2. Программа учитывает только латинские буквы, причем не различает заглавные и строчные.

    Код:

    #include <string.h>
    #include <stdio.h>
    #include <ctype.h>

    int main()
    {
    char s[200];
    int k[26];
    int i, m, n;
    for (i=0; i<26; i++) k[i] = 0;
    puts("Введите строку:");
    gets(s);
    n = strlen(s);
    for (i=0; i<n; i++)
    {
    if (isalpha(s[i]))
    {
    m = tolower(s[i]) - 'a';
    if ((m>=0) && (m<26)) k[m]++;
    }
    }
    puts("Буквы в строке встречаются:");
    for (i=0; i<26; i++)
    {
    int r;
    if (k[i]==0) continue;
    if (k[i]%10>=2 && k[i]%10<=4 && k[i]/10!=1) r = 'а'; else r = ' ';
    printf("'%c' - %i раз%c\r\n", i+'a', k[i], r);
    }
    get s(s);
    return 0;
    }

    Ответ отправил: Жерар (8-й класс)
    Ответ отправлен: 17.01.2011, 17:24
    Номер ответа: 265478
    Россия, Томск
    Тел.: 8-923-411-36-58

    Оценка ответа: 5
    Комментарий к оценке:
    Отлично

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


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

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

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

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

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

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

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



    В избранное