| Strona główna | C++ | Java | SQL | Excel | BAT-che | JavaScript
Zakres materiału
Literatura
Zadania
Linki
Zakres materiału

Na przykładzie C++ masz nauczyć się programowania strukturalnego. W związku z tym materiał i ćwiczenia obejmują jedynie podstawowy zakres C++ z pominięciem wszystkich elementów niezbędnych do programowania obiektowego.

  • Zintegrowane środowiska programistyczne (ang. Integrated Development Environments - IDE) Borland C++ v. 3.1.
  • Struktura programu.
  •     [ zob. struktura programu]
  • Dyrektywy preprocesora:
  •     [ zob. dyrektywy]
    • włączanie plików;
    • tokeny i makrodefinicje;
    • kompilacja warunkowa.
  • Typy zmiennych:
  •     [ zob. zmienne]
    • typy podstawowe;
    • tablice;
    • wskaźniki;
    • struktury;
    • własne typy danych.
    • zasięg i czas życia zmiennych.
  • Operatory:
  •     [ zob. operatory]
    • arytmetyczne;
    • logiczne i porównania;
    • przypisania;
    • dostępu do danych;
    • bitowe;
    • inne.
  • Instrukcje:
  •     [ zob. instrukcje]
    • przypisania;
    • warunkowe (if, switch);
    • pętli iteracyjnej (for);
    • pętli warunkowej (while, d0-while);
    • inne (break, continue, return).
  • Wybrane funkcje bibliotek standardowych:
  •     [ zob. funkcje biblioteczne]
    • przetwarzania danych;
    • wejścia / wyjścia;
    • kontroli procesów i zarządzania pamięcią;
    • graficzne.
  • Tworzenie funkcji użytkownika.
  •     [ zob. funkcje użytkownika]

Naukę możesz rozpocząć od krótkiego kursiku wprowadzającego w problematykę programowania w C++.

^ na górę strony ^ 

Literatura
  1. A. R. Neibauer - Języki C i C++ Twój pierwszy program

  2.  
  3. A. Majczak - Programowanie w języku C (kurs programowania w języku C, dużo przykładów)

  4.  
  5. J. Rusek - ABC programowania w C++ (samouczek programowania)

  6.  
  7. C. Sexton - Język C - to proste (wprowadzenie do pisania programów w standardowym języku C)

  8.  
  9. J. Liberty - C++ (podstawowe zagadnienia i koncepcje związane z programowaniem w C++ nie wymagające doświadczenia)

  10.  
  11. S. B. Lippman, J. Lajoie - Podstawy języka C++

  12.  
  13. G. Perry - Język C (dla początkujących i średnio zaawansowanych użytkowników języka C)

  14.  
  15. S. Prata - Język C (klasyczny podręcznik do nauki języka C od podstaw do zaawansowanych koncepcji)

  16.  
  17. H. Schildt - Programowanie: C++ (książka przeznaczona dla osób posiadających już pewne doświadczenie w programowaniu)

  18.  
  19. B. W. Kernighan, D. M. Ritchie - Język ANSI C (język C zdefiniowany w standardzie ANSI)

  20.  
  21. Bjarne Stroustrup - Język C++ (podręcznik C++ napisany przez twórcę języka)

  22.  
  23. R. Sedgewick - Algorytmy w C++ (podręcznik przedstawia w formie wykładu pryncypia rządzące opracowywaniem sprawnych i skutecznych algorytmów)

  24.  
  25. Zhang Tony - Poznaj C (dużo przykładów i zadań z rozwiązaniami)

  26.  
  27. D. Kalev, J. Walter, M. J. Tobler - C++ w zadaniach
     
  28. David Vandevoorde - Język C++. Ćwiczenia i rozwiązania

  29.  
  30. C. L.Tondo, B. P. Leung - Podstawy języka C++. Ćwiczenia i rozwiązania (zawiera rozwiązania wszystkich ćwiczeń z podręcznika "Podstawy języka C++" S. B. Lippmana i J. Lajoie)

  31.  
  32. H. Sutter - Wyjątkowy język C++ (problemy programistyczne o różnym stopniu trudności)

  33.  
  34. H. Schildt - Encyklopedia języka C (standard ANSI/ISO).

^ na górę strony ^ 

Zadania

Ćwiczenia wstępne
Napisz program, który wyświetla:

  1. tekst powitania na monitorze;
  2. twoje imię i nazwisko w pierwszym wierszu, a w drugim twój adres zamieszkania;
  3. wynik dzielenia 15 przez 2;
  4. wynik dzielenia 15 przez 2 formatując go z jednym miejscem po przecinku;
  5. wynik dzielenia 15 przez 2, wypisując cale równanie "15/2 = " i wynik;
  6. wynik wszystkich operacji arytmetycznych na liczbach 3 i 7;
  7. wynik wszystkich operacji arytmetycznych na parze wczytanych liczb;
  8. większą z dwóch podanych liczb;
  9. liczby od 1 do 10, a następnie w dół - od 10 do 1;
  10. tabliczkę mnożenia dla liczb z przedziału <1 ; 10>.

Proste algorytmy

  1. Napisz program, który wczytuje liczby całkowite n i k (20<n<400, 1<k<20), a następnie drukuje n gwiazdek * po k w wierszu (liczby n i k mają być pobrane z wymuszeniem poprawności )
  2. Przyjmijmy, że dorosły człowiek nie bywa niższy, niż 110 cm, ani wyższy niż 215 cm. Ludzie poniżej 140 cm to karły, od 140cm do poniżej 160 cm to niscy, od 160 cm do poniżej 175 cm to średni, od 175 cm do poniżej 190 cm to wysocy, a powyżej 190 cm to olbrzymi. Napisz program wczytujący wartość wzrostu (w centymetrach) i wyświetlający komunikat określający klasę wzrostu lub sygnalizujący błąd danych (wg określonych kryteriów)
  3. Napisz program sprawdzający poprawność daty. Należy pobrać od użytkownika Rok, Miesiąc, Dzień i sprawdzić poprawność daty wg napisanego algorytmu:
    • miesiące, w których jest 31 dni to miesiące:1,3,5,7,8,10,12;
    • miesiące, w których jest 30 dni to miesiące:4,6,9,11;
    • miesiąc, w którym jest 29 dni to miesiąc 2 (rok przestępny);
    • miesiąc, w którym jest 28 dni to miesiąc 2 (rok nie jest przestępny);
    • rok jest przestępny jeżeli jest podzielny przez 4 i nie jest podzielny przez 100 lub jest podzielny przez 400.
  4. Napisz program, który służy do wyznaczania daty zakończenia urlopu na podstawie daty rozpoczęcia urlopu i ilości dni trwania urlopu. Dane pobrane od użytkownika: dzień, miesiąc, rok - określają początek urlopu (musisz wczytywać tak długo, aż data będzie poprawna); DniUrlopu - określa ilość dni urlopu (1<= DniUrlopu <=26).
  5. Napisz program zamiany liczby dziesiętnej na binarną. Pobieramy liczbę całkowitą N>0 i wyświetlamy jej reprezentację binarną (dwójkową).
    Uwaga: należy podzielić liczbę N przez 2, zachować resztę, a całkowity wynik dzielenia ponownie dzielimy przez 2, zachowujemy resztę... i tak powtarzamy do momentu gdy całość z dzielenia osiągnie 0. Zachowane reszty (0 i 1) zapisane od końca (od ostatniej zachowanej) tworzą reprezentację binarną liczby N.

Algorytmu numeryczne
Napisz program, który (każdy z poniższych programów powinien być powtarzany, aż do przerwania przez użytkownika):

  1. wpisuje liczby naturalne mniejsze od 300 podzielne przez 11;
  2. podaje rozwiązanie równania ax+b=0, sprawdzając czy b<>0;
  3. wczytuje parę liczb z przedziału całkowitych, i wyświetla sumę oraz średnią arytmetyczną wszystkich liczb z zadanego przedziału;
  4. wczytuje parę liczb z przedziału całkowitych, i wyświetla osobno sumę oraz średnią arytmetyczną liczb dodatnich i ujemnych z zadanego przedziału;
  5. pobiera od użytkownika liczbę całkowitą n, taką, że 0<n<100 000 (z wymuszeniem poprawności),a następnie sumuje kolejne liczby począwszy od 1 tak długo, jak suma będzie mniejsza od n. Na ekranie wyświetl sumę oraz liczbę zsumowanych elementów;
  6. wczytuje ciąg liczb nieujemnych aż do wczytania trzech liczb podzielnych przez 3 i jednocześnie niepodzielnych przez 2, a następnie wyświetla ilość liczb niepodzielnych przez 8 oraz pozycję drugiej liczby podzielnej przez 5 we wczytanym ciągu;
  7. wczytuje liczbę całkowitą z przedziału [1 ; 80], a następnie wyświetla dla kolejnych 20 liczb od podanej ich kwadraty, pierwiastki i odwrotności w postaci tabelki;
  8. skraca ułamki zwykłe: należy pobrać od użytkownika 2 liczby (mianownik i licznik), a następnie - jeśli można - to należy ułamek skrócić (licznik i mianownik podzielić przez NWP); wynik wyświetlić na ekranie;
  9. obliczenie wartość wielomianu o podanych współczynnikach;
  10. sprawdza, czy 3 podane liczby mogą być bokami trójkąta;
  11. wczytuje liczbę N, a następnie ciąg liczb aż do wprowadzenia liczby zero. Następnie wyświetla ile liczb w ciągu było >, = i < od N;
  12. oblicza pierwiastki równania kwadratowego z kontrola poprawności wpisania danych (A <>0);
  13. wyświetla kolejne wyrazy ciagu x(n+1) = x(n)^2-1 dla podanej wartości x(0);
  14. oblicza średnią N podanych przez użytkownika liczb;
  15. oblicza N!;
  16. który sprawdza, czy liczba N jest pierwsza;
  17. czyta kolejne liczby i liczy ich sumę i średnią;
  18. znajduje największy wspólny dzielnik i najmniejszą wspólną wielokrotność liczb naturalnych A i B;
  19. oblicza N! za pomocą funkcji rekurencyjnej;
  20. oblicza naturalna potęgę liczby całkowitej za pomocą funkcji rekurencyjnej;
  21. oblicza rzeczywista potęgi liczby rzeczywistej;
  22. porządkuje trzy liczby rzeczywiste niemalejąco;
  23. sprawdza, czy punkt X leży wewnątrz, czy na zewnątrz trójkąta ABC;
  24. rozwiązuje układ 2 równań postaci:
      ax + by = c
      dx + ey = f
    gdzie współczynniki a,b,c,d,e,f pobierane są w trybie dialogowym;
  25. wyświetla wszystkie permutacje liczb od 1 do N.
  26. oblicza rekurencyjnie następujące ciągi liczb (n-liczba naturalna):
    • X0 = 1; Xn = Xn-1 + 1/n;
    • X0 = 1; Xn = Xn-1 + (-1)n * 1/n;
    • X0 = 1; X1 = 1; Xn = Xn-1 + Xn-2;
    • X0 = 1; Xn = n*Xn-1;
    • X0 = 1; Xn = Xn-1+(n-1)/n

Wektory i macierze

  1. Program zapełnia tablice 20-elementową losowymi liczbami i sprawdza ile razy znajduje się w niej wczytana liczba.
  2. Program generujący 2 wektory po 20 elementów każdy, a następnie wyświetlający sumy odpowiednich sobie elementów obu wektorów;
  3. Program zapełnia tablice 20-elementową losowymi liczbami i porządkuje je niemalejąco.
  4. Program wczytuje liczby do macierzy 3x3 i oblicza jej wyznacznik.
  5. Program oblicza liczbę parzystych elementów w macierzy 5x5.
  6. Program losuje w tablicy 10 liczb i wypisuje najmniejszy i największy element.
  7. Program dokonujący przesunięcia cyklicznego N-elementowej tablicy znaków o I elementów w lewo.
  8. Program zapełnia wektor 20-elementowy liczbami całkowitymi, a następnie wyszukuje 3 największe elementy i wstawia je na początek wektora tak, by na pierwszym miejscu była liczba największa, następnie druga i trzecia co do wielkości. Dalej kolejność jest dowolna. Elementy z początku tablicy musimy zamienić miejscami z tymi największymi.
  9. Program wczytuje (generuje) liczby całkowite do wektora 20-elementowego, a następnie zamienia w nim miejscami elementy, tak by element ostatni był pierwszym, a pierwszy ostatnim; przedostatni drugim, a drugi przedostatnim itd. Należy wyświetlić macierz przed i po zamianie.
  10. Program generuje liczby całkowite do macierzy kwadratowej o wymiarze 5x5, a następnie wyświetla macierz z wyliczonymi sumami każdego wiersza i kolumny.
  11. Program generuje liczby całkowite do macierzy o wymiarze 5x8, a następnie wyświetla macierz powiększając jej każdy element o numer wiersza i kolumny, w którym ten element występuje.
  12. Program generuje liczby całkowite do macierzy o wymiarze 8x5, a następnie oblicza i wyświetla sumę przekątnych macierzy.
  13. Program generuje liczby całkowite do macierzy prostokątnej o wymiarze 3x5 i wyświetlający ją z odwróceniem wierszy i kolumn.
  14. Dla tablicy o rozmiarze 5 x 5 opracuj procedury:
    1. inicjującą tablicę losowymi liczbami całkowitymi należącymi do przedziału [-100, 100);
    2. wyprowadzającą zawartość tablicy wierszami na ekran;
    3. obliczającą sumę elementów należących do wiersza o numerze i, gdzie 1 <= i <= 5;
    4. obliczającą sumę elementów należących do kolumny o numerze j, gdzie 1 <= j <= 5;
    5. sortujący niemalejąco każdy z wierszy tablicy;
    6. sortujący niemalejąco każdą z kolumn tablicy;
    7. znajdującą w tablicy element minimalny i maksymalny.
  15. Wczytać do tablicy A, o rozmiarze M, oraz do tablicy B, o rozmiarze N, losowe liczby całkowite należące do przedziału [-50, 50), gdzie M, N - wczytane liczby naturalne z przedziału [5 ; 20]. Zapisać elementy tablicy A w pliku TABA.DAT, natomiast elementy tablicy B w pliku TABB.DAT. Opracować procedurę, która:
    1. otwiera TABA.DAT i TABB.DAT;
    2. odczytuje pierwszą liczbę z pliku TABA.DAT oraz z pliku TABB.DAT;
    3. porównuje obie liczby i mniejszą z nich zapisuje do pliku TAB_NEW.DAT;
    4. drugą liczbę zapamiętuje;
    5. powtarza operacje odczytu (z tego pliku, z którego liczba była mniejsza (zapisana), jeżeli w danym pliku nie ma już liczb czyta z pliku drugiego);
    6. aż do wyczerpania danych w obu plikach skacze do C.
  16. Napisz program wypełniający tablicę 10x10 wartościami 0 lub 1, który będzie nadawał elementowi [i][j] wartość 1 jeżeli największy wspólny dzielnik i oraz j wynosi 1, a 0 w przeciwnym wypadku.

Napisy i łańcuchy znaków
Napisz program, który:

  1. sprawdza, czy wczytany ciąg jest palindromem;
  2. sprawdza, czy podana liczba jest palindromem;
  3. odwraca łańcuch znaków;
  4. przedstawia liczbę w postaci trojek cyfr;
  5. zwracającą pozycję wystąpienia drugiego znaku c w podanym łańcuchu s;
  6. zwracającą pozycję wystąpienia przedostatniego znaku c w podanym łańcuchu s;
  7. usuwa znak c z łańcucha s;
  8. zamienia wszystkie litery łańcucha na małe;
  9. zamienia wszystkie litery łańcucha na wielkie;
  10. czyta hasło, lecz nie wyświetla go na ekranie, zamiast tego wyświetlając gwiazdki. Następnie pojawia się komunikat o poprawności hasła;
  11. jest prostym zegarkiem, wyświetlającym aktualna godzinę, aż do wciśnięcia klawisza przez użytkownika;
  12. wczytuje kolejne znaki i wypisuje, czy są literami, oraz samogłoskami czy spółgłoskami;
  13. wczytuje do tablicy 5 nazwisk i wypisuje te, które nie zaczynają się od liter od A do K, a następnie wszystkie dłuższe, niż 5-cio znakowe;
  14. czyta do tablicy 20 nazwisk a następnie porządkuje je niemalejąco;
  15. wczytuje słowa do tablicy i wyświetla wszystkie występujące w nich anagramy.

Typy rekordowe

  1. Napisz program, który wczytuje do zmiennej typu rekordowego informacje na temat samochodu i drukuje jego "metryczkę".
  2. Napisz program, który wczytuje do tablicy z rekordami: imiona, nazwiska i wzrost uczniów i wyświetlający informacje według rosnącego wzrostu.
  3. Zdefiniuj rekord zawierający informacje: nazwisko, rok, miesiąc i dzień urodzenia oraz identyfikator numeryczny. Następnie wykonaj poniższe polecenia:
    1. opracuj procedurę inicjującą pola rekordu danymi wprowadzanymi z klawiatury;
    2. opracuj procedurę inicjującą pola rekordu losowymi danymi wg reguł:
      • do pola nazwisko wpisz łańcuch 'naz' zakończony losową liczbą należącą do przedziału [0,100);
      • do pola rok wpisz losową liczbę całkowitą należącą do przedziału [1960, 1985);
      • do pola miesiąc wstaw losową liczbę całkowitą należącą do przedziału [1, 13);
      • do pola dzień wstaw losową liczbę całkowitą należącą do przedziału [1, 32);
      • do pola id wpisz losową liczbę całkowitą należącą do przedziału [1, 100);
    3. opracuj procedurę wyprowadzającą zawartość rekordu na ekran
    4. napisz program umożliwiający wybór losowego generowania lub wprowadzania danych osoby oraz wyświetlenie jej danych na ekranie
  4. Zdefiniuj rekord analogicznie jak w poprzednim zadaniu oraz tablicę mogącą zapamiętać dane dla 50 osób (musisz pamiętać ile jest aktualnie zapamiętanych osób w tablicy). Następnie opracuj procedury:
    1. wpisującą do tablicy rekord o losowych polach (jak w zadaniu poprzednim);
    2. wyświetlającą elementy tablicy na ekran;
    3. wyświetlającą elementy tablicy o ustalonej wartości pola nazwisko;
    4. wyświetlającą na ekran rekordy, dla których identyfikatory należą do przedziału [a,b];
    5. napisz program umożliwiający generowania danych dla n osób oraz wyświetlenie wg powyższych zasad.

Pliki dyskowe
Napisz program, który:

  1. sprawdza istnienie na dysku pliku o podanej nazwie;
  2. przepisuje tekst wprowadzany przez użytkownika do pliku tekstowego TEKST.TXT, aż do napotkania pustego wiersza;
  3. wypisuje na ekran tekst zapisany w pliku tekstowym TEKST.TXT;
  4. zapisuje do pliku tekstowego LICZBY.TXT oraz pliku binarnego PIERW.DTA kolejne liczby pierwsze, aż do wciśnięcia przez użytkownika dowolnego klawisza;
  5. odczytuje liczby pierwsze z pliku LICZBY.DTA i drukujący, ile jest liczb pierwszych mniejszych lub 5 000, 10 000, 15 000 itd.;
  6. wczytuje do pliku dane dotyczące kolejnych osób (imię, nazwisko i rok urodzenia), a następnie czytający go i wyświetlający wiek osób z pliku;
  7. we wskazanym pliku zlicza liczbę samogłosek i spółgłosek;
  8. we wskazanym pliku zlicza liczbę znaków, znaków z odliczeniem spacji, wierszy oraz słów;
  9. w zależności od wartości parametru zamiana podane słowo na duże lub małe litery;
  10. tworzy na dysku plik ROK.KAL z kalendarzem na podany w parametrze rok;
  11. obsługuje prostą książkę telefoniczną z podstawowymi operacjami: wyświetlanie, dodawanie, poprawianie i usuwanie osób.
  12. Zdefiniuj plik złożony z liczb całkowitych typu integer. Wczytaj z klawiatury nazwę pliku. Zapisz do pliku N losowych liczb całkowitych należących do przedziału [0, 1000), gdzie N - liczba naturalna podana przez użytkownika. Wyprowad? elementy pliku na ekran wierszami, po 15 elementów w wierszu, każdy element na 4 znakach.
  13. Dla plik z poprzedniego zadania opracuj procedurę, która realizuje następujące operacje: otwiera plik; odczytuje dane z pliku; jeśli odczytana liczba jest nieparzysta, to dopisuje na końcu pliku liczbę dwa razy większą; zamyka plik. Wyświetl zawartość pliku przed i po modyfikacji.
  14. Wczytaj do tablicy A, o rozmiarze M, oraz do tablicy B, o rozmiarze N, losowe liczby całkowite należące do przedziału [-20, 20), gdzie M, N - liczby z zakresu [10, 50] podane przez użytkownika. Zapisz elementy tablicy A w pliku DANE-A.DAT, natomiast elementy tablicy B w pliku DANE-B.DAT. Następnie opracuj procedurę, która:
    1. otwiera pliki DANE-A.DAT i DANE-B.DAT;
    2. odczytuje pierwszą liczbę z pliku DANE-A.DAT oraz z pliku DANE-B.DAT;
    3. porównuje obie liczby i mniejszą z nich zapisuje do pliku DANE-C.DAT;
    4. drugą liczbę zapamiętuje;
    5. powtarza operacje odczytu (z tego pliku, z którego była liczba mniejsza - zapisana; jeżeli w danym pliku nie ma już liczb, czyta z drugiego pliku) aż do wyczerpania danych w obu plikach skacze do C
    Na przykład dla plików DANE-A.DAT i DANE-B.DAT zawierających elementy 2, 4, 5, 7 (plik DANE-A.DAT) oraz 3, 6, 9 (plik DANE-B.DAT), przedstawiona procedura tworzy plik DANE-C.DAT, który zawiera elementy 2, 3, 4, 5, 6, 7, 9.
  15. Do programu opracowanego w zadaniu 3 w typach rekordowych opracuj procedury:
    1. tworzącą (otwierającą) plik OSOBY.DAT z danymi o każdej z osób;
    2. wstawiającą dane osoby na koniec pliku;
    3. wyprowadzającą na ekran zawartość pliku OSOBY.DAT;
    4. wyprowadzającą na ekran pozycje i zawartość rekordów o ustalonej wartości pola nazwisko;
    5. usuwającą z pliku rekord znajdujący się na określonej pozycji.

Różne programy
Napisz program, który:

  1. czyta współrzędne Hetmana na szachownicy i ilustruje, które pola są w jego zasięgu;
  2. umożliwia sterowanie za pomocą klawiatury ruchem gwiazdki na ekranie;
  3. wspomaga przeprowadzenie inwentaryzacji magazynu części komputerowych, ilustrując zastosowanie typu wyliczeniowego;
  4. pozwala grać z komputerem w kolko i krzyżyk;
  5. oblicza liczbę dni pomiędzy dwoma datami.

^ na górę strony ^ 

Linki

Język C - podręcznik
=[ C O D E - Z O N E . O R G ]= Język C/C++
Enter Programming Page -kurs i przykłady
C++ Headquarters - dość przyzwoity kurs C++
Centrum Programisty i Webmastera - sporo ciekawych linków
Portal Programisty - kurs C/C++
Podstawy języka C/C++ - Trochę informacji i trochę zadań
Autonomiczny Serwis Informatyczny - opisy najbardziej popularnych języków programowania
C++ Builder - polska strona Borland'a
The C++ resources network
FAQ, tutoriale, ksiazki, dokumentacja, publikacje, kompilatory, grupy użytkowników, etc

^ na górę strony ^