W ostatnim poście kazałem wam napisać program, który wykona te same działania, co nasz główny program, z wyjątkiem reszty z dzielenia, z tą różnicą, że jako wartości zmiennych użyjemy liczb 2.5 i 4.2.
Oto on:
#include <iostream>
#include <cstdlib>
using namespace std;
main(void)
{
double a,b;
a = 2.5;
b = 4.2;
cout << "a=" << a << " b=" << b << endl;
cout << "a+b=" << a+b << endl;
cout << "a-b=" << a-b << endl;
cout << "a*b=" << a*b << endl;
cout << "a/b=" << a/b << endl;
a++;
cout << "a++=" << a << endl;
b--;
cout << "b--=" << b << endl;
system("pause");
return 0;
}
14 czerwca 2012
Działania arytmetyczne
W C++ istnieje, jak w każdym innym języku programowania, możliwość wykonywania działań arytmetycznych na zmiennych i liczbach. Oto i one:
Symbole stosowane w języku C++ | |
+ | Dodawanie |
- | Odejmowanie |
* | Mnożenie |
/ | Dzielenie |
++ | Inkrementacja (zwiększenie wartości zmiennej o 1) |
-- | Dekrementacja (zmniejszenie wartości zmiennej o 1) |
% | Dzielenie modulo (podaje resztę z dzielenia liczby przez liczbę, działa tylko na liczbach całkowitych) |
= | Przypisanie (lewa strona przyjmuje wartość prawej) |
Każdy kto zna podstawy matematyki, nie powinien mieć problemów ze zrozumieniem tego materiału, ale rzeczy, które mogą sprawić kłopot postaram się wytłumaczyć przy użyciu małych programików.
#include <iostream>
#include <cstdlib>
using namespace std;
main(void)
{
int a;
a=5;
int b=2;
cout<<"5 / 2="<<a/b;
system("pause");
return 0;
}
Jak widać zastosowane w tym przykładzie dzielenie bez reszty, zachowuje się nieco dziwnie (5/2=2?!). Najprościej wytłumaczyć to tym, że liczby typu całkowitego nie mogą przechowywać ułamków i przechowują tylko ich część całkowitą(w tym przypadku 2), ale gdyby dzielić dwie liczby rzeczywiste to wynik byłby normalnym ułamkiem,(np. jeżeli a i b zdefiniujemy jako float, a=5 b=2 to a/b=2.5).
#include <iostream>
#include <cstdlib>
using namespace std;
main(void)
{
int b=2;
b++;
cout<<"b="<<b<<"\n";
cout<<"5 podzielic na 3="<<5/b<<endl;
cout<<"5 modulo 3="<<5%b;
system("pause");
return 0;
}
main(void)
{
int b=2;
b++;
cout<<"b="<<b<<"\n";
cout<<"5 podzielic na 3="<<5/b<<endl;
cout<<"5 modulo 3="<<5%b;
system("pause");
return 0;
}
Bardzo przydatną rzeczą są natomiast operatory: inkrementacji (zastosowany w powyższym przykładzie b++) i dekrementacji, będące odpowiednikami zwiększenia i zmniejszenia o 1 (b++ to odpowiednik b=b+1). Inkrementacja oznacza, że zmienna przyjmuje wartość równą poprzedniej swej wartości powiększonej o 1. Analogicznie jest z dekrementacją(b=b-1). Wykorzystuje się je tam, gdzie często następuję zmiana o 1 wartości zmiennej. Ciekawostką jest możliwość wykorzystania inkrementacji przed i po nazwie zmiennej. Powoduje to dwa różne efekty:
int x=5;
cout<<x++;//wyświetli 5 i zwiększy wartość zmiennej
x=5;
cout<<++x;//zwiększy wartość zmiennej i wyświetli 6
Kolejnym dziwactwem (na pierwszy rzut oka) jest operator reszty z dzielenia % (8%3=2), który w wyniku daje całkowitą liczbę stanowiącą resztę z dzielenia tych liczb przez siebie(8/3=2*3 i 2 reszty).
A teraz duży przykład, będący ilustracją dla całego rozdziału.
Kod:
#include <iostream>
#include <cstdlib>
#include <cstdlib>
using namespace std;
main(void)
{
int a,b;
a=8;//a przyjmuje wartość 8
b=3;
cout << "a=” << a <<” b=” << b << endl;
cout << "a+b=” << a+b << endl;
cout << "a-b=” << a-b << endl;
cout << "a*b=” << a*b << endl;
cout << "a/b=” << a/b << endl;//dzielenie całkowite bez reszty
cout << "a modulo b=” << a%b << endl;//reszta z dzielenia(modulo)
a++;
cout << „a++=” << a << endl;
b--;
cout << „b--=” << b << endl;
system("pause");
return 0;
}
main(void)
{
int a,b;
a=8;//a przyjmuje wartość 8
b=3;
cout << "a=” << a <<” b=” << b << endl;
cout << "a+b=” << a+b << endl;
cout << "a-b=” << a-b << endl;
cout << "a*b=” << a*b << endl;
cout << "a/b=” << a/b << endl;//dzielenie całkowite bez reszty
cout << "a modulo b=” << a%b << endl;//reszta z dzielenia(modulo)
a++;
cout << „a++=” << a << endl;
b--;
cout << „b--=” << b << endl;
system("pause");
return 0;
}
Wynik:
a = 8 b = 3
a+b = 11
a-b = 5
a*b = 24
a/b = 2
a modulo b = 2
a++ = 9
b-- = 2
Należy pamiętać, o kolejności działań matematycznych i możliwości wykorzystania nawiasów do wpływania na ich kolejność.
Zadanie:
Napisz program, który wykona te same działania, co nasz główny program, z wyjątkiem reszty z dzielenia, z tą różnicą, że jako wartości zmiennych użyjemy liczb 2.5 i 4.2.
5 czerwca 2012
ROZWIĄZANIE
W ostatnim poście kazałem wam napisać program, w którym zadeklarujesz po jednej zmiennej typu int, float i char o dowolnej nazwie, a następnie przypiszesz im wartości odpowiednio char = "T", int = "42 i float = "0.25.Wyświetl je na ekranie.
Oto rozwiązanie:
#inclued <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
char tekst = 'T';
int liczba = 42;
float liczba2 = 0.25;
cout << "tekst: " << tekst << ' ' << "liczba całkowita: " << liczba << ' ' << "liczba zmienno przecinkowa: " << liczba2 << endl;
system("PAUSE");
return 0;
}
Oto rozwiązanie:
#inclued <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
char tekst = 'T';
int liczba = 42;
float liczba2 = 0.25;
cout << "tekst: " << tekst << ' ' << "liczba całkowita: " << liczba << ' ' << "liczba zmienno przecinkowa: " << liczba2 << endl;
system("PAUSE");
return 0;
}
6 grudnia 2011
Zmienne
Zmienna jest to symbol zaznaczony w programie, pod którym kryje się miejsce w pamięci gdzie możemy przechowywać dane określonego typu. A co to znaczy „po polsku”? Otóż zmienna przypomina skrytkę, w której możemy umieścić dane, odczytać ich wartość i zmienić ją (dlatego jest to zmienna).
Istnieje podział zmiennych ze względu na typ przechowywanych danych, który dobiera się zależnie od potrzeb. Najbardziej dla nas przydatne to:| Nazwa typu | Rodzaj zmiennej | Co przechowuje |
| char | typ znakowy | Przechowuje pojedynczy znak np.’a’,’1’,’!’ (musi być w pojedynczych cudzysłowach) lub liczbę całkowitą z zakresu -128 ÷127) |
| int | Liczba całkowita | Przechowuje liczby całkowite z zakresu -32768 ÷ 32767 np. 2003, -342, 37 |
| float | Liczba zmiennoprzecinkowa (rzeczywista | Przechowuje liczby rzeczywiste z zakresu 1,2E-38 ÷ 3,4E+38 z dokładnością 7 miejsc po przecinku np. 123.4, -34.6 |
Dodatkowo każdy typ możemy rozszerzyć korzystając z przedrostków unsigned (ang. bez znaku), które mogą zawierać tylko liczby dodatnie, ale za to o 2 razy większej wartości np. unsigned char może przechowywać wartości od 0 do 255.
Aby mieć łatwy dostęp do zmiennych stworzono ich kolejną cechę – nazwę. Może się ona składać się z małych i wielkich liter alfabetu angielskiego, liczb i znaku _ , czyli symbolu podkreślenia, potocznie nazwanego podkreślnikiem. Należy pamiętać, że w C++ istotna jest wielkość liter np. „Liczba” i „liczba” to nazwy dwóch różnych zmiennych.
Aby móc skorzystać ze zmiennych należy je zadeklarować tzn. określić ich typ i nazwę. Deklarację w C++ możemy umieścić w dowolnym miejscu programu, ale należy pamiętać, że nie można skorzystać ze zmiennej przed jej deklaracją. Zależnie jednak od tego gdzie umieścimy taką deklarację, otrzymamy zmienną globalną lub lokalną. Różnica między nimi polega na tym, że zmienna globalna jest dostępna z każdego miejsca programu, a zmienna lokalna jest dostępna tylko we fragmencie, w którym została zdeklarowana. Ponadto ze względu na sposób tworzenia, zmienne lokalne mogą zaraz po deklaracji zawierać przypadkowe wartości. Dlatego warto stosować inicjalizację zmiennej lokalnej. Polega to na przypisaniu zmiennej pewnej początkowej wartości już na etapie deklaracji. Oto przykładowa deklaracja zmiennej.
Kod:
#include <iostream>
#include <cstdlib>
int main(void)
{
int liczba; //deklaruje zmienną o nazwie liczba mogącą przechowywać dane typu int(liczby całkowite)
liczba=2;
float liczba2=4.3; //deklaruje zmienną o nazwie liczba2 mogącą przechowywać dane typu float(liczby rzeczywiste) i zainicjuje ją wartością 4.3
cout<<„liczba=”<<liczba<<”, liczba2=”<<liczba2;
system(„PAUSE”)
return 0;
}
}
W tym przykładzie oprócz deklaracji zmiennej liczba w linii piątej, przypisujemy jej w następnej linii wartość 2. Znak równości oznacza, że zmienna po lewej stronie tego znaku, przyjmuje wartość podaną po prawej stronie. Jest to tzw. przypisanie, które pozwala także na przypisanie jednej zmiennej wartość innej zmiennej, jeśli są tylko tego samego typu. Kolejną rzeczą wartą wytłumaczenia jest wykorzystanie zmiennej typu float. Jest to bardzo przydatny typ, ponieważ w przeciwieństwie do int może przechowywać liczby rzeczywiste, czyli w sumie każdą liczbę (ograniczoną ilością pamięci komputera przydzielonej dla zmiennej). Typ ten wykorzystywany jest przy obliczeniach matematycznych, o większej dokładności (dzielenie, pierwiastkowanie, działania na ułamkach dziesiętnych), należy jednak zapamiętać, że w programowaniu przecinek dziesiętny zastępuje kropka, ponieważ przecinek jest stosowany do oddzielania np. parametrów funkcji. Pozostaje jeszcze jedna nowość. Otóż jak widać na przykładzie można w jednej instrukcji cout wyświetlić więcej niż jedną zmienną (w tym przypadku liczba i liczba2), jednak za każdym razem trzeba przed zmienną wstawić symbol strumienia <<.
Często też w programach zdarza się nam, że musimy użyć liczby, której wartość jest niezmienna np. liczba Pi=3.14. W tym celu najlepiej wykorzystać stałą, czyli odmianę zmiennej, która nie zmienia swej wartości w trakcie trwania programu. Deklaracja stałej wygląda identycznie jak zmiennej i polega na dodaniu przedrostka const i natychmiastowej inicjalizacji określoną wartością. Wartości takiej stałej nie można zmieniać w żadnym momencie programu, dlatego jest to nasza jedyna szansa na ustalenie jej wartości.
const float pi=3.14;
Zadanie:
22 listopada 2011
Rozwiązanie
W poprzednim poście kazałem wam napisać program wyświetlający na ekranie tekst: \?"Witam tu twoj komputer!!!"?\ oraz miał być odtwarzany sygnał dźwiękowy.
Oto rozwiązanie:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(void)
{
cout << "\\\?" << "\"Witam tu twoj komputer!!!" << "\"\?\\" << "\a" << endl << endl;
system("PAUSE");
return 0;
}
Oto rozwiązanie:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(void)
{
cout << "\\\?" << "\"Witam tu twoj komputer!!!" << "\"\?\\" << "\a" << endl << endl;
system("PAUSE");
return 0;
}
15 listopada 2011
Program wyświetlający tekst
Nadszedł czas na program, który w końcu coś zrobi.Weźmy poprzedni program i wstawmy na początku i między linie drugą i trzecią, nowe linie kodu:
#include <iostream>
using namespace std;
int main(void)
{
cout<<„To ja twoj komputer. Mowie do Ciebie.”;
int main(void)
{
cout<<„To ja twoj komputer. Mowie do Ciebie.”;
system(”PAUSE”);
return 0;
}
return 0;
}
Otrzymany program , który wyświetla na ekranie napis:
To ja twoj komputer. Mowie do Ciebie.
Najpierw opiszę pierwszą linię kodu. Słowo #include mówi kompilatorowi jaką bibliotekę ma dołączyć do programu, jest to tzw. dyrektywa preprocesora.
Dyrektywa preprocesora to specjalne instrukcje, które nie są wykonywane przez komputer, ale stanowią informacje o sposobie postępowania dla preprocesora, czyli specjalnego programu uruchamianego przed kompilatorem. Działanie tego programu polega na przygotowaniu kodu programu tak, aby zawierał on wszystko, co potrzebne kompilatorowi (dołącza pliki informujące o bibliotekach, zamienia pewne słowa na inne itp.).
Biblioteka to zbiór zawierający wiedzę dla komputera, czyli instrukcje pozwalające komputerowi wykonywać zadania z określonego działu problemów. Tak naprawdę kompilator po prostu przepisuje zawartość całego pliku biblioteki do kodu programu. Nazwa biblioteki może być ujęta w „ostre” nawiasy <nazwa> lub cudzysłowy „nazwa” i zawiera nazwę pliku zawierającego bibliotekę. Różnica między tymi dwoma sposobami zapisu polega na tym, że w przypadku zapisu <nazwa> kompilator szuka biblioteki tylko w katalogu standardowym, a w przypadku „nazwa” można podać ścieżkę dostępu do katalogu zawierającego ten plik np.
#include „c:\katalog\nazwa”
Za pomocą słów kluczowych using namespace informujemy kompilator, że chcemy aby wszystkie funkcje, klasy i szablony należące do przestrzeni nazw nie wymagały przedrostka. Wyraz występujący po dwóch słowach kluczowych jest istniejącą nazwą przestrzeni. Dla standardowych bibliotek C++ jest to std.
Czym są strumienie? Strumienie występujące w programowaniu, jak nazwa wskazuje, mają coś wspólnego z prawdziwymi strumieniami, z tym tylko, że służą do przenoszenia danych pomiędzy programem a komputerem. Aby móc użyć takiego strumienia należy wskazać kierunek, w którym on płynie. Służą do tego symbole kierunku << i >>. Teraz wystarczy napisać
cout<<”Tekst.”;
aby napis „Tekst” został przez strumień przeniesiony do instrukcji cout, która wysyła go na ekran.
Należy pamiętać aby po każdej instrukcji znajdującej się między nawiasami klamrowymi umieścić średnik ; , który oznacza koniec pojedynczej instrukcji. Bez tego program nie wiedziałby gdzie kończy się, a gdzie zaczyna każda instrukcja.
Dosyć prosta modyfikacja programu, pozwala na wyświetlenie tekstu na ekranie w dwóch linijkach. Od tego momentu, do rozdzielenia kodu programu i wyniku jego działania, będę używał odpowiednio słów: kod i wynik.
Kod:
#include <iostream>
using namespace std;
int main(void)
{
cout<<„To ja twoj komputer.\n Mowie do Ciebie.”;
int main(void)
{
cout<<„To ja twoj komputer.\n Mowie do Ciebie.”;
system(“PAUSE”);
return 0;
}
}
Wynik:
To ja twój komputer.
Mówię do ciebie.
Jedyna modyfikacja w tym przypadku to symbol \n. Symbol ten oznacza przejście do następnej linii i jest stosowany jeżeli chcemy zakończyć dany wiersz na ekranie. Możemy napisać:
cout<<„\n”;
co spowoduje, że program nic nie wyświetli tylko przejdzie do następnej linii. Oprócz tego stosowane są też inne symbole specjalne np.
\r - rzesunięcie do początku wiersza(kursor wraca na początek linii, w której się znajduje)
\a - z głośniczka wbudowanego w komputer wydobędzie się krótki sygnał dźwiękowy, który można wykorzystać np. do sygnalizacji błędów
\\ - Wyświetla znak backslash \
\? - Wyświetla znak zapytania ?
\' - Wyświetla apostrof ’
\" - Wyświetla podwójny cudzysłów ”
Nie są to wszystkie symbole specjalne, ale te wystarczą nam w dalszej pracy. Ostatnie cztery symbole wymagają dodatkowego wyjaśnienia. Otóż w C++ istnieją zarezerwowane symbole, które nie mogą być wyświetlone w sposób standardowy, dlatego stosuje się przed nimi symbol \ co pozwala na użycie ich w programie np. gdybyśmy chcieli wyświetlić \? , to musimy napisać \\\?. Dla ilustracji tego napiszemy prosty program.
Kod:
#include <iostream>
using namespace std;
int main(void)
{
{
cout<<"\\ \? \' \" \a \n";//wyświetla kolejno \ ? ‘ „ następnie sygnał dźwiękowy i przejście do następnej linii
cout<<"Wyswietlam tekst i wracam na poczatek lini.\r";//wyświetla tekst i ustawia kursor na początku linii
system(„PAUSE”);
return 0;
}
}
Taki sam efekt jak \n daje zastosowanie manipulatora endl, który steruje strumieniem.
#include <iostream>
using namespace std;
int main(void)
{
cout<<„To ja twoj komputer.”<<endl<<” Mowie do ciebie.”;
int main(void)
{
cout<<„To ja twoj komputer.”<<endl<<” Mowie do ciebie.”;
system(„PAUSE”);
return 0;
}
}
Napisz program wyświetlający na ekranie monitora:
\?”Witam tu twój komputer!!!”?\
a następnie odtwarzający przez głośniczek komputera sygnał dźwiękowy.
\?”Witam tu twój komputer!!!”?\
a następnie odtwarzający przez głośniczek komputera sygnał dźwiękowy.
8 listopada 2011
Środowisko programistyczne cz.2
DevC++ to środowisko darmowe, stworzone przez zapaleńców z wielu krajów świata. Jest rozpowszechniane na licencji GNU General Public License, co oznacza, że program taki można dowolnie kopiować i rozprowadzać. Dzięki zaawansowanym opcjom tworzenia i zarządzania projektami możliwe jest tworzenie w nim zarówno prostych programów, jak i skomplikowanych aplikacji multimedialnych czy gier 3D.
Jest to standardowe okno programu. Aby jednak zacząć zabawę musimy najpierw stworzyć nowy projekt.
Teraz pozostaje tylko wybrać nazwę dla pliku z projektem i zapisać go:
Po zainstalowaniu, uruchomieniu i wybraniu języka pracy witani jesteśmy takim oto widokiem:
Tworzenie projektu to proces prosty sprowadza się do uruchomienia odpowiedniego kreatora, czyli z menu „Plik” wybieramy kolejno „Nowy”, „Projekt”:
Projekt to ogół plików wykorzystywanych przez kompilator do stworzenia programu, połączonych ze sobą pewnymi powiązaniami np. pliki źródłowe, zasoby (pliki z danymi) itp. Dodatkowo każdy projekt może być skonfigurowany w sposób szczególny zależny od rodzaju programu, sposobu kompilacji.
Następnie należy wybrać typ projektu (Empty Project) i wpisać nazwę dla naszego projektu („Pierwszy”):
Teraz pozostaje tylko wybrać nazwę dla pliku z projektem i zapisać go:
Ok, mamy już projekt, ale ciągle nie możemy nigdzie wpisać kodu naszego programu. Dzieje się tak, dlatego, bo nie mamy jeszcze w naszym projekcie jeszcze żadnego pliku źródłowego. Musimy więc taki plik dodać do projektu. Najłatwiej to wykonać wybierając:
Trzeba pamiętać, aby odpowiedzieć twierdząco na pytanie o dodanie pliku do projektu. Spójrzmy na okno naszego projektu:
Jak widać mamy tu jeden plik (w tym przypadku „BezNazwy4”), na razie nie nazwany wiec powinniśmy go zapisać pod jakąś nazwą korzystając ze standardowego polecenia Plik|Zapisz jako...(w moim przypadku będzie to: „plik.cpp”). Po zapisaniu pliku możemy przystąpić do programowania. Wpisujemy wiec kod z poprzedniej lekcji:
I dokonujemy jednoczesnej kompilacji i uruchomienia:
Najpierw oczom naszym ukazuje się okienko kompilacji i linkowania:
Następnie na ekranie miga na chwilę okienko i znika. Jest to okno naszego programu! Nie ma się jednak czym przejmować, ponieważ dzieje się tak tylko dlatego, że program nasz zwyczajnie nic nie robi.
Subskrybuj:
Posty (Atom)






