Zamknij komunikat

Nowy Office 2013
Do góry Skomentuj

12. Inne operatory logiczne

12. Inne operatory logiczne

Daniel Celeda
14 marca 2006
95 149
Odsłony
Daniel Celeda
14 marca 2006
95 149
Odsłony

Oprócz operatora „==” w C# istnieją inne operatory porównujące wartości. Tak jak w matematyce mamy operatory większości/mniejszości:
„<” mniejsze niż,
„>” większe niż,
„<=” mniejsze lub równe,
„>=” większe lub równe,
oraz „!=” nie równe (operator odwrotny do „==” ).

Poniżej przykładowy program z wykorzystaniem kilku operatorów.

class KlasaGlowna
{
      static void Main()
      {
            int x = 1;
            if(x > 1)
            {
                  System.Console.WriteLine("x jest większe niż 1");
            }
            if(x < 1)
            {
                  System.Console.WriteLine("x jest mniejsze niż 1");
            }
            if(x != 2)
            {
                  System.Console.WriteLine("x nie jest równe 2");
            }
            System.Console.Read();
      }
}

 Operator “!” służy do zaprzeczania, czyli jeśli jakieś wyrażenie jest prawdziwe, to umieszczenie przed nim operatora „!” zmienia jego wartość na  przeciwną.

Prosty przykład:

class KlasaGlowna
{
      static void Main()
      {
            int x = 1;

            if(!(x == 1))
            {
                  System.Console.WriteLine("x jest różne od 1");
            }
            else
            {
                  System.Console.WriteLine("x jest równe 1");
           
}
            System.Console.Read();
      }
}

Instrukcja „if ... else if ...”

Ta wersja instrukcji warunkowej pozwala nam na uniknięcie zagnieżdżonych instrukcji warunkowych. Przykładowo jeśli byśmy chcieli sprawdzić czy liczba jest większa od 0 i mniejsza od 10 oraz czy jest podzielna przez 2, to moglibyśmy użyć instrukcji zagnieżdżonych.

class KlasaGlowna
{
      static void Main()
      {
            double x;
            System.Console.WriteLine("Podaj liczbę.");
            x = double.Parse(System.Console.ReadLine());
 
           
if(x > 0)
            {
                  if(x < 10)
                  {
                        if(x % 2 == 0)
                        {
                             System.Console.WriteLine("x jest w przedziale od 0 do 10 i jest podzielne przez 2");
                        }
                        else
                        {
                             System.Console.WriteLine("x jest w przedziale od 0 do 10 ale nie jest podzielne przez 2");
                        }
                  }
                  else
                  {
                        if(x % 2 == 0)
                        {
                             System.Console.WriteLine("x jest równe lub większe 10 oraz jest podzielne przez 2");
                        }
                        else
                        {
                             System.Console.WriteLine("x jest równe lub większe 10 ale nie jest podzielne przez 2");
                        }
                  }
            }
            else
            {
                  if(x % 2 == 0)
                  {
                        System.Console.WriteLine("x jest równe lub mniejsze od 0 i jest podzielne przez 2");                  }
                  }
                  else
                  {
                        System.Console.WriteLine("x jest równe lub mniejsze od 0 ale nie jest podzielne przez 2");
                  }
            }
            System.Console.Read();
      }

Zamiast zagnieżdżonych instrukcji warunkowych można użyć instrukcji „if ... else if...”.

class KlasaGlowna
{
      static void Main()
      {
            double x;
            System.Console.WriteLine("Podaj liczbę.");
            x = double.Parse(System.Console.ReadLine());

           
if(x <= 0)
            {
                  if(x % 2 == 0)
                  {
                        System.Console.WriteLine("x jest równe lub mniejsze od 0 i jest podzielne przez 2");
                  }
                  else
                  {
                        System.Console.WriteLine("x jest równe lub mniejsze od 0 ale nie jest podzielne przez 2");
                  }
            }
            else if(x >= 10)
            {           
                  if(x % 2 == 0)
                 
{
                        System.Console.WriteLine("x jest równe lub większe 10 oraz jest podzielne przez 2");
                  }
                  else
                  {
                        System.Console.WriteLine("x jest równe lub większe 10 ale nie jest podzielne przez 2");
                  }
            }
            else
            {              
                  if(x % 2 == 0)
                  {
                        System.Console.WriteLine("x jest w przedziale od 0 do 10 i jest podzielne przez 2");
                  }
                  else
                  {
                        System.Console.WriteLine("x jest w przedziale od 0 do 10 ale nie jest podzielne przez 2");
                  }    
            }
            System.Console.Read();
      }
}

Wynik wykonania obydwu programów jest taki sam.

Instrukcja switch

Inną instrukcją warunkową jest instrukcja „switch”. Za jej pomocą można sterować wykonaniem programu poprzez złożone instrukcje warunkowe. W uproszczeniu można powiedzieć, że najpierw definiujemy jakaś zmienną i przypisujemy jej wartość. Następnie w zależności jaka wartość znajduje się w zmiennej wykonujemy odpowiednie instrukcje.

Poniżej przykładowy program.

class KlasaGlowna
{
      static void Main()
      {
            string x;
            System.Console.WriteLine("Wybierz cyfrę: 1 lub 2.");
            x = System.Console.ReadLine();
 
            switch(x)
            {
                  case "1":
                        System.Console.WriteLine("Wybrałeś 1.");
                        break;
                  case "2":
                        System.Console.WriteLine("Wybrałeś 2.");
                       
break;
                  default:
                        System.Console.WriteLine("Nie wybrałeś ani 1 ani 2.");
                        break;
            }
            System.Console.Read();
      }
}

Najpierw deklarujemy zmienną “x”. Następnie program prosi o podanie liczby, która zostanie przypisana do zmiennej „x”. W dalszej kolejność określamy zmienną, którą bierzemy pod uwagę w naszej instrukcji warunkowej, poprzez umieszczenie jej w nawiasach po instrukcji „switch”. Po słówku „case” sprawdzamy co znajduje się w zmiennej i czy jest równe wartości znajdującej się po „case”. Jeśli tak to wykonywane są instrukcje znajdujące się bezpośrednio za tą instrukcją aż do słówka „break”, które przerywa naszą instrukcję warunkową. Instrukcje znajdujące się po „default” są wykonywane tylko wtedy jeśli żadne ze sprawdzeń po słówkach „case” nie było prawdziwe. Słówko „default” jest opcjonalne, czyli można go nie umieszczać w instrukcji „switch”.

Poniżej kilka różnych przypadków wykonania wcześniejszego programu.

Jeśli nie wybraliśmy ani 1 ani 2 wykonają się instrukcje znajdujące się po instrukcji „default”.

Zobacz również

Komentarze

ja tam nie widze wiekszej różnicy między tym tutaj a programem stronę wcześniej. swoją drogą ten C# jest jak dotąd niemalże identyczny z javą. jednakże sposób przekazu informacji i zawarta wiedza jest dośc przejrzysta i myśle łatwo przyswajalna
elektr0n, 2 listopada 2007, 13:41
zgadzam jest bardzo przejrzysta, duzo prostsza niz w SC Perry c# i.net ;)
marta, 9 listopada 2007, 20:52
W jedenastej linni niepotrzebnie istnieje " } ", ale kursik OK 

sven84, 8 grudnia 2008, 18:29
Czy konstrukcja "if... else if" jest rzeczywiscie oddzielna konstrukcja w C#? Bo np. ADA95 ma konstrukcje "if... elif" i to rzeczywiscie co innego niz zrobienie "if... else if". Natomiast wydaje mi sie, ze w C# jest tak, jak w Javie. "if... else if" nie jest oddzielna instrukcja warunkowa, a jedynie przejrzystszym sposobem rozwiazania pewnych problemow. Bo mozna napisac "if (w) {...} else {if (b) {...} else {if(k) {...} }}", a mozna pominac nawiasy klamrowe, kolejne "if" sa zagniezdzone, (tutaj autor artykulu by sie mylil), jednak kod wyglada tak, jakby te "if" zagniezdzone nie byly - zwieksza sie przejrzystosc kodu w niektorych wypadkach. Ale nie czytalem zadnej madrej ksiazki o C# (takiej, jaka dla C++ jest Symfonia C++ albo dla Javy Thinking in Java), wiec nie wiem, moze rzeczywiscie Microsoft uznal if... else if za oddzielna instrukcje warunkowa i na przyklad nie ma w niej zagniezdzania... Moze ktos mnie poprawic :)

sekla, 1 lutego 2009, 22:48
czy mozna wiedziec, dlaczego drugi komentarz, jaki chcialem dodac, nie moze zostac dodany? Strona nie wyswietla mi zadnego komunikatu, po prostu po kazdym kliknieciu Dodaj komentarz, moj tekst nadal znajduje sie w polu na komunikat i komentarz nie jest dodawany... Napisalem bardzo dlugi komentarz wyjasniajacy troche instrukcje switch, ale nie moge go dodac... Czy istnieje jakis limit na dlugosc komentarza? warto byloby informowac o tym uzytkownika...

sekla, 1 lutego 2009, 23:06
Co do instrukcji switch, to autor zapomnial o kilku waznych rzeczach. Mimo, ze to kurs dla poczatkujacych, to sadze, ze sa istotne dla zrozumienia tematu. Po pierwsze: po co mamy slowko "break"? W Javie i C++ (i pewnie w innych jezykach tez) ponizsza instrukcja "switch":&lt;br />&lt;br />switch(w){&lt;br />  case "1": System.Console.WriteLine("Wybrałeś 1.");&lt;br />  case "2": System.Console.WriteLine("Wybrałeś 2.");&lt;br />  default: System.Console.WriteLine("Wybrałeś co innego."); &lt;br />}&lt;br />&lt;br />zadziala tak, ze jesli w = "1", to wypisane zostanie: &lt;br />Wybrales 1.Wybrales 2.Wybrales co innego. &lt;br />Znaki nowego wiersza pozwolilem sobie pominac, zeby nie powiekszac dlugosci mojego komentarza ;). Jesli w = "2", to wypisane zostanie:&lt;br />Wybrales 2.Wybrales co innego.&lt;br />Jesli "w" bedzie inne niz 1 i 2, to wypisane zostanie to, co w default. Teraz juz chyba widac, po co na koncu kazdego "case" jest instrukcja "break". Nakazuje ona zakonczyc przetwarzanie instrukcji "switch" po wykonaniu danego "case", bo inaczej wykonywane beda wszystkie instrukcje od "case" spelniajacego warunek, (np. "case 2" dla w=2) az do konca bloku "switch" albo do pierwszego napotkanego "break".

sekla, 1 lutego 2009, 23:07
Po "default" nie daje sie juz "break", bo jest zbedne, default powinien byc zawsze umieszczany na koncu bloku "switch". Dzieki temu, ze "switch" jest wykonywany od odpowiedniego "case" az do break, mozna robic fajne rzeczy, np.:&lt;br />switch (w){&lt;br />  case "1":&lt;br />  case "2": System.Console.WriteLine("Wybrałeś 1 lub 2.");&lt;br />  break;&lt;br />  default: System.Console.WriteLine("Wybrałeś co innego.");&lt;br />}&lt;br />&lt;br />Tak sytuacja ma sie w Javie i C++. Poniewaz "switch" w C# z wygladu niczym sie nie rozni od tej instrukcji w Javie i C++, to wnioskuje, ze "switch" w C# zachowuje sie tak samo, jak opisalem.&lt;br />&lt;br />Po drugie: autor nie wspomina, jakie typy danych przyjmuje "switch". W Javie jest to tylko int i char (wybaczcie, mozliwe, ze int i String, chociaz watpie, ale moglo mi sie zapomniec ;)). W C++ o ile dobrze pamietam (a moge zle pamietac), to dowolny typ prosty. Jakie typy danych przyjmuje "switch" w C#? Chodzi mi o to, jakiego typu moze byc "w" w instrukcji "switch(w)"?

sekla, 1 lutego 2009, 23:08
Bardzo trudno było mi znaleźć coś co pomogłoby mi w nauce C#. Czułam się trochę zdesperowana bo kolokwium i egzamin zbliżają się wielkimi krokami ;) Dlatego chciałabym bardzo podziękować za ten kurs, za czas jaki autor włożył w jego napisanie. Skrupulatnie przerabiam wszystkie części po kolei i dotarłam do tej. Do tego momentu cały czas wszystko jest jasne i przejrzyste. Jak na mój zerowy poziom przy rozpoczęciu zrobiłam duży postęp :) Po stokroć dzięki!
Alicja, 31 grudnia 2011, 14:05
wytaj mam pytanie, czy w c# trzeba caly czas zadeklarowac zmienna jako typ string a pozniej przekawetowac czy ne konieczne, bo jak zauwazylem w kazdym przykladem tak sie robi na prawie wszystkie przypadki a jak sprobowalem inaczej robic to blad mi skakywal. dzieki za Pomoc!! Pozdrawiam.
Miguel , 24 lipca 2012, 17:35

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.