Programowanie strukturalne i obiektowe C++ Robert Nowak Programowanie strukturalne i obiektowe C++ Zastosowanie wskaźników w strukturach
Operator -> Jeżeli w programie mamy zdefiniowaną jakąkolwiek strukturę, a następnie zadeklarowaną zmienną strukturalną to do poszczególnych pól tej zmiennej odwoływaliśmy się za pomocą operatora . (kropki). Jeżeli w programie zdefiniujemy zmienną wskaźnikową i powiążemy ją ze zmienną strukturalną to do poszczególnych pól struktury za pomocą tej zmiennej odwołujemy się stosując operator ->.
Przykład programu #include <iostream> using namespace std; struct osoba { char imie[14]; char nazwisko[20]; int wiek; char plec[10]; }; int main () { osoba uczen [3]; cout <<"Wypełniamy tablice danymi uczniow\n"; for (int i=0;i<3;i++) cout <<"Podaj imie ucznia: "; cin >>uczen[ i ].imie; cin.ignore(); cout <<"Podaj nazwisko ucznia: "; cin >>uczen[ i ].nazwisko;
Ciąg dalszy programu cout <<"Podaj wiek ucznia: "; cin >>uczen[ i ].wiek; cin.ignore(); cout <<"Podaj plec ucznia (kobieta/mezczyzna): "; cin >>uczen[ i ].plec; } cout <<"\nInformacje o uczniach: \n"; for (int i=0;i<3;i++) { cout <<i+1<<". "<<uczen[ i ].imie<<" "<<uczen[ i ].nazwisko; cout <<" "<<uczen[ i ].wiek<<" "<<uczen[ i ].plec<<"\n"; cout <<"\n\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0;
Przykład programu 1 #include <iostream> using namespace std; struct osoba { char imie[14]; char nazwisko[20]; int wiek; char plec[10]; }; int main () { osoba uczen [3]; osoba *wsk; wsk=uczen; cout <<"Wypełniamy tablice danymi uczniow\n"; for (int i=0;i<3;i++) cout <<"Podaj imie ucznia: "; cin >>wsk->imie; cin.ignore(); cout <<"Podaj nazwisko ucznia: "; cin >>wsk->nazwisko;
Ciąg dalszy programu 1 cout <<"Podaj wiek ucznia: "; cin >>wsk->wiek; cin.ignore(); cout <<"Podaj plec ucznia (kobieta/mezczyzna): "; cin >>wsk->plec; wsk++; } wsk=uczen; cout <<"\nInformacje o uczniach: \n"; for (int i=0;i<3;i++) { cout <<i+1<<". "<<wsk->imie<<" "<< wsk->nazwisko; cout <<" "<< wsk->wiek<<" "<< wsk->plec<<"\n"; cout <<"\n\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0;
Przykład programu 2 #include <iostream> #include <cmath> using namespace std; struct punkt { double wsp_x; double wsp_y; }; int main() { punkt trojkat[3]; double w; double a,b,c; punkt *wsk; wsk=trojkat; cout <<"Podaj wspolrzedne wierzcholkow trojkata\n";
Ciąg dalszy programu 2 for (int i=0;i<3;i++) { cout <<"Podaj wspolrzedna x punktu "<<i+1<<": "; cin>>wsk->wsp_x; cin.ignore(); cout <<"Podaj wspolrzedna y punktu "<<i+1<<": "; cin>>wsk->wsp_y; wsk++; } cout <<"Podane przez ciebie punkty to:\n "; wsk=trojkat; cout <<"("<<wsk->wsp_x<<","<<wsk->wsp_y<<") ";
Ciąg dalszy programu 2 cout<<'\n'<<"Sprawdze czy nie leza one na jednej prostej\n"; cout<<"Nacisnij ENTER\n"; getchar(); w=trojkat[0].wsp_x*trojkat[1].wsp_y+trojkat[1].wsp_x*trojkat[2].wsp_y+ trojkat[2].wsp_x*trojkat[0].wsp_y-trojkat[2].wsp_x*trojkat[1].wsp_y- trojkat[1].wsp_x*trojkat[0].wsp_y-trojkat[0].wsp_x*trojkat[2].wsp_y; if (w==0) cout<<"Punkty sa wspoliniowe i nie da sie zbudowac trojkata\n"; else cout<<"Punkty nie sa wspoliniowe\n";
Ciąg dalszy programu 2 if (w!=0) { cout<<"Oblicze dlugosci odcinkow\n"; cout<<"Nacisnij ENTER\n"; getchar(); a=sqrt(pow(trojkat[1].wsp_x-trojkat[0].wsp_x,2)+pow(trojkat[1].wsp_y-trojkat[0].wsp_y,2)); b=sqrt(pow(trojkat[2].wsp_x-trojkat[1].wsp_x,2)+pow(trojkat[2].wsp_y-trojkat[1].wsp_y,2)); c=sqrt(pow(trojkat[2].wsp_x-trojkat[0].wsp_x,2)+pow(trojkat[2].wsp_y-trojkat[0].wsp_y,2)); cout<<"a="<<a<<" b="<<b<<" c="<<c<<'\n'; cout<<"Sprawdze czy mozna zbudowac trojkat\n"; if((a+b>c && a+c>b) && c+b>a) cout<<"Da sie zbudowac trojkat\n"; else cout<<"Nie da sie zbudowac trojkata\n"; } cout <<"\n\nNacisnij ENTER aby zakonczyc...\n"; return 0;
Przykład programu 3 #include <iostream> using namespace std; struct ulamek { int licznik; int mianownik; }; int main () { ulamek ul1,ul2; ulamek *u1=&ul1; ulamek *u2=&ul2; cout << "Podaj licznik pierwszego ulamka: "; cin>> u1->licznik; cin.ignore(); do cout << "Podaj mianownik pierwszego ulamka: "; cin>> u1->mianownik; if (u1->mianownik==0) cout << "Mianownik nie moze byc zerem\n"; } while (u1->mianownik==0);
Ciąg dalszy programu 3 cout << "Podaj licznik drugiego ulamka: "; cin>> u2->licznik; cin.ignore(); do { cout << "Podaj mianownik drugiego ulamka: "; cin>> u2->mianownik; if (u2->mianownik==0) cout << "Mianownik nie moze byc zerem\n"; } while (u2->mianownik==0); cout << "Oto ulamki ktore podales:\n"; cout << "Ulamek 1: "<<u1->licznik<<"/"<<u1->mianownik<<"\n"; cout << "Ulamek 2: "<<u2->licznik<<"/"<<u2->mianownik<<"\n"; cout <<"\n\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0;
Przykład programu 4 #include <iostream> using namespace std; struct ulamek { int licznik; int mianownik; }; int main () { ulamek ul1,ul2,ul3,ul4,ul5; ulamek *u1=&ul1; ulamek *u2=&ul2; ulamek *u3=&ul3; ulamek *u4=&ul4; ulamek *u5=&ul5; cout << "Podaj licznik pierwszego ulamka: "; cin>> u1->licznik; cin.ignore();
Ciąg dalszy programu 4 do { cout << "Podaj mianownik pierwszego ulamka: "; cin>> u1->mianownik; cin.ignore(); if (u1->mianownik==0) cout << "Mianownik nie moze byc zerem\n"; } while (u1->mianownik==0); cout << "Podaj licznik drugiego ulamka: "; cin>> u2->licznik; cout << "Podaj mianownik drugiego ulamka: "; cin>> u2->mianownik; if (u2->mianownik==0) while (u2->mianownik==0);
Ciąg dalszy programu 4 cout << "Oto ulamki ktore podales:\n"; cout << "Ulamek 1: "<<u1->licznik<<"/"<<u1->mianownik<<"\n"; cout << "Ulamek 2: "<<u2->licznik<<"/"<<u2->mianownik<<"\n"; cout << "\n\nNacisnij ENTER aby kontynuowac...\n"; getchar(); cout << "Jak je ponozymy to otrzymamy:\n"; u3->licznik=u1->licznik*u2->licznik; u3->mianownik=u1->mianownik*u2->mianownik; cout << "Ulamek 3: "<<u3->licznik<<"/"<<u3->mianownik<<"\n"; cout << "Jak podzielimy pierwszy przez drugi to otrzymamy:\n"; u4->licznik=u1->licznik*u2->mianownik; u4->mianownik=u1->mianownik*u2->licznik; cout << "Ulamek 4: "<<u4->licznik<<"/"<<u4->mianownik<<"\n";
Ciąg dalszy programu 4 cout << "Jak podzielimy drugi przez pierwszy to otrzymamy:\n"; u5->licznik=u2->licznik*u1->mianownik; u5->mianownik=u2->mianownik*u1->licznik; cout << "Ulamek 5: "<<u5->licznik<<"/"<<u5->mianownik<<"\n"; cout << "\n\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0; }
Przykład programu 5 #include <iostream> using namespace std; struct ulamek { int licznik; int mianownik; }; void wczytaj (ulamek *u) cout << "Podaj licznik ulamka: "; cin>> u->licznik; cin.ignore(); do cout << "Podaj mianownik ulamka: "; cin>> u->mianownik; if (u->mianownik==0) cout << "Mianownik nie moze byc zerem\n"; } while (u->mianownik==0);
Ciąg dalszy programu 5 void wypisz (ulamek *u) { cout<<u->licznik<<"/"<<u->mianownik<<"\n"; } void pomnoz (ulamek *u_1, ulamek *u_2, ulamek *u_3) u_3->licznik=u_1->licznik*u_2->licznik; u_3->mianownik=u_1->mianownik*u_2->mianownik; void podziel (ulamek *u_1, ulamek *u_2, ulamek *u_3) u_3->licznik=u_1->licznik*u_2->mianownik; u_3->mianownik=u_1->mianownik*u_2->licznik;
Ciąg dalszy programu 5 int main () { ulamek ul1,ul2,ul3,ul4,ul5; ulamek *u1=&ul1; ulamek *u2=&ul2; ulamek *u3=&ul3; ulamek *u4=&ul4; ulamek *u5=&ul5; cout << "Wcztanie danych pierwszego ulamka\n "; wczytaj(u1); cout << "Wczytanie danych drugiego ulamka\n "; wczytaj(u2); cout << "Oto ulamki ktore podales:\n"; cout << "Ulamek 1: "; wypisz (u1); cout << "Ulamek 2: "; wypisz (u2); cout << "\n\nNacisnij ENTER aby kontynuowac...\n"; getchar();
Ciąg dalszy programu 5 cout << "Jak je pomnozymy to otrzymamy:\n"; pomnoz (u1,u2,u3); cout << "Ulamek 3: "; wypisz (u3); cout << "\n\nNacisnij ENTER aby kontynuowac...\n"; getchar(); cout << "Jak podzielimy pierwszy przez drugi to otrzymamy:\n"; podziel (u1,u2,u4); cout << "Ulamek 4: "; wypisz (u4); cout << "Jak podzielimy drugi przez pierwszy to otrzymamy:\n"; podziel (u2,u1,u5); cout << "Ulamek 5: "; wypisz (u5); cout << "\n\nNacisnij ENTER aby zakonczyc...\n"; return 0; }