Основы программирования на С++ для начинающих

Задачи: Функции C++

Продолжая знакомить вас с функциями в C++ предлагаем самостоятельно  решить несколько задач. Расположены они по уровню сложности.

1. Объявить два целочисленных массива  с разными размерами и написать функцию, которая заполняет их элементы значениями и показывает на экран. Функция должна принимать два параметра – массив и его размер.

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

3. Написать игру в которой имитируется бросание кубиков компьютером и пользователем. В игре 2 кубика и на каждом из них может выпасть от 1 до 6 очков. Реализовать определение программой первого ходящего. Каждый делает по четыре броска.  После бросков показать, нарисованные символами кубики и количество очков, выпавших на них. После  пары бросков (бросок компьютера + бросок пользователя) выводить на экран промежуточный результат  – количество набранных очков игроком и компьютером.  В конце сообщить о том, кто выиграл по итогам всех бросков. 

39 thoughts on “Задачи: Функции C++

  1. По первой задаче.
    Одна функция должна решать одну проблему. У вас функция заполняет И выводит. Правильнее написать 2 функции.

    По второй задаче тоже самое, но еще… я бы добавил функцию сравнения элементов и передавал ее в качестве аргумента. У вас код функций findmin b findmax почти совпадает. Это плохо.

    Типа того
    int find(const int *arr, const int n, const std::functoin compare) const {
    int result = arr[0];
    for(int i = 1; i < n; ++i)
    result = compare(arr[i], result);
    return result;
    }

    int min(int a, int b) { return a b ? a : b; }

    // …
    int size = 5;
    int *arr = new int[size];
    find(arr, size, min); // найдет минимальный элемент

    Код накидал схемотично.

    По третьей задаче… я бы функцию main разбил на более мелкие. Например поздравление юзера можно вынести в отдельную функцию. Почему нет?

  2. третья задача классная! дала младшему брату поиграть в кубики с компьютером ;)

  3. Вот что получилось в 3-ем задании.

    void DoPlayerWalketh(int &iFirstCubeValue, int &iSecondCubeValue, int &iPlayerScore);
    void DoComputerWalketh(int &iFirstCubeValue, int &iSecondCubeValue, int &iComputerScore);
    void ShowResults(int iPlayerScore, int iComputerScore);
    int iChooiseWalketh(int iArray);
    void KickTwoCubes(int &iFirstCube, int &iSecondCube);
    void cls();
    void pause();

    using namespace std;

    bool enable(true);

    int main()
    {
    setlocale(LC_ALL, "Russian");

    int iFirstCubeValue(0), iSecondCubeValue(0);
    int iPlayerScore(0), iComputerScore(0);
    int iWalketh(0);

    do
    {
    cls();

    iWalketh = iChooiseWalketh(iWalketh);

    if (iWalketh == 1)
    {
    DoPlayerWalketh(iFirstCubeValue, iSecondCubeValue, iPlayerScore);
    DoComputerWalketh(iFirstCubeValue, iSecondCubeValue, iComputerScore);
    ShowResults(iPlayerScore, iComputerScore);
    }
    else if (iWalketh == 0)
    {
    DoComputerWalketh(iFirstCubeValue, iSecondCubeValue, iComputerScore);
    DoPlayerWalketh(iFirstCubeValue, iSecondCubeValue, iPlayerScore);
    ShowResults(iPlayerScore, iComputerScore);
    }

    } while (enable);

    _getch();
    return 0;
    }

    void DoPlayerWalketh(int &iFirstCube, int &iSecondCube, int &iScore)
    {
    char chChooise('A');

    cls();

    cin.clear();
    cin.sync();

    cout << "Бросить кубик?" << endl;
    cout <> chChooise;

    switch (chChooise)
    {
    case 'y':
    case 'Y':
    KickTwoCubes(iFirstCube, iSecondCube);
    cls();
    cout << "Вы бросили кубик..." << endl;
    cout << "Вам выпало: " << iFirstCube << " и " << iSecondCube << endl;
    iScore += iFirstCube + iSecondCube;
    pause();
    break;
    case 'n':
    case 'N':
    enable = !enable;
    break;
    default:
    DoPlayerWalketh(iFirstCube, iSecondCube, iScore);
    break;
    }
    }

    void DoComputerWalketh(int &iFirstCube, int &iSecondCube, int &iScore)
    {
    if (enable)
    {
    cls();
    cout << "Ход компьютера." << endl;
    pause();
    cls();
    cout << "Компьютер бросил кубик..." << endl;
    KickTwoCubes(iFirstCube, iSecondCube);
    cout << "Ему выпало: " << iFirstCube << " и " << iSecondCube << endl;
    iScore += iFirstCube + iSecondCube;
    pause();
    }
    }

    void ShowResults(int iPlayerScore, int iComputerScore)
    {
    if (enable)
    {
    cls();
    cout <Результаты раунда<----------" << endl;
    cout << "| Всего очков у игрока: " << iPlayerScore << endl;
    cout << "| Всего очков у компьютера: " << iComputerScore << endl;
    pause();

    }
    else
    {
    cls();
    cout <>>Результаты и определение победителя<<<" < iComputerScore)
    cout << "*Победитель - человек с " << iPlayerScore << " очками*" < iPlayerScore)
    cout << "*Победитель - компьютер с " << iComputerScore << " очками*" << endl;
    cout << "Общие результаты: " << endl;
    cout << "Игрок: " << iPlayerScore << " очков." << endl;
    cout << "Компьютер: " << iComputerScore << " очков." << endl;
    pause();
    }
    }

    void KickTwoCubes(int &iFirstCube, int &iSecondCube)
    {
    srand(time(NULL));

    int iRandomize = rand() % 7;
    for (int i(0); i < iRandomize; i++)
    iFirstCube = 1 + rand() % (6 - 1 + 1);

    iRandomize = rand() % 7;
    for (int i(0); i < iRandomize; i++)
    iSecondCube = 1 + rand() % (6 - 1 + 1);
    }

    int iChooiseWalketh(int iArray)
    {
    if (iArray == 0)
    return 1;
    if (iArray == 1)
    return 0;
    else
    return 2;
    }

    void cls()
    {
    system("cls");
    }

    void pause()
    {
    system("pause");
    }

    Однако посмотрев после код решения, я понял, что за такое выполнение мне больше 2-ки не светит xD

  4. int funcmass()
    {
    const int size1 = 10;
    const int size2 = 5;

    int ms1[size1] = {};
    int ms2[size2] = {};

    srand(time_t(NULL));

    for (int i = 0; i < size1; i++)
    {
    ms1[i] = 1+rand()%10;
    cout<<"ms1= "<< ms1[i] << endl;;
    };

    cout <<"——————————————————————————-";
    for (int i = 0; i < size2; i++)
    {
    ms2[i] = 1 + rand() % 5;
    cout << "ms2= " << ms2[i] << endl;;
    };

    return 0;
    }

    int main()
    {
    setlocale(LC_ALL, "rus");

    funcmass();

    system("PAUSE");
    return 0;
    }

  5. #include
    #include

    using namespace std;

    int brosok();
    void kubik(int player, int comp);
    void tabl(int player, int comp);

    int main()
    {

    srand(time(NULL));

    char name[15];
    int player = 0;
    int comp = 0;

    cout < < "Добро Пожаловать" << endl; cout << name; kubik(player, comp); return 0; } int brosok() { int s, a; char y = 0; cout << y; if (y == 'y') { a = 1 + rand() % 6; s = a; } else if (y != 'y') { cout << "Не шути со мной." << endl; } cout << endl; switch (a) { case 1: cout << "@@@@@@@\n"; cout << "@@@@@@@\n"; cout << "@@@ @@@\n"; cout << "@@@@@@@\n"; cout << "@@@@@@@\n"; cout << "\nОдно очко\n"; break; case 2: cout << "@@@@@@@\n"; cout << "@ @@@@@\n"; cout << "@@@@@@@\n"; cout << "@@@@@ @\n"; cout << "@@@@@@@\n"; cout << "\nДва очка\n"; break; case 3: cout << "@@@@@@@\n"; cout << "@ @@@@@\n"; cout << "@@@ @@@\n"; cout << "@@@@@ @\n"; cout << "@@@@@@@\n"; cout << "\nТри очка\n"; break; case 4: cout << "@@@@@@@\n"; cout << "@ @@@ @\n"; cout << "@@@@@@@\n"; cout << "@ @@@ @\n"; cout << "@@@@@@@\n"; cout << "\nЧетыре очка\n"; break; case 5: cout << "@@@@@@@\n"; cout << "@ @@@ @\n"; cout << "@@@ @@@\n"; cout << "@ @@@ @\n"; cout << "@@@@@@@\n"; cout << "\nПять очков\n"; break; case 6: cout << "@@@@@@@\n"; cout << "@ @ @ @\n"; cout << "@@@@@@@\n"; cout << "@ @ @ @\n"; cout << "@@@@@@@\n\n"; cout << "\nШесть очков\n"; break; } return s; } void kubik(int player, int comp) { for (int i = 0; i < 4; i++) { cout << "\nВаш бросок, "; player = brosok(); cout << comp; } tabl(player, comp); cout << "Вы победили, поздравляем!!!" << player; tabl(player, comp); cout << "Вы проиграли, не отчаивайтесь." << endl; } void tabl(int player, int comp) { cout << "Таблица Бросков" << endl; cout << "| Вы набрали: " << player << "||" << "Компьютер набрал: " << comp << " |" << endl; cout << endl; }

  6. Первое задание:

  7. Третью задачу можно написать и на Си:

  8. int minValueArr(int Arr[][5], int SizeArr)
    {
    int minItem = Arr[0][0];
    for (int i = 0; i < SizeArr; i++)
    {
    for (int j = 0; j Arr[i][j])
    {
    minItem = Arr[i][j];
    }
    }
    }
    cout << "Наименьшее значение элементов массива = " << minItem<<endl<<endl;
    return minItem;
    }

    Насколько критично использовать оператор “cout” в самой функции, или же более правилен вариант его в использования внутри функции “main”, как показано в ваших примерах. Спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *