Zagnieżdżenie struktur

0

Witam, mam zadanie do zrobienia z którym mam problemy, a brzmi ono tak:

Zdefiniuj strukturę Path reprezentującą ścieżkę jako tablicę punktów Point. Tablica powinna być dynamicznie inicjalizowana przy pomocy funkcji void inith_path(Path p, int size), gdzie size określa maksymalną liczbę punktów. Za zwolnienie zajętej pamięci posłuży funkcja void del_path(Path). Funkcja add_point(Path*,Point) powinna umożliwić dodanie punktu do ścieżki. Następnie zdefiniuj funkcję, która obliczy całkowitą długość ścieżki.

 
#include <iostream>
#include <math.h>

struct Point{
	float x;
	float y;
};

struct Path{
    Point Punkty;
};

void Init_path(Path *p, int size)
{

}

int main() {
int size;
std::cout<<"Wprowadz rozmiar tablicy: "<<std::endl;
std::cin>>size;

Point *p=new Point; ???

return 0;
}

Dałem zrobić zadania z pojedyńczą strukturą, gdzie miałem 2 punkty, używałem dynamicznej tablicy i liczyłem odległość ścieżki.
Jednak teraz mam to zrobić z zagnieżdżoną strukturą i wykładam się na samym początku, ponieważ z góry mam narzucone funkcje i nie wiem co ma oznaczać argument *Path p , proszę o pomoc

0

Wskaźnik, w tym wypadku tablica.
W twojej strukturze Path jest błąd logiczny:
Typ: pojedynczy punkt; Nazwa: wiele punktów

Btw, zagnieżdżenie struktur to coś zupełnie innego.

3

Może o to chodziło?

#include <iostream>
using namespace std;
 
struct Point{
    float x;
    float y;
};
 
struct Path{
    Point *punkt;
};
 
void init_path(Path *&p, int size){
    p = new Path[size];
    for (int i = 0; i<size; i++)
        p[i].punkt = 0;
}
 
//    Potrzebny jest obiekt, który przekaże rozmiar tablicy, ponieważ
//    http://stackoverflow.com/questions/968001/determine-size-of-array-if-passed-to-function
void add_point(Path *p, int size, Point *po){
    for (int i = 0; i<size; i++)
        if (p[i].punkt == 0){
            p[i].punkt = po;
            break;
        }
}
 
//    Tutaj tak samo jak wyżej.
void print_path(Path *p, int size){
    for (int i = 0; i<size; i++)
        if (p[i].punkt != 0)
            cout << p[i].punkt->x << " " << p[i].punkt->y << endl;
}
 
void del_path(Path *p, int size){
    for (int i = 0; i<size; i++)
        if (p[i].punkt != 0){
            delete p[i].punkt;
            p[i].punkt = 0;
        }
    delete[] p;
    p = 0;
}
 
int main() {
    Path *tablica = 0;
    init_path(tablica, 3);
    add_point(tablica, 3, new Point{ 9, 0 });
    add_point(tablica, 3, new Point{ 13, 2 });
    add_point(tablica, 3, new Point{ 16.2, 7.1 });
 
    //    Ten element nie zostanie dodany, bo tablica jest za mała.
    add_point(tablica, 3, new Point{ -2, -2 });
    print_path(tablica, 3);
    del_path(tablica, 3);
    return 0;
}

https://ideone.com/SxeBs7

Funkcję, która obliczy całkowitą długość ścieżki już napisz sobie sam, bo nie wiem jak chcesz to zrobić, w sensie algorytmu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1