Mini kurs C++

Quintasan

Nowicjusz
Dołączył
14 Czerwiec 2007
Posty
12
Punkty reakcji
2
Witam!
Jako że również jestem początkujący będe przerabiał łatwe przykłady i dokształcał się sam :)
Polecam ułożyć sobie miejsce pracy, ja mam to w ten sposób
C++(katalog główny):
-bin(skompilowane)
-src(kod źródłowy)
Musimy posiadać kompilator:
-Windows, polecam Bloodshed Dev-C++ (ZAWSZE wybieramy Console/Terminal Application)
-Linux, standardowo g++

Polecenia i inne bzdety kodu będe pogrubiał bądź pisał kursywą

Zaczniemy od podstawy:

1. Nie zamierzam się rozwodzić na temat histori C++, chętnych odsyłam do Wikipedii
2. W C++ nie wysŧępują znaczniki begin i end(znane z pascala) zastąpiono je { i }
3.Każdy plik z kodem C++ musi mieć rozszerzenie .cpp np. mójprogram.cpp
4.Każde polecenie MUSI się kończyć średnikiem
5.Nazwa zmiennej nie może być taka sama jak polecenia np. int cout nie jest poprawne i kompilator wyrzuci błąd
6.C++ akceptuje komentarze w stylu C /* Komentarz w stylu C */ i C++ //Komentarz w stylu C++
7.Klasa reprezentuje zasady według których tworzony jest obiekt(np. Klasa: Trójkąt Obiekt: Trójkąt równoboczny)
8.Jak coś mi się przypomni to dopisze :p
Na pierwszy ogień pójdzie stare jak świat Hello World :)

Kod:
#include <iostream>

using namespace std;

int main()
{
cout << "Hello World :)\n";
return 0;
}

1. #include <iostream>, to jest dyrektywa preprocesora(kompilator zrobi to zaraz przed kompilowaniem) dołącza ona plik iostream(input/output stream) zawierający definicje tego jak działa i jakie argumenty przyjmuje cout ale to później
2. using namespace std; każde polecenie zawarte w iosteam używa namespace w tym wypadku będzie to std(standard), można obyć się bez tej linijki ale ona ułatwia roboŧę, równie dobrze moglibyśmy napisać std::cout.
Przydaje się to jeżeli, firma Microshit stworzyła polecenie maszwmorde, i firma Omgf stworzyła polecenie o takiej samej nazwie, no i jak kompilator ma się połapać którego użyć?
Jeżeli chcemy użyć polecenia firmy Mircoshit to napiszemy microshit::maszwmorde, analogicznie do polecenia firmy omfg
3.int main(), otwiera funkcje main którą musi mieć każdy program, wywołuje ją nasz system.
4.{ znak otwierający funkcje main
5.cout << "Hello World:)\n"; wyświtli Hello World :), \n to nowa linia, << oznacza kierunek przepływu danych, w tym wypadku dane lecą do cout, który wyświetli to na ekranie terminala podany tekst.
6.return 0;, nie wymyśliłem specjalnego zastosowania tej funkcji ale może ona służyc do tego by przekazać czy program zakończył się sukcesem czy też nie(moje przyuszczenie)
7.} znacznik zamykający program
Kompilacja:
Windows - tu się nie będe rozpisywał, macie ładny interfejs, i tak nie lubie Windowsa
Linux - włazimy w terminal, przechodzimy do katalogu gdzie mamy plik z kodem (C++/src) i wklepujemy g++ -o ~/C++/bin/tu_jak_chcemy_żeby_się_plik_nazywał nazwa_pliku_z_kodem.cpp, i potem tylko ./nazwa_pliku_podana_po_-o
 

Quintasan

Nowicjusz
Dołączył
14 Czerwiec 2007
Posty
12
Punkty reakcji
2
Teraz wprowadze podstawowe typy danych używanych w C++ są to:

Typy ze znakiem:

short - Zakres od -2 do potęgi 15 (-32768) do 2 do potęgi 15 - 1 (32767).
int - Zakres od -2 do potęgi 31 (-2147483648) do 2 do potęgi 31 - 1 (2147483647)
long - Zakres od -2 do potęgi 31 (-2147483648) do 2 do potęgi 31 - 1 (2147483647)
long long - Zakres od -2 do potęgi 63 (-9223372036854775808) do 2 do potęgi 63 - 1 (9223372036854775807). Ogólnie to powiem lol
char - służy do zapisywania znaków, ale używa się go też do liczb, zakres -127 do 128 (coś w tym stylu)

Typy bez znaku(nie mogą być ujemne dla cięzko rozumujących):

unsigned short - Zakres od 0 do 2 do potęgi 16 - 1 (65535).
unsigned int - Zakres od 0 do 2 do potęgi 32 - 1 (4294967295).
unsigned long - Zakres od 0 do 2 do potęgi 32 - 1 (4294967295).
unsigned long long - Zakres od 0 do 2 do potęgi 64 - 1 (18446744073709551615).
unsigned char - 0 do 255

Zakres może się różnić zależnie od platformy, jeżeli PRZEKROCZYSZ (np dodasz jeden) a typ będzie miał swoją maksymalną wartość to skoczy do najmniejszej możliwej (np unsigned long long max=18446744073709551615 i dodaj jeden to wtedy będzie 0 zamiast 18446744073709551616 :p)
to samo tyczy się odejmowania (unsigned long long min=0, 0-1 da 18446744073709551615 :)

Są jeszcze typy zmiennoprzecinkowe:
float - Zakres od - 3,4 • 10 do potęgi 38 do 3,4 • 10 do potęgi 38. Precyzja około 7 cyfr znaczących.
double - Zakres od - 1,8 • 10 do potęgi 308 do 1,8 • 10 do potęgi 308. Precyzja około 15...16 cyfr znaczących.
long double - Zakres od -1,1 • 10 do potęgi 4932 do 1,1 • 10 do potęgi 4932. Precyzja około 19...20 cyfr znaczących.

Mamy jescze typ bool(logiczny):
bool - 0 (false) - 1 albo większe (true)

No to teraz łopatologiczny program używajcy zmiennych i pokazujący ich wartość
Kod:
#include <iostream>				 //Myśle że to znamy :)
using namespace std;				//Jeżeli gdzieś nie dodam komentarza to znaczy że to tłumaczyłem
int main()
{
short pierwszy = 32767
int drugi =  2147483647
long trzeci = 2147483647
long long trzeci = 9223372036854775807
char piaty = 128								//Deklarujemy zmienne, <typ> <nazwa> można dodać = <wartość>, ja dodam wartości maskymalne
											 //Teraz deklarujemy zmienne bez znaku
unsigned short pierwszy1 = 65535
unsigned drugi2 = 4294967295
unsigned long trzeci3 = 4294967295
unsigned long long czwarty4 = 18446744073709551615
unsigned char piaty5 = 255			   //Jak widać nic trudnego

cout << pierwszy <<;
cout << drugi <<;
cout << trzeci <<;
cout << czwarty <<;
cout << piaty <<;
cout << pierwszy1 <<;
cout << drugi2 <<;
cout << trzeci3 <<;
cout << czwarty4 <<;
cout << piaty5 <<;								   // Jeżeli chcemy wyświetlić wartość zmiennej to nie bierzemy jej w " tylko piszemy << nazwa <<;
}
No i to by było na tyle :p
 

Crezax

Nowicjusz
Dołączył
21 Sierpień 2007
Posty
2
Punkty reakcji
0
ja polecam Code::Blocks - bardziej mi się podoba niż dev i działa na Windowsie i Linuxie :) Kursik zapowiada się nieźle, może jak na tym forum posiedzę dorzucę coś od siebie :)
 

Capellini

Nowicjusz
Dołączył
15 Wrzesień 2007
Posty
372
Punkty reakcji
0
Widzę, że kurs chyba długo nie pożył. Czy mógłbym od czasu do czasu coś tu napisać?
 

Capellini

Nowicjusz
Dołączył
15 Wrzesień 2007
Posty
372
Punkty reakcji
0
Ale nie wiem, czy takie pisanie ma sens bo forumowisko to jest forum ogólnotematyczne, a nie o programowaniu więc raczej wątpię, że ktoś to będzie czytał.
 

mariusz1989

My name is Trance
Dołączył
22 Czerwiec 2007
Posty
2 173
Punkty reakcji
1
Wiek
34
Miasto
Bydgoszcz - Jaworzno - Kraków
Ej zadaj sobie pytanie o czym jest ten temat i pisz / jak chcesz cos jeszcze napisz na PW bo zaraz zapałapie 20% za OT i bede miał ostatnia szanse przed banem :/
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Mamy jescze typ bool(logiczny):
bool - 0 (false) - 1 albo większe (true)

Tak rozszerzając to dodam, że false to 0 a true to cokolwiek co jest różne od zera.
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Program losuje liczbę w zakresie od 1 do 100 którą użytkownik ma za zadanie odgadnąć. Jeżeli użytkownik poda za wysoką lub za niską liczbę, zostanie o tym poinformowany komunikatem tekstowym. Gra kończy się w momencie odgadnięcia przez użytkownika wylosowanej liczby.
Kod:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
 
int main ()
{
 int wylosowana, propozycja;
 
 
 srand ( time(NULL) );
 
 
 wylosowana = rand() % 100 + 1;
 
 do {
 printf ("Podaj liczbe (od 1 do 100): ");
 scanf ("%d",&propozycja);
 
 if (wylosowanapropozycja)
 {
 printf("\nTwoja liczba jest za mala\n");
 }
 } while (wylosowana!=propozycja);
 
 printf("\n\nGRATULACJE! TRAFILES!");
 getchar();
 getchar();
 return 0;
}
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Program obliczający silnię. Przykład wykorzystania pętli for

Kod:
#include <iostream>
 
using namespace std;
 
int main()
{
 int silnia=1, n=0;
 
 cout << "Podaj liczbe dla ktorej chcesz obliczyc silnie ";
 cin >> n;
 for (int i=1; i<=n; i++)
 {
 silnia=silnia*i;
 }
 cout << "Silnia wynosi: " << silnia << endl;
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Program pozwalający wykonywać 4 działania arytmetyczne na dwóch liczbach wprowadzonych przez użytkownika. Z zabezpieczeniem przed dzieleniem przez zero.

Kod:
#include "iostream"
#include "cstdlib"
 
using namespace std;
 
int main(int argc, char *argv[])
{
 int liczba1, liczba2, wynik, dzialanie;
 
 
 cout << "Podaj pierwsza liczbe: \n";
 cin >> liczba1;// wczytanie pierwszej liczby
 cout << "Podaj druga liczbe: \n";
 cin >> liczba2;
 cout << "Wybierz dzialanie:\n";
 cout << "1. Dodawanie\n";
 cout << "2. Odejmowanie\n";
 cout << "3. Mnozenien\n";
 cout << "4. Dzielnie\n";
 cin >> dzialanie;//wybor dzialania uzytkownik podaje liczbe od 1 do 4
 
 switch(dzialanie)
 {
 case 1 ://to dzialanie wykona sie gdy uzytkownik wybierze 1
 wynik = liczba1 + liczba2;
 cout << liczba1 << " + " ;
 cout << liczba2 << " = " ;
 cout << wynik << endl;
 break;//powoduje wyjscie z petli i wykonywanie programu dalej
 
 case 2 :
 wynik = liczba1 - liczba2;
 cout << liczba1 << " - " ;
 cout<< liczba2 << " = " ;
 cout << wynik << endl;
 break; 
 case 3 :
 wynik = liczba1 * liczba2;
 cout << liczba1 << " * " ; 
 cout << liczba2 << " = " ;
 cout << wynik << endl;
 break;
 case 4 :
 if(liczba2==0)//jezeli liczba2 wynosi 0 to wyswietla komunikat, ze nie mozna dzielic przez 0
 {
 cout << "Nie mozna dzielic przez zero!\n" ;
 }
 else//jezeli liczba2 jest rozna od zero to wykonywane jest dzielenie
 {
 wynik = liczba1 / liczba2;
 cout << liczba1 << " : " ;
 cout << liczba2 << " = " ;
 cout << wynik << endl;
 }
 
 break;
 default ://definiuje co ma sie wyswietlic jezeli zdana z podanych przez nas opcji nie zostala wybrana 
 cout << "error\n" ;
 break; 
 } 
 
 
 system("PAUSE");//pauzuje nasz program
 return EXIT_SUCCESS;
}
 

Jarek

Nowicjusz
Dołączył
31 Lipiec 2005
Posty
175
Punkty reakcji
0
Wiek
33
Miasto
Z San Andreas
Własnie chodziło mi o taki program ale jak chce go skompilowac cos jest nie tak wyrzuca mi blad przy 2 linijce ;/ mogłby ktos spojrzec na ten kod chodzi o ten kalkulator?Dzieki wielkie
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Własnie chodziło mi o taki program ale jak chce go skompilowac cos jest nie tak wyrzuca mi blad przy 2 linijce ;/ mogłby ktos spojrzec na ten kod chodzi o ten kalkulator?Dzieki wielkie


Spróbuj zamieć cstdlib na stdlib.h


 

Jarek

Nowicjusz
Dołączył
31 Lipiec 2005
Posty
175
Punkty reakcji
0
Wiek
33
Miasto
Z San Andreas
zrobilem tak jak mowisz ale nic sie nie dzieje ... dam wam screena http://img24.imageshack.us/img24/3396/beztytuuisj.jpg mam po nizej taki komunikat domyslam sie ze jakiegos pliku brakuje ale nie wiem na 100% spojrzcie na to.
 

Jarek

Nowicjusz
Dołączył
31 Lipiec 2005
Posty
175
Punkty reakcji
0
Wiek
33
Miasto
Z San Andreas
Siemanko mam takie małe pytanie otoz chcialem zmienic typ zmiennej z int na float albo double bo przeciez tez moga byc inne liczby niz tylko calkowite noi wyrzuca mi blad przy switch :eek:
Mozecie spojrzec na ten kod i poprawic go?


Kod:
#include "iostream.h"
#include "stdlib.h"

using namespace std;

int main(int argc, char *argv[])
{
 float liczba1, liczba2, wynik, dzialanie;


 cout << "Podaj pierwsza liczbe: \n";
 cin >> liczba1;// wczytanie pierwszej liczby
 cout << "Podaj druga liczbe: \n";
 cin >> liczba2;
 cout << "Wybierz dzialanie:\n";
 cout << "1. Dodawanie\n";
 cout << "2. Odejmowanie\n";
 cout << "3. Mnozenien\n";
 cout << "4. Dzielnie\n";
 cin >> dzialanie;//wybor dzialania uzytkownik podaje liczbe od 1 do 4

 switch (dzialanie)//tu mam podkreslone!!
 {
 case 1 //to dzialanie wykona sie gdy uzytkownik wybierze 1
 wynik = liczba1 + liczba2;
 cout << liczba1 << " + " ;
 cout << liczba2 << " = " ;
 cout << wynik << endl;
 break;//powoduje wyjscie z petli i wykonywanie programu dalej
 
 case 2 :
 wynik = liczba1 - liczba2;
 cout << liczba1 << " - " ;
 cout<< liczba2 << " = " ;
 cout << wynik << endl;
 break; 
 case 3 :
 wynik = liczba1 * liczba2;
 cout << liczba1 << " * " ; 
 cout << liczba2 << " = " ;
 cout << wynik << endl;
 break;
 case 4 :
 if((liczba2==0) or (liczba1==0)) //tu dla bezpieczenstwa wstawilem ze jezeli takze 1 liczba bedzie 0 ale mam blad {
 cout << "Nie mozna dzielic przez zero!\n" ;
 }
 else//jezeli liczba2 jest rozna od zero to wykonywane jest dzielenie
 {
 wynik = liczba1 / liczba2;
 cout << liczba1 << " : " ;
 cout << liczba2 << " = " ;
 cout << wynik << endl;
 }

 break;
 default//definiuje co ma sie wyswietlic jezeli zadana z podanych przez nas opcji nie zostala wybrana
 cout << "error\n" ;
 break; 
 } 
 
 
 system("PAUSE");
 return EXIT_SUCCESS;
}
 

Gio9

Nowicjusz
Dołączył
18 Wrzesień 2008
Posty
40
Punkty reakcji
6
Wiek
32
Miasto
Tychy
Kod:
[...]
 float liczba1, liczba2, wynik, dzialanie;
[...]
 switch (dzialanie)
[...]

zadeklaruj dzialanie jako int, nie float

Kod:
D:\...\switcvh.cpp(18) : error C2450: switch expression of type 'float' is illegal
        Integral expression required


i zamiast or wstaw ||

Kod:
if((liczba2==0) || (liczba1==0))
 

Quirel

Nowicjusz
Dołączył
15 Październik 2007
Posty
335
Punkty reakcji
10
Moje zdanie (jako programisty):
1. Nagłówki STLa powinno się deklarować tak:
Kod:
#include <iostream>
a własne nagłówki tak:
Kod:
#include "moje.h"

2. IMO kod mało trzyma się standardów, radzę zmienić kompilator na jakiś przyzwoity.
Dla windows MS Visual C++ Express (jest darmowy) http://www.dobreprogramy.pl/Visual-C,Program,Windows,12107.html
Dla linuxa Eclipse (or Sth like this) z G++

3. Jarek, wywala Ci błąd, bo Switch nie przełyka tych typów danych. Dla niego akceptowalne są tylko char i inty czy ew. inne wartości wyliczeniowe.
Musisz zastosować konstrukcję typu:
Kod:
if(warunek)
 działanie
else if(warunek2)
 działanie2
else if (warunek 3)
 działanie
else
 (działanie, jeśli żadne z powyższych)
 
Do góry