Porządny kurs C++

2

Na stronie http://www.bt4.pl/programowanie/c/programowanie-w-jezyku-cpp/ opublikowałem kurs programowania w języku C++ dla początkujących.
Jest to tłumaczenie pierwszej części książki na ten temat (http://www.siteduzero.com/boutique-614-467-programmez-avec-le-langage-c.html -- w druku kosztuje 32 euro :)). Pozostałe części są w planach.

Zapraszam wszystkich początkujących do korzystania i ewentualnie komentowania.

1

Pierwszy błąd w podpunkcie 1.3.1. C++: język wysoko- czy niskopoziomowy piszesz "Język C++ tradycyjnie zalicza się do tej drugiej kategorii, a więc jest to język niskopoziomowy.", natomiast w ćwiczeniach w pytaniu nr 5 "C++ to język:" jako poprawna odpowiedz oznaczona jest "wysokopoziomowy"

0

Rzeczywiście mam problem :)

C++ zależy jak patrzeć jest i taki i taki. Kluczowe jest tu słowo „tradycyjnie”, ale to jest dla początkujących, więc muszę to jakoś uściślić. Zmienię „Język C++ tradycyjnie zalicza się do tej drugiej kategorii, a więc jest to język niskopoziomowy” na „Język C++ często jest określany jako niskopoziomowy, ale ma również cechy języka wysokopoziomowego”, a w ćwiczeniu dodam trzecią odpowiedź „i taki i taki”.

0

@krokodyl ale to bez sensu i to bzdury. C++ to język wieloparadygmatowy udostępniający zarówno nisko jak i wysokopoziomowe mechanizmy. To ze zwykle używa się go w zastosowaniach niskopoziomowych to jest inna kwestia.

0

Przecież to właśnie napisałem... tylko bez użycia słowa paradygmat, które początkującemu do niczego nie jest potrzebne, jak to Stroustrup napisał „paradygmat to takie nadęte słowo oznaczające styl programowania”

0

A guzik. Napisałeś:

Język C++ tradycyjnie zalicza się do tej drugiej kategorii

które jest bzdurą. Według jakiej "tradycji" tak niby jest? To jest pełnoprawny język wysokiego poziomu, a fakt że się go jako takiego nie używa wynika z tego że są języki w których piszę się łatwiej.

0

Nie chcę stosować argumentu, że to nie ja napisałem, bo ja tylko jestem tłumaczem :)

Częściowo się z Tobą zgadzam, bo to jest nieścisłe, ale zaraz bzdura... W każdym razie jest już zmienione, więc nie ma nad czym debatować. Lepiej znajdźcie mi kolejne błędy i usterki, to chętnie poprawię, między innymi po to się tu ogłosiłem.

Edit: chyba nie doczytałeś mojego drugiego postu i stąd to nieporozumienie

0
Shalom napisał(a):

A guzik. Napisałeś:

Język C++ tradycyjnie zalicza się do tej drugiej kategorii

które jest bzdurą. Według jakiej "tradycji" tak niby jest? To jest pełnoprawny język wysokiego poziomu, a fakt że się go jako takiego nie używa wynika z tego że są języki w których piszę się łatwiej.

Jeśli przyjąć definicję z Wiki to każdy język bardziej abstrakcyjny niż ASM jest wysokopoziomowy:
http://en.wikipedia.org/wiki/High-level_programming_language

A jeśli rozmawiamy o subiektywnych odczuciach to:

W czasach królowania COBOL, Fortran, ASM język C++ był wysokopoziomowy.

W czasach Javy, C#, Scali język C++ jest trochę niżej, zwłaszcza że na wbudowane wsparcie wątków czekać trzeba było do C++11 (co jest dla mnie osobiście jakimś kuriozum).

0

Dlatego będę się trzymał zdania „Język C++ często jest określany jako niskopoziomowy, ale ma również cechy języka wysokopoziomowego” ;)

0

Kolejna na szybko znaleziona nieścisłość
Nazwa typu: char
Opis: Litera

char jest typem znakowym więc nie można powiedzieć że przechowuje wyłącznie litery.

0

Zgadza się. Dzięki! Poprawione.

0

Nie wiem jak u was ale u mnie 'kod' wygląda tak:

cout << "Witaj, świecie!" << endl;
paragraf 1.4

0

Polecacie ten kurs? Czy lepiej męczyć Symofnię?

1

Wiadomo, różne języki - różne poziomy abstrakcji. Ale termin "język niskopoziomowy" oznacza język zbliżony do maszynowego czyli wszelkie języki assemblerowe w których operujemy na mnemonikach tłumaczonych bezpośrednio na instrukcje procesora. Wszystko inne to już "języki wysokopoziomowe". Języki wysokiego poziomu są kompilowane/interpretowane. Języki niskiego poziomu są poddawane assemblacji.

Tak więc można powiedzieć, że np. C# jest wyższego poziomu niż C, ale C nadal jest językiem wysokiego poziomu. Taka terminologia.

0

hah, jest błąd w zadaniu pierwszym z paragrafu 5.
Pytanie
Który z poniższych wierszy kodu spowoduje zapisanie liczby podanej przez użytkownika w zmiennej o nazwie liczba?
Według Ciebie[autorze] poprawna odpowiedź to : cin << liczba;
ja jednak bym się spierał na tą odpowiedź: cin >> liczba;

0

Ok, ale jednak C++ to nie C. Mamy tam obiektowość, polimorfizm, typy generyczne, po wprowadzeniu C++11 jest nawet wsparcie dla tupli, regexpów i funkcyjności. To nie są cechy jezyka niskopoziomowego ;)

0
Resident napisał(a):

Nie wiem jak u was ale u mnie 'kod' wygląda tak:

cout << "Witaj, świecie!" << endl;
paragraf 1.4

Poprawione.

0
Resident napisał(a):

hah, jest błąd w zadaniu pierwszym z paragrafu 5.
Pytanie
Który z poniższych wierszy kodu spowoduje zapisanie liczby podanej przez użytkownika w zmiennej o nazwie liczba?
Według Ciebie[autorze] poprawna odpowiedź to : cin << liczba;
ja jednak bym się spierał na tą odpowiedź: cin >> liczba;

Poprawione.

0

Kolejna sprawa to bardzo nieczytelne listingi np:

listing.PNG

Naprawdę używanie enter'a nie kosztuje dużo wysiłku a bardzo poprawia czytelność kodu.

0

Pomyślę nad tym, może uda się coś wymyślić, bo „enterowanie” wszystkich listingów to sporo roboty

1

Takie dwie drobne uwagi:

4.3. Sztuczka pozwalająca zaoszczędzić miejsce
Nie zgodzę się, że jest to dobry nawyk, a tym bardziej jakaś sztuczka. Kiedy kod jest naprawdę spory, pisanie wszystkich zmiennych typu int w jednej linii, double w innej itd. jest nie tylko nieczytelne dla późniejszego sprawdzania, jak i dla kogoś kto widzi kod pierwszy raz. W dodatku, czasem trzeba te zmienne skomentować (gdy jest ich dużo lub pełnią podobne role). Wg. mnie najlepszym sposobem jest pisanie osobno każdej zmiennej z "własnym" typem w nowej linii, a jeszcze lepszym - zaprojektowanie struktury tak, żeby wszystko można było pozamykać w osobnych klasach, co da lepszy przegląd kodu.

7.2.1. Podnoszenie do kwadratu
Czemu tak:

double kwadrat(double x)
{
    double wynik;
    wynik = x*x;
    return wynik;
}

A nie tak:

double kwadrat(double x)
{    
    return x*x;
}

Oszczędzanie miejsca + czytelność - to jest dość ważne. Może kiedy ktoś się dopiero uczy to tego tak nie widzi, al z czasem takie właśnie drobnostki znacznie poprawiają pracę.

0

Będę wdzięczny, jeśli tego typu komentarze będziecie wpisywać pod artykułem. To jest tłumaczenie, więc nie chciałbym za głęboko ingerować, a dla czytelników te uwagi mogą być popmocne.

0

@krokodyl
Konsolidator == LINKER!
Jak nazywa się program tłumaczący kod źródłowy napisany w języku programowania na kod binarny?
KOMPILATOR != KONSOLIDATOR

0

Nie bardzo rozumiem. Chodzi o test do pierwszego rozdziału?
Pytanie brzmi: Jak nazywa się program tłumaczący kod źródłowy napisany w języku programowania na kod binarny?
A poprawna odpowiedź to: kompilator

0

Który z poniższych wierszy kodu spowoduje zapisanie liczby podanej przez użytkownika w zmiennej o nazwie liczba?
Według Ciebie poprawna odpowiedź to: cin >> liczba

A według mnie to cin >> liczba; bo zauważ, że średnik stosujemy :) inaczej błąd kompilacji.

0
krokodyl napisał(a):

Nie bardzo rozumiem. Chodzi o test do pierwszego rozdziału?
Pytanie brzmi: Jak nazywa się program tłumaczący kod źródłowy napisany w języku programowania na kod binarny?
A poprawna odpowiedź to: kompilator

Mój błąd. Dostałem oczopląsu.

2

[4.4] Ta czynność nazywa się inicjacją zmiennej.

Inicjacją można nazywać czynność z dziurą w płocie, zmienne się INICJALIZUJE.

Jednak pamiętaj, że zmienne należy zawsze inicjować.

Taaa, a np. w przypadku obiektów konstruktor domyślny to pies?

set<double long> execution_time; // gdzie tu jest miejsce na "zawsze inicjalizować"?
0
PS napisał(a):

[4.4] Ta czynność nazywa się inicjacją zmiennej.

Inicjacją można nazywać czynność z dziurą w płocie, zmienne się INICJALIZUJE.

Najgorzej jest, jak programiści zaczynają bawić się w językoznawców: http://poradnia.pwn.pl/lista.php?id=9919

Jednak pamiętaj, że zmienne należy zawsze inicjować.

Taaa, a np. w przypadku obiektów konstruktor domyślny to pies?

set<double long> execution_time; // gdzie tu jest miejsce na "zawsze inicjalizować"?

To jest kurs dla początkujących i obiektach jeszcze nie było. Przecież autor nie zarzuci czytelnika wszystkimi możliwymi informacjami i niuansami języka, skoro dopiero tłumaczy mu użycie operatora +

0
mvt8 napisał(a):

Który z poniższych wierszy kodu spowoduje zapisanie liczby podanej przez użytkownika w zmiennej o nazwie liczba?
Według Ciebie poprawna odpowiedź to: cin >> liczba

A według mnie to cin >> liczba; bo zauważ, że średnik stosujemy :) inaczej błąd kompilacji.

Poprawione. Może w końcu się uda to zrobić dobrze :) Wielkie dzięki za debugowanie :)

0

Aby zdefiniować zmienną, należy określić typ zmiennej, podać jej nazwę oraz wpisać wartość. Jest to bardzo proste. Wymienione informacje piszemy w następującej kolejności:

typ nazwa (wartość);

Można także stosować składnię języka C:

typ nazwa = wartość;

Obie powyższe wersje są równoważne.

Nie, nie są. http://ideone.com/rSYpo

1 użytkowników online, w tym zalogowanych: 0, gości: 1