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

Не могу понять ошибку - C++

Восстановить пароль Регистрация
 
proger2030
 Аватар для proger2030
11 / 11 / 2
Регистрация: 15.11.2010
Сообщений: 256
03.10.2011, 09:45     Не могу понять ошибку #1
Пытаюсь решить вот эту задачу Игра Scrabble Есть решения на бэйсике вот Из Vb -> С++
Вот мой вариант на С++(среда разработки Visual Studio 2010)
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
const int lengthArray = 2000;
string arr [][lengthArray];
string MaxArr[];
int N;
int WordMax; //Длина слова
string str1, str2; //Исходная строка, набор букв
string pastSymbol(string str, string symbol, int position);
void rec(int k, string str);
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int NotUsed = system( "color 8A" );
    N = 0;
 
    cout << "Введите набор букв: ";
    cin >> str1;
    cout << "\n";
    cout << "Введите слова: ";
    cin >> str2;
    //WordMax = str1.length();
    rec(0, str2.substr(0, 1));
    
    
    return 0;
}
string pastSymbol(string str, string symbol, int position) {
    string tmp;
    tmp =str.substr(0, position -1);
    tmp = tmp + symbol;
    tmp = tmp + str.substr(position, str.length() - position + 1);
        return tmp;
}
 
void rec (int k, string str) {
    int j;
    string tmp;
    string sym;
    sym = str2.substr(k, 1);
    for (j = 1; str.length() + 1; j++) {
        tmp = pastSymbol(str, sym, j);
        N = N + 1;
        cout << tmp << endl;
        
        if(tmp.length() < str1.length())  
            rec(k + 1, tmp);
            if (tmp == str1)
            cout << tmp << "Слова найдено на " << N << "шаге\n";
            }
}
Вроде находит слова но выдает конце ошибку вот такую
Подскажите плс что не правильно
Миниатюры
Не могу понять ошибку  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2011, 09:45     Не могу понять ошибку
Посмотрите здесь:

C++ Не могу понять ошибку
не могу понять ошибку C++
Не могу понять ошибку C++
C++ не могу понять ошибку
Не могу понять ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
03.10.2011, 10:19     Не могу понять ошибку #2
Цитата Сообщение от proger2030 Посмотреть сообщение
for (j = 1; str.length() + 1; j++)
- косяк на мой взгляд здесь, символы строки имеют индексы с 0 а не единицы, вот и происходить выход за области памяти
Я чуть подправил, правда всё равно в ряде случаев выскакиваем за пределы отведенной области
Тело функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void rec (int k, string str) 
{
        int j;
        string tmp;
        string sym;
        sym = str2.substr(k, 0);
        for (j = 0; j < str.length(); j++) 
        {
                tmp = pastSymbol(str, sym, j);
                N = N + 1;
                cout << tmp << endl;
                
                if(tmp.length() < str1.length())  
                    rec(k + 1, tmp);
                if (tmp == str1)
                        cout << tmp << "ÑëîâГ* Г*Г*éäåГ*Г® Г*Г* " << N << "ГёГ*ГЈГҐ\n";
        }
}
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.10.2011, 10:21     Не могу понять ошибку #3
proger2030, abort() вызывается при необработанном исключении.
Я б сначала запустил без отладчика - релизный вариант - и посмотрел, что происходит.
Учитывая, что функция rec() рекурсивная - может быть портится стек?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.10.2011, 10:28     Не могу понять ошибку #4
Цитата Сообщение от proger2030 Посмотреть сообщение
C++
1
2
string arr [][lengthArray];
 string MaxArr[];
o_0 Это ещё что?

Добавлено через 3 минуты
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Учитывая, что функция rec() рекурсивная - может быть портится стек?
Учитывая, что в строке 45 бесконечный цикл и внутри рекурсия...
proger2030
 Аватар для proger2030
11 / 11 / 2
Регистрация: 15.11.2010
Сообщений: 256
03.10.2011, 10:39  [ТС]     Не могу понять ошибку #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- косяк на мой взгляд здесь, символы строки имеют индексы с 0 а не единицы, вот и происходить выход за области памяти
Я чуть подправил, правда всё равно в ряде случаев выскакиваем за пределы отведенной области
Нет если так написать вообще не будет работать!

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Учитывая, что в строке 45 бесконечный цикл и внутри рекурсия...
Можешь подправить ? Или подскажи как! спс
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.10.2011, 10:44     Не могу понять ошибку #6
Только не понятно, зачем требуют решать такую задачу рекурсивно (тем более, в ширину), когда итерационное решение тривиально.

Добавлено через 30 секунд
Цитата Сообщение от proger2030 Посмотреть сообщение
Можешь подправить ? Или подскажи как! спс
ЮрА уже исправил. Под катом.

Добавлено через 2 минуты
Собственно, вопрос по заданию:
Нужно вывести индексы символов (в массиве букаф), из которых строится слово или просто проверить возможность построения слова из заданного набора букв?
-=ЮрА=-
Заблокирован
Автор FAQ
03.10.2011, 10:51     Не могу понять ошибку #7
Цитата Сообщение от proger2030 Посмотреть сообщение
Нет если так написать вообще не будет работать!
- см миниатюру
Миниатюры
Не могу понять ошибку  
proger2030
 Аватар для proger2030
11 / 11 / 2
Регистрация: 15.11.2010
Сообщений: 256
03.10.2011, 10:54  [ТС]     Не могу понять ошибку #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только не понятно, зачем требуют решать такую задачу рекурсивно (тем более, в ширину), когда итерационное решение тривиально.
Главное работает в бэйсике(Для студента это счастья!). Я пишу в бэйсике а С++ начал изучать летом.
Можешь предложить свой вариант? Хотя бы словесно.
-=ЮрА=-
Заблокирован
Автор FAQ
03.10.2011, 10:58     Не могу понять ошибку #9
proger2030, на пальцах расскажи что нужно реализовать, нет особого желания сутра ломать голову что там тебе надо, ставь задачу я предложу свою реализацию, может и
Deviaphan, тоже предложит. А так ты по хорошему заставляешь подправлять заложенную в программе логику (кто сказал что она оптимальна и кто сказал что эффективней нельзя)
proger2030
 Аватар для proger2030
11 / 11 / 2
Регистрация: 15.11.2010
Сообщений: 256
03.10.2011, 11:01  [ТС]     Не могу понять ошибку #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- см миниатюру
Кажется вы задачу не так поняли.

C++
1
2
3
4
5
cout << "Введите набор букв: ";
    cin >> str1;
    cout << "\n";
    cout << "Введите слова: "; //Это слова которую надо найти 
    cin >> str2;
Например набор букв
муроф
а слово которую надо найти Форум!(Хотябы одну слову надо найти)

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
proger2030, на пальцах расскажи что нужно реализовать, нет особого желания сутра ломать голову что там тебе надо, ставь задачу я предложу свою реализацию, может и
Deviaphan, тоже предложит. А так ты по хорошему заставляешь подправлять заложенную в программе логику (кто сказал что она оптимальна и кто сказал что эффективней нельзя)
Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в глубину и в ширину. Длина слова не менее 5 букв.(подробно тутhttp://libray.narod.ru/Program/exper...va2/Index3.htm
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.10.2011, 11:19     Не могу понять ошибку #11
Цитата Сообщение от proger2030 Посмотреть сообщение
//Это слова которую надо найти
"Твою ж мать!"
Слова - множественная форма слова слово.
Если хочешь, чтобы тебя правильно поняли, правильно формируй вопрос.)
А я повторюсь:
Цитата Сообщение от Deviaphan Посмотреть сообщение
Собственно, вопрос по заданию:
Нужно вывести индексы символов (в массиве букаф), из которых строится слово или просто проверить возможность построения слова из заданного набора букв?
Добавлено через 1 минуту
Кстати, я просто категорически не пойму, как для этой задачи можно прикрутить поиск в ширину? У меня просто костылей таких нет.
Т.е. можно, конечно, но за один рекурсивный вызов решится, т.е. обычный цикл получится.

Добавлено через 12 минут
Вот поиском в глубину. Думаю, что компилируется.)
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
#include <string.h>
#include <string>
#include <vector>
 
 
int Search( const std::string & s1, char * inUse, const std::string &s2, int cur, std::vector<int> & out )
{
    if( cur >= s2.size() )
        return 1;
        
    // прям вот в цикле искать символ буду
    for(int i=0; i < s1.size(); ++i)
    {
        if( s1[i] == s2[cur] && inUse[i] == 0 )
        {
             inUse[i] = 1;
             out.push_back(i);
             return Search(s1, inUse, s2, cur+1, out);
        }
    }
 
    // нинашёл.(
    return 0;
}
 
 
int main()
{
   std::string bufChars;
   std::cin >> bufChars;
 
   std::string bufWords;
   std::cin >> bufWords;
 
   char * inUse = char[bufChars.size()];
   memset( inUse, 0, bufChars.size() );
 
   std::vector<int> indices;
   if( 0 == Search( bufChars, inUse, 0, indices ) )
      std::cout << "Неа, пичалька" << std::endl;
   else
   {
      std::cout << "Мона, не пичалька" << std::endl;
      // можно использовать индексы символов
   }
 
   delete[] inUse;
   return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
03.10.2011, 11:24     Не могу понять ошибку #12
Цитата Сообщение от proger2030 Посмотреть сообщение
Например набор букв
муроф
а слово которую надо найти Форум!(Хотябы одну слову надо найти)
- ёпт программу что лингвистическим редактором нужно оснащать, вы хоть думаете о чём просите???
Максимум что можно напаять вывод сочетаний из введенных букв, там можно будет найти и слово!
(причём тут ещё вопрос напрашивается
Цитата Сообщение от proger2030 Посмотреть сообщение
муроф
- это и Форум и Ум и мур и мор - нужны сочетания только из всех букв или из меньшего числа тоже)???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2011, 11:31     Не могу понять ошибку
Еще ссылки по теме:

Не могу понять ошибку C++
C++ Не могу понять ошибку компиляции
C++ Пожалуйста не могу понять ошибку?

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.10.2011, 11:31     Не могу понять ошибку #13
Хотябы одну слову надо найти
Или в настройках место жительства указать. Ну на ржач пробивает, невозможно думать.
К не русскоязычным хоть претензий не будет.)
Yandex
Объявления
03.10.2011, 11:31     Не могу понять ошибку
Ответ Создать тему
Опции темы

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