С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
#1

Вывод на экран шахматной доски - C++

21.12.2008, 12:16. Просмотров 6441. Ответов 17
Метки нет (Все метки)

Помогите пожалуйста написать код программы выводящей на экран шахматную доску.
P.S. Я только учусь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2008, 12:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод на экран шахматной доски (C++):

Программа, которая выводит на экран изображение шахматной доски - C++
и снова привет! мне опять нужна ваша помощь. вот код, который жутко глючит((( { // Напишите программу, которая выводит на экран...

Написать программу, которая выводит на экран изображение шахматной доски - C++
Написать программу, которая выводит на экран изображение шахматной доски.

Король шахматной доски - C++
Король шахматной доски размером 8х8 находится на коне в одной из клеток своего королевства. Он очень озабочен тем, что некоторые клетки его...

Разрезание шахматной доски - C++
Написать программу нахождения всех способов разрезания шахматной доски с числом клеток nxn (n-четное) на две одинаковые по форме части (не...

Закрасить участок шахматной доски - C++
Люди помогите плиз, у меня в С++ вообще башка не варит((( написать программу для выполнения следующей задачи (): Нужно решить такую...

Обход конём шахматной доски - C++
Приветствую всех форумчан! Нужно решить задачу: обойти конём шахматное поле размером n*n (n<=8), побывав на каждой клетке не более одного...

17
VFJB
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
21.12.2008, 12:20 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
int main() {
  int i, j;
  printf("Pered vami - shahmatnaya doska:\n");
  for (i=0; i<=7; i++){ //* izmenenie stolbcov
    for (j=0; j<=7; j++) { //* izmenenie strok
      if(i%2==1) 
        if (j%2==1) printf("  ");
        else printf("*");
      else 
        if (j%2==1) printf("*");
        else printf("  ");
    }
  printf("\n");
  }
}
попробуй так
0
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
25.12.2008, 21:45  [ТС] #3
Большое спасибо!
0
Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
05.02.2010, 22:51 #4
Доброго времени суток.
Даны 2 задачи на вариацию шахматной доски.

1. Высота и ширина доски задаётся пользователем.
Нарисовать шахматную доску в консоли. Размер ячейки доски фиксирован - одно знакоместо.
Чёрные клетки - символ 'x', белый - символ '-'.
Тут сложностей нет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        int h, w, i, j;
        
    cout << "Введите высоту шахматной доски.\nh = ";
    cin >> h;
    cout << "Введите ширину шахматной доски.\nw = ";
    cin >> w;
 
    for (i=0; i<h; i++)
    {
        for (j=0; j<w; j++)
        {
            ((j%2 && i%2) || (!(j%2) && !(i%2))) ? (cout << 'x') : (cout << '-');
        }
        cout << '\n';
    }
    cout << "\n\n\n";
2. условия те же, только размер ячейки не фиксирован, а задаётся пользователем.
Т.е., например, высота доски - 3, ширина - 4, размер ячейки - 3 знакоместа.
На выводе должно быть так:

xxx---xxx---
xxx---xxx---
xxx---xxx---
---xxx---xxx
---xxx---xxx
---xxx---xxx
xxx---xxx---
xxx---xxx---
xxx---xxx---

И вот тут у меня проблемы.
Помогите пожалуйста подсказкой как это реализовать, готовый код не надо - хочется самому разобраться.
Из обязательных условий: использование только циклов - никаких массивов, консольный вывод (cout).

Добавлено через 3 часа 53 минуты
Вторую задачу-таки победил

C++
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 main()
{
    setlocale (LC_CTYPE, ".1251");  
    int h, a, w;
    cout << "Введите высоту шахматной доски.\nh = ";
    cin >> h;
    cout << "Введите ширину шахматной доски.\nw = ";
    cin >> w;
    cout << "Введите величину ячейки шахматной доски.\na = ";
    cin >> a;
    for (int i=0; i<h; i++)
    {
        for (int jj=0; jj<a; jj++)
        {
            for (int j=0; j<w; j++)
            {
                for (int ii=0; ii<a; ii++)
                {
                ((i+j)%2) ? (cout << '-') : (cout << 'x');
                }
            }
            cout << '\n';
        }
    }
    cout << "\n\n\n";
}
Если у кого-то есть идеи по оптимизации решения - с интересом бы посмотрел.
2
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
05.02.2010, 23:24 #5
Тут сложностей нет.
Grayswandir, Задача решена совершенно грамотно.
И никаких оптимизаций тут в принципе быть не может
1
M128K145
Эксперт С++
8300 / 3520 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.02.2010, 23:28 #6
Day, ошибаешься, очень даже может. Как минимум так
C++
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
#include <iostream>
using namespace std;
int main()
{
        setlocale (LC_CTYPE, ".1251");  
        int h, a, w;
        cout << "Введите высоту шахматной доски.\nh = ";
        cin >> h;
        cout << "Введите ширину шахматной доски.\nw = ";
        cin >> w;
        cout << "Введите величину ячейки шахматной доски.\na = ";
        cin >> a;
        int i, jj, j, ii;
        for (i=0; i<h; i++)
        {
                for (jj=0; jj<a; jj++)
                {
                        for (j=0; j<w; j++)
                        {
                                for (ii=0; ii<a; ii++)
                                {
                                        (!(i+j) & 1) ? (cout << '-') : (cout << 'x');
                                }
                        }
                        cout << '\n';
                }
        }
        cout << "\n\n\n";
        return 0;
}
0
Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
05.02.2010, 23:52 #7
M128K145, Ваш вариант работает неверно
И хотелось бы узнать, в чём именно заключается Ваша оптимизация, за исключением объявления счётчиков цикла до их начала, и присваивание функции main типа int?
1
M128K145
Эксперт С++
8300 / 3520 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
06.02.2010, 01:55 #8
Grayswandir, в 22 надо убрать отрицание, т.е. так
C++
1
2
3
4
5
6
int i, jj, j, ii;
for (i = 0; i < h; ++i)
    for (jj = 0; jj < a; ++jj, std::cout<<std::endl)
        for (j = 0; j < w; ++j)
            for (ii = 0; ii < a; ++ii)
                std::cout<<((i + j) & 1 ? '-' : 'x');
Оптимизация? Да никакой в принципе, если не учитывать затраты на создание N переменных типа int. Для вашего кода N = h * a * w + 1, для моего N = 4. А если взять значения h, a, w немногим более тысячи? Еще вопросы?
1
Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
06.02.2010, 02:01 #9
Спасибо. Об этом как-то и не подумал.
0
angelwarcode
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 1
19.01.2017, 16:26 #10
Я только учусь . Но Вот так вот доска шахматная должна выглядеть.
C++
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
#include <iostream>
using namespace std;
void main()
{
    setlocale(LC_ALL, "rus");
    int h, a, w;
    cout << "Введите высоту шахматной доски.\nh = ";
    cin >> h;
    cout << "Введите ширину шахматной доски.\nw = ";
    cin >> w;
    cout << "Введите величину ячейки шахматной доски.\na = ";
    cin >> a;
    for (int i = 0; i < h; i++)      //проход по высоте доски
    {
        if (i % 2 == 0)
            for (int i = 0; i < w/2; i++)     //проход  ***---  по ширине доски
            {
                for (int i = 0; i < a; i++)
                    cout << "*";
                for (int i = 0; i < a; i++)
                    cout << "-";
            }
        else 
            for (int i = 0; i < w/2; i++)     //проход  ---*** по ширине доски
            {
                for (int i = 0; i < a; i++)
                    cout << "-";
                for (int i = 0; i < a; i++)
                    cout << "*";
            }
        cout << "\n";
    }
    cout << "\n\n";
}
0
Dimension
19.01.2017, 16:32
  #11

Не по теме:

angelwarcode, теме 7 лет ,как вы ее нашли..

0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,634
19.01.2017, 16:52 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    const int N = 8;
    bool flag = true;
    for (int i = 0; i < N * N; i++)
    {
        if (i % N == 0)
        {
            std::cout << '\n';
            flag = !flag;
        }
        std::cout << (i & 1 ^ flag ? '*' : ' ');
    }
}
0
юз
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 1
30.11.2017, 14:11 #13
C++
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
#include <iostream>
#include<iomanip>
#include <Windows.h>
#include <conio.h>
#include <time.h>
#include <ostream>
 
using namespace std;
 
 
 
void main()
{
    bool x = true;
    int answer; answer = 0;
    while (x) {
        setlocale(LC_ALL, "Russian");
        system("pause");
        system("cls");
 
        char simbol, simbol1;
        int k, n;
        cout << "Введите ширину" << endl;
        cin >> k;
        cout << "Введите символ # и -" << endl;
        cin >> simbol;
        cin >> simbol1;
        cout << "Введите высоту" << endl;
        cin >> n;
        for (int l2 = 1; l2 <= n; l2++) {
            for (int l1 = 1; l1 <= n; l1++)
            {
                for (int l = 0; l <= k; l++)
                {
                    for (int i = 0; i <= k; i++)
                    {
                    // simbol=k;
                        cout << ' ' << simbol;
                    }
 
                    for (int j = 0; j <= k; j++)
                    {
                        // simbol1=k;
                        cout << ' ' << simbol1;
                    }
 
 
 
                }
            }
            for (int l = 1; l <= n; l++)
            {
                for (int l = 1; l <= n; l++)
                {
                    for (int i = 0; i <= k; i++)
                    {
                        //simbol1 = k;
                        cout << ' ' << simbol1;
                    }
 
                    for (int j = 0; j <= k; j++)
                    {
                        //simbol = k;
                        cout << ' ' << simbol;
                    }
 
 
 
                }
            }
        }
        cout << endl;
        cout << endl;
        cout << "Желаете продолжить работу?" << endl;
        cout << "Да - 1, нет - 0: ";
        cin >> answer;
        if (answer = 1) x = true;
        else x = false;
 
    }
}
Добавлено через 33 секунды
Немного доделать.)))
0
likehood
872 / 731 / 250
Регистрация: 25.12.2016
Сообщений: 2,422
Завершенные тесты: 3
30.11.2017, 14:54 #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using std::cout;
 
int main()
{
    cout << "\xDA\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xBF\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xC0\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xD9\n";
}
1
8Observer8
1713 / 1116 / 143
Регистрация: 05.10.2013
Сообщений: 3,702
Записей в блоге: 55
02.12.2017, 11:45 #15
SFML, OpenGL 3.3 Core, проект VS2015: Chessboard_SFML.zip

Вывод на экран шахматной доски

C++
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#define GLEW_STATIC
#include <GL/glew.h>
 
#include <SFML/Graphics.hpp>
 
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
 
#include <Windows.h>
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
 
extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
 
unsigned int CreateShaderProgram(const GLchar* vertexShaderText, const GLchar* fragmentShaderText);
std::string LoadFileContents(const std::string filePath);
 
int main()
{
    sf::ContextSettings settings;
 
    settings.majorVersion = 3;
    settings.minorVersion = 3;
    settings.depthBits = 24;
 
    sf::RenderWindow window(sf::VideoMode(500, 500), "Chessboard", sf::Style::Titlebar | sf::Style::Close, settings);
    window.setActive(true);
 
    glewExperimental = true;
    GLenum result = glewInit();
    if (result != GLEW_OK)
    {
        std::cout << "Glew failed to initialize: " << glewGetErrorString(result) << std::endl;
    }
 
    float vertices[] = {
        0.0f, 1.0f, // (x, y)
        0.0f, 0.0f,
        1.0f, 1.0f,
        1.0f, 0.0f
    };
 
    GLuint vbo;
    GLuint vao;
 
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    glVertexAttribPointer(0, 2, GL_FLOAT, false, 0, (GLvoid*)0);
    glEnableVertexAttribArray(0);
 
    //std::string vertexShaderText = LoadFileContents("shader.vert.glsl");
    //std::string fragmentShaderText = LoadFileContents("shader.frag.glsl");
 
    std::string vertexShaderSource =
        "#version 330 core\n"
        "layout(location = 0) in vec2 a_position;"
        "uniform mat4 u_mpMatrix;"
        "void main()"
        "{"
        "    gl_Position = u_mpMatrix * vec4(a_position, 0.0, 1.0);"
        "}";
 
    std::string fragmentShaderSource =
        "#version 330 core\n"
        "uniform vec3 u_color;"
        "out vec4 outColor;"
        "void main()"
        "{"
        "    outColor = vec4(u_color, 1.0);"
        "}";
 
    GLuint shaderProgram = CreateShaderProgram(vertexShaderSource.c_str(), fragmentShaderSource.c_str());
    glUseProgram(shaderProgram);
 
    GLint u_Color = glGetUniformLocation(shaderProgram, "u_color");
 
    glm::mat4x4 modelMatrix;
    glm::mat4 mpMatrix;
    glm::mat4 projectionMatrix = glm::ortho(0.0f, 8.0f, 0.0f, 8.0f);
 
    glViewport(20, 20, 460, 460);
 
    GLint u_mpMatrix = glGetUniformLocation(shaderProgram, "u_mpMatrix");
 
    while (window.isOpen())
    {
        sf::Event ev;
        while (window.pollEvent(ev))
        {
            if (ev.type == sf::Event::Closed)
            {
                window.close();
            }
        }
 
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
 
        for (size_t row = 0; row < 8; row++)
        {
            for (size_t col = 0; col < 8; col++)
            {
                modelMatrix = glm::translate(glm::mat4(), glm::vec3(col, row, 0.0f));
                mpMatrix = projectionMatrix * modelMatrix;
                glUniformMatrix4fv(u_mpMatrix, 1, false, &mpMatrix[0][0]);
                if ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0))
                {
                    glUniform3f(u_Color, 0.0f, 0.0f, 0.0f);
                }
                else
                {
                    glUniform3f(u_Color, 0.823f, 0.690f, 0.356f);
                }
                glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
            }
        }
 
        window.display();
    }
 
    return 0;
}
 
GLuint CreateShaderProgram(const GLchar * vertexShaderText, const GLchar * fragmentShaderText)
{
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    GLuint shaderProgram = glCreateProgram();
 
    glShaderSource(vertexShader, 1, &vertexShaderText, nullptr);
    glCompileShader(vertexShader);
 
    GLint success;
    GLchar infoLog[512];
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(vertexShader, 512, nullptr, infoLog);
        std::cout << "Vertex Shader compilation failed: " << infoLog << std::endl;
    }
 
    glShaderSource(fragmentShader, 1, &fragmentShaderText, nullptr);
    glCompileShader(fragmentShader);
    glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(fragmentShader, 512, nullptr, infoLog);
        std::cout << "Fragment Shader compilation failed: " << infoLog << std::endl;
    }
 
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
 
    glLinkProgram(shaderProgram);
 
    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
    if (!success)
    {
        glGetProgramInfoLog(shaderProgram, 512, nullptr, infoLog);
        std::cout << "Program failed to link: " << infoLog << std::endl;
    }
 
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
 
    return shaderProgram;
}
 
std::string LoadFileContents(const std::string filePath)
{
    std::ifstream file(filePath);
    std::stringstream sstream;
 
    if (!file.is_open())
    {
        std::cout << "Could not find the file: " << filePath << std::endl;
    }
 
    sstream << file.rdbuf();
 
    return sstream.str();
}
1
02.12.2017, 11:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2017, 11:45
Привет! Вот еще темы с ответами:

Написать шаблон шахматной доски - C++
Всем доброго времени суток! Я только начала учить циклы. Пока тяжело писать коды. Помогите, пожалуйста, написать программу, которая выводит...

Обход шахматной доски конем - C++
Добрый вечер , форумчане. Передо мной стоит проблема написать программу на С++ (задача о ходе конем -довольно распространенная , конь...

Задачка. Поле шахматной доски - C++
Поле шахматной доски задается парой натуральных чисел: Первое указывает номер вертикали при счете слева направо, второе - номер горизонтали...

Покрытие шахматной доски ходом коня - C++
4. Покрытие шахматной доски ходом коня.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.