Kliknij

niedziela, 12 stycznia 2014

Instrukcje w praktyce - idziemy na marchewkowe pole.

Pora napisać jakiś poważniejszy programik. Program to zbiór instrukcji, których jest kilka rodzajów. Instrukcja deklaracji tworzy zmienną, przypisania nadaje jej wartość. Prawda, że proste? No to przykład.

#include <iostream>

int main()

{
  using namespace std;
  int marchewki; //deklarujemy zmienną typu integer 
//nazwie marchewki
  marchewki = 25; //zmiennej marchewki przypisujemy 
//wartość 25
  cout<<"Mam ";
  cout<<marchewki; //pokazujemy wartość zmiennej
  cout<<" marchewek.";
  cout<<endl;
  marchewki = marchewki - 1; //modyfikacja zmiennej
  cout<<"Chrum, chrum. Dobre. Teraz mam "<<marchewki;
  cout<<" marchewki."<<endl;

  return 0;
}

W MS Visual Studio wygląda to tak:


Program nie tylko trochę nam podpowiada gdy piszemy, ale też sam koloruje kod. Po skompilowaniu (F5) Otrzymujemy taki wynik:


Proste, łatwe i przyjemne. Puste wiersze pomagają zachować czytelność kodu. Tak samo wcięcia wewnątrz nawiasów funkcji. Warto o tym pamiętać (przyda się zwłaszcza w pętlach).

Aktualizacja!

Aby okno nie śmigło nam przed oczami jak szalone dodajemy przed returnem instrukcję:

cin.get();



Dziękuję za zwrócenie uwagi.

Deklaracja zmiennej.


int marchewki;

Deklaracja pozwala zarezerwować w pamięci odpowiednią ilość miejsca. Zarezerwowane miejsce zostaje też odpowiednio nazwane. marchewki to nazwa i zarazem zmienna w naszym programie. Deklaracji można dokonać w dowolnym miejscu programu, ale przed pierwszym użyciem zmiennej!

Przypisanie.


marchewki = 25;

Pewne miejsce w pamięci zyskuje prze nie wartość. Znak =, to operator przypisania. Ma on jedną dość ciekawą cechę - może być użyty wielokrotnie w jednej instrukcji, np.:

marchewki = kapusta = jabłka = 25;

Druga instrukcja przypisania pokazuje jak zmienić wartość zmiennej.

marchewki = marchewki - 1;

Po prawej stronie mamy wyrażenie arytmetyczne. Zasada jest taka, że najpierw obliczane jest wyrażenie (stara wartość marchewki) a dopiero potem wykonywane jest przypisanie (od tego momentu zmiana wartości marchewki na nową wartość).

Na koniec, jak pewnie łatwo zauważyć przy instrukcji cout, kilka słów o wyświetlaniu zmiennej. Wykona to dla nas komenda:

cout<<marchewki;

Po pierwsze cout zamienia nam tutaj marchewki na wartość, a po drugie, wartość ta zamieniana jest na odpowiednie znaki (w celu wyświetlenia).



9 komentarzy:

  1. No raczej ten wynik się nie wyświetli wciskając klawisz "F5" tylko jak się z konsoli wpisze to tak. Żeby kod się wyświetlił po naciśnięciu klawisza "F5" polecam przeczytać o poleceniu system("pause"); który jest nierozłączne z VS ;) Tyle odemnie Pozdrawiam

    OdpowiedzUsuń
  2. Racja, racja. Ekran mignie i zniknie. Aby go zatrzymać wystarczy dodać przed returnem cin.get();
    Ale trudno dodawać cin, gdy nie chce się wyjaśniać za dużo - a ja miałem inny plan.

    OdpowiedzUsuń
  3. Drogi Panie Cybershocik Firfas polecenie system("PAUSE"); nie jest dorym poleceniem do zatrzymania(zapauzowania) okna konsoli w C++. Zanim się komuś radzi poczytać to lepiej poczytać samemu. Polecenie system jest częscią biblioteki cstdlib.h i jest częścią standartu ANSI C. Służy ono do wywoywania poleceń systemowych np z powodzeniem można w linuksie wywołać: system("sudo apt-cache search jre") lub w windowsie system("dir"). Argument: PAUSE jest typowym poleceniem w powłoce Windowsa a nie C++. Wydając polecenie system(....) defacto tracimy kontrole nad własnym programem na kożyść OS. Dlatego dużo lepsym wyjściem jest stosowanie tego co znalazło się w przykładzie(!!!!) czyli cin.get. Takie jest moje zdanie.

    OdpowiedzUsuń
  4. system("Pause") może też przypadkiem niezadziałać, a na pewno wyświetli komunikat systemowy. Nie zawsze jest to pożądane.
    Sprawdzi się też łopatologiczne:
    int a;
    cin>>a;
    Zawsze zadziała :D

    OdpowiedzUsuń
  5. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  6. Ok zgadzam się z Panem ale zważywszy na fakt iż jest to Visual Studio to jest on specyficzny pod względem pisowni (tzwn chodzi mi np o tworzenie tablicy z funkcji gdyż narzuca on tylko jeden sposób alokowania pamięci dla tablicy poprzez (double *temp = new double[n];) bo sposob (double temp[n]) nie przechodzi) oraz jest on wytworem Microsoft (co samo za siebie mówi) zalecają pisać na każdej konferencji jakiej byłem tak pokazywali i mówili że to jest poprawne oraz tak sie powinno stopować w VS. Ale teraz patrzeć na to z drugiej strony tzwn z uruchomienia na innym kompilatorze i programie jest duże prawdopodobieństwo że kod może się nie skompilować lub działać niepoprawnie, sam miałem z tym do czynienia. A chciałem poprawić Pana Dworaka gdyż dużo ludzi pyta dlaczego im konsola "mrugnęła", jaki jest na to sposób oraz czy jest to konieczne skoro zwracamy (return 0; ) który jest akceptowalny przez większość kompilatorów języka c czy c++. Takie jest moje zdanie poprostu i z tego co wyciągnąłem z konferencji Microsoftu na różne tematy ;)

    Poprawiłem wpis bo coś poucinało mi tzwn polecenie nie wiem czemu ;(

    OdpowiedzUsuń
  7. Ustalmy, że uwaga o mignięciu słuszna - dziękuję bardzo. Zwracamy returnem, ale gdybyśmy go tam nie postawili, to zgodnie ze standardem C++, program zachowuje się tak, jakby return 0; było na końcu. Niejawna instrukcja powrotu jest dodawana tylko do funkcji main(). Return zamknie okno i żeby je zatrzymać dodajemy cin.get(); - ze wszystkich możliwości ta jest najlepsza.

    OdpowiedzUsuń
  8. No trudno się z tym nie zgodzić... a tak po za tym jeszcze jedno pytanie bo nie wiem czy się udało to Panu zrobić czy obciął Pan po prostu kod tzwn na początku trzeba mu dowiązać #include "stdafx.h" i się raz zastanawiałem czy udaje się to ominąć? To jest kolejny minus VS...

    OdpowiedzUsuń
  9. Skasowałem #include "stdafx.h ale wtedy się pluje. Mimo to program działa. Oczywiście z tym też zadziała, ale chodzi o to, żeby można to było w byle czym napisać a nie tylko w VS. No ja akurat trzymam się tego kompilatora bo mam swoje powody.
    PS
    Opcja "nie pokazuj ponownie" to jedna z lepszych w Windows :D

    OdpowiedzUsuń

Kliknij