Zmienne, funkcje, wczytywanie danych

Zmienne

W programie zazwyczaj istnieją zmienne różnych typów - liczbowe, łańcuchy, logiczne i inne. Jeżeli chcemy używać jakiejś zmiennej to musimy ją zadeklarować podając jej typ. Oto przykład:
#include<iostream>
#include<string>
using namespace std;
int main()
	{
	string imie = "Zbylut";
	double waga = 113.4;
	cout << "Witaj " << imie << ", ja być program c++" << endl;
	cout << "Gdyby ktoś się pytał to ważysz " << waga << "kg" << endl;
	}
Na początku funkcji main zadeklarowaliśmy dwie zmienne - imie i waga. Pierwsza "typu" string, druga typu double oraz przypisaliśmy im domyślne wartości (nie jest to wymagane). Wartości zmiennych wyświetlamy wysyłając je do cout wpisując << nazwa_zmiennej - bez cudzysłowów. Program ten wyświetli:
Witaj Zbylut, ja być program c++
Gdyby ktoś się pytał to ważysz 113.4kg
. Typy danych opisane są nieco dalej a zanim do nich przejdziemy musimy omówić jeszcze kilka zagadnień...

Wprowadzanie danych z konsoli

#include<iostream>
#include<string>
using namespace std;
int main()
	{
	string imie;
	double waga;
	cout << "Podaj imię i wagę: ";
	cin >> imie >> waga;
	cout << "Witaj " << imie << ", ja być program c++" << endl;
	cout << "Gdyby ktoś się pytał to ważysz " << waga << "kg" << endl;
	}
Jest to przykład podobny nieco do pierwszego lecz w tym przypadku wartości zmiennych wpisujemy na rządanie programu. Definiujemy 2 zmienne, bez przypisania wartości domyślnej a następnie wyświetlamy tekst Podaj imię i wagę: Po jego wyświetleniu program będzie czekał aż użytkownik wprowadzi dane oddzielone spacją, np.: "Jurek 100" i wciśnie enter co spowoduje dalsze wykonanie programu, który wyświetli wprowadzone dane. cin czyli "Console Input" pobiera dane z konsoli (>> od cin do zmiennych) i przypisuje je zmiennym.

Funkcje

#include<iostream>
using namespace std;

double liniowa(double a, double b, double x)
	{
	return a*x+b;
	}

int main(void)
	{
	double c = 2, z = 2, wynik;
	wynik = liniowa(c,5,z);
	cout << "Wynik funkcji: " << wynik << endl;
	return 0;
	}
W tym przykładzie zdefiniowaliśmy nową funkcję o nazwie liniowa przyjmującą 3 argumenty typu double - liczby. Funkcja ta zwraca liczbę (funkcja double) a dokładniej wartość funkcji liniowej ax+b znanej każdemu z lekcji matematyki. W funkcji main zdefiniowaliśmy dwie z pośród trzech zmiennych dla funkcji oraz zmienną wynik na wynik zwrócony przez naszą funkcję. Do zmiennej wynik przypisujemy wartość zwróconą przez funkcję liniowa o parametrach c, 5, z - jak widać argument może być podany jako zmienna lub bezpośrednia wartość (5).

Argumenty wywołania

#include<iostream>
using namespace std;
int main(int argc, char **argv)
	{
	cout << "Nazwa programu: " << argv[0] << endl
	<< "Ilość argumentów: " << argc << endl;
	
	for(int i = 1; i < argc; i++)
		{
		cout << "Argument nr. " << i << " to: " << argv[i] << endl;
		}
	return 0;
	}
Zazwyczaj do programu przekazujemy jakieś dane. By funkcja main je odbierała musi być zdefiniowana z nagłówkiem:
int main(int argc, char **argv)
int main(int argc, char **argv[])
Oba zapisy są jednoznaczne. Zmienna argc zawiera ilość argumentów a argv jest tablicą - listą parametrów, z czym że pierwszy element posiadający indeks/numer 0 (zero) jest nazwą skryptu. Tak więc argv[0] to "nazwa" aplikacji, argc ilość parametrów, a argv[n] to n-ty parametr. W powyższym przykładzie stosujemy pętlę for wyświetlającą wszystkie elementy tablicy (bardzo podobne do PHP, czyż nie?). Tablice w C++ "nie wiedzą" ile mają argumentów, dlatego ich ilość musi być przekazana oddzielnie. Jeżeli naszą aplikację wywołamy z parametrami ./program bla bla bla --with=windows to dostaniemy:
Nazwa programu: ./a
Ilość argumentów: 5
Argument nr. 1 to: bla
Argument nr. 2 to: bla
Argument nr. 3 to: bla
Argument nr. 4 to: --with=windows


Dyrektywy preprocesora

Preprocesor to program, który przetwarza kod przed przesłaniem go do kompilatora. Odpowiada on m.in. za np. zastąpnie #include kodem tejże biblioteki ("wkleja" ją). Oprócz tego możemy z preprocesorem trochę pogadać, wszystkie instrukcję dla preprocesora noszą nazwę dyrektyw i zaczynają się od znaku #:
#include
#include "plik"
Pierwsza linia jest już nam znana - wstawia zawartość podanej biblioteki, z tym że dotyczy bibliotek z katalogu systemowego (biblioteki kompilatora itd.) druga wstawi plik, tyle że z bierzącego katalogu (brak ostrych nawiasów).
#define nazwa wartość
#define nazwa
#undefine nazwa
Pierwsza linijka - wszystkie wystąpienia frazy "nazwa" (leksemu) zostaną zastąpione podaną wartością.:
#define dim 256
int k = dim;
int dim2 = 1;
Da:
int k = 256;
int dim2 = 1;
Frazy zawierające w sobie zdefiniowaną nazwę nie będą zamienione :) #undefine usuwa zdefiniowaną dyrektywę.
#define int double
int funkcja(int k, int m)
	{
	//cośtam
	}
#undefine int
Dla danej funkcji "int" zostanie zastępiony przez "double" czyli funkcja będzie "pracowała" na zmiennych typu double a nie int. #undefine przywraca normalne znaczenie int dla dalszego kodu.

defined, !defined - zwrócą wartość prawda jeżeli nazwa jest zadeklarowana (lub gdy nie jest zadeklarowana dla !defined) lub wartość fałsz w przeciwnym wypadku. Dyrektywy te wykorzystuje się wraz z wyrażeniami warunkowymi:
#define dimen
// coś

#if defined dimem
	// użyj tego kod jeżeli dimen jest zdefiniowany
#else
	// jeżeli nie to tego
#endif
Oprócz tego mamy jeszcze #elif (else if), #ifdef ("skrót" od #if defined), #ifndef (#if !defined). Przydać się to może np. do kontroli używanego kompilatora. Kompilator C++ definiuje nazwę __cplusplus a C __STDC__.
RkBlog

C/C++ i Java, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact