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

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


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

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

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

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

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

Выпуск № 1261
от 09.03.2009, 04:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 495, Экспертов: 54
В номере:Вопросов: 3, Ответов: 4

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

Вопрос № 161874: В заданном одномерном массиве поменять местами соседние элементы, стоящие на четных местах с элементами стоящими на нечетных местах....


Вопрос № 161892: строка содержит произвольный русский текст. Проверить каких букв в нем больше гласных или согласных....
Вопрос № 161921: Здраствуйте, дорогие эксперты! Мне нужно очень ваша помощь. Помогите решить задачи по динамическому программированию. Первая задача: Анаграммер Анаграммер — специальное устройство для получения из слова его анаграмм (то есть сл...

Вопрос № 161.874
В заданном одномерном массиве поменять местами соседние элементы, стоящие на четных местах с элементами стоящими на нечетных местах.
Отправлен: 03.03.2009, 07:15
Вопрос задал: Ryabichko (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Digitall
Здравствуйте, Ryabichko!
Предлагаю кусочек программы делающий то что вы хотели.
Или вам все-таки нужно было полный текст, могу выложить и его.

Приложение:

Ответ отправил: Digitall (статус: 1-й класс)
Ответ отправлен: 03.03.2009, 09:06

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


    Вопрос № 161.892
    строка содержит произвольный русский текст. Проверить каких букв в нем больше гласных или согласных.
    Отправлен: 03.03.2009, 11:13
    Вопрос задал: Ryabichko (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Hubbitus
    Здравствуйте, Ryabichko!
    Хм, натакой вопрсо помоему ответ банален - посчитать те и другие, и сравнить количество.
    Вы даже не написали на каком языке надо делать, поэтому о конкретных структурах говорить даже не буду.
    Чтобы определить гласная или согласная, думаю проще всего сделать массив (вектор, список, map если C++) одних и других, и просто проверять на вхождение.
    Ответ отправил: Hubbitus (статус: 3-й класс)
    Ответ отправлен: 03.03.2009, 15:01

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


    Отвечает: Micren
    Здравствуйте, Ryabichko!
    Программа. VC++
    Код:

    #include <locale>
    #include <iostream>
    #include <string>

    using namespace std;

    bool isVowels(wchar_t ch)
    {
    return static_cast<wstring>(L"аеёиоуыэюя").find(towlower(ch))!=wstring::npos;
    }

    int main()
    {
    locale::global(locale("rus_rus.866"));
    wcout<<L"Введите произвольную текстовую строку:"<<endl;
    wstring str;
    wcin.setf(ios::skipws);
    getline(wcin,str);
    unsigned int vowels=0,
    consonants=0;
    for(wstring::const_iterator it=str.begin();it!=str.end();it++)
    {
    if(iswalpha(*it))
    {
    if(isVowels(*it))vowels++;
    else consonants++;
    }
    }
    wcout<&l t;L"Гласных:"<<vowels<<endl;
    wcout<<L"Согласных:"<<consonants<<endl;
    if(vowels>consonants)wcout<<L"Гласных больше";
    else if(vowels<consonants)wcout<<L"Гласных меньше";
    else wcout<<L"Гласных и согласных поровну";
    wcout<<endl;
    system("PAUSE");
    return 0;
    }

    Пример работы:
    Код:

    Введите произвольную текстовую строку:
    Это тестовая строка
    Гласных:8
    Согласных:9
    Гласных меньше
    Ответ отправил: Micren (статус: Студент)
    Ответ отправлен: 06.03.2009, 15:53

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


    Вопрос № 161.921
    Здраствуйте, дорогие эксперты!
    Мне нужно очень ваша помощь.
    Помогите решить задачи по динамическому программированию.
    Первая задача:
    Анаграммер


    Анаграммер — специальное устройство для получения из слова его анаграмм (то есть слов, записанных теми же буквами, но в другом порядке). Это устройство умеет выполнять 2 операции:
    Взять очередную букву исходного слова и поместить ее в стек.
    Взять букву из стека и добавить ее в конец выходного слова.

    Стек — это хранилище данных, которое работает по принципу "первый пришел — последний ушел". Стек можно представить себе в виде пирамидки. Когда мы добавляем букву в стек, это соответствует тому, что на стержень пирамидки сверху мы надеваем кольцо, на котором написана соответствующая буква. Когда берем букву из стека, то это соответствует тому, что мы снимаем со стержня верхнее кольцо, и смотрим, какая буква на нем написана.

    Например, слово TROT в слово TORT может быть преобразовано ана граммером двумя различными последовательностями операций: 11112222 или 12112212.

    Напишите программу, которая по двум заданным словам вычисляет количество различных последовательностей операций анаграммера, которые преобразуют первое из этих слов во второе.
    Входные данные

    Первая строка входного файла INPUT.TXT содержит исходное слово, а вторая — слово, которое необходимо получить. Слова состоят только из заглавных латинских букв и имеют длину не более 50 символов. Оба слова имеют одинаковую длину. В этих строках не содержится пробелов.
    Выходные данные

    В первой строке выходного файла OUTPUT.TXT должно содержаться количество последовательностей операций анаграммера, с помощью которых можно преобразовать первое слово во второе.
    Примеры:
    1.
    input.txt:
    TROT
    TORT
    output.txt: 2
    2.
    input.txt:
    MADAM
    ADAMM
    output.txt: 4
    3.
    input.txt:
    LONG
    GONG
    output.txt: 0
    4.
    input.txt:
    AAAAAAAA
    AAAAAAAA
    ou tput.txt: 1430

    Вторая задача:

    Счастливые билеты


    Требуется вычислить количество N - значных счастливых билетов. Напомним, что билет называется счастливым, если сумма первой половины его цифр равна сумме другой его половины. Например, билет 564159 счастливый, т.к. 5+6+4=1+5+9.
    Входные данные

    В единственной строке входного файла INPUT.TXT записано натуральное четное число N (N ≤ 100) – количество цифр в билете.
    Выходные данные

    В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число – количество N-значных счастливых билетов.
    Примеры:
    1. input.txt:4
    output.txt: 670
    2. input.txt: 6
    output.txt: 55252
    3. input.txt: 12
    output.txt: 3

    SPASIBO!!!
    Отправлен: 03.03.2009, 16:53
    Вопрос задал: Rusov Lev Nikolaevich (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 3)

    Отвечает: Micren
    Здравствуйте, Rusov Lev Nikolaevich!
    Вот решение задачи 2:
    Код:

    #include <fstream>
    #include <string>
    #include <vector>

    using namespace std;

    class longnum
    {
    private:
    typedef unsigned __int32 datatype;
    typedef unsigned __int64 extdatatype;
    typedef vector<datatype>::iterator itertype;
    typedef vector<datatype>::reverse_iterator ritertype;
    vector<datatype> _data;
    static const datatype div=1000000000;
    static const datatype num=9;
    public:
    longnum(datatype val=0)
    {
    _data.push_back(val);
    }
    longnum operator=(datatype val)
    {
    _data.clear();
    _data.push_back(val);
    return *this;
    }
    longnum operator*(longnum& val)
    {
    lo ngnum res;
    res._data.resize(_data.size()+val._data.size(),0);
    for(itertype valit=val._data.begin();valit!=val._data.end();valit++)
    {
    vector<datatype> tmpdata(_data.size()+val._data.size(),0);
    itertype tmpit=tmpdata.begin()+(valit-val._data.begin());
    datatype carry=0;
    extdatatype tmp;
    for(itertype it=_data.begin();it!=_data.end();it++,tmpit++)
    {
    tmp=static_cast<extdatatype>(*it)**valit+carry;
    *tmpit=tmp%div;
    carry=static_cast<datatype>(tmp/div);
    }
    *tmpit=carry;
    carry=0;
    for(itertype tmpit=tmpdata.begin(),resit=res._data.begin();tmpit!=tmpdata.end();tmpit++,resit++)
    {
    tmp=static_cast<extdatatype>(*tmpit)+*resit+carry;
    *resit=tmp%div;
    carry=static_cast<datatype>(tmp/div);
    }
    }
    return res;
    }
    const longnum& operator+=(longnum& val)
    {
    if(_data.size()<val._data.size())_data.resize(val._data.size() );
    datatype carry=0;
    itertype it1=_data.begin();
    for(itertype it2=val._data.begin();it2!=val._data.end();it1++,it2++)
    {
    extdatatype tmp=static_cast<extdatatype>(*it1)+*it2+carry;
    *it1=tmp%div;
    carry=static_cast<datatype>(tmp/div);
    }
    while(carry&&it1!=_data.end())
    {
    extdatatype tmp=static_cast<extdatatype>(*it1)+carry;
    *it1=tmp%div;
    carry=static_cast<datatype>(tmp/div);
    it1++;
    }
    if(carry)
    {
    _data.resize(_data.size()+1);
    _data[_data.size()-1]=carry;
    }
    return *this;
    }
    friend ostream& operator<<(ostream& stream,longnum val);
    };

    ostream& operator<<(ostream& stream,longnum val)
    {
    bool f=false;
    for(longnum::ritertype it=val._data.rbegin();it!=val._data.rend();it++)
    {
    if(!f)
    {
    if(*it)
    {
    f=true;
    stream<<*it;
    }
    }
    else
    {
    char buf[10];
    _itoa_s(*it,buf,10);
    string str=buf;
    while(str.length()<longnum::num)str="0"+str;
    stream<<str;
    }
    }
    if(!f)stream<<"0";
    return stream;
    };

    int main()
    {
    ifstream in("INPUT.TXT");
    ofstream out("OUTPUT.TXT");
    unsigned int N;
    in>>N;
    N>>=1;

    vector<vector<longnum>> S(N);
    for(unsigned int k=0;k<N;k++)
    {
    S[k]=vector<longnum>(9*N+1,0);
    if(k==0)
    {
    for(int i=0;i<=9;i++)S[k][i]=1;
    }
    else
    {
    for(unsigned int i=0;i<9*(k+1)+1;i++)
    {
    for(unsigned int j=0;j<=min(9u,i);j++)
    {
    S[k][i]+=S[k-1][i-j];
    }
    }
    }
    }
    longnum P=0;
    for(unsigned int i=0;i<=9*N;i++)
    P+=S[S.size()-1][i]*S[S.size()-1][i];
    out<<P<<endl;
    return 0;
    }

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

    INPUT.TXT
    100

    OUTPUT.TXT
    138681178063913146486663255108385891670476531416644888545033078503482282975641730091720919340564340
    Ответ отправил: Micren (статус: Студент)
    Ответ отправлен: 03.03.2009, 20:32

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244972 на номер 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

    В избранное