Ksiązka
Dobra Ksiązka: "Język C++ szkoła programowania" Stephen Prata czy to dobra ksiązka do nauki C++.Jestem na
poziomie 0.
14 maj 14:17
Dziadek Mróz: każda książka jest dobra. Ważne jest pisanie własnych programów
14 maj 14:30
14 maj 16:02
Metis: Tutorial Xion'a polecam.
Unikałbym starych książek, wiele się zmienia.
14 maj 16:25
Dobra Ksiązka: dzięki Dziadek Mróz i Metis . Zaraz sprawdzę .
14 maj 18:12
Dobra Ksiązka: Tutorial Xion'a wydaje się być dobrym początkiem mojej przygody z C++
14 maj 18:22
14 maj 18:56
Mariusz:
Ściągnąłeś już Linuksa ?
Masz tam na dzień dobry dostęp do czterech języków programowania
Pascal (Free Pascal)
C/C++ (gcc)
Java (z edytorem Eclipse)
Python (ma własny interpreter)
Kody C/C++ musisz pisać w edytorze tekstu jak gedit czy vim
a kompilować z linii poleceń chyba że ściągniesz jakiś edytor taki jak np geany
Ja pożałowałem miejsca na partycję linuksową i teraz mogę go zainstalować
tylko na maszynie wirtualnej ale to już nie to samo
14 maj 19:30
Dziadek Mróz:
Na linuxa machnij 50GB wolnej przestrzeni razem z katalogiem domowym, a pliki zgrywaj sobie na
drugą partycję z Windowsa
14 maj 19:38
Metis: Draghan, jest darmowy.
14 maj 19:43
14 maj 19:43
Mariusz:
Teraz musiałbym kopiować dane , formatować dysk i wtedy podzielić dysk na partycje i
instalować obydwa systemy
Na dysku u zewnętrznym zainstalowałem sobie maszynę wirtualną a na niej Linuksa
Jeżeli jest na poziomie zerowym to proponuję zacząć od zainstalowania Linuksa
Tam ma chyba manuala do gcc
14 maj 19:51
Dobra Ksiązka: To Linuks ma od razu wbudowany dostęp do 4 języków programowania? Właśnie pobrałem CodeBlock'a
wraz z kompilatorem − (posiadamy go na komputerach w szkole).
14 maj 20:23
Dziadek Mróz:
Jakiekolwiek złożone IDE jak CodeBlock, MS Studio czy Eclipse nie nauczy szukania błędów w
kodzie. Dopiero po kompilacji widać błędy
14 maj 20:29
Draghan: Metis, wiem − uczyłem się z niego jakoś w 2008.
Dlatego napisałem, że cena jest na
plus. I dlatego zwróciłem uwagę, że już trochę trąci myszką.
Panowie, nie rozpędzacie się za bardzo?
Dobra Książka chciał(a) tylko nauczyć się
języka, a nie stawiać całe środowisko developerskie, łącznie z instalowaniem dodatkowego
systemu operacyjnego.
14 maj 20:30
Mariusz:
Tak Linuks ma dostęp do czterech języków programowania tych co wymieniłem
Pascal (Free Pascal razem z edytorem)
C/C++ (gcc)
Java (z edytorem Eclipse)
Python (ma interpreter)
Do C/C++ musiałbyś jakiś edytor ściągnąć chyba że pisałbyś w notatniku
a kompilował z linii poleceń
Na Linuksie wystarczyłoby pobrać sam edytor Code::Blocksa bez kompilatora
tylko że Code::Blocks jest pełen błędów
Na Linuksie masz też manual do gcc tylko na początku manual nie zastąpi książki
bo musisz wiedzieć czego w tym manualu chcesz szukać
14 maj 20:37
Dobra Ksiązka: Bardzo serdecznie dziękuję za porady, na pewno wezmę je pod uwagę.Od przyszłego roku w 2 klasie
LO będę miał początki C++, więc chciałbym przez ten okres wakacji pouczyć się tego
języka.Jeszcze raz dziękuję
14 maj 20:53
Mariusz:
Bez algorytmów i struktur danych dużo nie napiszesz więc
poszukaj sobie jeszcze takich książek jak
Cormen Leiserson Rivest Stein Introduction to algorithms
(angielska wersja jest nieco lepsza według mnie)
i jako uzupełnienie
Wirth Algorithms + data structures=programs
Zaczynasz od sortowania i wyszukiwania
np
sortowanie bąbelkowe
sortowanie przez wstawianie
sortowanie przez wybór
sortowanie przez kopcowanie
sortowanie przez scalanie
sortowanie szybkie
sortowanie plików (tutaj głównie różne wersje sortowania przez scalanie)
wyszukiwanie liniowe
wyszukiwanie binarne (jest szybsze ale zakłada że tablica jest posortowana)
Możesz dość łatwo zrealizować kopiec na tablicy
Algorytmy z powrotami
skoczek
hetmany
sudoku
Otoczka wypukła
algorytm Grahama
(szybszy ale nie można go uogólnić złożoność zależy od algorytmu sortującego)
algorytm Jarvisa (wolniejszy ale można uogólnić)
Struktury danych
stos,kolejka,listy
drzewa,grafy
Wybrane algorytmy grafowe
Cykle Eulera, najkrótsze ścieżki
kolorowanie grafu
Algorytmy inne jak
Problem komiwojażera czy problem plecakowy
Może jakieś algorytmy kryptograficzne
Co do języka to najpierw zaczynasz strukturalnie
np stałe, zmienne, zasięg zmiennych (zmienne globalne i lokalne)
instrukcje warunkowe (if) i wyboru (switch case)
instrukcje iteracyjne
(for,while, do while)
wskaźniki,
tablice,
Operacje na łańcuchach (tablicach znakowych)
Zapis i odczyt do pliku
rekordy i unie (struct, union)
własne funkcje
rekurencja
Dopiero później przechodzisz do programowania obiektowego
14 maj 23:28
Metis: Code::Blocks'a nie używaj bo szkoda na niego czasu
Zelent polecił to wszyscy na start, nie wiadomo po co.
Od razu zaznajamiaj się z VS Community.
15 maj 00:42
Alky: Bądź co bądź C++ jest stosunkowo prosty i ma składnie podobną do wielu innych języków. Nie bez
powodu zaczyna się od niego w szkołach średnich i wyższych
15 maj 01:16
Alky: A co do autora, to w 2 klasie będziesz miał/a start od totalnego 0, więc jak teraz poświęcisz
trochę czasu na ogarnianie c++ to na lekcjach będziesz się zwyczajnie nudził/a. W szkole
pewnie szybciej i łatwiej Ci wejdzie, bo dostaniesz wszystko na tacy, a nauczyciel Ci
dokładnie objaśni co i jak, a tak sam/a się będziesz musiał/a uczyć i szukać
materiałów−>poświęcisz na to więcej czasu. Nie twierdzę, że nie warto się uczyć programowania.
Niektórzy zaczynają się bawić już w gimnazjum, ale ja za 2−3 mies masz mieć to samo czego
teraz się nauczysz to jeśli już chcesz się uczyć warto pouczyć się czegoś innego.
15 maj 01:22
Draghan: Mariusz "wskaźniki, tablice, Operacje na łańcuchach (tablicach znakowych) rekordy i unie
(struct, union)"
Szlag mnie trafia, kiedy ludzie wciąż i wciąż próbują uczyć "C z klasami", nazywając to "C++".
W C++ NIE UŻYWA SIĘ w kodzie produkcyjnym wskaźników (a std::unique/shared/weak ptr), tablic
(std::vector, std::array...), tablic znakowych (std::string), unii (std:: optional), a
"rekordy" to nic innego niż klasy z domyślnym dostępem publicznym. Nowe standardy są
wprowadzane po to, by uczynić język lepszym. Łatwiejszym i bardziej ekspresywnym. Wymieniane
przez Ciebie zagadnienia są ważne, ale żeby zrozumieć, jak działają mechanizmy z biblioteki
standardowej i by móc potem implementować podobne rozwiązania, kiedy zajdzie taka potrzeba. A
zachodzi naprawdę rzadko, bo standard ma tę część biblioteki bardzo dobrze opracowaną. Na
początku nauki warto wpoić dobre nawyki współczesnego programowania, bo inaczej potem ciągnie
się przez czterdzieści lat "C z klasami"...
Metis − akurat C::B na start nie jest zły − prosty, darmowy, multiplatformowy.
Ale VS
lepsze, fakt. Od siebie polecę jeszcze CLion − jeśli autor jest uczniem, to powinien móc
otrzymać darmową licencję.
Alky prosty to jest Python. W C++ można się natknąć na wiele pułapek, a składnia podobna
do wielu innych języków to średni argument.
Bo skoro wiele języków ma zbliżoną składnię, to
dlaczego nie wybrać innego spośród tych "wielu"?
Dobra Książka: w szkole raczej nie będą od Was wymagali znajomości C++ na start. Ale
jestem zdania, że lepiej umieć więcej, niż mniej. Trzymam kciuki.
15 maj 06:55
Metis: Swoją drogą, co tam u Ciebie
draghan ?
Czym się zajmujesz, jak żyjesz
15 maj 08:19
Mariusz:
Zadanie
matematyka.pisz.pl/forum/319451.html
wpis Triviala
Jak zamienić instrukcje skoku na pętlę ?
Pytanie
Czy podany przez niego pomysł nadaje się do usunięcia rekurencji z
procedury przywracającej własność kopca
15 maj 12:08
jc: Mariusz, zawsze możesz zapisać bez rekurencji tylko po co?
Jeśli program nie będzie działał szybciej lub nie będzie czytelniejszy to nie warto.
15 maj 12:20
Draghan: Mariusz zamiana 'goto' na pętlę jest trywialna:
int tailrec(int x)
{
bool condition;
do
{
something(x);
condition = x < 5;
if(condition)
{
x = x + 10;
}
} while(condition);
return x;
}
Kod Triviala usuwa rekurencję ogonową − nie ma przecież znaczenia, do czego ta rekurencja jest
zastosowana.
Metis, a studiuję sobie jeszcze. Biorę się do pisania inżynierki. Szukam praktyk. Nic
więcej ciekawego chyba się u mnie nie dzieje.
A co po drugiej stronie?
15 maj 17:44
Mariusz:
Draghan kombinowałem podobnie
Tak ale chodzi o to czy aby na pewno
w kodzie Cormena wywołanie rekurencyjne wykona się jako ostatnie ,
czy na pewno w procedurze przywracającej kopiec mamy do czynienia z rekurencją ogonową
U Wirtha mamy taką procedurę
procedure sift(a,l,r);
label 13;
var x:item;
i,j:index;
begin i:=l;j:=2*i;x:=a[i];
while j<=r do
begin if j<r then
if a[j].key <a[j+1].key then j:=j+1;
if x.key>=a[j].key then goto 13;
a[i]:=a[j]; i:=j;j:=2*i
end;
13: a[i]:=x
end;
Tutaj wprowadziłem zmienną logiczną w ten sposób
procedure sift(a,l,r);
var x:item;
i,j:index;
isHeap:boolean;
begin i:=l;j:=2*i;x:=a[i];isHeap:=false;
while ((j<=r)and(not isHeap)) do
begin if j<r then
if a[j].key <a[j+1].key then j:=j+1;
if not(x.key>=a[j].key) then
begin
a[i]:=a[j]; i:=j;j:=2*i
end
else isHeap:=true;
end;
a[i]:=x
end;
Wirth na swoje przykłady w Pascalu
15 maj 18:49
Mariusz:
Procedurę zamieszczoną u Cormena tak zapisałem (bazując na pomyśle Triviala)
procedure heapify(var A:TArray;i,heapsize:integer);
var left,right,largest,save:integer;
temp:TElem;
begin
repeat
left:=2*i;
right:=2*i+1;
if((left<=heapsize)and(A[left]>A[i]))then
largest:=left
else
largest:=i;
if((right<=heapsize)and(A[right]>A[largest]))then
largest:=right;
save:=i;
if(largest<>i)then
begin
temp:=A[i];
A[i]:=A[largest];
A[largest]:=temp;
i:=largest;
end;
until save=largest;
end;
Można też było wprowadzić zmienną logiczną
15 maj 21:11
16 maj 14:11
jc: Mariusz, nie musisz kopiować całej tablicy, wystarczy połowa.
Raz tylko rezerwujesz pamięć o wielkości połowy sortowanej tablicy (adres podajesz jako ostatni
argument).
void sklej(int *p, int *s, int *k, int *t){
int *q, *r;
for( q = p, r = t; q < s; q++, r++)
*r = *q;
while(t < r and s < k)
if(*t < *s) *(p++) = *(t++);
else *(p++) = *(s++);
while(t < r) *(p++) = *(t++);
}
void sortuj(int * p, int * k, int* t){
if( k − p <= 1) return;
int * s = p + (k−p)/2 ;
sortuj(p,s,t);
sortuj(s,k,t);
sklej(p,s,k,t);
}
16 maj 16:32
Mariusz:
Na dysku mam też wersję z połową tablicy
Dla tablic rzeczywiście nie trzeba ale jeśli chcemy to zastosować do pliku
to trzeba przekopiować cały plik
Jeśli chodzi o scalanie to najlepiej działa dla list bo tam wystarczy poustawiać wskaźniki
Jeżeli poeksperymentuje z sortowaniem przez wstawianie to
dostanie sortowanie Shella
Ciągi
h0=1
hn=2hn−1+1
oraz
h0=1
hn=3hn−1+1
dają złożoność O(n√n)
ale znany jest ciąg dający złożoność O(nlog2 n)
Ciąg trzeba ustawić malejąco a wyrazy tego ciągu są mniejsze od
liczby elementów tablicy którą sortujemy
Mogę podrzucić skoczka i hetmany
a także znalazłem funkcje do obsługi listy
16 maj 18:46
Mariusz:
Pomysły jc z 16:32 są godne uwagi
16 maj 18:52
Mariusz:
http://wklej.org/id/3115873/
Napisałem skoczka na podstawie kodu Nicklausa Wirtha
Gdyby ktoś miał ochotę to mógłby sprawdzić czy nie ma błędów
17 maj 10:19