Forum - HAJLO.COMmunity [ forum dyskusyjne, kasa za posty, forum młodzieżowe, forum wielotematyczne ]


Nabór do ekipy forum!!! Więcej informacji: Napisz PW

Użytkownicy przeglądający ten wątek: 1 gości



Dla początkującego programisty :)
(10-11-2010 17:55) #1

Dla początkującego programisty :)

Tak jak w temacie.W wątku tym możecie umieszczać linki do tutoriali,artykułów,programów itp. a także można umieszczać własne tutoriale pisząc nowe posty.
Ja osobiście polecam te oto strony o:
O C++:
* Gamedev.pl
* ddt.pl
* Cpp0x
* cpw.net.pl
Delphi:
* Swiatinformatyki.ovh.org
* cpw.net.pl
* neonix93.yoyo.p

A oto lista najlepszych IDE c++:
* Microsoft Visual C++
* Code::Blocks
* wxDev-C++
* Turbo C++ Builder
* Borland C++ Builder

A oto przykład napisania konteneru tablic w c++:

Kod:
#include<iostream>

typedef unsigned short int uint;

using namespace std;

void Message(const string message)
{
for(uint i = 0;i < 9;i++)cout<<"*";
cout<<endl;
for(uint i = 0;i < 9;i++)cout<<"*";
cout<<endl;
}

template<class typ>class T_vector
{
public:

typ& operator [](uint selected)
{
return tab[selected];
}

T_vector();

inline void Push_back(typ& what);
bool Insert(uint place,typ& what);

typ Begin();
typ End();
long Size();

void Enlarge(uint where);

~T_vector();

private:

long int selected;
long int size;


typ* tab;
};

template<class typ>T_vector<typ>::T_vector()
{
size = 10;
selected = 0;
tab = new typ[size];
}

template<class typ>inline void T_vector<typ>::Push_back(typ& what)
{
if(selected < size)
{
Enlarge(10);
}
selected++;
tab[selected] = what;
}

template<class typ>bool T_vector<typ>::Insert(uint place,typ& what)
{
if(place < size)
{
tab[place] = what;
}else
if(place >= size)
{
Enlarge(10);
Insert(place,&what);
}
if(place < size)return true;
else return false;
}

template<class typ>typ T_vector<typ>::Begin()
{
return tab[1];
}

template<class typ>typ T_vector<typ>::End()
{
return tab[selected];
}

template<class typ>long T_vector<typ>::Size()
{
return selected;
}

template<class typ>void T_vector<typ>::Enlarge(uint where)
{
typ* new_tab = new typ[size];

for(uint i = 0;i < size;i++)
{
new_tab[i] = tab[i];
}

delete []tab;
tab = new typ[size + 10];

for(uint i = 0;i < size;i++)
{
tab[i] = new_tab[i];
}

delete []new_tab;
size+=10;
}

template<class typ>T_vector<typ>::~T_vector()
{
delete []tab;
}

int main()
{
T_vector<string> Autobus;
string Dzieciak[12];
for(uint i = 0;i < 12;i++)
{
Dzieciak[i] = i%3?"Jestem dzieciak!":"Jestem uczen!";
Autobus.Push_back(Dzieciak[i]);
}
cout<<Autobus[Autobus.Size()]<<endl;

system("pause");
return 0;
}

Teraz po kolei...Na początku tworzymy szablon bez, którego nasz wektor nie mógł by działać na innych zmiennych, których nie zadeklarowaliśmy.Następnie utworzywszy klasę(w moim przypadku) T_vector musimy napisać specjalne linię kodu odpowiedzialne za przeciążanie operatorów(w tym przypadku []) by móc "dostać" się do obiektu o numerze "i" w dynamicznej tablicy wskaźników, którą następnie napiszemy.Aby nasza dynamiczna tablica wskaźników powstała musimy wpierw przed jej użyciem specjalnie dla niej dynamicznie alokować pamięć na stercie by móc w przyszłości zmieniać jej rozmiar wraz z powiększaniem się ilości danych do niej napływających.Wraz z powiększającą się ilością danych przyjdzie nam powiększać utworzoną wcześniej dynamiczną tablicę wskaźników.Do tego celu użyłem funkcji "Enlarge", która kopiuje dane ze starej tablicy a następnie kasuje starą po czym tworzy ponownie a następnie wkleja do nowo utworzonej tablicy.Po napisaniu reszty banalnych funkcji musimy w końcu usunąć zajętą przez nas pamięć używając funkcji "delete", która usunie zajętą przez nas pamięć.

A oto przykład napisania programu sortującego liczby algorytmem bąbelkowym w C++:

Kod:
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

typedef unsigned short int uint;

int* Liczby;

template<class typ>inline void Copy(typ& Liczba_1,typ& Liczba_2)
{
    typ l1 = Liczba_1;
    typ l2 = Liczba_2;

    Liczba_1 = l2;
    Liczba_2 = l1;
}



void Sortuj(uint Wielkosc)
{
    cout<<"Nie uszeregowane:"<<endl;

    Liczby = new int[Wielkosc];

    for(uint i = 0;i < Wielkosc;++i)
    {
        Liczby[i] = rand()% 1000;
        cout<<Liczby[i]<<" ";
    }

    cout<<endl;

    for(uint j = 0;j < Wielkosc - 1;++j)
    {
        for(uint i = 0;i < Wielkosc - 1;++i)
        {
            if(Liczby[i] > Liczby[i + 1])Copy<int>(Liczby[i],Liczby[i + 1]);
        }
    }

    cout<<"Uszeregowane:"<<endl;

    for(uint i = 0;i < Wielkosc;++i)
    {
        cout<<Liczby[i]<<" ";
    }

    cout<<endl;
   delete[] Liczby;
}

int main()
{
    Sortuj(20);
    system("pause");
    return 0;
}

Na początku utworzyliśmy funkcję "Copy", która jest odpowiedzialna za kopiowanie elementów tablic do tych samych tablic.Specjalnie dla niej stworzyliśmy też szablon, który umożliwia wykorzystanie tej właśnie funkcji na innych typach zmiennych takich jak np.double,float.Następnie napisaliśmy funkcję "Sortuj", która tworzy dynamiczną tablicę wskaźników o podanej wielkości a następnie wypełnia ją losowymi elementami, po czym algorytmem bąbelkowym ją sortuje.Jak widać algorytm ten jest bardzo prosty i do swego działania wykorzystuje 2 pętle for i jedną funkcję "Copy".

A oto przykład napisania programu, który demonstruje algorytm Luhna w C++:

Kod:
#include <iostream>

using namespace std;

typedef unsigned short int uint;

string Lancuch;

inline void Wprowadz_dane(string& lancuch)
{
    cout<<"Wprowadz lancuch:";cin>>lancuch;
    cout<<"Lancuch wpisany!"<<endl;
}

void Sprawdz_poprawnosc_wpisanej_liczby(string& lancuch)
{
    uint* tab = new uint[lancuch.length()];
    uint suma_liczb = 0;

    for(uint i = 0;i < lancuch.length();++i)
    {
        tab[i] = static_cast<uint>(lancuch[i] - 48); //rzutowanie na typ uint
        cout<<tab[i]<<endl;
        if(i%2 == 0)
        {
            tab[i]*=2;
            cout<<"Mnoze przez 2!"<<tab[i]<<endl;
        }
        else if(i%2 != 0)
        {
            tab[i]*=1;
            cout<<"Mnoze przez 1!"<<tab[i]<<endl;
        }

        if(tab[i] > 9)
        {
            tab[i] = 1 + (tab[i] - 10);
        }
    }
    for(uint i = 0;i < lancuch.length();++i)
    {
        suma_liczb+=tab[i];
    }
    
    if(suma_liczb % 10 > 0)
    {
        lancuch+=static_cast<char>(48 + (10 - (suma_liczb % 10)));
    }
    delete[] tab;
}

int main()
{
    Wprowadz_dane(Lancuch);
    Sprawdz_poprawnosc_wpisanej_liczby(Lancuch);
    cout << Lancuch << endl;
    system("pause");
    return 0;
}

Na początku napiszemy sobie funkcję inline "Wprowadz_dane" z referencją, której nazwa świadczy o jej prawdziwej funkcji w programie.Po tym przystępujemy do pisania właściwej części programu odpowiedzialnej za samo działanie algorytmu, który składa się z raptem 18 linii(bez klamer)!W moim przypadku funkcja wywołująca algorytm nazywa się "Sprawdz_poprawnosc_wpisanej_liczby", która ma w sobie także referencje.W funkcji tej zadeklarowaliśmy zmienną "suma_liczb" a także dynamiczną tablicę wskaźników, która alokuje sobie pamięć na stercie operatorem new.Po tych czynnościach musimy napisać sobie pętlę for w podanych w kodzie właściwościach a następnie będziemy musieli u żyć rzutowania, bez którego nie bylibyśmy w stanie "przekonwerterować" znaku na cyfrę.Gdy już napiszecie drugą pętlę for i przepiszecie algorytm, który(moim zdaniem jest zbyt przejrzysty by go tłumaczyć) będziecie musieli zwolnić zalokowaną przez tablicę wskaźników pamięć na stercie operatorem "delete[]".

Niedługo następna część artykułuWesoly

Autor:Mateusz BagińskiWesoly

(Ten post był ostatnio modyfikowany: 20-11-2010 18:44 przez Uncle.)

Strona 2 (Post powyzej jest pierwszym w watku)

(27-12-2017 12:24) #12

RE: Dla początkującego programisty :)

Ciekawy wątek ale by być musiał na bieżąco aktualizowany.





Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Linki

Copyrights

Tłumaczenie: Polski Support MyBB Silnik MyBB Styl: Darek