Ładny brzuch
Witam mam nastepujac problem napisalem program ktory ma obliczac obwod i wypisywac punkty wielokatu mam blad kompilacji i nie moge dosc gdzie on jest ;/;/ bede wdzieczny za wskazanie usterki ;)
#include <iostream> #include <cmath> using namespace std; struct SPunkt { double x,y; }; struct SWielokat { int n; SPunkt wierz; }; void ini_wielo(SWielokat & w,SPunkt * poczatek,SPunkt * koniec) { w.n = koniec - poczatek; w.wierz = new SPunkt [w.n]; for(int i=0;i<w.n;++i) { w.wierz[i] = poczatek[i]; } } void wypisz_wielo(SWielokat &w) { for(int i=0;i<w.n;++i) { cout<<" "<<w.wierz[i].x<<w.wierz[i].y<<endl; } } void ini_wielo_los(SWielokat & w,int n) { w.n = n; w.wierz = new SPunkt[w.n]; for(int i=0;i<w.n;++i) { w.wierz[i].x=rand()%10; w.wierz[i].y=rand()%10; } } double dlugosc(const SPunkt &p1,const SPunkt& p2) { return sqrt(((p1.x - p2.x)*(p1.x - p2.x))+((p1.y-p2.y)*(p1.y-p2.y))); } double obwod(const SWielokat &w) { double suma = 0.0; for(int i=0;i<w.n;++i) { suma+= dlugosc(w.wierz[i],w.wierz[i+1]); } return suma; } void del_wielo(SWielokat w) { delete [] w.wierz; } int main() { SPunkt t[] = { {1.0, 2.0}, {-1.0, 3.0}, {0.0, -2.0}, {3.0, 0.0}}; SWielokat wielo, wielo_l; ini_wielo(wielo, t, t + 4); wypisz_wielo(wielo); cout << "Obwod = " << obwod(wielo) << "\n"; ini_wielo_los(wielo_l, 5); wypisz_wielo(wielo_l); cout << "Obwod = " << obwod(wielo_l) << "\n"; del_wielo(wielo); del_wielo(wielo_l); return 0; }
z gory dziekuje ;)
A moe by nam pokaza wyjcie kompilatora, log, nazwe tego bedu?
zmie
struct SWielokat { int n; SPunkt wierz; };
na
struct SWielokat { int n; SPunkt * wierz; };
dzieki wielki ;) mam pytanie czemu tam jest wskaznik ?? ;/ mam troche z tym klopoty
void ini_wielo(SWielokat & w,SPunkt * poczatek,SPunkt * koniec)
no i dlaczego tu np. poczatek i konic jest przez wskaznik ? a w przez referencje ?;/ wiem ze to pewnie dla was proste ale ja bardziej napisalem ten prgram pomagajac sobie gotowym kodem ;/ wiec prosze jeszcze o pomoc : )
moesz i tak zrobic ;)
void ini_wielo(SWielokat *w,SPunkt * poczatek,SPunkt * koniec) { w->n = koniec - poczatek; w->wierz = new SPunkt [w.n]; for(int i=0;i<w->n;++i) { w->wierz[i] = poczatek[i]; } }
a do zmiennej poczatek odwolujesz jego jak do tablicy, wic musi by wskanik
mona i tak :P
w->*(wierz + i) = *(poczatek + i);
moe to pomoe ci zrozumiec wskaniki... ^_^
Uytkownik __avas__ edytowa ten post 19 czerwiec 2006, 18:21
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <iostream> #include <cmath> using namespace std; struct SPunkt { double x,y; }; struct SWielokat { int n; SPunkt wierz; }; void ini_wielo(SWielokat & w,SPunkt * poczatek,SPunkt * koniec) { w.n = koniec - poczatek; w.wierz = new SPunkt [w.n]; for(int i=0;i<w.n;++i) { w.wierz[i] = poczatek[i]; } } void wypisz_wielo(SWielokat &w) { for(int i=0;i<w.n;++i) { cout<<" "<<w.wierz[i].x<<w.wierz[i].y<<endl; } } void ini_wielo_los(SWielokat & w,int n) { w.n = n; w.wierz = new SPunkt[w.n]; for(int i=0;i<w.n;++i) { w.wierz[i].x=rand()%10; w.wierz[i].y=rand()%10; } } double dlugosc(const SPunkt &p1,const SPunkt& p2) { return sqrt(((p1.x - p2.x)*(p1.x - p2.x))+((p1.y-p2.y)*(p1.y-p2.y))); } double obwod(const SWielokat &w) { double suma = 0.0; for(int i=0;i<w.n;++i) { suma+= dlugosc(w.wierz[i],w.wierz[i+1]); } return suma; } void del_wielo(SWielokat w) { delete [] w.wierz; } int main() { SPunkt t[] = { {1.0, 2.0}, {-1.0, 3.0}, {0.0, -2.0}, {3.0, 0.0}}; SWielokat wielo, wielo_l; ini_wielo(wielo, t, t + 4); wypisz_wielo(wielo); cout << "Obwod = " << obwod(wielo) << "\n"; ini_wielo_los(wielo_l, 5); wypisz_wielo(wielo_l); cout << "Obwod = " << obwod(wielo_l) << "\n"; del_wielo(wielo); del_wielo(wielo_l); return 0; }
z gory dziekuje ;)
A moe by nam pokaza wyjcie kompilatora, log, nazwe tego bedu?
zmie
struct SWielokat { int n; SPunkt wierz; };
na
struct SWielokat { int n; SPunkt * wierz; };
dzieki wielki ;) mam pytanie czemu tam jest wskaznik ?? ;/ mam troche z tym klopoty
void ini_wielo(SWielokat & w,SPunkt * poczatek,SPunkt * koniec)
no i dlaczego tu np. poczatek i konic jest przez wskaznik ? a w przez referencje ?;/ wiem ze to pewnie dla was proste ale ja bardziej napisalem ten prgram pomagajac sobie gotowym kodem ;/ wiec prosze jeszcze o pomoc : )
moesz i tak zrobic ;)
void ini_wielo(SWielokat *w,SPunkt * poczatek,SPunkt * koniec) { w->n = koniec - poczatek; w->wierz = new SPunkt [w.n]; for(int i=0;i<w->n;++i) { w->wierz[i] = poczatek[i]; } }
a do zmiennej poczatek odwolujesz jego jak do tablicy, wic musi by wskanik
mona i tak :P
w->*(wierz + i) = *(poczatek + i);
moe to pomoe ci zrozumiec wskaniki... ^_^
Uytkownik __avas__ edytowa ten post 19 czerwiec 2006, 18:21