Postęp jest genialny w swojej prostocie i tylko idąc z postępem jesteśmy w stanie odkrywać nowe, uczyć się nowych rzeczy.
W tej serii wpisów napisaliśmy swoją pierwszą aplikację konsolową (Pierwsza aplikacja (konsolowa)), poznaliśmy Zmienne i ich typy, powiedzieliśmy sobie nieco o wyrażeniach algebraicznych (Wyrażenia algebraiczne (już kiedyś o tym słyszałem…)), były także wyrażenia logiczne (Wyrażenia logiczne (gdzie sens? gdzie logika?)) oraz poznaliśmy Operacje na tekstach (bo matematyka to nie wszystko…) dziś zaś powiemy sobie o Kolejności wykonywania działań w języku C#.
1. Kolejność wykonywania działań w C# – Priorytety operatorów i zasady łączności
Kolejność wykonywania działań miała/ma znaczenie w każdym z dotychczas omawianych zagadnień. Najwyższy czas zatem poświęcić jej nieco więcej czasu.
Reguły kolejności działań w C# możemy sformułować w poniższy sposób:
- jeśli operatory mają ten sam priorytet, obowiązują zasady łączności
- jeśli operatory mają różne priorytety, obowiązuje kolejność według priorytetów operatorów
Zasada łączności:
Operatory przypisania oraz operatory jednoargumentowe obowiązuje zasada łączności od prawej do lewej, np.:
c = b = c
co jest tożsame z:
c = (a = b)
Natomiast operatory dwuargumentowe (z wyjątkiem przypisania) obowiązuje zasada łączności od lewej do prawej, np.:
a + b + c
jest tożsame z:
(a + b) + c
Przykład 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; namespace kolejnosc_wykonywania_dzialan { class Program { static void Main(string[] args) { int a, b, c = 1; a = b = c; //od prawej do lewej Console.WriteLine("a={0}", a); Console.WriteLine("suma={0}", a + b + c); //od lewej do prawej Console.ReadKey(); } } } |
Priorytety operatorów:
O priorytetach operatorów w C# mówiliśmy już w poprzednich wpisach (np. tu). Poniżej zaś przykład prezentujący działanie z tym samym priorytetem operatorów (* oraz /) w którym zastosowana została zasada łączności od lewej do prawej.
Przykład 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; namespace kolejnosc_wykonywania_dzialan { class Program { static void Main(string[] args) { int a, b, c = 1; a = b = c; Console.WriteLine("a={0}", a); Console.WriteLine("sum={0}", a + b + c); Console.WriteLine(6 / 2 * (2 + 1)); Console.ReadKey(); } } } |
Na przykładzie powyższego kodu oraz jak wiemy z doświadczenia, nawiasy pozwalają nam niekiedy wymusić czy też zmienić kolejność wykonywania działań jaka wynikałaby z priorytetów operatorów.
Nawiasów jednak również używamy by zwiększyć czytelność zapisanego kodu, np. stosując poniższy zapis:
1 |
Console.WriteLine((a++) + 2 * (++b)); |
2. Kolejność wykonywania działań w C# – Zadanie podsumowujące
Podsumujmy to czego nauczyliśmy się dotychczas – zarówno w tym wpisie jak i poprzednich.
Napiszmy program w którym istotna będzie kolejność wykonywania działań, umieśćmy zmienne typu liczbowego oraz zmienną logiczną oraz zawżyjmy w nim działania logiczne i arytmetyczne.
Program ma prosić użytkownika o podanie jego wagi w kilogramach oraz wzrostu w metrach na podstawie czego obliczy wskaźnik masy ciała (tzw. BMI) oraz poda wagę “idealną” dla podanych parametrów wg. wzoru Lorentz-a.
Zanim jednak przejdziemy do napisania kodu proponuję zebrać niezbędne dane tj. wzór na obliczenie wskaźnika BMI oraz zakres norm dla mężczyzn i kobiet wg. wskaźnika BMI, a także zapoznanie się ze wzorami Lorentz-a.
Jeśli mamy niezbędne informację i sprawnie przebrnęliśmy przez napisanie naszego programu, zapewne wygląda on podobnie do tego poniżej.
Zadanie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; namespace zadanie { class Program { static void Main(string[] args) { bool czyWagaNorma; double waga, wzrost, wskaznikBMI; //wczytajmy dane nt. użytkownika Console.Write("Podaj wagę swojego ciała w kilogramach:"); waga = double.Parse(Console.ReadLine()); Console.Write("Podaj swój wzrost w metrach:"); wzrost = double.Parse(Console.ReadLine()); //obliczmy BMI dla użytkownika wskaznikBMI = waga / Math.Pow(wzrost, 2.0); czyWagaNorma = wskaznikBMI >= 18.5 && wskaznikBMI < 25; Console.WriteLine("BMI = {0,6:F2}", wskaznikBMI); Console.WriteLine("Czy Twoja waga jest w normie = {0}", czyWagaNorma); //obliczmy wagę idealną wg. Lorentz-a double wskLorentzaKobieta = wzrost * 100 - 100 - (wzrost * 100 - 150) / 2; double wskLorentzaMezczyzna = wzrost * 100 - 100 - (wzrost * 100 - 150) / 4; Console.WriteLine("Waga wg. Lorentza dla kobiet = {0,6:F2}", wskLorentzaKobieta); Console.WriteLine("Waga wg. Lorentza dla mężczyzn = {0,6:F2}", wskLorentzaMezczyzna); Console.ReadKey(); } } } |
Powyższy kod jest dobrym przykładem na podsumowanie niektórych z dotychczas omówionych zagadnień; jednak na jego przykładzie możemy się zastanowić nad tym… czy nie o wiele lepiej zabrzmiał by komunikat mówiący (po spełnieniu określonych wymagań), że: “Twoja waga jest w normie”? Niewątpliwie tak.
Aby tak się więc stało:
1. musimy zrzucić parę kilogramów
2. poznać instrukcje warunkowe
Drugim punktem zajmiemy się już w kolejnym wpisie. Do tego czasu zaś możemy popracować na pierwszym 🙂