Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 5.00
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
#1

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

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

Помогите пожалуйста написать код программы выводящей на экран шахматную доску.
P.S. Я только учусь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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");
  }
}
попробуй так
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
25.12.2008, 21:45  [ТС]     Вывод на экран шахматной доски #3
Большое спасибо!
Grayswandir
 Аватар для 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";
}
Если у кого-то есть идеи по оптимизации решения - с интересом бы посмотрел.
Day
 Аватар для Day
1152 / 957 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
05.02.2010, 23:24     Вывод на экран шахматной доски #5
Тут сложностей нет.
Grayswandir, Задача решена совершенно грамотно.
И никаких оптимизаций тут в принципе быть не может
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
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;
}
Grayswandir
 Аватар для Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
05.02.2010, 23:52     Вывод на экран шахматной доски #7
M128K145, Ваш вариант работает неверно
И хотелось бы узнать, в чём именно заключается Ваша оптимизация, за исключением объявления счётчиков цикла до их начала, и присваивание функции main типа int?
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
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 немногим более тысячи? Еще вопросы?
Grayswandir
 Аватар для Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
06.02.2010, 02:01     Вывод на экран шахматной доски #9
Спасибо. Об этом как-то и не подумал.
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";
}
Dimension
19.01.2017, 16:32
  #11

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2017, 16:52     Вывод на экран шахматной доски
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6191 / 3443 / 421
Регистрация: 29.11.2010
Сообщений: 9,123
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 ? '*' : ' ');
    }
}
Yandex
Объявления
19.01.2017, 16:52     Вывод на экран шахматной доски
Ответ Создать тему
Опции темы

Текущее время: 01:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru