Skocz do zawartości
wragler

Funkcja I Wskazniki

Rekomendowane odpowiedzi

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";}
,

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez razor1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez wragler

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...