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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ как организовать ? http://www.cyberforum.ru/cpp-beginners/thread93140.html
вот такой вопрос нужно написать программу которая определяет минимальное число во введенной с клавиатуры последовательности положительных чисел (ДЛИНА ПОСЛЕДОВАТЕЛЬНОСТИ НЕОГРАНИЧЕННА) если перебор организовать могу то вот как сделать неограниченной длину последовательности ?
C++ Некоректности в булевом выражении Я недавно начал изучать C++ и я немного преуспел (для начинающего), но тут меня кое-что конкретно тормознуло. Тормозом оказалась проблемка в этом коде: #include <iostream> #include <stdio.h> using namespace std; void HackAlert() { string answer; cout << "Are you a hacker? (Y or N)" << endl; cin >> answer; http://www.cyberforum.ru/cpp-beginners/thread93123.html
Дан целочисленный массив, нужно исключить из него все нули C++
Дан целочисленный массив, нужно исключить из него все нули. Если нулей нет-написать "сжатие невозможно". Составить динамический массив и ввод элементов я смогу. А как реализовать поиск 0 и их удаление?
Вычислить процент от общего количества C++
Помогите пожалуйста разобратся с этой прогой: Написать прогамму, которая обрабатывает результаты экзамена. Для каждой оценки программа должна вычислить процент от общего количества оценок. Оценки от 5 до 2. Среда разработки: С++
C++ Шахматная доска и строка http://www.cyberforum.ru/cpp-beginners/thread93094.html
Есть 3 задачки, немного не соображу как их решить. Помогите горе-программисту :) 1) Поле шахматной доски определяется парой натуральных чисел, первое из которых задаст номервертикали, а второе- номер горизонтали. Даны натуральные числа k, l, m, n. Требуется выяснить, являются ли поля (k, l) и (m, n) полямиодного цвета. 2)В последовательности введённых символов (последний '$') определить...
C++ Матрица и элементы Помогите решить задачу: Сформиромать матрицу С (N,M) элементами которой являются случайные числа, равномерно распределённые в интервале (-4.0, 8.2). Переставляя её строки и столбцы, добиться того, чтобы наименьшийэлемент этой матрицы оказался в левом верхнем углу. Матрицу сформировать динамическим массивом я могу, рандом тоже могу, а всё остальное не знаю как. Помогите пожалуйста! подробнее

Показать сообщение отдельно
Turfur
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 2
16.11.2014, 21:29     Черепашья графика
Сделал криво, в том смысле что массив создается в функции main() и передается по ссылке функции interpritate(), что не вполне логично. Хотел исправить, но лень. Ах да, чуть не забыл, поменял цифры на мнемонические буквы, что-бы было не так мозголомно тестить. Также в моей версии отображается сама черепаха символом @.
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
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define SIZE_OF_CANVAS 20
#define MAXPROG 501
 
enum direction {up,right,down,left};
 
static void move(enum direction dir, int * x, int * y, bool pero,char canvas[][SIZE_OF_CANVAS])
{
    if (pero)
        canvas[*x][*y] = '#';
    switch (dir)
    {
        case right:
            if ((*y+1) < SIZE_OF_CANVAS)
                (*y)++;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
        case left:
            if (*y > 0)
                (*y)--;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
        case up:
            if (*x > 0)
                (*x)--;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
        case down:
            if ((*x+1) < SIZE_OF_CANVAS)
                (*x)++;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
    }
}
 
static void show_canvas(char canvas[][SIZE_OF_CANVAS],int x,int y)
{
    int i,j;
    puts("");
    for (i = 0; i < SIZE_OF_CANVAS; i++)
    {
        for (j = 0; j < SIZE_OF_CANVAS; j++)
            if ((i != x) || (j != y))
                putchar(canvas[i][j]);
            else
                putchar('@');
        putchar('\n');
    }
    puts("");
}
 
void interpritate(char * program, char canvas[][SIZE_OF_CANVAS])
{
    int x = 0,y = 0,i = 0;
    bool pero = false;
    enum direction dir = right;
    while (program[i] != '\n')
    {
        switch (program[i])
        {
            case 'p':
                pero = false; 
                break;
            case 'o':
                pero = true;
                break;
            case 'r':
                switch (dir)
                {
                    case right: dir = down; break;
                    case down: dir = left; break;
                    case left: dir = up; break;
                    case up: dir = right; break;
                }
                break;
            case 'l':
                switch (dir)
                {
                    case right: dir = up; break;
                    case down: dir = right; break;
                    case left: dir = down; break;
                    case up: dir = left; break;
                }
                break;
            case 'm':
                move(dir,&x,&y,pero,canvas);
                break;
            case 's':
                show_canvas(canvas,x,y);
                break;
            case 'e':
                show_canvas(canvas,x,y);
                return;
            default:
                printf("Syntax error\n");
                return;
        }
        i++;
    }
}
 
int main(int argc, char *argv[]) {
    char canvas[SIZE_OF_CANVAS][SIZE_OF_CANVAS],program[MAXPROG],i,j;
    for (i = 0; i < SIZE_OF_CANVAS; i++)
        for (j = 0; j < SIZE_OF_CANVAS; j++)
            canvas[i][j] = ' ';
    printf("Enter program to turtle: \n");
    if (fgets(program,MAXPROG - 1,stdin) != NULL)
        interpritate(program,canvas);
    else
        printf("Error of input\n");
    system("pause");
    return 0;
}
Добавлено через 4 часа 2 минуты
Убрал пару статиков, ибо делалось в двух файлах. Теперь поле не из пробелов, а из точек. Добавлены команды видимости черепахи v и i, соответственно visible and invisible. Добавлены аргументы при m.
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
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define SIZE_OF_CANVAS 20
#define MAXPROG 501
 
enum direction {up,right,down,left};
 
void move(enum direction dir, int * x, int * y, bool pero,char canvas[][SIZE_OF_CANVAS])
{
    if (pero)
        canvas[*x][*y] = '#';
    switch (dir)
    {
        case right:
            if ((*y+1) < SIZE_OF_CANVAS)
                (*y)++;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
        case left:
            if (*y > 0)
                (*y)--;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
        case up:
            if (*x > 0)
                (*x)--;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
        case down:
            if ((*x+1) < SIZE_OF_CANVAS)
                (*x)++;
            else
            {
                puts("Out of canvas!\n");
                return;
            }
            break;
    }
}
 
void moven(enum direction dir, int * x, int * y, bool pero,char canvas[][SIZE_OF_CANVAS],int n)
{
    int i;
    for (i = 0; i < n; i++)
        move(dir,x,y,pero,canvas);
}
 
void show_canvas(char canvas[][SIZE_OF_CANVAS],int x,int y, bool visible)
{
    int i,j;
    puts("");
    for (i = 0; i < SIZE_OF_CANVAS; i++)
    {
        for (j = 0; j < SIZE_OF_CANVAS; j++)
            if ((visible == true) && (x == i) && (y == j))
                putchar('@');
            else
                putchar(canvas[i][j]);
        putchar('\n');
    }
    puts("");
}
 
void interpritate(char * program, char canvas[][SIZE_OF_CANVAS])
{
    int x = 0,y = 0,i = 0;
    bool pero = false,visible = true;
    enum direction dir = right;
    while (program[i] != '\n')
    {
        switch (program[i])
        {
            case 'p':
                pero = false; 
                break;
            case 'o':
                pero = true;
                break;
            case 'r':
                switch (dir)
                {
                    case right: dir = down; break;
                    case down: dir = left; break;
                    case left: dir = up; break;
                    case up: dir = right; break;
                }
                break;
            case 'l':
                switch (dir)
                {
                    case right: dir = up; break;
                    case down: dir = right; break;
                    case left: dir = down; break;
                    case up: dir = left; break;
                }
                break;
            case 'm':
                i++;
                if (atoi((char []){program[i],'\0'}) != 0)
                    moven(dir,&x,&y,pero,canvas,atoi((char []){program[i],'\0'}));
                else
                    puts("Incorrect argument of \"m\"");
                break;
            case 's':
                show_canvas(canvas,x,y,visible);
                break;
            case 'v':
                visible = true;
                break;
            case 'i':
                visible = false;
                break;
            case 'e':
                show_canvas(canvas,x,y,visible);
                return;
            default:
                printf("Syntax error\n");
                return;
        }
        i++;
    }
}
 
int main(int argc, char *argv[]) {
    char canvas[SIZE_OF_CANVAS][SIZE_OF_CANVAS],program[MAXPROG],i,j;
    for (i = 0; i < SIZE_OF_CANVAS; i++)
        for (j = 0; j < SIZE_OF_CANVAS; j++)
            canvas[i][j] = '.';
    printf("Enter program to turtle: \n");
    if (fgets(program,MAXPROG - 1,stdin) != NULL)
        interpritate(program,canvas);
    else
        printf("Error of input\n");
    system("pause");
    return 0;
}
 
Текущее время: 20:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru