Skip to content

Commit a2f7136

Browse files
authored
Merge pull request #4 from nedav347/lesson_3
Lesson 3
2 parents 65ce363 + d4c6f94 commit a2f7136

3 files changed

Lines changed: 180 additions & 0 deletions

File tree

lesson_2/lesson2_.cpp

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* Домашнее задание к уроку 2
3+
* курса "Основы языка С++"
4+
* автор Недокунев А.В.
5+
* среда разработки Notepad++ /компилятор MinGW/
6+
* codepage UTF-8
7+
*/
8+
#include <iostream>
9+
10+
int main()
11+
{
12+
//Задание 1
13+
//объявляем и сразу инициализируем
14+
int type_int = 2147483647; //4 байта -2 147 483 648 / 2 147 483 647
15+
unsigned int type_uint = 4294967295; //4 байта
16+
short type_short = 32767; //2 байта -32 768 / 32 767
17+
unsigned short type_ushort = 65535; //2 байта
18+
long type_long = 2147483647; //4 байта
19+
unsigned long type_ulong = 4294967295; //4 байта
20+
char type_char = 'a'; //1 байт
21+
float type_float = 2147483647.0; //4 байта
22+
double type_double = 9223372036854775807.0; //8 байт
23+
24+
//объявляем тип данных enum, заодно и Задание 2 выполним
25+
enum SYMBOL{PLAYER_1_WIN = 'X', PLAYER_2_WIN = 'O', SPACE = ' ', PLAYER_1 = 'x', PLAYER_2 = 'o', HORIZ = '-', VERT = '|', CROSS = '+'};//объявляем тип данных enum
26+
//хотя enum вообще-то int, для удобочитаемости пишем символы, а не их коды ASCII
27+
enum SYMBOL p1 = PLAYER_1;//объявляем переменную и сразу инициализируем
28+
enum SYMBOL p2 = PLAYER_2;
29+
enum SYMBOL s = SPACE;
30+
enum SYMBOL p1w = PLAYER_1_WIN;
31+
enum SYMBOL p2w = PLAYER_2_WIN;
32+
enum SYMBOL h = HORIZ;
33+
enum SYMBOL v = VERT;
34+
enum SYMBOL x = CROSS;
35+
36+
//объявляем тип данных struct, заодно и Задание 4* выполним
37+
static const int size_x = 3, size_y = 3;
38+
struct sGame_field {
39+
const int in_line = 3;//количество полей для выигрыша
40+
struct sCell {//структура для клетки поля
41+
int x_coord, y_coord;//координаты клетки поля
42+
int mode;//состояние клетки поля, где 0 - пусто, 1 - занято игроком 1, 2 - занято игроком 2
43+
} cell_arr[size_x][size_y];
44+
} MyField;
45+
for (int a = 0; a < size_x; a++) {//инициализируем игровое поле
46+
for (int b = 0; b < size_y; b++) {
47+
MyField.cell_arr[a][b].x_coord = a;
48+
MyField.cell_arr[a][b].y_coord = b;
49+
MyField.cell_arr[a][b].x_coord = 0;
50+
};
51+
};
52+
53+
//объявляем тип данных union
54+
union type_union {
55+
int i;
56+
char c;
57+
float f;
58+
};
59+
union type_union U_1;//объявляем переменную
60+
U_1.f = 2147483647.0;//инициализируем
61+
62+
//Задание 3
63+
SYMBOL field[5][5];//создаем массив
64+
for (int k = 0; k < 5; k++){//инициализируем массив пустым полем для игры крестики-нолики
65+
for (int m = 0; m < 5; m++){
66+
if ((m % 2 == 0) && (k % 2 == 0)){
67+
field[k][m] = s;
68+
} else if ((m % 2 != 0) && (k % 2 != 0)) {
69+
field[k][m] = x;
70+
} else if (m % 2 != 0) {
71+
field[k][m] = v;
72+
} else if (k % 2 != 0) {
73+
field[k][m] = h;
74+
}
75+
printf("%c", field[k][m]);//просто, чтобы проверить себя
76+
}
77+
printf("\n");//наверное, можно было добавить перевод строки в каждый последний элемент строки (тогда размерность станет [5][6]
78+
}
79+
80+
//Задание 5*
81+
struct s_byte {//объявляем тип данных struct,
82+
union type_union {//объявляем тип данных union
83+
int i;
84+
char c;
85+
float f;
86+
};
87+
int is_int : 1;
88+
int is_char : 1;
89+
int is_float : 1;
90+
};
91+
92+
93+
/*
94+
printf("sizeof int %d, %d\n", sizeof(int), type_int);
95+
printf("sizeof uint %d, %u\n", sizeof(unsigned int), type_uint);
96+
printf("sizeof short %d, %hd\n", sizeof(short), type_short);
97+
printf("sizeof short %d, %hu\n", sizeof(unsigned short), type_ushort);
98+
printf("sizeof long %d, %ld\n", sizeof(long), type_long);
99+
printf("sizeof long %d, %lu\n", sizeof(unsigned long), type_ulong);
100+
printf("sizeof char %d, %c\n", sizeof(char), type_char);
101+
printf("sizeof float %d, %f\n", sizeof(float), type_float);
102+
printf("sizeof double %d, %f\n", sizeof(double), type_double);
103+
*/
104+
return 0;
105+
}

lesson_3/lesson3.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Домашнее задание к уроку 3
3+
* курса "Основы языка С++"
4+
* автор Недокунев А.В.
5+
* среда разработки Notepad++ /компилятор MinGW/
6+
* codepage UTF-8
7+
*/
8+
#include <iostream>
9+
10+
extern int ae, be, ce, de;//goto lesson3_ext.cpp
11+
12+
int variable_inint();
13+
14+
int main()
15+
{
16+
/*Задание 1
17+
Написать программу, вычисляющую выражение a * (b + (c / d)) и
18+
выводящую результат с плавающей точкой, где a, b, c, d – целочисленные константы
19+
*/
20+
const int a = 2, b = 3, c = 4, d = 23;
21+
printf("a * (b + (c / d)) = %f\n", a * (b + ((float)c / d)));
22+
/*Задание 2
23+
Дано целое число, выведите на экран разницу между этим числом и числом 21.
24+
Если же заданное число больше, чем 21, необходимо вывести удвоенную разницу
25+
между этим числом и 21. При выполнении задания следует использовать тернарный оператор.
26+
*/
27+
printf("delta %d\n", d > 21 ? 2 * (d - 21) : d - 21);
28+
29+
/*Задание 3
30+
Написать программу, вычисляющую выражение из первого задания,
31+
а переменные для неё инициализировать в другом файле
32+
*/
33+
float r;//вначале, до "int main(){", объявим внешние переменные и функцию, которые будут в файле lesson3_ext.cpp
34+
variable_inint();
35+
r = ae * (be + ((float)ce / de));
36+
printf("%f\n", r);
37+
38+
/*Задание 4*
39+
Описать трёхмерный целочисленный массив, размером 3х3х3, указатель на значения внутри массива
40+
и при помощи операции разыменования вывести на экран значение центральной ячейки получившегося куба [1][1][1]
41+
*/
42+
int arr[3][3][3], *arrptr;
43+
arrptr = &arr[0][0][0];//в методичке сказано, что arrptr = arr[0] корректная инициализация, но мой компилятор ругается на невозможность присвоить 'int [3][3][3]' указателю 'int*'
44+
for (int i = 0; i < 3; i++){//чтобы вывести значение какого-то элемента массива, надо сначала занести туда что-то...
45+
for (int j = 0; j < 3; j++){
46+
for (int k = 0; k < 3; k++){
47+
arr[i][j][k] = i * 100 + j * 10 + k;
48+
// *(arrptr + i*9 + j*3 + k) = i * 100 + j * 10 + k;//или с использованием указателя
49+
// printf("Cube (arr[%d][%d][%d]) = %d, %d\n", i, j, k, arr[i][j][k], *(arrptr + i*9 + j*3 + k));
50+
}
51+
}
52+
}
53+
printf("Center of Cube (arr[1][1][1]) = %d\n", *(arrptr + 13));//*arrptr + 1*9 + 1*3 + 1
54+
return 0;
55+
}

lesson_3/lesson3_ext.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Домашнее задание к уроку 3
3+
* курса "Основы языка С++"
4+
* автор Недокунев А.В.
5+
* среда разработки Notepad++ /компилятор MinGW/
6+
* codepage UTF-8
7+
*/
8+
#include <iostream>
9+
10+
int ae, be, ce,de;
11+
12+
int variable_inint()
13+
{
14+
ae = 10;
15+
be = 20;
16+
ce = 30;
17+
de = 40;
18+
printf("external %d, %d, %d, %d\n", ae, be, ce, de);
19+
return 0;
20+
};

0 commit comments

Comments
 (0)