Continuing to acquaint you withфункциями в C offerindependently several tasks. Расположены они по уровню сложности.
1. Объявить два целочисленных array with different sizes and write function, that fills their elements and values shown on the screen. Функция должна принимать два параметра – массив и его размер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> using namespace std; void fillAndShowArray(int arrayForFilling[], int size); int main() { const int SIZE1 = 8; const int SIZE2 = 14; int arrayForFilling1 [SIZE1] = {}; int arrayForFilling2 [SIZE2] = {}; fillAndShowArray(arrayForFilling1, SIZE1); fillAndShowArray(arrayForFilling2, SIZE2); return 0; } void fillAndShowArray(int arrayForFilling[], int size) { for (int i = 0; i < size; i++) { arrayForFilling[i] = i + 1; cout << arrayForFilling[i] << " "; } cout << endl; } |
В этой задаче удобно то, что если необходимо изменить значение размера массива, достаточно изменить соответствующую константу (SIZE1 или SIZE2). Так нам не придется менять эти значения ни в объявлении массивов, no parameters in the function call.
Отдельно хочется сказать о передаче в функцию массива, as a parameter. Мы говорили в уроке, что при вызове функции создаются точные копии переменных и все изменения происходят именно с этими копиями, а не с переменными. Так что при выходе из функции, переменные не изменят свое значение. Если всё же надо изменить значение переменных в функции – делается это с помощью ссылок or указателей, которые мы рассмотрим в следующих уроках. With the array is not the case. Everything that happens with the array elements in the function, сохраняется и после выхода из неё. Это происходит потому, что имя массива – это и есть указатель на его первый элемент.
Когда необходимо передать в функцию одномерный массив, при её определении надо указать пустые [ ] скобки после имени параметра, обозначающего массив. В нашей задаче – void fillAndShowArray(int arrayForFilling[], int size) . Если надо передать двумерный массив – the first square brackets left empty, а во вторые надо внести значение. For example void fillAndShowArray(int arrayForFilling[][3], int size)
Чтобы передать в функцию массив, при её вызове – enough to use the array name. Скобки и размер писать не надо (strings 14 – 15).
2. Необходимо создать двумерный массив 5 х 5. Далее написать функцию, which fills its random numbers from 30 to 60. Создать еще две функции, которые находят максимальный и минимальный элементы этого двумерного массива. (ABOUTгенерации случайных чисел a separate article)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <iostream> #include <ctime> #include <cstdlib> using namespace std; const int SIZE = 5; void fillAndShowArray(int[][SIZE], const int size); int findMinElement(int[][SIZE], const int size); int findMaxElement(int[][SIZE], const int size); int main() { setlocale(LC_ALL, "rus"); int matrix[SIZE][SIZE] = {}; fillAndShowArray(matrix, SIZE); //заполняем и показываем массив cout << endl; cout << "Минимум: " << findMinElement(matrix, SIZE) << endl; cout << "Максимум: " << findMaxElement(matrix, SIZE) << endl; return 0; } void fillAndShowArray(int arr[][SIZE], const int size) { for (int i = 0; i < size; i++) { cout << "| "; for (int j = 0; j < size; j++) { arr[i][j] = 30 + rand() % 31; cout << arr[i][j] << " "; } cout << " |" << endl; } } int findMinElement(int arr[][SIZE], const int size) { int min = arr[0][0]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (arr[i][j] < min) min = arr[i][j]; } } return min; } int findMaxElement(int arr[][SIZE], const int size) { int max = arr[0][0]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (arr[i][j] > max) max = arr[i][j]; } } return max; } |
Чтобы найти минимальное значение в массиве, first assign a variablemin, которая определена в функции findMinElement(), cell valuearr[0][0]: int min = arr[0][0]; . Потом проходим по всем ячейкам двумерного массива. Если встретим значение меньше того, которое было записано в min at the beginning – перезаписываем эту переменную. Максимальное значение определяется похожим образом.
Программа работает так:
3. Написать игру в которой имитируется бросание кубиков компьютером и пользователем. В игре 2 dice and each of them may fall from 1 to 6 очков. Реализовать определение программой первого ходящего. Каждый делает по четыре броска. After the shots show, нарисованные символами кубики и количество очков, выпавших на них. After a couple of shots (бросок компьютера + бросок пользователя) display the intermediate result– the number of the player and the computer score. After announce, who won on the basis of all the shots.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | #include <iostream> #include <ctime> #include <cstdlib> using namespace std; bool calcFirstMove(); void drowCube(int res); int computerOrPlayerThrow(); void showIntermediateResult(int pointsOfComputer, int pointsOfUser, int numberThrow); int main() { setlocale(LC_ALL, "rus"); srand(time(NULL)); int playerScore = 0; // для накопления очков int computerScore = 0; int whoMove = 0; char userName[16] = {}; cout << "Ваше имя (латиницей): "; cin >> userName; whoMove = calcFirstMove(); // если будет 0 - ходит игрок, 1 - ходит компьютер for (int i = 0; i < 4; ++i) { for (int j = 0; j < 2; j++) { if (whoMove) { cout << "\nХодишь ты. "; playerScore += computerOrPlayerThrow(); } else { cout << "\nХодит компьютер. "; computerScore += computerOrPlayerThrow(); } whoMove = !whoMove; // инверсия } showIntermediateResult(computerScore, playerScore, i); } if (computerScore > playerScore) { cout << "\n\nПобедитель этой игры - КОМПЬЮТЕР\n!"; cout << "Желаем успехов в следующий раз.\a\a\a\a\a\n\n"; } else if (computerScore < playerScore) { cout << "\n\nПобедитель этой игры - " << userName << "!!! "; cout << "Поздравляем!!!\a\a\a\a\a\n\n"; } else { cout << "\n\nВ этой игре НИЧЬЯ\a\a\a\a\a\n\n"; } return 0; } bool calcFirstMove() // генерирует и возвращает случайное число 0 или 1 { return rand() % 2; } void showIntermediateResult(int computerScore, int playerScore, int numberThrow) { cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; cout << "Комп: " << computerScore << " ||| Ты:" << playerScore << endl; cout << "После " << numberThrow + 1 << "-го броска "; if (computerScore > playerScore) cout << " выигрывает компьютер!!!\n"; else if (computerScore < playerScore) cout << " выигрываете Вы!!!\n"; else cout << " ничья!!!\n"; cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"; } // вызывается в функции computerOrPlayerThrow() void drowCube(int res) { switch (res) { case 1: cout << "@@@@@@@\n"; cout << "@@@@@@@\n"; cout << "@@@ @@@\n"; cout << "@@@@@@@\n"; cout << "@@@@@@@\n"; break; case 2: cout << "@@@@@@@\n"; cout << "@ @@@@@\n"; cout << "@@@@@@@\n"; cout << "@@@@@ @\n"; cout << "@@@@@@@\n"; break; case 3: cout << "@@@@@@@\n"; cout << "@ @@@@@\n"; cout << "@@@ @@@\n"; cout << "@@@@@ @\n"; cout << "@@@@@@@\n"; break; case 4: cout << "@@@@@@@\n"; cout << "@ @@@ @\n"; cout << "@@@@@@@\n"; cout << "@ @@@ @\n"; cout << "@@@@@@@\n"; break; case 5: cout << "@@@@@@@\n"; cout << "@ @@@ @\n"; cout << "@@@ @@@\n"; cout << "@ @@@ @\n"; cout << "@@@@@@@\n"; break; case 6: cout << "@@@@@@@\n"; cout << "@ @ @ @\n"; cout << "@@@@@@@\n"; cout << "@ @ @ @\n"; cout << "@@@@@@@\n\n"; break; } } int computerOrPlayerThrow() // реализация броска пары кубиков и возврат полученных очков { int result = 0; char c = 0; cout << "Нажми Y и Enter, чтобы бросить кубики: "; do { cin.sync(); // очистка буфера cin >> c; } while (c != 'y' && c != 'Y'); int tmp = 0; // для накопления очков пары брошенных кубиков for (int i = 0; i < 2; ++i) { tmp = 1 + rand() % 6; drowCube(tmp); result += tmp; cout << endl; } cout << "Всего на кубиках " << result << " очков"; return result; } |
Комментарии к исходному коду: Определяем прототипы в строках 7 – 10. In string 25 in a variablewhoMove written that returns a random number functioncalcFirstMove(). Для себя определим, that if she returns 0 – ходит игрок, 1 – ходит компьютер. In strings 27 – 45 is конструкция вложенных циклов for. Во вложенном цикле (strings 29 – 42) происходит реализация поочередных бросков: учитывается, кто бросает первым, накапливаются очки, подсчитанные функцией computerOrPlayerThrow(). In string 41 changing value of variable whoMove на противоположное, для смены ходящего. The outer loop counts the number of pairs of rolls. Just in it functionshowIntermediateResult() показывает промежуточные результаты.
Определения всех функций находятся в строках 65 – 159. showIntermediateResult() принимает количество очков игрока и компьютера, после каждой пары бросков и выводит промежуточный результат. Так же функция принимает значение счетчика цикла для отображения номера броска.
drowCube() It called in the function computerOrPlayerThrow(). Она принимает результат сгенерированного в computerOrPlayerThrow() random number (from 1 to 6) и рисует соответствующий кубик.
computerOrPlayerThrow() предлагает сделать ход. Дважды генерирует число от 1 to 6 and causesdrowCube() для показа кубиков. Стандартная функция Sinksync() performs cleaning buffer – if the user has entered more than one character in the previous time.
Result:
#include
#include
using namespace std;
int who_first();
int throw_cube(int cube1, int cube2);
int main()
{
setlocale(LC_ALL, “ru”);
bool var;
int cube1 = 0;
int cube2 = 0;
int pc_points = 0;
int player_points = 0;
int pc_total = 0;
int player_total = 0;
cout <> name;
cout << endl;
var = who_first();
for (int i = 0; i < 8; i )
{
if (var)
{
player_points = throw_cube(cube1, cube2);
player_total += player_points;
cout << "Ходит " << name << endl;
cout << "У " << name << " dropped out " << player_points << " очков" << endl;
cout << "Всего у " << name << " " << player_total << " очков" << endl;
cout <<"===================================================="<< endl << endl;
}
else
{
int pc_points = throw_cube(cube1, cube2);
pc_total += pc_points;
cout << "Ходит компьютер" << endl;
cout << "У компьютера выпало " << pc_points << " очков" << endl;
cout << "Всего у компьютера " << pc_total << " очков" << endl<< endl;
cout << "====================================================" << endl << endl;
}
var = !var;
}
if (pc_total == player_total) cout << "Победила дружба! " < player_total) cout << "Победа за компьютером :-( " << endl;
else if (pc_total < player_total) cout << "Победил(and) " << name << "!" << endl;
}
int who_first()
{
srand(time(0));
int result = rand() % 2 – 1;
return result;
}
int throw_cube(int cube1, int cube2)
{
cube1 = rand() % 6 + 1;
cube2 = edge() % 6 + 1;
int result = cube1 + cube2;
return result;
}
Alena is a fool, you have a lot of mistakes there. correct with a hog
No subtotals.
#include
#include
#include
#include
using namespace std;
int PCscore, manscore;
int cube();
int cubePC();
int main() {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
srand(time(NULL));
string x;
cout << "КУБИКИ – LET'S PLAY?" << endl;
for (int i = 0; i < 3; i ) {
cout << "Бросить кубики?" <> x;
if (x == “yes”)
{
cube();
}
else {
cout << "Завершение работы…";
return 0;
}
cout << "Ход компьютера:" << endl;
cubePC();
}
cout << "Компьютер – " << PCscore << endl
<< "Игрок – " << manscore < manscore) cout << "Вы проиграли" << endl;
else cout << "Вы выиграли" << endl;
}
int cube() {
SetConsoleOutputCP(866);
SetConsoleCP(1251);
int man1 = 1 + rand() % 5, man2 = 1 + rand() % 5;
cout << (char)201 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)187
<< "\t" << (char)201 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)187 << endl
<< (char)186 << " " << man1 << " " << char(186)
<< "\t" << (char)186 << " " << man2 << " " << char(186) << endl
<< (char)200 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)188
<< "\t" << (char)200 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)188 << endl;
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
return manscore += (man1 + man2);
}
int cubePC() {
SetConsoleOutputCP(866);
SetConsoleCP(1251);
int PC1 = 1 + rand() % 5, PC2 = 1 + rand() % 5;
cout << (char)201 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)187
<< "\t" << (char)201 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)187 << endl
<< (char)186 << " " << PC1 << " " << char(186)
<< "\t" << (char)186 << " " << PC2 << " " << char(186) << endl
<< (char)200 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)188
<< "\t" << (char)200 << (char)205 << (char)205 << (char)205 << (char)205 << (char)205 << (char)188 << endl;
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
return PCscore += (PC1 + PC2);
}
Task No. 3
#include
#include
#include
#include
using namespace std;
void ThrowCube(int &NumOnCube)
{
NumOnCube = rand() % 6 + 1;
switch (NumOnCube)
{
case 1:
cout << " _________" << endl;
cout << "/ \\" << endl;
cout << "| |" << endl;
cout << "| * |" << endl;
cout << "| |" << endl;
cout << "\\_________/" << endl;
break;
case 2:
cout << " _________" << endl;
cout << "/ \\" << endl;
cout << "| * |" << endl;
cout << "| |" << endl;
cout << "| * |" << endl;
cout << "\\_________/" << endl;
break;
case 3:
cout << " _________" << endl;
cout << "/ \\" << endl;
cout << "| * |" << endl;
cout << "| * |" << endl;
cout << "| * |" << endl;
cout << "\\_________/" << endl;
break;
case 4:
cout << " _________" << endl;
cout << "/ \\" << endl;
cout << "| * * |" << endl;
cout << "| |" << endl;
cout << "| * * |" << endl;
cout << "\\_________/" << endl;
break;
case 5:
cout << " _________" << endl;
cout << "/ \\" << endl;
cout << "| * |" << endl;
cout << "| * * * |" << endl;
cout << "| * |" << endl;
cout << "\\_________/" << endl;
break;
case 6:
cout << " _________" << endl;
cout << "/ \\" << endl;
cout << "| * * |" << endl;
cout << "| * * |" << endl;
cout << "| * * |" << endl;
cout << "\\_________/" << endl;
break;
}
}
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
bool WhoTurn = rand() % 2;
const int round = 4;
int PlayerCube1 = 0;
int PlayerCube2 = 0;
int PlayerScore = 0;
int BotCube1 = 0;
int BotCube2 = 0;
int BotScore = 0;
int stats[2][round] = { };
for (int i = 0; i < round * 2; i )
{
if (WhoTurn == 1)
{
cout << "Ваш ход!" << endl;
cout << "Бросить кубики(press any key)" << endl;
_getch();
ThrowCube(PlayerCube1);
ThrowCube(PlayerCube2);
cout << "\nСумма цифр на кубиках: " << PlayerCube1 + PlayerCube2 << "\n" << endl;
stats[0][i/2] = PlayerCube1 + PlayerCube2;
PlayerScore += stats[0][i/2];
WhoTurn = 0;
}
else
{
cout << "Ход компьютера!" << endl;
cout << "Компьютер бросает кубики" << endl;
Sleep(500);
ThrowCube(BotCube1);
ThrowCube(BotCube2);
cout << "\nСумма цифр на кубиках: " << BotCube1 + BotCube2 <<"\n" << endl;
stats[1][i/2] = BotCube1 + BotCube2;
BotScore += stats[1][i/2];
WhoTurn = 1;
}
if ((i+1) % 2 == 0 && i != round * 2 – 1)
{
cout << "\n=================================" << endl;
cout << " Player account tComputer account" << endl;
cout << " " << PlayerScore << "\t " << BotScore << endl;
cout << "=================================" < BotScore)
{
cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
cout << "@ Вы победили!!! Congratulations! @" << endl;
cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" < PlayerScore)
{
cout << "#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#" << endl;
cout << "# Компьютер победил!!! Lucky next time! #" << endl;
cout << "#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#" << endl;
}
else
{
cout << " \t tDraw!" << endl;
}
cout << "==================================" << endl;
cout << " Player account | Computer account" << endl;
cout << " " << PlayerScore << " |" << "\t " << BotScore << endl;
cout << " |" << endl;
for (int i = 0; i < round; i )
{
cout << i+1 << " throw: " << stats[0][i] << " | " << " " << stats[1][i] << endl;
}
cout << "==================================" << endl;
return 0;
}
When writing a program no. 3 noticed one thing: if unknowingly declare srand(time(NULL)) in the body of the program more than once, then the result of the throw between cycles will not change. Threw away 3 and 5 – so it will be until the end of the program to throw 3 and 5, until the program is restarted. And so over and over again. I fell for it. The error is not displayed on the debug screen in Visual Studio.
Declare two integer arrays with different sizes and write a function,
that fills their elements and values shown on the screen.
The function must take two parameters - an array and its size.
#include
using namespace std;
const int ARRSIZE_1 = 4;
const int ARRSIZE_2 = 5;
void FuncArr(int arr[], int b)
{
for (int i = 0; i < b; i )
{
arr[i] = rand();
}
for (int i = 0; i < b; i )
{
cout << arr[i]<< "\t";
}
cout << endl;
}
int main()
{
setlocale(LC_ALL, "RU");
int arrOne[ARRSIZE_1], arrTwo[ARRSIZE_2];
cout << "Элементы первого массива : " << endl;
FuncArr(arrOne, ARRSIZE_1);
cout << "Элементы второго массива : " << endl;
FuncArr(arrTwo, ARRSIZE_2);
}
You need to create a two-dimensional array 5 х 5.
Далее написать функцию, which fills its random numbers from 30 to 60.
Создать еще две функции, которые находят максимальный и минимальный элементы этого двумерного массива.
(There is a separate article about random number generation.)
#include
#include
using namespace std;
const int ROW = 5;
const int COL = 5;
int arrOne[ROW][COL];
void FuncAddArrNumber()
{
srand(time(NULL));
for (int i = 0; i < ROW; i )
{
for (int j = 0; j < COL; j )
{
arrOne[i][j] = rand()%30+30;
}
}
for (int i = 0; i < ROW; i )
{
for (int j = 0; j < COL; j )
{
cout << arrOne[i][j] << "\t";
}
cout << endl;
}
}
void FuncMaxMinElement()
{
int maxElement = arrOne[0][0];
int minElement = arrOne[0][0];
for (int i = 0; i < ROW; i )
{
for (int j = 0; j < COL; j )
{
if (maxElement arrOne[i][j])
{
minElement = arrOne[i][j];
}
}
}
cout << "Максимальный элемент массива : " << maxElement << endl << "Минимальный элемент массива : " << minElement << endl;
}
int main()
{
setlocale(LC_ALL, "RU");
FuncAddArrNumber();
FuncMaxMinElement();
}
Near the counter of the store there is a queue with n customers. The service time of the i-th customer ti by the seller has a normal distribution with mathematical expectation 5 min and standard deviation 2 min.
Develop an algorithm and make a simulation program to obtain the values of ti , values ci - waiting time for service by the i-th customer, service start time, end time for each customer. Find Average Service Wait Time.
Present the result of the program in the form of a table, which consists of calculated values.
The task 1 used templates simply can be without them
#include
using namespace std;
template
T Cin_Array(const T SIZE, const T SIZE2, T arr[], T arr_2[]);
template
T Print_Array(const T SIZE, const T SIZE2, T arr[], T arr_2[]);
int main()
{
const int SIZEARR = 5;
const int SIZEARR2 = 8;
int arr[SIZEARR];
int arr2[SIZEARR2];
Cin_Array(SIZEARR, SIZEARR2, arr, arr2);
system(“cls”);
Print_Array(SIZEARR, SIZEARR2, arr, arr2);
system(“pause”);
return 0;
}
template
T Cin_Array(const T SIZE, const T SIZE2, T arr[], T arr_2[])
{
for (int i = 0; i > arr[i];
}
for (int j = 0; j > arr_2[j];
}
cout << endl;
return 0;
}
template
T Print_Array(const T SIZE, const T SIZE2, T arr[], T arr_2[])
{
for (int i = 0; i < SIZE; i )
{
cout << arr[i] << " | ";
}
cout << endl;
for (int j = 0; j < SIZE; j )
{
cout << arr_2[j] << " \\ ";
}
cout << endl;
return 0;
}