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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 5.00
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
21.12.2008, 12:16     Вывод на экран шахматной доски #1
Помогите пожалуйста написать код программы выводящей на экран шахматную доску.
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
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
05.02.2010, 23:24     Вывод на экран шахматной доски #5
Тут сложностей нет.
Grayswandir, Задача решена совершенно грамотно.
И никаких оптимизаций тут в принципе быть не может
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 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
8272 / 3491 / 142
Регистрация: 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 немногим более тысячи? Еще вопросы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2010, 02:01     Вывод на экран шахматной доски
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Grayswandir
 Аватар для Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
06.02.2010, 02:01     Вывод на экран шахматной доски #9
Спасибо. Об этом как-то и не подумал.
Yandex
Объявления
06.02.2010, 02:01     Вывод на экран шахматной доски
Ответ Создать тему
Опции темы

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