Sevet Temat założony przez niniejszego użytkownika |
Błąd krytyczny aplikacji » 2013-12-01 20:28:20 @edit problem do rozwiązania jest w ostatnim poście bo nie chciałem tworzyć nowego tematu skoro problem jest podobnej natury. Witam, Po raz kolejny nie umiem sobie poradzić z pewnym problemem. Teraz przerabiam dział 2 temat losowanie bez powtórzeń. Jestem ambitny więc sam chciałem spróbować napisać taki program, wszystko chyba ok, ale wywala mi błąd krytyczny. Domyślam się, że jakimś cudem wychodzę poza zakres którejś z tablic i pewnie jest to tablica funkcji sprawdz. Od pół godziny próbuję poradzić sobie z tym błędem, ale cały czas to samo. Wg tego co sprawdziłem - wpisując cout<<"check"; w poszczególne miejsca kodu, błąd występuje przy if( arg == tab[ v - 1 ] ) { check = false; } Niestety nie umiem tego naprawić, pomimo wielu prób. Może ktoś z Was mi podpowie? #include <cstdlib> #include <iostream> #include <ctime> using namespace std;
bool sprawdz( int nrarg, int arg, int tab[] ) { bool check = true; int v = nrarg; if( v > 0 ) { do { if( arg == tab[ v - 1 ] ) { check = false; } v--; } while( v > 0 ); } return check; }
int main() { srand( time( NULL ) ); int wylosowane[ 10 ]; int x, y; do { do { y =( rand() % 20 ) + 1; sprawdz( x, y, wylosowane ); } while( sprawdz( x, y, wylosowane ) == false ); y = wylosowane[ x ]; x++; } while( x < 10 ); cout << "Teraz program wypisze wylosowane liczby"; do { cout << wylosowane[ x - 1 ] << " dla arg nr " << x << "\n"; x--; } while( x > 0 ); }
|
|
pekfos |
» 2013-12-01 20:35:46 Do sprawdz() podajesz wartość niezainicjalizowanej zmiennej. |
|
kubawal |
» 2013-12-01 20:36:48 Wg tego co sprawdziłem - wpisując cout<<"check"; |
To bardzo prymitywna technika - skorzystaj z debuggera. Nie inicjujesz x. |
|
Sevet Temat założony przez niniejszego użytkownika |
» 2013-12-01 20:39:04 Ach, dzięki i przepraszam za ten trywialny dla was problem ;]. |
|
Sevet Temat założony przez niniejszego użytkownika |
» 2013-12-05 15:15:58 Witam, Znów mam ten sam problem i nie umiem znaleźć błędu. Jedyne co mi przychodzi do głowy, to fakt że nie zainicjowałem żadnego elementu tablicy, ale to chyba nie jest konieczne, prawda? Wychodzić poza zakres tablicy bez określonej ilości elementów chyba się nie da, więc w czym tkwi problem? Wiem że to trochę żałosne, ale staram się jak mogę i ciężko mi to idzie ;D. Kod: #include <iostream> #include <string> using namespace std;
void wczytajTekst( string & tekst ) { getline( cin, tekst ); }
int znajdzFraze( string & tekst, string szukane, int znalezione[] ) { if( tekst.find( szukane ) == string::npos ) { cout << "Nie znaleziono frazy\"" << szukane << "\"."; return 0; } znalezione[ 0 ] = tekst.find( szukane ); int x; if( tekst.find( szukane, znalezione[ 0 ] + szukane.size() ) != string::npos ) for( x = 1; tekst.find( szukane, znalezione[ x ] + szukane.size() != string::npos ); x++ ) { znalezione[ x ] = tekst.find( szukane, znalezione[ x - 1 ] + szukane.size() ); }; return x; }
string zmienTekst( string tekst, int ilosc, int znalezione[], string szukane, string zmiennik ) { for(; ilosc >= 0; ilosc-- ) { tekst.erase( znalezione[ ilosc ], szukane.size() ); tekst.insert( znalezione[ ilosc ], zmiennik ); } return tekst; }
int main() { string tekst, szukane, zmiennik; cout << "Witamy, podaj tekst do przeksztalcenia!\n"; wczytajTekst( tekst ); szukane = " "; zmiennik = " "; int znalezione[] = { }; int znalezionych = znajdzFraze( tekst, szukane, znalezione ); if( znalezionych > 0 ) { tekst = zmienTekst( tekst, znalezionych, znalezione, szukane, zmiennik ); } cout << "Zmieniony tekst to:\n" << tekst; }
|
|
Monika90 |
» 2013-12-05 15:57:21 int znalezione[] = { }; Tablica w C++ nie może mieć rozmiaru zero, a nawet jakby mogła, to wtedy każdy dostęp do tej tablicy byłby poza zakresem. |
|
Sevet Temat założony przez niniejszego użytkownika |
» 2013-12-05 16:03:09 Przeczytałem gdzieś że w ten sposób mogę zadeklarować tablicę o nieokreślonej liczbie elementów. W takim razie skoro nie tak, to czy da się to zrobić inaczej? PS. Program wysypuje się dopiero przy wywołaniu tekst = zmienTekst( tekst, znalezionych, znalezione, szukane, zmiennik );
Więc tablica jednak zostaje użyta przez funkcję znajdzFraze( tekst, szukane, znalezione ) Jeśli się mylę to mnie popraw, bo zaczynam się gubić |
|
Monika90 |
» 2013-12-05 16:24:13 W takim razie skoro nie tak, to czy da się to zrobić inaczej? |
Możesz użyć std::vector<std::size_t>, przekazywać go do funkcji przez referencję i dodawać elementy za pomocą push_back. |
|
« 1 » 2 |