RobaczeQ Temat założony przez niniejszego użytkownika |
[c++] Program wyznaczający odległość pomiędzy punktami - zawieszenie programu » 2014-10-14 20:01:53 Witam, chciałem skrócić swój program i uczynić go bardziej funkcjonalnym (poprzednia wersja działała poprawnie jednak liczyła tylko do 10 punktów i zawierała koło 600 linijek) Jednak napotkałem przeszkodę i po próbie walki z problemem nie umiem sam go rozwiązać. Podczas uruchamiania pętli for z podprogramem "program" wykompliowany plik zacina się. #include <iostream> #include <cmath>
using namespace std;
int tab1; float tab2;
void program( int p, int o, int x, int j ) { int l, n; int i; int tab1[ i ]; float tab2[ i *( i - 1 ) / 2 ]; for( n = 1; n < i; n++ ) { float n = sqrt(( tab1[ p ] - tab1[ x ] ) *( tab1[ p ] - tab1[ x ] ) +( tab1[ p + 1 ] - tab1[ x + 1 ] ) *( tab1[ p + 1 ] - tab1[ x + 1 ] ) ); tab2[ l ] = n; cout << "Odleglosc miedzy " << j << " punktem a " << o << " wynosi: " << tab2[ l ] << endl; o++; p = p + 2; } }
int main() { int i, p, o, x, j, g, x1, y1; cout << "Witaj w programie obliczajacym odleglosc miedzy punktami" << endl << "Podaj ilosc punktow: "; cin >> i; cout << endl; int tab1[ i ]; float tab2[ i *( i - 1 ) / 2 ]; if( i >= 2 ) { x = 0; int c = 0; int y = 1; while( i > x ) { x++; cout << "Wprowadz wspolrzedna x" << y << ": "; cin >> x1; tab1[ c ] = x1; c++; cout << "Wprowadz wspolrzedna y" << y << ": "; cin >> y1; tab1[ c ] = y1; c++; y++; } int h = 0; int u = 1; cout << endl << "Wprowadzone punkty: " << endl; while( 2 * i > h ) { cout << "Punkt " << u << " [ " << tab1[ h ] << " ; " << tab1[ h + 1 ] << " ] " << endl; h = h + 2; u++; } p = 2; o = 2; x = 0; j = 1; for( int c = 1; c < i; c++ ) { program( p, o, x, j ); p = p + 2; o++; x = x + 2; j++; } } else { cout << "Aby wykonac pomiar potrzebne sa conajmniej dwa punkty."; } return 0; }
Wiem, że program jest dość długi i iż powinienem sam znaleźć rozwiązanie problemu, gdyż tak więcej się nauczę, jednak jestem już wypalony z pomysłów. Z góry dziękuję za pomoc :) |
|
pekfos |
» 2014-10-14 20:15:24 int tab1[ i ]; float tab2[ i *( i - 1 ) / 2 ];
|
Tak się nie tworzy tablic o nieznanym z góry rozmiarze. |
|
RobaczeQ Temat założony przez niniejszego użytkownika |
» 2014-10-14 21:03:11 int tab1[ i ]; float tab2[ i *( i - 1 ) / 2 ];
Zamiana na int tab1[ i ]; int po; po = i *( i - 1 ) / 2; float tab2[ po ];
o to chodzi? Co to problemu głównego to go to nie rozwiązuje. |
|
Jacob99 |
» 2014-10-14 21:06:50 chodzi o to, że rozmiar musi być od razu znany. Ty nigdzie nie inicjalizujesz zmiennej i. |
|
RobaczeQ Temat założony przez niniejszego użytkownika |
» 2014-10-14 21:20:33 int main() { int i, p, o, x, j, g, x1, y1; cout << "Witaj w programie obliczajacym odleglosc miedzy punktami" << endl << "Podaj ilosc punktow: "; cin >> i;
Zmienna jest inicjowana w mainie na samym początku |
|
Jacob99 |
» 2014-10-14 21:23:41 chodziło mi o to i w funkcji. A poza tym i tak źle robisz, bo wartość i musi być znana w trakcie kompilacji. |
|
1aam2am1 |
» 2014-10-14 21:24:00 int i; int tab[ 10 ]; int tab2[ i ];
|
|
RobaczeQ Temat założony przez niniejszego użytkownika |
» 2014-10-14 21:34:19 Ale wielkości tablicy nie określę bez znanej dla mnie ilości punktów, gdy określę tablicę jako 100 to może być za mała jeśli określę zbyt duża ilość punktów tak? Jest jakieś wyjście z tej sytuacji? |
|
« 1 » 2 |