Pawełek Temat założony przez niniejszego użytkownika |
Problem z tablicą » 2019-02-04 13:06:27 Przygotowuję się do matury, i mam do rozwiązania zadanie: "Wiązka zadań Ciekawe liczby W pliku liczby.txt w oddzielnych wierszach znajduje się 1000 różnych liczb, każda o długości od 2 do 9 cyfr. Napisz program(-y), który da odpowiedzi do poniższych zadań. Odpowiedzi zapisz do pliku wyniki_liczby.txt, a każdą odpowiedź poprzedź numerem zadania. 59.1. Czynnikiem pierwszym danej liczby naturalnej złożonej jest dowolna liczba pierwsza, która dzieli tę liczbę całkowicie. Podaj, ile jest w pliku liczby.txt liczb, w których rozkładzie,na czynniki pierwsze występują dokładnie trzy różne czynniki (mogą się one powtarzać, z których każdy jest nieparzysty." Mój program (problem opisałem w komentarzu) #include <iostream> #include <fstream> #include <math.h>
using namespace std;
void sito( int a, bool * tab ) { for( int i = 2; i * i <= a; i++ ) if( tab[ i ] == 0 ) for( int b = i * i; b <= a; b += 2 ) { tab[ b ] = 1; } } bool trzyczyn( int liczba, bool * tab ) { int druga[ 4 ] { }, i = 1, c = 0; do { i++; if( tab[ i ] == 0 ) if( liczba % i == 0 ) { liczba /= i; if( i % 2 == 0 ) return false; for( int y = 0; y <= 3; y++ ) if( druga[ y ] == 0 ) { druga[ y ] = i; c++; break; } i = 2; } } while( liczba != 1 ); if( c == 3 ) return true; else return false; }
int main() { fstream plik, plik2; bool * tab; int liczba; plik.open( "liczby.txt", ios::in ); plik2.open( "wyniki_liczby.txt", ios::out ); for( int i = 1; 1 <= 1000; i++ ) { plik >> liczba; tab = new bool[ liczba + 1 ] { }; sito( liczba, tab ); if( trzyczyn( liczba, tab ) ) { plik2 << liczba; } delete[] tab; } return 0; }
Nie opisywalem dzialania calego programu, bo z rozwiazaniem zadania nie mam problemu tylko z tą tablicą. Problem występuje nawet jak zmienna zamienie na liczbę której to ta zmienna odpowiada w pierwszym obiegu pętli czyli 13150087. |
|
pekfos |
» 2019-02-04 15:01:48 podczas debuggowania, w tym miejscu debugger się zatrzymuje i ta 'strzalka znika' jak odpalam debugger drugi raz wyskakuje mi okienko call stack. |
Co to znaczy? |
|
Pawełek Temat założony przez niniejszego użytkownika |
» 2019-02-04 15:14:55 Właśnie nie wiem. Po prostu debugger się zatrzymuje przy tej linijce. Wygląda to na to jakby miał problem z jednoczesna deklaracja i wyzerowaniem tak dużej tablicy. Jeśli chodzi o kompilacje to wszystko działa bez zarzutu, tyle tylko ze program oddaje mi pusty plik wyniki.txt, chciałem wiec uzyc debuggera i sprawdzić co jest nie tak, i debugger nie może przejść wyżej opisanej linii |
|
pekfos |
» 2019-02-04 16:15:16 Czyli ten kod nie działa? #include <iostream>
int main() { bool * tab; int liczba = 13150087; tab = new bool[ liczba + 1 ] { }; std::cout << "OK: " <<( void * ) tab << '\n'; delete[] tab; return 0; } |
|
Pawełek Temat założony przez niniejszego użytkownika |
» 2019-02-04 23:40:13 Nie działa |
|
Pawełek Temat założony przez niniejszego użytkownika |
» 2019-02-05 00:04:39 Tzn. program się kompiluje, tyle tylko że się nie debuguje. Debugger zatrzymuje się przy zerowaniu tablicy. |
|
pekfos |
» 2019-02-05 00:07:17 Podaj dokładną wersję kompilatora. |
|
Pawełek Temat założony przez niniejszego użytkownika |
» 2019-02-05 00:41:52 GCC 5 Series MinGW 32-bit Edition wersja kompilatora
GDB 7.9 Series MinGW 32-bit Edition wersja debuggera.
System mam 64 bitowy, powiem szczerze, że nawet nie wiedziałem że mam 32 bitową wersję kompilatora. Czy to może mieć jakiś wpływ? (Oczywiście zmienię ten kompilator, ale myślisz że to rozwiąże problem?) |
|
« 1 » 2 3 4 5 |