Funktion Array Punktkoordinaten



  • Ich würde gerne```cpp
    mein zwei dimensionales Array mit Punktkoordinaten füllen.
    x Start wert soll -10 sein. Der Abstand danach soll vom Benutzer eingegeben werden. Die Länge des Arrays wird auch vom Benutzer eingetippt.
    Gruß Serdar

        float f=-10;
        cout<<"In welchem Abstand sollen die x Koordinaten voneinander liegen?: ";
        cin>>m;
        int i=0;
        while (i<laenge)
        {
            arr[i][1]=(f/4)+7;
            arr[i][0]=f;
            i++;
            f=f+m;
        }
    }


  • Dann fang doch erst ein Mal damit an, wie das Array erzeugt wird. arr ist nirgendwo definiert. Genausowenig wie laenge.



  • #include <iostream>
    
    using namespace std;
    
    struct punkt
    {
        double x;
        double y;
    };
    
    void punktBestimmen (punkt arr[],int laenge)
    {
        float m;
        float f=-10;
        cout<<"In welchem Abstand sollen die x Koordinaten voneinander liegen?: ";
        cin>>m;
        int i=0;
        while (i<laenge)
        {
            arr[i][1]=(f/4)+7;
            arr[i][0]=f;
            i++;
            f=f+m;
        }
    }
    
    int main ()
    {
        int i;
        cin>>i;
        punkt arr [i][1];
        return 0;
    }
    
    ```Was Ich nicht wirklich verstehe ist, da meine Struktur aus x und y besteht. Da auch mein Array den datentyp meiner Struktur hat, ist mein Array dann automatisch 2 Dimensional?


  • Die Aufgabe war es, dass die Größe des Arrays vom Benutzer eingegeben wird.
    und die Belegung des Arrays mit Zahlen soll innerhalb einer Funktion erfolgen. In der Funktion soll das Array mit Punkt Koordinaten gefüllt werden, die auf der Geraden 1/4x+7 liegen. Abstand gibt Benutzer ein und startwert ist x=-10.



  • Was ich jetzt noch geändert habe ist, dass es doch ein eindimensionales Array ist.
    Bei der in jedem Arrayfeld eine x und eine y Koordinate gespeichert wird, heißt das punkt.x an der jeweiligen Stelle mein f sein soll. punkt.y dann mein durch die Funktion gerechneter Wert ist. Nur kalppt es so nicht, weil beim Füllen der jeweiligen Array stelle ein Fehler auftritt. ```cpp

    while (i<laenge)
        {
            arr[i]= punkt.x=f;
            arr[i]= punkt.y=((f/4)+7);
            i++;
            f=f+m;
        }


  • Also du hast jetzt ein array von "punkt", richtig? (besser wäre ein std::vector<punkt>, aber irgendwie klingt das sehr nach einer Schul-/Uni-Aufgabe)

    dann machst du

    arr[i].x = f;
    arr[i].y = f/4.0 + 7;
    

    statt der while-Schleife nimmst du dann besser auch noch eine for-Schleife.



  • Die Anzahl der Elemente bei einem Array muss eine Konstante sein, d.h. sie muss zum Übersetzungszeitpunkt bekannt sein. Dein Vorhaben mit

    int main ()
    {
        int i;
        cin>>i;
        punkt arr [i][1];
    }
    

    funktioniert also nicht. Weder für zwei noch für eine Dimension. Mögliche Lösungen sind:

    • ein Array mit statischer Größe (zb. 1000) und einem Zähler, wie viele Elemente davon benutzt werden. Wird häufig in Übungsaufgaben gemacht, ist aber schlecht. Wirklich schlecht.
    • das Array wird mit passender Größe per new auf dem Heap angelegt. Ist nur wenig besser als die erste Variante.
    • man nimmt std::vector und löst allein durch die Benutzung von std::vector alle Probleme aus den beiden ersten Varianten.

    Wenn dein Dozent auf Ansatz (nicht Lösung!) eins oder zwei besteht: Vorlesung für den Schein machen, danach alles vergessen!