Politechnika Wrocławska, obóz naukowy dla III LO z Chorzowa, wrzesień 2015
Laboratorium przedmiotu "PODSTAWY PROGRAMOWANIA - Język C++"
( prow. dr Marek Piasecki

Lab 1  ,  Lab 2 ,   Lab 3Lab 4 ,  Lab 5Lab 6Lab 7


 Podstawowe informacje:

  • Środowiska programistyczne wykorzystywane podczas zajęć:
            -  Falcon C++
          lub
            -  Bloodshed Dev C++
          lub
             -  Microsoft Visual Studio (Community)
  •  Jako uzupełnienie laboratoriów proponujemy 1 tom książki "Symfonia C++" Jerzego Grębosza.
     


 

 PRZYKŁADOWE ZADANIA DO REALIZACJI

 

LABORATORIUM  NR  1.
  1. Napisz program wyświetlający na ekranie swoją "Wizytówkę"
    tzn. nazwisko, imię, adres, telefon, e-mail, itp.

  2. Napisz bardziej zaawansowaną "interaktywną" wersję programu wizytówka,
    która najpierw pobiera w szystkie dane personalne do zmiennych pomocniczych
    a dopiero potem wyświetla wizytówkę prezentującą te dane.

  3. Napisz program wczytujący kilka liczb z klawiatury a następnie obliczający
     i wyświetlający na ekranie ich sumę, iloczyn, itp. (np. potęgę, pierwiastek, eksponentę)

  4. Napisz wyrażenia matematyczne wyznaczające:
    - pole powierzchni oraz obwód koła o promieniu r
    - kartezjańską odległość pomiędzy dwoma punktami o współrzędnych (x1,y1 ) oraz (x2,y2


LABORATORIUM  NR  2.
  1. Napisz program klasyfikujący wzrost osób tzn. pytający się o wzrost w cm
     a następnie wyświetlający jeden z podanych tekstów
     w zależności od przynależności do przedziału wartości: niski < 150cm < średni < 180cm < wysoki

  2. Napisz program wprowadzający trzy liczby z klawiatury a następnie wyświetlający na ekranie:
    - największą z tych liczb 
    - medianę 
    - sekwencję tych trzech liczb uporządkowaną rosnąco lub malejąco 
    - informację czy przynajmniej dwie z tych liczb mają identyczną wartość. 
    Uwzględnij przypadki gdy wszystkie liczby są różne oraz że mogą wystąpić powtórzenia. 

  3. Program wczytujący z klawiatury długości trzech odcinków
     i sprawdzający czy da się z nich zbudować trójkąt.

  4.   Napisz program wczytujący z klawiatury dwie daty kalendarzowe
     (zapisywane za pomocą trzech liczb całkowitych: dzień, miesiąc, rok)
     i sprawdzający czy pierwsza data jest wcześniejsza od drugiej

  5. Napisz program klasyfikujący klawisze naciskane na klawiaturze
    i wyświetlający jeden z napisów:
    - mała litera 
    - duża litera 
    - cyfra 
    - klawisz ENTER 
    - klawisz ESC 
    - strzałka w lewo 
    - strzałka w prawo 
    - klawisz funkcyjny F1 
    - inny klawisz 
    do pobierania kodu klawisza wykorzystaj funkcję getch() z biblioteki <conio.h>

 

LABORATORIUM  NR  3.
  1. Napisz program rysujący na ekranie poziomą kreskę (ze znaków minus)
     o długości zadawanej z klawiatury. 

  2. Napisz program wczytujący znaki z klawiatury aż do momentu naciśnięcia klawisza 'k'.
    W trakcie wczytywania należy zliczać ilość podanych znaków. 
    Na zakończenie należy wyświetlić informacje:
    - ile było podanych znaków (przed nacisnięciem 'k') 
    - ile z tych znaków było dużymi literami. 

     
  3. Napisz program wczytujący liczby z klawiatury,
    z jednoczesnym zadawaniem pytania "Czy koniec wprowadzania T/N ?"
    Na zakończenie program powinien wyświetlić wartość: 
    średnią, maksymalną, minimalną z podanych liczb. 

     
  4. Napisz program wyświetlający na ekranie kolejne 100 liczb parzystych 

  5. Napisz program wyświetlający na ekranie kolejne liczby całkowite typu int,
    które są podzielne bez reszty przez n (gdzie n jest zadawane z klawiatury)

  6. Napisz program wyświetlający na ekranie sekwencje kolejnych liczb całkowitych
    najpierw od 1 do 10, a następnie od 10 do 1. Do spowolnienia operacji wydruku
    wykorzystaj dodatkową pętlę od 1 do 10000. Na zakończenie dodaj jeszcze jedną pętlę,
    która spowoduje, że cały proces odliczania powtórzy się trzy razy.
    Zaznacz na listingu, które pętlę tworzą połączenie sekwencyjne (szeregowe)
    a które z nich są zagnieżdżone (wykonują się równolegle).

  7. Napisz program wyznaczający iteracyjnie (numerycznie) sumę szeregu:
    1/x + 1/x 2 + 1/x3 + 1/x4 +  . . .  + 1/xn

  8. Napisz pętlę wczytującą kolejne liczby z klawiatury i kończącą się gdy:
    - suma tych liczb przekroczy 100,
    - ilość podanych liczb ujemnych przekroczy 10,
    - dwie kolejne podane liczby będą miały identyczną wartość,

  9. Napisz program wyświetlający na ekranie "choinkę" o wysokości zadawanej z klawiatury

                *
               ***
              *****
             *******
                #

 

LABORATORIUM  NR  4.
  1. Napisz program umozliwiający wczytanie a następnie wyświetlenie kilku (np. 10)
    liczb rzeczywistych przechowywanych w tablicy.
    Podczas wczytywania i przeglądania proszę wyświetlać teksty pomocnicze
    informujące o numerze wprowadzanego/wyświetlanego elementu. 
    np.    Tab[1] = 12.0 
             Tab[2] = -1.0 
             Tab[3] =  ....... 

  2. Rozbuduj program z zadania (a) o zestaw operacji realizujących
    proste obliczenia statystyczne dla danych zapisanych w tablicy:
    - suma elementów 
    - wartość średnia, błąd średniokwadratowy 
    - wartości ekstremalne (minimum, maksimum) 
    - zliczanie elementów (np. ujemnych, zerowych i dodatnich) 

  3. Napisz program definiujący N-elementową tablicę liczb całkowitych
    a następnie inicjujący jej zawartość losowymi liczbami z przedziału od –30 do 50.
    Odpowiedz: czy rozmiar tablicy N może być wczytywany z klawiatury ?

  4. Napisz program, który wczyta dane z klawiatury do 10-cio elementowej
    tablicy liczb double, a następnie sprawdzi:
    - czy te liczby są uporządkowane rosnąco lub malejąco,
    - czy elementy tablicy mają symetryczną zawartość
       (tzn. pierwszy element równy ostatniemu, drugi równy przedostatniemu, itd. )
    - czy w tablicy występuje chociaż jedno powtórzenie wartości,

  5. Zaproponuj i oprogramuj algorytm, który przesunie zawartość N-elementowej tablicy
    cyklicznie o jedną pozycję „w górę”.
    (tzn. pierwszy element na miejsce drugiego, drugi na trzeci, ..., ostatni na pierwszy)

  6. Napisz program, który będzie wczytywał i analizował tekst (ciąg liter)
    wprowadzany z klawiatury aż do momentu naciśnięcia klawisza ESC,
    Po zakończeniu wczytywania program powinien wyświetlić na ekranie
    histogram występowania poszczególnych liter alfabetu np.

   A   17 #################
   B    2 ##
   C    1 #
   D    0
   E    5 #####
   . . .
   
Z   3 ###

           Do gromadzenia informacji o ilości podanych liter wykorzystaj tablicę 26 „liczników”
  1. Napisz program zawierający funkcje: WCZYTAJ_TAB(x),
    SUMA_TAB(x,y,z), WYPISZ_TAB(z) umozliwiający: 
    - wczytanie dwóch tablic N-elementowych A i B 
    - wyznaczenie zawartości trzeciej tablicy C jako sumę lub róznicę 
        wczytanych tablic A i B 
    - wydrukowanie wyniku końcowego: tablic A, B i C

 

LABORATORIUM  NR  5.
  1. Ćwiczenie wykorzystania wskaźników jako alternatywnej metody dostępu
    do zmiennych tworzonych przez kompilator tzn. zmiennych globalnych i lokalnych.
    ( Patrz przykład z wykładu nr 5 strona nr 3 )
    - Utwórz zmienne różnych typu: char, int, long, ...
    - Napisz instrukcje wyświetlające zawartości i adresy w/w zmiennych
       (porównaj czym różnią się adresy zmiennych: globalnych, lokalnych, inicjowanych)
    - Napisz instrukcje zapisu wartości do jednej zmiennej (np. typu long)
      za pomocą adresu innej zmiennej (tego samego typu lub innego)
    - Kontrolnie wyświetlaj zawartości zmiennych po dokonaniu tych zapisów

  2. Napisz program, który wyświetli w kodzie szesnastkowym (heksadecymalnie)
    zawartości poszczególnych bajtów kodujących zmienne z zadania (a)

  3. Ćwiczenie w wykorzystaniu zapisu wskaźnikowego (z operatorem *)
    jako metody dostępu do kolejnych elementów tablicy/pamięci.

    Popraw wybrane zadania z laboratorium nr 4 w ten sposób,
    aby we wszystkich pętlach przetwarzających tablice,
    zamiast zapisu indeksowego (wykorzystującego operator indeksu [ ] )
    używać zapisu wskaźnikowego (wykorzystującego operator wyłuskania * )
    np.zamiast  
       float tab[10];
       for( int i=0; i<10; i++)
           tab[ i ] = tab[ i ] + 1;
    napisz
       for( float* w=tab; w<tab+10; w++)
           *w = *w + 1;


LABORATORIUM  NR  6.
  1. Przebuduj wybrane programy zrealizowane na pierwszych laboratoriach 1-3 na funkcje.
    Jeżeli uznasz to za sensowne, to dodatkowo rozdziel w postaci osobnych funkcji
    operacje komunikacji z użytkownikiem (np. wczytywanie danych / wyświetlanie wyników)
    oraz operacje wykonywania obliczeń (np. szukanie największej z trzech liczb A,B,C;
    policzenie średniej z trzech liczb A,B,C; rozwiązanie trójmnianu o współczynnikach A,B,C)

  2. Napisz program łączący w jedną całość wszystkie napisane dotychczas programy.
    W najprostszej wersji, ten nadrzędny program, wywoływał by sekwencyjnie funkcje
    napisane w zadaniu (a)
    (Uwaga: do połączenia kodu dotychczasowych programów możesz wykorzystać
    polecenia operujące na schowku edytora: Cut / Copy / Paste ).

  3. Rozbuduj program (b) o „Menu” umożliwiające sterowanie przebiegiem wywoływania
    funkcji składowych i zakończeniem programu. Przykładowe menu może mieć postać: 
       1. Suma liczb 
       2. Iloczyn liczb
       3. Klasyfikacja wzrostu
       4. Koniec programu
       Twoj wybór : ... ?

    Studenci bardziej zaawansowani mogą napisać trudniejszą wersję MENU
    w której wybór opcji będzie dokonywany poprzez przesuwanie podświetlenia
    za pomocą strzałek i wybór poprzez naciśniecie klawisza ENTER
    (tak jak opcje w menu środowiska C++ Builder).


LABORATORIUM  NR  7.
  1. Operacje na łańcuchach znaków.
    Napisz własne wersje funkcji:
       int moje_strlen( char* );
       char* moje_strupr(char* );
       char* moje_strcpy( char*, char* )

    realizujące te same operacje co standardowe funkcje strlen, strupr, strcpy
    z biblioteki <string.h>.

  2. Napisz funkcję:

    void str_zamien( char* tekst, char* stary_wzorzec, char* nowy_wzorzec);

    realizującą operację zamiany w podanym tekście starego wzorca na nowy np.
    <tekst> == "ala ma kota a ola ma asa"
    <stary_wzorzec> == "ma"
    <nowy_wzorzec> == "miala"
    rezultat zamiany: "ala miala kota a ola miala asa"

    (Osoby mniej wprawne w programowaniu mogą napisać uproszczoną
    wersję tej funkcji, zamieniającą tylko wzorce o tej samej długości.
    Wówczas nie ma potrzeby "rozsuwania" lub "zsuwania" starego tekstu)

   Literatura:

  • Jerzy Grębosz    "Symfonia C++"
  • Bjarne Stroustrup   "Język C++ "
  • Robert Sedgewick  "Algorytmy w C ++ "

Szczegółowy program wykładu