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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

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

_Ayl_
Статус: 8-й класс
Рейтинг: 601
∙ повысить рейтинг >>
Micren
Статус: Практикант
Рейтинг: 388
∙ повысить рейтинг >>
Stealthm
Статус: 4-й класс
Рейтинг: 148
∙ повысить рейтинг >>

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

Выпуск № 1348 от 02.07.2009, 17:35
Администратор рассылки: Dr_Andrew, Модератор
В рассылке: подписчиков - 630, экспертов - 148
В номере: вопросов - 4, ответов - 7

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

Вопрос № 169913: Здраствуйте!!! Помогите написать карточную игру - "Покер"...


Вопрос № 169917: Здравтсвуйте! Помогите, пожалуйста, решить задачу. Даны массивы A[3][5], B[3][5]. Для каждого массива определить номер столбца с максимальным элементом. В столбце с максимальным элементом все отрицательные элементы заменить на ноль. В прог...
Вопрос № 169923: Дана целочисленная прямоугольная матрица. Определить максимальное из чисел,встречающихся в заданой матрице более одного раза (оформить ввиде процедуры )...
Вопрос № 169932: Здравствуйте эксперты, недавно увлекся С++, изучил вроде бы все основы(функции, классы, полиморфизм ,потоки, и т.д.) но писал в CodeBlocks, сейчас хочу перейти на написание Windows приложений в Borland C++ builder, подскажите какую-нить литературу чт...

Вопрос № 169913:

Здраствуйте!!!
Помогите написать карточную игру - "Покер"

Отправлен: 26.06.2009, 19:14
Вопрос задал: Руслан Радионович, Посетитель
Всего ответов: 1
Страница вопроса >>


Отвечает Dr_Andrew, Модератор :
Здравствуйте, Руслан Радионович.
Здесь Вы найдёте много материалов, посвящённых написанию компьютерной имитации карточной игры покер на C++.
На этом же сайте здесь Вы найдёте библиотеку XPokerEval, которая поможет Вам в написании программы. Казахстан, Алма-Ата
Организация: Казахский научный центр карантинных и зоонозных инфекций
Адрес сайта: Медицинские программы для Linux
ICQ # 256452186

Ответ отправил: Dr_Andrew, Модератор
Ответ отправлен: 27.06.2009, 06:57

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



    Вопрос № 169917:

    Здравтсвуйте! Помогите, пожалуйста, решить задачу.
    Даны массивы A[3][5], B[3][5]. Для каждого массива определить номер столбца с максимальным
    элементом. В столбце с максимальным элементом все отрицательные элементы заменить на ноль.
    В программе предусмотреть ввод массивов и вывод исходных данных и результатов.

    Отправлен: 26.06.2009, 20:13
    Вопрос задал: Ева Курт, Посетитель
    Всего ответов: 1
    Страница вопроса >>


    Отвечает Micren, Практикант :
    Здравствуйте, Ева Курт.
    Код:

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

    using namespace std;

    // Заполняет матрицу случайными значениями
    template<class T,size_t Dim1,size_t Dim2>
    void fillMatrix(T (&matrix)[Dim1][Dim2])
    {
    for(size_t i=0;i<Dim1;++i)
    {
    for(size_t j=0;j<Dim2;++j)
    {
    matrix[i][j]=rand()%21-10;
    }
    }
    }

    // Ввод матрицы с клавиатуры
    template<class T,size_t Dim1,size_t Dim2>
    void inputMatrix(const char* const msg,T (&matrix)[Dim1][Dim2])
    {
    cout<<msg<<endl;
    ios_base::fmtflags flags=cin.flags();
    cin.unsetf(ios_bas e::skipws);
    for(size_t i=0;i<Dim1;++i)
    {
    for(size_t j=0;j<Dim2;++j)
    {
    while(true)
    {
    cout<<'['<<i<<"]["<<j<<"]:";
    cin>>matrix[i][j];
    if(cin.fail())
    {
    cout<<"Ошибка ввода"<<endl;
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
    }
    else
    {
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
    break;
    }
    }
    }
    }
    cin.flags(flags);
    }

    // печатает матрицу
    template<class T,size_t Dim1,size_t Dim2>
    void printMatrix(const char* const msg,T (&matrix)[Dim1][Dim2])
    {
    cout<<msg<<endl;
    for(size_t i=0;i<Dim1;++i)
    {
    for(size_t j=0;j<Dim2;++j)
    {
    cout<<setw(4)<<matrix[i][j]<<' ';
    }
    cout<<endl;
    }
    }

    / / Ищет столбец с максимальным элементом
    template<class T,size_t Dim1,size_t Dim2>
    size_t columnWithMaximal(T (&matrix)[Dim1][Dim2])
    {
    T max=numeric_limits<T>::min();
    size_t col;
    for(size_t i=0;i<Dim1;++i)
    {
    for(size_t j=0;j<Dim2;++j)
    {
    if(max<matrix[i][j])
    {
    max=matrix[i][j];
    col=j;
    }
    }
    }
    return col;
    }

    // Заменяет в столбце с максимальным элементом отрицательные нулем
    template<class T,size_t Dim1,size_t Dim2>
    void solveMatrix(T (&matrix)[Dim1][Dim2])
    {
    size_t col=columnWithMaximal(matrix);
    for(size_t i=0;i<Dim1;++i)
    {
    (matrix[i][col]<0) && (matrix[i][col]=0);
    }
    }

    int main()
    {
    srand(static_cast<unsigned int>(time(0)));
    setlocale(LC_ALL,"russian_russia");

    // Размерности матриц
    const size_t ROWS=3,COLS=5;

    // Митрицы
    int A[ROWS][COLS],B[ROWS][COLS];

    // Заполним матрицу
    inputMatrix("Введите данные для матрицы A:",A);
    // Печатаем
    printMatrix("Матрица A:",A);
    // Заменяем согласно условию
    solveMatrix(A);
    // Печатаем
    printMatrix("Матрица после замены:",A);

    // То же для матрицы B
    inputMatrix("Введите данные для матрицы B:",B);
    printMatrix("Матрица B:",B);
    solveMatrix(B);
    printMatrix("Матрица после замены:",B);

    system("PAUSE");
    return 0;
    }

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

    Введите данные для матрицы A:
    [0][0]:1
    [0][1]:2
    [0][2]:3
    [0][3]:4
    [0][4]:5
    [1][0]:6
    [1][1]:7
    [1][2]:-4
    [1][3]:-3
    [1][4]:-4
    [2][0]:-2
    [2][1]:-6
    [2][2]:-8
    [2][3]:-9< br>[2][4]:0
    Матрица A:
    1 2 3 4 5
    6 7 -4 -3 -4
    -2 -6 -8 -9 0
    Матрица после замены:
    1 2 3 4 5
    6 7 -4 -3 -4
    -2 0 -8 -9 0
    Введите данные для матрицы B:
    [0][0]:3
    [0][1]:4
    [0][2]:5
    [0][3]:76
    [0][4]:-4
    [1][0]:-3
    [1][1]:-5
    [1][2]:
    Ошибка ввода
    [1][2]:-7
    [1][3]:dfg
    Ошибка ввода
    [1][3]:-7
    [1][4]:6
    [2][0]:7
    [2][1]:8
    [2][2]:7
    [2][3]:5
    [2][4]:3
    Матрица B:
    3 4 5 76 -4
    -3 -5 -7 -7 6
    7 8 7 5 3
    Матрица после замены:
    3 4 5 76 -4
    -3 -5 -7 0 6
    7 8 7 5 3

    Ответ отправил: Micren, Практикант
    Ответ отправлен: 26.06.2009, 22:58

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



    Вопрос № 169923:

    Дана целочисленная прямоугольная матрица. Определить максимальное из чисел,встречающихся в заданой матрице более одного раза (оформить ввиде процедуры )

    Отправлен: 26.06.2009, 22:20
    Вопрос задал: Redsox, Посетитель
    Всего ответов: 3
    Страница вопроса >>


    Отвечает _Ayl_, 8-й класс :
    Здравствуйте, Redsox.

    Код в приложении

    Приложение:

    Ответ отправил: _Ayl_, 8-й класс
    Ответ отправлен: 27.06.2009, 14:48

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


    Отвечает Micren, Практикант :
    Здравствуйте, Redsox.
    Программа. C++.
    Программа заполняет матрицу случайными числами. Производит поиск числа в матрице согласно условию. И выводит результат с подсветкой красным цветом найденных значений.

    Написал программу просто потому, что было интересно, чтоб программа осуществляла поиск за время пропорциональное O(N), в отличие от предыдущих ответов(где время поиска O(N2).

    Код:

    #include <limits>
    #include <locale>
    #include <iostream>
    #include <iomanip>
    #include <ctime>
    #include <cstdlib>
    #include <set>
    #include <Windows.h>

    #ifdef min
    #undef min
    #endif

    using namespace std;

    // Заполняет матрицу случайными числами
    template& lt;class _T,size_t _rows,size_t _cols>
    void fillMatrix(_T (&matrix)[_rows][_cols])
    {
    for(size_t i=0;i<_rows;++i)
    {
    for(size_t j=0;j<_cols;++j)
    {
    matrix[i][j]=rand()%101-50;
    }
    }
    }

    // Печатает матрицу с подсветкой красным цветом элемента со значением inColor
    template<class _T,size_t _rows,size_t _cols>
    void printMatrix(const char* const msg,_T (&matrix)[_rows][_cols],_T inColor)
    {
    cout<<msg<<endl;

    HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bufInfo;
    GetConsoleScreenBufferInfo(hOut,&bufInfo);

    for(size_t i=0;i<_rows;++i)
    {
    for(size_t j=0;j<_cols;++j)
    {
    // Выводим в цвете
    if(matrix[i][j]==inColor)
    {
    SetConsoleTextAttribute(hOut,BACKGROUND_RED|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
    }
    else
    {
    SetConsoleTextAttribute(hOut,bufInfo.wAttributes);
    }
    cou t<<setw(4)<<matrix[i][j]<<' ';
    }
    cout<<endl;
    }
    SetConsoleTextAttribute(hOut,bufInfo.wAttributes);
    }

    // Собственно решение
    // Возвращает true, если требуемый по условию элемент найден
    // result - найденный элемент
    template<class _T,size_t _rows,size_t _cols>
    bool solve(_T (&matrix)[_rows][_cols],_T& result)
    {
    // Множество элементов со значением не менее чем будет в result
    typedef set<_T> _set;
    _set maxItems;

    // Флаг если найден
    bool find=false;

    // Начальное значение
    result=numeric_limits<_T>::min();

    if(_rows*_cols>1)
    {
    _T* current=reinterpret_cast<_T*>(matrix);
    _T* end=current+_rows*_cols;
    // Проходим по матрице
    while(current!=end)
    {
    // Количество элементов со значением *current в множестве
    _set::size_type count;
    // Если элемент не меньше чем result и его еще не встречалось
    if(*c urrent>=result && !(count=maxItems.count(*current)))
    {
    // Добавим его
    maxItems.insert(*current);
    }
    else
    {
    // Если элемент ранее встречался и он больше ранее найденного или же первый удовлетворяющий условию
    if((*current>result || !find) && count)
    {
    // Флаг - нашли
    find=true;
    // Сохраним элемент
    result=*current;
    // Удалим из множества элементы менее result
    maxItems.erase(maxItems.begin(),maxItems.lower_bound(result));
    }
    }
    // На следующий элемент
    ++current;
    }
    }
    return find;
    }

    int main()
    {
    srand(static_cast<unsigned int>(time(0)));
    setlocale(LC_ALL,"russian_russia");
    // Размерности матрицы
    const size_t ROWS=4,COLS=5;
    int matrix[ROWS][COLS];

    // Заполним матрицу случайными числами
    fillMatrix(matrix);
    int item;
    if(solve(matrix,item))
    {
    printMatrix("Мат рица:",matrix,item);
    cout<<"Такой элемент "<<item<<endl;
    }
    else
    {
    cout<<" ;Таких элементов нет"<<endl;
    }
    system("PAUSE");
    return 0;
    }


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

    Матрица:
    -14 -42 -4 -1 25
    14 50 4 40 -37
    -40 -7 40 16 -1
    40 16 -16 16 -15
    Такой элемент 40

    Ответ отправил: Micren, Практикант
    Ответ отправлен: 27.06.2009, 18:39

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


    Отвечает leonid59, 4-й класс :
    Здравствуйте, Redsox.
    1. Создаем мастрицу a (память выделяем динамически)
    2. Создаем вектор b для хранения копии значений элементов матрицы a (память выделяем динамически)
    3. Сортируем вектор b пузырьком
    4. Идя сверху вниз, ищем первый неединственный элемент.
    5. Печатаем значение.
    6. Освобождаем память

    Приложение:

    Ответ отправил: leonid59, 4-й класс
    Ответ отправлен: 28.06.2009, 12:09

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



    Вопрос № 169932:

    Здравствуйте эксперты, недавно увлекся С++, изучил вроде бы все основы(функции, классы, полиморфизм ,потоки, и т.д.) но писал в CodeBlocks, сейчас хочу перейти на написание Windows приложений в Borland C++ builder, подскажите какую-нить литературу чтобы адаптироваться, так же раньше до этого много писать в Borland Delphi, они на вид очень похожи.

    Отправлен: 27.06.2009, 12:54
    Вопрос задал: Tribak, Студент
    Всего ответов: 2
    Страница вопроса >>


    Отвечает Dr_Andrew, Модератор :
    Здравствуйте, Tribak.
    Для начала обратитесь к книге Культин Н.Б. Основы программирования в Turbo C++. - СПб: БХВ-Петербург, 2007. -464 с. К книге прилагается диск с дистрибутивом Turbo C++ Explorer (это официально бесплатная, хотя и требующая регистрации версия Borland C++ Builder). Также можете обратиться к книгам А.Я. Архангельского и Н.З. Елмановой, любым, какие в магазине увидите. Кстати, справка Builder'а - сама по себе неплохое пособие, содержащее довольно много интересных примеров.
    Казахстан, Алма-Ата
    Организация: Казахский научный центр карантинных и зоонозных инфекций
    Адрес сайта: Медицинские программы для Linux
    ICQ # 256452186

    Ответ отправил: Dr_Andrew, Модератор
    Ответ отправлен: 27.06.2009, 13:20

    Оценка ответа: 5

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


    Отвечает leonid59, 4-й класс :
    Здравствуйте, Tribak! Шамис В.А. Borland C++ Builder 6 для профессионалов. - СПб, Питер, 2005 - 798с, ил

    Ответ отправил: leonid59, 4-й класс
    Ответ отправлен: 27.06.2009, 18:12

    Оценка ответа: 5

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



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

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

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

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

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

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

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


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.3 от 20.06.2009

    В избранное