wragler Opublikowano 11 Listopada 2005 Zgłoś Opublikowano 11 Listopada 2005 Witam Oto jest moj program ktory oblicza max zasieg. Nie za bardzo rozumiem wykorzystanie wskaznikow.CZy ktos kto umie dobrze programowac moglby mi to poprwaic tak aby moja fukcja zaseg korzystala ze wskaznikow? Bardzo prosze o pomoc bo zalezy mi na zrozumieniu tego tematu. #include <iostream.h>#include <math.h>double zasieg(double _Vo,double _alfa){ double zasieg,k,pi=3.14,g=9.81; k=((2*_alfa)*pi)/180; zasieg=(_Vo*_Vo)*sin(k); return zasieg;}void main(void){ double alfa,Vo,zasieg1,k,pi=3.14; cout<<"Podaj predkosc w m/s\n"; cin>>Vo; cout<<"Podaj kat\n"; cin>>alfa; zasieg1=zasieg(Vo,alfa); cout.precision(3); cout<<"Zasieg \n"<<zasieg1<<"m\n";}, Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 11 Listopada 2005 Zgłoś Opublikowano 11 Listopada 2005 (edytowane) A wiec tłumacze jak osobie początkującej we wskaźnikach: #include <iostream>#include <cmath>using namespace std;void zasieg(const double * const Vo, const double * const alfa, double * const zas){ *zas = *Vo**Vo*sin(*alfa*3.14*2/180); // sadyzm i masochizm, działania na tych wskaźnikach;]} // plus tak dla jaj wszystko jako 1 wyrażenie int main(){ double alfa, Vo, zas, k; cout << "Podaj predkosc w m/s\n"; cin >> Vo; cout << "Podaj kat\n"; cin >> alfa; zasieg(&Vo, &alfa, &zas); // wpisanie adresu zmiennych do wskaźników cout.precision(3); // które już czekają w argumentach fukcji cout << "Zasieg \n"<< zas <<"m\n"; cin.sync(); cin.get(); return 0;} Zaleta : Wskaźnik w argumencie funkcji ustawiony na adres orginalnej zmiennej, zmienia orginał dlatego nie musi być już zwrotu rezultatu funkcji (w tym przyp. było by to przyokazji bezsensu), boskie zabezpieczenia const w argumentach niedopodjeb...ania Wada : Zapis jest równie boski Alternatywa : Referencje zamiast wskaźników są tu raczej koniecznością #include <iostream>#include <cmath>using namespace std;void zasieg(const double & Vo, const double & alfa, double & zas){ zas = Vo*Vo*sin(alfa*3.14*2/180); // tu już jest ładnie} int main(){ double alfa, Vo, zas, k; cout << "Podaj predkosc w m/s\n"; cin >> Vo; cout << "Podaj kat\n"; cin >> alfa; zasieg(Vo, alfa, zas); // i tu też;] cout.precision(3); cout << "Zasieg \n"<< zas <<"m\n"; cin.sync(); cin.get(); return 0;} Zaleta : podobna jak wyżej a dodatkowo brak "wad" tamtego zapisu ps. jakby coś było nie tak to sry ale oczy mi sie już kleją Edytowane 11 Listopada 2005 przez razor1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 11 Listopada 2005 Zgłoś Opublikowano 11 Listopada 2005 (edytowane) Super! Dzikei wielkie wreszcie na bliskim przykladzie zrozumialme jak to powinno byc. Jednak mam pytania: 1) co oznacza const w argumentach funkcji i cin.sync(); cin.get();2)CZy da sie w C++ wykreslic graficznie wykres tej paraboli (program opisuje lot pocisku) 3)i co oznacz using namespace std;? Edytowane 11 Listopada 2005 przez wragler Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 11 Listopada 2005 Zgłoś Opublikowano 11 Listopada 2005 w zasadzie moga być 3 takie zapisy dla wskaźników: double wart; 1) double * const wsk1 = &wart; 2) const double * wsk2 = &wart; 3) const double * const wsk3 = &wart; 1. stały wsk. raz ustawiony i koniec, można przez niego tylko wpisywać do wart 2. wskaźnik do stałej, może być ustawiany na różne wart ale nie może do nich wpisywać nic 3. stały wskaźnik do stałej, może być ustawiony tylko raz i nie można przez niego nic wpisywać taki do wart //... cin.sync(); cin.get(); cin.sync(); pisze z przyzwyczajenia przydaje akurat tutaj bo przydaje sie przed cin.get() kiedy już jakieś wpisy były wykonywane z klawiatury cin.get(); czeka na znak z klawiatury + Enter żeby sie prog nie wyłanczał //... można np w BC++ 3.1 trzeba uruchomoić tryb graficzny init graph o ile pamiętam, można też w builderze rysować w canvas lub .net System.Drawing; o ile pamiętam Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 11 Listopada 2005 Zgłoś Opublikowano 11 Listopada 2005 Czy moge anologicznie postepowac jezeli moj afunkcja bedzie zwracala kilka danych np zasieg, wysokosc, itd.? TZn tak samo "deklarowac" wskazniki, badz przez referencje? A o rysowanie to milem na mysli czy program urchomiony bedzie w trybie dosowym rysowal ta parabole. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 12 Listopada 2005 Zgłoś Opublikowano 12 Listopada 2005 Można ale po co, bawić sie w pseudo programowanie, tu aż sie prosi aby utworzyć sobie prostą klase i działać tylko na niej. Jak poniżej. #include <iostream>using namespace std;class Pomiar {private: double wys, wynik, zasieg, predkosc;public: Pomiar(double w, double z, double p) { wys = w; zasieg = z; predkosc = p; } void obliczanie_czegos() { wynik = wys*predkosc/zasieg; } void pokaz_wynik() { cout << wynik; } };int main(){ Pomiar nowy(24.5, 100.0, 200.5); nowy.obliczanie_czegos(); nowy.pokaz_wynik(); cin.get(); return 0; } W okienku będzie rysował ale trzeba uzyć jakąś biblioteke graficzną np w borland 3.1 jest dość ciekawa Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...