Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Program wyznaczający odległość pomiędzy punktami - zawieszenie programu

Ostatnio zmodyfikowano 2014-10-24 20:30
Autor Wiadomość
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ę.

C/C++
#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 :)
P-118471
pekfos
» 2014-10-14 20:15:24
C/C++
int tab1[ i ];
float tab2[ i *( i - 1 ) / 2 ];
Tak się nie tworzy tablic o nieznanym z góry rozmiarze.
P-118472
RobaczeQ
Temat założony przez niniejszego użytkownika
» 2014-10-14 21:03:11
C/C++
int tab1[ i ];
float tab2[ i *( i - 1 ) / 2 ];

Zamiana na

C/C++
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.
P-118483
Jacob99
» 2014-10-14 21:06:50
chodzi o to, że rozmiar musi być od razu znany. Ty nigdzie nie inicjalizujesz zmiennej i.
P-118485
RobaczeQ
Temat założony przez niniejszego użytkownika
» 2014-10-14 21:20:33
C/C++
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
P-118486
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.
P-118487
1aam2am1
» 2014-10-14 21:24:00
C/C++
int i; //inicjowanie zmięnnej
int tab[ 10 ]; //inicjowanie tablicy 10 elementowej
int tab2[ i ]; //błąd     !!!error!!!     tak się nie tworzy tablicy o nieznanym rozmiarze. Zachowanie nieokreślone
P-118488
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?
P-118489
« 1 » 2
  Strona 1 z 2 Następna strona