Форум программистов, компьютерный форум, киберфорум
Наши страницы

Ошибка в коде. Кроссворд - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Префикс-функция http://www.cyberforum.ru/cpp-beginners/thread409883.html
Возникла ситуация: где бы я не читал разбор, немного непотно, как работает префикс-функция? Объясните, а что не пойму, попрошу изложить детальнее. vector<int> compute_prefix_function(const...
C++ не работает getline Есть код (писал не я), но не могу понять, почему getline() игнорируется в строке 72. Сначала не работало в функции класса, потом решил сделать так, как в этом коде, но без толку... #include... http://www.cyberforum.ru/cpp-beginners/thread409875.html
Простейший код C++
Нужно написать код который будет менять местами цифры то есть изначально такой порядок int m={1,4,3,6,2} а на выходе обратный порядок 2 6 3 4 1 помогите написать такой код Добавлено через 3...
Ошибка E2040 C++
#include <iostream> using namespace std; class Masiv{ public: int i,x; static int arr; void Zapol1(){ }
C++ Подскажите как с паскаля перевести в С?За ранее спасибо http://www.cyberforum.ru/cpp-beginners/thread409863.html
uses crt; var x:array of real; i,j,n,ind:integer; pr,max:real; begin randomize; clrscr; writeln('Введите размерность массива* <= 10'); readln(n); for i:=1 to n do begin for j:=1 to n do
C++ Упорядочить строки матрицы Вводиться целая матрица размером NxM. Как упорядочить строки матрицы по не убыванию значений первых элементов строк? подробнее

Показать сообщение отдельно
15104
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 4

Ошибка в коде. Кроссворд - C++

17.12.2011, 20:21. Просмотров 1042. Ответов 6
Метки (Все метки)

Программа Кроссворд
Выдает ошибки
Error 1 error C3861: 'sort': identifier not found
Error 2 error C3861: 'equal_range': identifier not found
как исправить? Где и какой тип придать переменным?




Добавлено через 40 минут
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
#include <iterator>
#include <fstream>
#include <map>
using namespace std;
 
// Bukva so schet4ikom
struct CharAndCounter {
    char Char;
    int Counter;
    CharAndCounter (char _char = ' ', int _counter =0 )
                    : Char(_char), Counter (_counter) {}
                
};
// Element Slovarya
struct VocElement {
    string String; // slovo
    bool Busy; // Flag "Zyanato / svobodno"
    VocElement (const string& str = "", bool b = false)
                    : String(str), Busy (b) {}
 
};
    vector<vector<CharAndCounter> > Field;
    vector<VocElement> Vocabulary;
 
struct WordCoords {
 
    static const char VERTICAL = 'v', HORIZONTAL = 'h';
    int X,Y;    // Raspolojeniye Slova
    char Dir;   // naprale slova ( Horizontal / Vertical)
    int Length;  // Dlina slova
    
    WordCoords (int _x, int _y, int _len, char _dir) 
                            : X (_x), Y(_y), Dir(_dir), Length(_len){}
    // Horizontal & Vertical smeshenie ocherednoy
    // burvy slova otnositelno predydushey
    int dx() {return (Dir == HORIZONTAL) ? 1 : 0; }
    int dy() {return (Dir == VERTICAL) ? 1 : 0; }
};
vector<WordCoords> Crossword; // opisanie crossvorda
 
 
// sluzhebnaya funkciya dlya sortirovki slov po dline
bool Less(const VocElement& lhs, const VocElement& rhs)
{
    return lhs.String.length() < rhs.String.length();
}
//--------------------------------------------------------
void ReadData ()
{
    ifstream crossw("crossword.txt"), voc("vocabulary.txt");
    
    string temp;
    
    // schitat' posledovatelno vse slova slovarya
    while(!voc.eof())
    {
    voc >> temp;
    Vocabulary.push_back(VocElement(temp, false));
    }
    // otsortirovat' slovar' po dline slov
    class vector <string> sort ;
        (Vocabulary.begin(), Vocabulary.end(), Less);
    
    // schitat' opisanie crossvorda
    int W, H, x, y, len;
    char dir;
    // Shirina i Vysota polya
    crossw >> W; crossw >> H;
    
    for (;;)
    {
    //schtitat' ocherednoy element opisaniya
        crossw >> x; crossw >> y;
        crossw >> len; crossw >> dir;
        if (crossw.eof())
            break;
            Crossword.push_back(WordCoords(x, y, len, dir));
        }
    //zapolnit' vse pole pustymi simvolami
        for (int i = 0; i < W; i++)
        {
            vector<CharAndCounter> col(H);
            fill(col.begin(),col.end(),CharAndCounter());
            Field.push_back(col);
        }
}
 
 
// Mojno li razmestit; slovo WORD na pozicii C?
// (predpologayetsya, chto dlina slova nas ustraivaet, trebuetsya lish
// opredelit' sootvetstviye bukv slova uje imeushimysa na pole bukvam)
 
bool CanPlace(WordCoords c, const string& word)
{
    for(unsigned i=0; i < word.length(); i++)
    {
        // esli ocherednaya prosmatrivaemaya yacheyka nepusta
        // i pri etom simvol v ney ne sootvetstvyet i-my simvolu slova
        if (Field[c.X + i*c.dx()] [c.Y + i*c.dy()].Char != ' ' &&
           Field[c.X + i*c.dx()] [c.Y + i*c.dy()].Char != word[i])
           return false; // slovo nelzya razmestit' na pozocii C
 
    }
    return true;
}
//-------------------------------------------------------------
// razmestit' slovo WORD v pozocii C (predpologayetsya, chto eto vozmojno)
    void PlaceWord(WordCoords c, const string& word)
    {
        for (unsigned i = 0; i < word.length();i++)
        {
            Field[c.X + i*c.dx()] [c.Y + i*c.dy()].Char = word[i];
            Field[c.X + i*c.dx()] [c.Y + i*c.dy()].Counter++;
        }
    }
//------------------------------------------------------------- 
// snyat' slovo WORD s pozocii C
    void RemoveWord(WordCoords c, const string& word)
    {
        for (unsigned i = 0; i < word.length(); i++)
        {
                if (--Field[c.X + i*c.dx()] [c.Y + i*c.dy()].Counter == 0)
                     Field[c.X + i*c.dx()] [c.Y + i*c.dy()].Char = ' ';
            
        }
    }
    
    
    bool Solve (unsigned CoordNo)
    {
        if(CoordNo == Crossword.size())
            //esli "podkrossword" pust
            return true;
            
        // poluchit' diapazon slov, dlina kajdogo iz kotoryh
        // ravna Crossword[CoordNo].Length
        
        pair<vector<VocElement>::iterator, vector<VocElement>::iterator>range= equal_range(Vocabulary.begin(), Vocabulary.end(),
            string(Crossword[CoordNo].Length, ' '), Less);
        
        
        // Cikl po slovam slovarya
        for(vector<VocElement>::iterator p = range.first;
                            p!= range.second; p++)
                if (!p->Busy && CanPlace(Crossword[CoordNo], p->String))
                {
                //esli slovo ne zyanato 
                // i ego mojno razmestit' na pozocii Crossword[CoordNo]
                    PlaceWord(Crossword[CoordNo], p->String); // razmestit' slovo
                    p->Busy = true; // teper' zanyato
                    if (Solve(CoordNo+1)) // esli "podcrossvord reshaetsya"
                        return true;
                    RemoveWord(Crossword[CoordNo], p->String); // Snyat' Slovo
                        p->Busy = false; // pometit' slovo kak nezanyatoe
                        
                }   
                
                        
                
 
        return false;
    }
 
    int main (int argc, char* argv[]){
 
        // schitat' paravetry crossvorda
        ReadData();
        if (Solve(0))
            {
            //esli resheniye naydeno, raspechatat' soderjimoe FIELD
            for (unsigned y = 0; y < Field[0].size(); y++)
            {
                for (unsigned x=0; x< Field.size(); x++)
                    cout << Field[x] [y].Char;
                    cout << endl;
            }
            
}
else 
    cout << "No Solution";
    return 0;
    
    }
на 65 и 66 строчках добавил

C++
1
2
class vector <string> sort ;
        (Vocabulary.begin(), Vocabulary.end(), Less);
и одну ошибку удалось устранить но вот с Error 2 error C3861: 'equal_range': identifier not found не могу разобраться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.