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

Черепашья графика - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дано натуральное число n. Вычислить http://www.cyberforum.ru/cpp-beginners/thread692019.html
Пожалуйста, помогите решить задачу с помощью циклов. Дано натуральное число n. Вычислить:
C++ Поиск двух групп наименьших слов Задача такая: выделить две группы самых коротких слов, отобразить их на экране. Т.е. пользователь с клавиатуры вводит текст (предложение). Программа разбивает это предложение на слова, находит наименьшее слово. Если есть еще слова такой-же длины, то это будет первая группа наименьших слов. Потом ищем следующее, большее по длине, слово. И точно так-же ищем слова такой-же длины - это будет вторая... http://www.cyberforum.ru/cpp-beginners/thread692008.html
обработка текста C++
Прочитать из текстового файла строку (имя файла и номер строки вводятся с клавиатуры) и вывести из нее на экран слова в соответствии со следующим алгоритмом: сначала - самое короткое слово, потом -домена на один символ и т.д.
C++ наследование классов
Есть базовый класс class List { protected: struct Element { char name; int n_bus; int n_mar;
C++ Подобрать к заданному числу ранвую или близкую по значению переменную http://www.cyberforum.ru/cpp-beginners/thread691991.html
Вобщем есть 10 переменных. Пользователь задает число Н и к нему подбирается равная либо большая (максимально к нему близкая) по значению переменная. Как это осуществить в плане кода?
C++ Метод Ньютона Найдите, пожалуйста, ошибку! #include <stdio.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <conio.h> #pragma hdrstop using namespace std; //--------------------------------------------------------------------------- подробнее

Показать сообщение отдельно
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117

Черепашья графика - C++

08.11.2012, 19:37. Просмотров 801. Ответов 1
Метки (Все метки)

Текст задачи из учебника Дейтела:

Язык Лого, особенно популярный среди пользователей персональных компьютеров, сделал знаменитой черепашью графику. Представьте себе механическую черепаху, которая ползает по комнате под управлением программы на C++. Черепаха несет пишущее перо, которое может находиться в одной из двух позиций - нижней или верхней. Если перо в нижней позиции, черепаха вычерчивает траекторию движения, если в верхней, то черепаха передвигается свободно и ничего не вычерчивает. В этой задаче вы будете моделировать действия черепахи и создавать компьютерезированный эскиз пути.
Используя массив floor размером 20 на 20 с нулевым начальным условиями. Считывайте команды из содержащего их массива. Всё время отмечайте текущую позицию черепахи и положение пера - нижнее или верхнее. Предполагйте, что черепаха всегда стартует из позиции 0, 0 на полу с верхним положением пера. Ваша программа должна подавать команды черепахе в соответствии со следующими обозначениями:
1 - поднять перо
2 - опустить перо
3 - поворот направо
4 - поворот налево
5 - движение вперёд
6 - печать массива 20 на 20
9 - конец данных (контрольное значение)

Я не очень понимаю, чего хочет от меня автор? Что должно происходить в консоли когда я напишу программу и как это будет выглядить?

Добавлено через 20 минут
Ок, я немного разобрался, что там сначала я задаю параметры движения, и оно потом выводит массив со звездочками там, где черепаха прошлась. Но в условии при подаче команды 5 ставится запятая и указывается количество шагов которое надо пройти. Как она будет считывать данные через запятую? может это просто будет выглядить как:
cin >> straight >> steps;
??

Добавлено через 4 часа 43 минуты
Почти вышло:
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
#include <iostream>
 
using namespace std;
 
void printFloor (int [][20]);
void moveTortoise (int [][20], int []);
 
int main()
{
    const int x = 20;
    const int y = 20;
    int floor[x][y] = { 0 };
    int commands[50] = { 1, 5, 15, 2, 3, 5, 15, 6, 9 };
    int command = 1;
 
    /*for (int i = 0; i < 50 && command != 9; i++)
    {
        commands[i] = command;
        if (command == 5)
        {
            int steps;
            cout << "Enter steps: ";
            cin >> steps;
            commands[++i] = steps;
        }
        cin >> command;
    }*/
 
    moveTortoise (floor, commands);
    
    system ("pause");
    return 0;
}
 
void moveTortoise (int floor[][20], int commands[])
{
    bool draw = false;
    int x = 0;
    int y = 0;
    int turn = 3; // 1 - west, 2 - nord, 3 - east, 4 - south
 
    for (int i = 0; commands[i] != 9; i++)
    {
        switch (commands[i])
        {
            case 1:
                draw = false;
                break;
 
            case 2:
                draw = true;
                floor[x][y] = 1;
                break;
 
            case 3:
                turn++;
                if (turn > 4)
                    turn = 1;
                break;
 
            case 4:
                turn--;
                if (turn < 1)
                    turn = 4;
                break;
 
            case 5:
                for (int j = 1; j <= commands[i+1]; j++)
                {
                    if (turn == 1 && x > 0)
                        floor[--x][y] = (draw ? 1 : 0);
                    else if (turn == 2 && y > 0)
                        floor[x][--y] = (draw ? 1 : 0);
                    else if (turn == 3 && x < 20)
                        floor[++x][y] = (draw ? 1 : 0);
                    else if (turn == 4 && y < 20)
                        floor[x][++y] = (draw ? 1 : 0);
                    else 
                        break;
                }
                ++i;
                break;
 
            case 6:
                printFloor (floor);
                break;
 
            default:
                break;
        }
    }
}
 
void printFloor (int floor[][20])
{
    for (int i = 0; i < 20; i++)
        for (int j = 0; j < 20; j++)
        {
            if (floor[i][j] == 1)
                cout << "*";
            else
                cout << " ";
            if (j == 19)
                cout << endl;
        }
}
Добавлено через 57 минут
И наконец финальная сборка))
Спасибо что никто не помог
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
#include <iostream>
 
using namespace std;
 
void printFloor (int [][20]);
void moveTortoise (int [][20], int []);
 
int main()
{
    const int x = 20;
    const int y = 20;
    int floor[x][y] = { 0 };
    int commands[50] = { 2, 3, 5, 19, 4, 4, 1, 5, 19, 2, 3, 5, 19, 6, 9};
    int command = 1;
 
    /*for (int i = 0; i < 50 && command != 9; i++)
    {
        commands[i] = command;
        if (command == 5)
        {
            int steps;
            cout << "Enter steps: ";
            cin >> steps;
            commands[++i] = steps;
        }
        cin >> command;
    }*/
 
    moveTortoise (floor, commands);
    
    system ("pause");
    return 0;
}
 
void moveTortoise (int floor[][20], int commands[])
{
    bool draw = false;
    int x = 0;
    int y = 0;
    int turn = 3; // 1 - west, 2 - nord, 3 - east, 4 - south
 
    for (int i = 0; commands[i] != 9; i++)
    {
        switch (commands[i])
        {
            case 1:
                draw = false;
                break;
 
            case 2:
                draw = true;
                floor[x][y] = 1;
                break;
 
            case 3:
                turn++;
                if (turn > 4)
                    turn = 1;
                break;
 
            case 4:
                turn--;
                if (turn < 1)
                    turn = 4;
                break;
 
            case 5:
                for (int j = 1; j <= commands[i+1]; j++)
                {
                    if (turn == 1 && y > 0)
                        floor[x][--y] = (draw || floor[x][y] ? 1 : 0);
                    else if (turn == 2 && x > 0)
                        floor[--x][y] = (draw || floor[x][y] ? 1 : 0);
                    else if (turn == 3 && y < 20)
                        floor[x][++y] = (draw || floor[x][y] ? 1 : 0);
                    else if (turn == 4 && x < 20)
                        floor[++x][y] = (draw || floor[x][y] ? 1 : 0);
                    else 
                        break;
                }
                ++i;
                break;
 
            case 6:
                printFloor (floor);
                break;
 
            default:
                break;
        }
    }
}
 
void printFloor (int floor[][20])
{
    for (int i = 0; i < 20; i++)
        for (int j = 0; j < 20; j++)
        {
            if (floor[i][j] == 1)
                cout << "* ";
            else
                cout << "  ";
            if (j == 19)
                cout << endl;
        }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru