Skocz do zawartości


Zdjęcie

Programowanie


  • Zaloguj się, aby dodać odpowiedź
199 odpowiedzi w tym temacie

#21 MinecraftRiw

MinecraftRiw

    Bywalec

  • Użytkownik+
  • 91 postów
  • Pikkon12

Napisano 21 January 2014 - 17:35

Normalne,żeby poprostu podzielił je na grupy



craftportal

Craftserve to największy i najlepszy polski hosting serwerów Minecraft, jest solidny i tani więc go polecam

#22 Gość_GBH301_*

Gość_GBH301_*
  • Gość

Napisano 21 January 2014 - 17:39

Ale jakie grupy, w sensie według pierwszej litery, daty wklepania lub jakiejś losowej kategorii?



#23 Marcin129

Marcin129

    Uczony

  • Użytkownik+
  • 441 postów

Napisano 21 January 2014 - 18:07

Od dość długiego czasu planuję się nauczyć programowac w: C++ i Java  ale zastanawiam się czy jako jakaś praca nie było by dla mnie lepszym wyjściem bycie administratorem w jakiejś serwerowni.

Nie zastanawiaj się tylko się ucz :)



#24 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 21 January 2014 - 18:19

Normalne,żeby poprostu podzielił je na grupy

Nie wiem czy o to ci chodzi, ale zrób sobie strukturę która będzie reprezentować element grupy i będzie zawierać min. nazwę grupy, w której jest i imię.

Później robisz sobie dynamiczną tablicę tych struktur. A później wkładasz imiona do tej tablicy.

 

tablica[ (iloscGrup), ];



#25 MinecraftRiw

MinecraftRiw

    Bywalec

  • Użytkownik+
  • 91 postów
  • Pikkon12

Napisano 21 January 2014 - 19:17

Nie wiem czy o to ci chodzi, ale zrób sobie strukturę która będzie reprezentować element grupy i będzie zawierać min. nazwę grupy, w której jest i imię.

Później robisz sobie dynamiczną tablicę tych struktur. A później wkładasz imiona do tej tablicy.

 

tablica[ (iloscGrup), ];

 

Tia,ale jak potem losowo to przydzielić do pól tekstowych,chce żeby po lewej i po prawej były po 4 pola tekstowe i z pośród 8 podanych imion losuje je do każdego pola tekstowego.



#26 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 21 January 2014 - 19:32

Tia,ale jak potem losowo to przydzielić do pól tekstowych,chce żeby po lewej i po prawej były po 4 pola tekstowe i z pośród 8 podanych imion losuje je do każdego pola tekstowego.

Pseudokod

 

 

array*string[2][4];
imiona[8] //tu zapełniasz
for( int x = 0; x < 8; x++ )
{
   while( true )
   {
      int grupa = losujliczbe()%2;
      int miejsce = losujliczbe()%8;
     if( string[ grupa ] [ miejsce ] == NULL )
     {
      string[ grupa ] [ miejsce ] = new string(imiona[x]);
      break;
     }
   }
}

  • MinecraftRiw i Krafto. lubią to

#27 MinecraftRiw

MinecraftRiw

    Bywalec

  • Użytkownik+
  • 91 postów
  • Pikkon12

Napisano 23 January 2014 - 18:03

Dzięki,to mi bardzo pomoże :)



#28 MinecraftRiw

MinecraftRiw

    Bywalec

  • Użytkownik+
  • 91 postów
  • Pikkon12

Napisano 23 January 2014 - 19:16

Potrafi ktoś mi wytłumaczyć sens wyrażeń lambda w programach?Mam to w mojej książce ale niejasno wyjaśnione :P.



#29 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 24 January 2014 - 19:17

Potrafi ktoś mi wytłumaczyć sens wyrażeń lambda w programach?Mam to w mojej książce ale niejasno wyjaśnione :P.

Wyrażenia lambda pozwalają tworzyć funkcję, które nie mają nazwy i zapisywać ich adresy do wskaźników.

 

np:

 

 

 auto foo =[]( void )->void { std::cout<<"hellow world\n"; }; //Zapisujemy
 foo(); //Wywołujemy


#30 Wojtek

Wojtek

    Ekspert

  • Użytkownik
  • 1707 postów

Napisano 24 January 2014 - 21:39

Dodam, że dodałem mały wzorzec, żeby każdy mógł wiedzieć do kogo ma się udać z problemami ;d (patrz -> pierwszy post).



#31 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 24 January 2014 - 22:10

Dodam, że dodałem mały wzorzec, żeby każdy mógł wiedzieć do kogo ma się udać z problemami ;d (patrz -> pierwszy post).


Imię: Arc

Wiek: NULL ;__;

Języki: C++



#32 Wojtek

Wojtek

    Ekspert

  • Użytkownik
  • 1707 postów

Napisano 24 January 2014 - 22:36

@up

Wiek dałem po to, żeby obliczyć twoją proporcjonalną fajność. ;___;



#33 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 24 January 2014 - 22:44

@up

Wiek dałem po to, żeby obliczyć twoją proporcjonalną fajność. ;___;

A jaki masz przelicznik wiek-fajność. ;__;



#34 Wojtek

Wojtek

    Ekspert

  • Użytkownik
  • 1707 postów

Napisano 24 January 2014 - 22:46

Masz 23 lata --> programujesz w jakimśtam Cpp --> czyli mało. ;_;

 

Poza tym dziwie się, dlaczego czołowi programiści z tego forum (chyba wiadomo o kim mowa... ;d) nie udzielą się tu...



#35 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 24 January 2014 - 22:49

;__; Ale i tak chętnie pomogę początkującym.



#36 Hako

Hako

    Bako

  • Użytkownik
  • 270 postów
  • Hako

Napisano 25 January 2014 - 02:14

@MinecraftRiw

polecam zapoznać się z kontenerami z STL (a jak zaszalejesz to i z boosta, ale polewaczki od barei do podlania pelargoni na oknie niebedziesz potrzebować).

 

opisze jak wykorzystać std::vector

 

jest to nic innego jak zwykla lista tylko ze o zmienialnej dlugosci...

tyle ze aby skorzystac trzeba zaincludowac

#include <vector>

 

wiec zamiast 
int cyferki[20];

mozesz zrobic 

std::vector<int> cyferki(20);


dalej wpisywanie jak po staremu

cyferki[5] = 15;
std::cout << cyferki[5];

ALE ALE ALE, na wuj nam to skoro nic nowego niedaje?? 

a daje daje.. smotrij:

 

tak robimy pusta tablice: 0 elementowa...

std::vector<int> pustecyferki;

mozna to sprawdzic

std::cout << pustecyferki.size();

powinno wywalic 0

 

tak mozemy dorzucic nowy element na koniec:
 

pustecyferki.push_back(1234);

mamy teraz jednoelemenotwa tablice jedyny element to liczba 1234

 

mozemy wypieprzyc ostatni element spowrotem:
 

int wypieprzony = pustecyferki.pop_back();

przy okazji zapisalismy go pod zmienna "wypieprzony".

 

jak bysmy wiedzieli ze bedziemy push_back'owac np. 10000 elementów to zeby vector sie nieprzealokowywał 50x podczas tego procesu warto zarzucic:

pustecyferki.reserve(10000);

tablica dalej jest pusta, ale ma naszykowane miejsce w pamieci na 10000 elementów.

mozemy je tam teraz wrzucic

for (int i = 0; i < 10000; i++)
{
    pustecyferki.push_back(i*i);
}

tak zrobilismy tablice ktora ma kwadraty kolejnych liczb... {0,1,4,9,16,25,36,49,64,81,100,...... az do 9999*9999 niechce mi sie liczyc tego ;f)

btw, jeszcze jedna ciekawostka ktora mozna zrobic z vectorami (i nie tylko)

zalozmy ze mamy inna tablice

std::vector<int> inna(20,10);

(tutaj podajac 2 argumenty, zainicjalozowałem ją 20stoma dziesiątkami) - {10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10} 

(ggdybym ominal drgui argument to by sie zerami wypelniła).

teraz jak by sie okazalo ze z jakiegos wyrąbanego w kosmos powodu zachciało by mi sie zamienic zawartosci tych dwóch tablic, (bez względu gdzie są...) to...
 

inna.swap(pustecyferki);
//albo
pustecyferki.swap(inna);

//ewentualnie
std::swap(pustecyferki, inna);

ciekawostką jest to że tutaj zawartości NIE SĄ KOPIOWANE!

są kopiowane tylko wskaźniki na wlasciwe tablice, dlatego ta operacja zajmuje stały czas i do tego tak krótki jak zamiana zawartosci 2 zwyklych zmiennych.

wlasnie to jest zaleta tych vectorów nad zwykla array.

zwykla tablica zajmuje iles tam miejsca w pamieci tam gdzie ja trzasniemy, jak niedaj boze zrobimy sobie 5000 elementowa zwykla tablice w wnetrzu jakiejs funkcji to mamy pieknie zasrany stos.

jak walniemy zamiast tego vector, to na stos poleci tylko kilka(nascie?) bajtów ktore beda wiedzialy tylko ile tablica ma elementów, wskaznik na nią (taki np. int* wskaznik = new int(50)); i jak sie domyslam wielkosc pamieci jaka mamy pod wskaznikiem zdeklarowana.

ze jest to klasa obiektowa z konstruktorem destruktorem itd. to one juz o to dbaja zeby pamiec pod tablice zarezerwowac, jak zmienna vector wyjdzie juz z zasięgu to ta pamiec zwolnic, jak bysmy przypisali jeden wektor do drugiego to skopiowac, jak push_back niemy nowy element a zarezerowana pamiec niema mijsca to tez automatycznie zostaje albo przedluzona, a jak cos tam przeszkadza to przeniesiona w inne miejsce (dlatego warto walnac to reserve() jak wiemy ile wlozymy)


aha, zapomnialem wczesniej dodac... ten std::vector to tzw template - szablon klasy. mowiac w skrócie dziala to w ten sposób ze niejest w nim okreslone jaki typ danych ma przechowywać, czy int czy float czy jakas strukture czy std::string czy char[20].
DLATEGO przy tworzeniu takiego vectora musimy dorzucic te ukosne nawiaski <> i miedzy nimi wpisac typ

// jakas dupna struktura
struct dupatrupa {
    int x; // jakies zmienne np. pozycja
    int y; // niewazne czego poprostu zeby cos bylo
    int z;
    float w;
    double papier; // jak dupna to i papier dupny
};

std::vector<dupatrupa> dupytropow; // tablica tych ze struktór z wyzej

dupatrupa nowadupatrupa; // zmienna o typie tej struktuy
nowadupatrupa.x = 2;  // wypelniam jakimis z du*y wzietymi danymi.
nowadupatrupa.y = 3; 
...
nowadupatrupa.papier = 666.12345;

dupytropow.push_back(nowadupatrupa); // wrzucam do tablicy
nowadupatrupa.papier = 333.123433; // zmienilem cos w strukturze.
dupytrupow.push_back(nowadupatrupa); // wrzucilem kolejna strukture w tablice
// teraz w srodku sa dwie rozne, tzn roznia sie tylko tym polem papier.

std::cout << dupytrupow[0].papier << ", " << dupytropow[1].papier;
// tak wysietlimy cos takiego: "666.12345, 333.123433"

oczywiscie mozemy ladowac w <> dowolne zeczy
 

std::vector<unsigned> liczby_nieujemne;
std::vector<float> liczby_zmiennoprzecinkowe;
std::vector<dupytrupow*> wskazniki_na_tablice_z_wyzej;

std::vector<std::vector<float> > dwuwymiarowa_tablica_floutuw;
// mozna sie odniesc do elementow tak:
dwuwymiarowa_tablica[4][2] = 15;

// a tak mozemy zainicjalizowac dwuwymiarowke powiedzmy 20x10 pelna jedynek

std::vector< std::vector<int> > int2d(20, std::vector<int>(10,1));
//   tutaj inicjalizujemy zewnetrzna tablice tablicami ktore inicjalizujemy jedynkami.


// btw co do tego .swap() to pamietac ze NIEWOLNO zrobic tak
std::vector<int> inty;
std::vector<float> flouty;

std::swap(inty, flouty); -- to jest be, niewolno i ch...
// tak samo niespecjalnie nam chyba zadziala skopiowanie
inty = flouty;
// chociaz tutaj by trzeba bylo sprawdzic czy automatyczna konwersja typow z float na int sie niewtryni, ale jak by to byly niekonwertujace sie na siebie typy to na bank nieruszy.

 

 

dobra, narazie dosc, albo... opowiem jeszcze o iteratorach...

 

kazdy vector ma swoj iterator o typie 
 

std::vector<int>::iterator

zakladajac ze to tablica intów  - dalej bede pisal <int> ale pamietajmy ze tam moze byc tak samo <float> jak <dupatrupa*>

 

sa dwie funkcje co nam zwracaja iterator:
 

std::vector<int> tablica; // jakas tam tablice deklaruje na niej bede sie bawic
// ... gdzies ja w miedzy czasie ewentualnie wypelnilem

tablica.begin() <- zwraca nam iterator ustawiony na pierwszy element czyli na [0]
tablica.end() <- zwraca nam iterator na element za ostatnim (nieistniejacy) czyli [tablica.size()]
dlaczego tak? a to za chwile.

//(jest jeszcze rbegin() i rend() one sa do iterowania łot konca)

co one nam daja... mozemy zrobic tak:

 

std::vector<int>::iterator it = tablica.begin();

std::cout << *it; // wyswietlamy pierwszy element - rownowazne do tablica[0]

*it = 40; // nadpisujemy go liczba 40;

it++; // inkrementujemy iterator -> tzn teraz pokazuje na element [1]

std::cout << *it ; // wyswietli nam to co jest pod tablica[1];

//jaki morał? mozemy jebnac petle.


for (std::vector<int>::iterator it = tablica.begin(); it != tablica.end(); it++)
{
    std::cout << *it << std::endl;
}
// taka petla w kolejnych liniach wywali nam pokolei wszystkie elementy z tablicy
// mozemy je oczywiscie edytowac

for (std::vector<int>::iterator it = tablica.begin(); it != tablica.end(); it++)
{
    *it = *it +5;
}
// taka petla doda 5 do wszystkich elementów

//oczywiscie na vector mozem tak samo iterowac korzystajac z
for(int i = 0; i < tablica.size(); i++)
{
    std::cout << tablica[i] << std::endl;
}

//i wydajnosc bedzie taka sama (stały czas dostępu do elementu)
//to w przypadku np. std::list juz tak piknie niebedzie i iteratory nadrobią wydajnoscią .size()/2 razy :]

// o wlasnie warto bys sie zapoznal z std::list, to kontener gdzie niemasz w pamieci elementów jeden za drugim jak w liscie tylko masz porozpieprzane jak popadnie, kazdy element ma 2 wskazniki na poprzedni i nastepny, //zas zeminna o typie std::list<> przechowuje wskanik na pierwszy i ostatni element => mozna dzieki temu tez latwo iterować po dlugosci, ale za to dosanie sie do elementu gdzies w srodku wymaga przelecenia przez nawet polowe calosci.
// za to std::vector mozna ssie dostac do dowolnego szybko, ale niemozna np. wcisnac nowego miedzy istniejace (mozna ale trzeba przesunac wtedy te za nim), zas po liscie mozna iterowac i dopychac jednoczesnie nowe elementy miedzy istniejace.

 

dobra, dosc pieprzenia, jak by ktos mial jakies pytania to sluze pomoca z C, C++, pythona, lua i vhdl (jak ktos sie chce bawic AVR'ami tez odpowiem na pytania).

dziekuje dobranoc ide pralke rozladować bo skonczylo sie pranie robic (chociaz ponoc w nocy niewolno prać tak na klatce kartka mowi o_O).


edit: maly appendix, mnie osobiscie np. wku...rza pisanie dlugiego typu pod iterator np.
std::vector< std::list< std::pair< int, dupdup<float, int> > >::iterator it;
naszczescie w c++11 to zrozumili i w c++11 mozna zrobic tak

auto it = tablica.begin();

ba nawet maja fajny patent na petle z iteratorem...

    std::vector<int> v = {0, 1, 2, 3, 4, 5};
 
    for (int &i : v) // i jest referencja na element (wiec mozemy modyfikowac zawartosc tablicy)
    {
        std::cout << i << ' ';
    }
 
    for (auto i : v) // kompilator sam dobiera odpowidni typ
    {
        std::cout << i << ' ';
    }
 
    for (int i : v) // i jest kopią oolejnych elementow, wiec modyfikacja i niezmieni elementow
    {
        std::cout << i << ' ';
    }
 

oczywiscie mozemy stworzyc wlasna klase ktora bedzie mogla wyorzystywac ten mechanizm, ale niebede tego teraz wyjasnial, bo tym co nieogarniaja muzgi popekaja a ci co ogarniaja i tak to juz wiedza :D


  • Ciach lubi to

#37 Gość_Adikso_*

Gość_Adikso_*
  • Gość

Napisano 25 January 2014 - 02:54


Nick: Adikso
Wiek: null;
Języki: Java
Jeżeli ktoś potrzebuje pomocy to niech się zgłosi. Widzę, że same cfagi++


#38 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 25 January 2014 - 03:31

Ale się Hako rozpisał :D. Dałoby by się to trochę streścić.



#39 Hako

Hako

    Bako

  • Użytkownik
  • 270 postów
  • Hako

Napisano 25 January 2014 - 04:55

eee. jak zaczynalem pisac tamtego posta to myslalem ze skoncze w 5ciu zdaniach, nie 5ciu stronach.
jak ktos walnie edita w ktorym to jakosc przelozy na polski bedzie fajnie.



#40 Ciach

Ciach

    Znawca

  • Użytkownik+
  • 231 postów

Napisano 25 January 2014 - 05:23

O tu jest wszystko ładnie opisane. ;)

By zobaczyć linki musisz się zalogować lub zarejestrować