#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnN0cnVjdCBQb2ludHsKICAgIGZsb2F0IHg7CiAgICBmbG9hdCB5Owp9OwogCnN0cnVjdCBQYXRoewogICAgUG9pbnQgKnB1bmt0Owp9OwogCnZvaWQgaW5pdF9wYXRoKFBhdGggKiZwLCBpbnQgc2l6ZSl7CiAgICBwID0gbmV3IFBhdGhbc2l6ZV07CiAgICBmb3IgKGludCBpID0gMDsgaTxzaXplOyBpKyspCiAgICAgICAgcFtpXS5wdW5rdCA9IDA7Cn0KIAovLyAgICBQb3RyemVibnkgamVzdCBvYmlla3QsIGt0w7NyeSBwcnpla2HFvGUgcm96bWlhciB0YWJsaWN5LCBwb25pZXdhxbwKLy8gICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NjgwMDEvZGV0ZXJtaW5lLXNpemUtb2YtYXJyYXktaWYtcGFzc2VkLXRvLWZ1bmN0aW9uCnZvaWQgYWRkX3BvaW50KFBhdGggKnAsIGludCBzaXplLCBQb2ludCAqcG8pewogICAgZm9yIChpbnQgaSA9IDA7IGk8c2l6ZTsgaSsrKQogICAgICAgIGlmIChwW2ldLnB1bmt0ID09IDApewogICAgICAgICAgICBwW2ldLnB1bmt0ID0gcG87CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KfQogCi8vICAgIFR1dGFqIHRhayBzYW1vIGphayB3ecW8ZWouCnZvaWQgcHJpbnRfcGF0aChQYXRoICpwLCBpbnQgc2l6ZSl7CiAgICBmb3IgKGludCBpID0gMDsgaTxzaXplOyBpKyspCiAgICAgICAgaWYgKHBbaV0ucHVua3QgIT0gMCkKICAgICAgICAgICAgY291dCA8PCBwW2ldLnB1bmt0LT54IDw8ICIgIiA8PCBwW2ldLnB1bmt0LT55IDw8IGVuZGw7Cn0KIAp2b2lkIGRlbF9wYXRoKFBhdGggKnAsIGludCBzaXplKXsKICAgIGZvciAoaW50IGkgPSAwOyBpPHNpemU7IGkrKykKICAgICAgICBpZiAocFtpXS5wdW5rdCAhPSAwKXsKICAgICAgICAgICAgZGVsZXRlIHBbaV0ucHVua3Q7CiAgICAgICAgICAgIHBbaV0ucHVua3QgPSAwOwogICAgICAgIH0KICAgIGRlbGV0ZVtdIHA7CiAgICBwID0gMDsKfQogCmludCBtYWluKCkgewogICAgUGF0aCAqdGFibGljYSA9IDA7CiAgICBpbml0X3BhdGgodGFibGljYSwgMyk7CiAgICBhZGRfcG9pbnQodGFibGljYSwgMywgbmV3IFBvaW50eyA5LCAwIH0pOwogICAgYWRkX3BvaW50KHRhYmxpY2EsIDMsIG5ldyBQb2ludHsgMTMsIDIgfSk7CiAgICBhZGRfcG9pbnQodGFibGljYSwgMywgbmV3IFBvaW50eyAxNi4yLCA3LjEgfSk7CiAKICAgIC8vICAgIFRlbiBlbGVtZW50IG5pZSB6b3N0YW5pZSBkb2RhbnksIGJvIHRhYmxpY2EgamVzdCB6YSBtYcWCYS4KICAgIGFkZF9wb2ludCh0YWJsaWNhLCAzLCBuZXcgUG9pbnR7IC0yLCAtMiB9KTsKICAgIHByaW50X3BhdGgodGFibGljYSwgMyk7CiAgICBkZWxfcGF0aCh0YWJsaWNhLCAzKTsKICAgIHJldHVybiAwOwp9