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

Проход по лабиринту - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ как задать такие точки? http://www.cyberforum.ru/cpp-beginners/thread774912.html
такое задание создать программу, которая проверяет действительность точки заштрихованной области.
C++ Прервать выполнение функции в потоке Здравствуйте, у меня вопрос, возможно ли прервать функцию извне, при этом сама функция является "чёрным ящиком", то есть мы не знаем что там? Например, у нас есть некий поток, в которому на выполнение передали функцию. В момент выполнения функции, поток получает сигнал (событие), которое ему приказывает срочно завершить все действия, но при этом не использовать terminate(). Как потоку в этом... http://www.cyberforum.ru/cpp-beginners/thread774910.html
Задача по сортировкам C++
Всем доброго времени суток) есть исходник программы, которая выводит слова из строки, по заданному символу с клавиатуры #include<iostream.h> #include<string.h> int i,j,l,m,n; char a,c; main() { cout << "Введите количество слов n="; cin >> n;
Определить сумму и произведение членов последовательности C++
Всем привет Уважаемые пользователи помогите сделать задачу (С + + или Visual C + +) если не трудно. Вот у меня произошла проблема в написать программы: Данные целые положительные числа N, К, М, а1, .... аn. Используя только элементарные арифметические операции (+, =, *, /), определить сумму и произведение членов последовательности а1 ... аn, кратных К и некратные М. Массивы не использовать....
C++ Удалить элемент очереди http://www.cyberforum.ru/cpp-beginners/thread774898.html
Здравствуйте. Сделал всё ну практически по Липпману: #include <queue> #include <iostream> using std::queue; int main() { const queue<int>::size_type sz = 12; queue<int> q;
C++ Данные целые положительные числа N, К, М, а1 Всем привет Уважаемые пользователи помогите решить задачу (С + + или Visual C + +). Вот у меня произошла проблема в написать программы: Данные целые положительные числа N, К, М, а1, .... аn. Используя только элементарные арифметические операции (+, =, *, /), определить сумму и произведение членов последовательности а1 ... аn, кратных К и некратные М. Массивы не использовать. Буду очень... подробнее

Показать сообщение отдельно
Kalexandir
Сообщений: n/a
30.01.2013, 01:54     Проход по лабиринту
Описать класс, реализующий стек.
Написать программу, использующую этот класс для отыскания прохода по лабиринту.
Лабиринт представляется в виде матрицы, состоящей из квадратов. Каждый квадрат либо открыт, либо закрыт. Вход в закрытый квадрат запрещен. Если квадрат открыт, то вход в него возможен со стороны, но не с угла. Каждый квадрат определяется его координатами в матрице. После отыскания прохода программа печатает найденный путь в виде координат квадратов.
Предусмотреть возможность задания лабиринта из файла и с клавиатуры. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

Добавлено через 26 минут
сам код написан, прошу помочь с загрузкой карты и входов-выходов из файла.
Код состоит из двух частей, приведенных ниже.
lab4.cpp

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
// lab4 : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stack.h"
#include <windows.h> // для работы с выводом рисунка в консоль
#include "stdlib.h"
 
enum direct
{
    up,
    r,
    down,
    l
};
 
struct Pass
{
    int x;
    int y;
    direct dir;
};
 
const int width = 10; const int height = 10;
 
const char up_arrow = '^';
const char down_arrow = 'V';
const char left_arrow = '<';
const char right_arrow = '>';
 
 
short int labyrint[width][height] = 
    {{0,1,0,1,0,0,1,0,0,1},
     {0,0,0,0,0,1,0,0,0,1},
     {0,0,1,0,0,1,0,1,1,1},
     {0,0,0,0,1,0,0,1,0,0},
     {0,1,0,1,1,0,1,0,1,0},
     {0,1,0,1,0,0,0,0,0,1},
     {0,1,0,1,0,0,0,1,0,1},
     {0,0,0,0,0,0,0,1,0,1},
     {0,1,1,1,1,0,1,0,0,1},
     {0,1,0,0,0,0,1,0,0,1}};
 
stack <Pass, width*height> Passes;
Pass start, finish,finish2;;
 
void show(){
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {0, 0};
    SetConsoleCursorPosition(hConsole, position);
 
    Pass current = ::Passes[(::Passes.GetSize() - 1)];
 
    for (int j = 0; j < height; j++){
        for (int i = 0; i < width; i++){
            if (current.x == i && current.y == j){
                switch (current.dir){
                    case up: cout << up_arrow; break;
                    case down: cout << down_arrow; break;
                    case l: cout << left_arrow; break;
                    case r: cout << right_arrow; break;
                }
            } else {
                    cout << labyrint[j][i];
                }
            }
        cout << '\n';
        }
}
 
bool similar(Pass pass){
    for (int i=0; i<::Passes.GetSize(); i++){
        if (::Passes[i].x == pass.x && ::Passes[i].y == pass.y && ::Passes[i].dir == pass.dir) return true;
    }
    return false;
}
 
int step(Pass pass){
 
    Pass prev_pass;
    int size = ::Passes.GetSize();
 
    if (size > 0){
        prev_pass = ::Passes.pop();
        if (pass.x != prev_pass.x || pass.y != prev_pass.y) { ::Passes.push(prev_pass); }
    }
 
    if (similar(pass)) {
        labyrint[pass.y][pass.x] = 1;
    }
    ::Passes.push(pass);
    prev_pass = pass;
 
    show();
 
    _sleep(100);
 
    if ((pass.x == finish.x && pass.y == finish.y) || (pass.x == finish2.x && pass.y == finish2.y)) return 1;
 
    if (pass.y-1 >= 0 && labyrint[pass.y-1][pass.x] == 0 && pass.dir != down){
        pass.y--;
        pass.dir = up;
        return step(pass);
    }
    else
    if (pass.x+1 < width && labyrint[pass.y][pass.x+1] == 0 && pass.dir != l){
        pass.x++;
        pass.dir = r;
        return step(pass);
    }
    else
    if (pass.x-1 >= 0 && labyrint[pass.y][pass.x-1] == 0 && pass.dir != r){
        pass.x--;
        pass.dir = l;
        return step(pass);
    }
    else
    if (pass.y+1 < height && labyrint[pass.y+1][pass.x] == 0 && pass.dir != up){
        pass.y++;
        pass.dir = down;
        return step(pass);
    }
    else
    {
        labyrint[pass.y][pass.x] = 1;
 
        prev_pass = ::Passes.pop();
        prev_pass = ::Passes.pop();
 
        switch (pass.dir){
            case up: prev_pass.dir = down; break;
            case down: prev_pass.dir = up; break;
            case l: prev_pass.dir = r; break;
            default: prev_pass.dir = l;
        }
 
        return step(prev_pass);
 
    }
 
}
 
int main(void)
{
    start.x = 0;    start.y = 9;    start.dir = up;
    finish.x = 8;   finish.y = 1;   finish.dir = up;
        finish2.x = 4;  finish2.y = 6;  finish2.dir = up;
 
    cout << step(start);
 
    cin >> start.x;
 
    return 0;
}

stack.h
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
#pragma once
 
class StackOverflow{};
class StackOutOfRange{};
class EmptyStack{};
 
template <class name, int size>
 
class stack
{
private:
    name stack_array[size];
    int last_element;
 
public:
    stack(void){ last_element = 0; };
    ~stack(void){};
 
    void push(name element)
    {
        if (last_element < size)
        {
            stack_array[last_element] = element;
            last_element++;
        }
        else
        {
            throw StackOverflow();
        }   
    };
 
    name pop()
    {
        if (last_element > 0){
            last_element--;
            return stack_array[last_element];
        }
        else
        {
            throw EmptyStack();
        }
    };
 
    int Capacity()
    {
        return size;
    }
 
    int GetSize()
    {
        return last_element;
    }
 
    name& operator[] (int N)
    {
        if (N < size)
        {
        return stack_array[N];
        }
        else
        {
            throw StackOutOfRange();
        }
    }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru