Temat: Strukturalizacja programów - cd.
Przypomnienie informacji o procedurze.
Składnia funkcji.
Procedura a funkcja.
Ćwicz:
- funkcja NWD(int a, int b) // największy wspólny dzielnik liczb a, b
- funkcja NWW(int a, int b) // najmniejsza wspólna wielokrotność liczb a,b
- procedura suma (l1,m1,l2,m2) // suma 2 ułamków
- procedura roznica (l1,m1,l2,m2) // różnica 2 ułamków
- procedura iloczyn (l1,m1,l2,m2) // iloczyn …………
- procedura iloraz (l1,m1,l2,m2) //iloraz …………….
Ad.1
Procedura jest fragmentem programu, do którego można odwoływać się poprzez jej nazwę. Może być parametryczna lub nie. Na etapie definicji podajemy parametry formalne, a na etapie wywołania podajemy parametry aktualne, które muszą być zgodne w typie z typami parametrów formalnych.
Przykład procedury:
void znaki (int ile, char znak) // definiowanie procedury i parametrów formalnych
{
for (int i=0; i<ile;i++) cout<<znak; // treść procedury;
}
int main()
{
znaki (15,'*'); // wywołanie procedury poprzez nazwę i podanie parametrów aktualnych
return 0;
}
Ad. 2
Funkcja jest fragmentem programu. Może być parametryczna lub nie. Na etapie definicji podajemy parametry formalne, a na etapie wywołania parametry aktualne, które muszą być zgodne w typie z typami parametrów formalnych. Funkcja pod swoją nazwą zwraca określoną na etapie definicji wartość. Wynik działania funkcji można wypisać lub używać w wyrażeniach np. matematycznych.
Przykład
cout<<sqrt (100); // funkcja o nazwie sqrt zwraca wartość pierwiastka kwadratowego z liczby; nie musimy jej definiować, bo ktoś już wcześniej to zrobił i jest teraz w bibliotece <cmath>.
Samodzielne definiowanie funkcji wymaga napisania kodu zgodnie ze składnią:
typ_wyniku_funkcji nazwa_funkcji (parametry formalne)
{
…………………………….// treść funkcji
return wynik; // ta instrukcja musi wystąpić w treści funkcji i wynik musi być zgodny z typem
wyniku_funkcji
}
Przykład definicji funkcji o nazwie srednia:
float srednia (int a, int b) // definicja funkcji; oblicza średnią 2 liczb i zwraca wynik typ float
{
int suma=a+b;
return suma/2;
}
int main()
{
int x, y;
cout<<”Podaj 2 liczby”;
cin >>x>>y;
cout<<”Srednia liczb ”<<x<<” i ”<<y<<”wynosi<<srednia(x,y); //wywołanie funkcji srednia
return 0;
}
Ad. 3
- funkcja i procedura służą strukturalizacji programów; raz zdefiniowane mogą być wielokrotnie używane;
- funkcja pod swoją nazwą zwraca wartość wskazaną w definicji poleceniem return. Polecenie return zwraca wartość i kończy działanie funkcji;
- nazwa procedury nie może być użyta w wyrażeniach, a funkcji tak;
- blok główny programu int main() {……} jest też funkcją; return 0 kończy działanie całego programu
Ad. 4
Przeanalizuj poniższy kod realizujący funkcję NWD dla dwóch liczb a i b;
int NWD (int a, int b)
{
int pom;
for (int i=1; i<=a; i++)
if (a%i==0 && b%==0) pom=i;
return pom;
}
Przepisz tą funkcję do programu, który będzie wykonywał podstawowe działania na ułamkach zwykłych. Napisz samodzielnie funkcję NWW wzorując się na NWD i korzystając ze wzoru NWW(a,b)=a*b/NWD(a,b);
Dopisz do w/w funkcji procedury wymienione w Ćwicz. Procedury dla 4 liczb (licznika i mianownika pierwszego ułamka i licznika i mianownika drugiego ułamka) mają realizować 4 podstawowe działania na ułamkach zwykłych.
Np.
void suma (int l1, int m1, int l2, int m2)
{
int m=m1*m2; // obliczenie wspólnego mianownika
int l=l1*m1+l2*m2; // obliczenie zsumowanych liczników
cout<<l1<<”/”m1<<”+”<<l2<<”/”<<m2<<”=”<<l/NWD(l,m)<<”/”<<m/NWD(l,m)<<endl;
}
Uwaga! NWD(l,m) wykorzystywana jest do skracania licznika i mianownika.