Ł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
  •