Politechnika Wrocławska, Wydział Informatyki i Telekomunikacji, 1 rok studiów, sem. zimowy 2023/2024
ARCHIWUM '2023
Materiały pomocnicze do laboratorium i ćwiczeń audytoryjnych
z przedmiotu "PODSTAWY PROGRAMOWANIA"
( prow. dr Marek Piasecki

Treści zadań do realizacji:

           

Lab_1,  

Lab_2,  

Lab_3,  

Lab_4,  

Lab_5,  

Lab_6,  

Lab_7


Ćw_1,

Ćw_2,

Ćw_3,

Ćw_4,

Ćw_5,

Ćw_6,

Ćw_7

Środowiska programistyczne wykorzystywane podczas laboratoriów dla pierwszego semestru:

       -  C-Lion -  cross-platform IDE (Windows / macOS / Linux) for C and C++ by JetBrains
lub
       -  Visual Studio Code  lub  Microsoft Visual Studio (np. darmowa wersja "Community")

lub starsze środowiska (użyteczne jak ktoś ma starszy-mniej wydajny komputer)

       Falcon C++   
       -  Bloodshed Dev C++
       -  Code::Blocks  

Archiwum:  Lab_JP1_2006 - treści zadań 30-sto godzinnego laboratorium realizowanego do roku 2006


Opis zagadnień poznawanych podczas zajęć:

Lp

 LABORATORIUM

 ĆWICZENIA AUDYTORYJNE

1

Prezentacja środowiska programistycznego VC lub Dev
(edycja, kompilacja, uruchomienie programu)
Pierwsze programy z użyciem zmiennych prostych
Konsolowe operacje wejścia wyjścia <stdio.h>
Instrukcje:
- przypisania
- warunkowa if , if else
- wyboru switch
Przykładowe zadania do LABORATORIUM nr 1  

Zapis algorytmów za pomocą języka schematów blokowych
Reprezentacja danych różnego typu.
Dobór typu zmiennych, ograniczenia reprezentacji.
Dialog z użytkownikiem z wykorzystaniem printf i scanf
Formatowanie danych (budowa łańcuchów formatujących
zawierających różnorodne sekwencje sterujące % \ )
Zapis wyrażeń matematycznych w języku C++
Zapis wyrażeń logicznych (operatory logiczne)
Przykładowe zadania do ĆWICZEŃ nr 1

2

Instrukcje pętlowe while, do while, for
Proste algorytmy iteracyjne
Funkcje bezparametrowe
Zmienne lokalne
Przekazywanie parametrów przez zmienne globalne
Przykładowe zadania do LABORATORIUM nr 2  

Rola i dobór zmiennych sterujących oraz pomocniczych pętli
Budowanie warunków końca pętli
Algorytmy iteracyjne (zliczanie, sumowanie, maksimum, minimum, obliczanie szeregów)
Równoważność pętli
Programowanie proceduralne - podział zadania na podprogramy-funkcje, menu sterujące.
Zakres widoczności i przesłanianie identyfikatorów
Przykładowe zadania do ĆWICZEŃ nr 2

3

Typ tablicowy
Przetwarzanie tablic za pomocą pętli
Funkcje z listą parametrów
Przekazywanie parametrów przez wartość, referencję i adres
Przykładowe zadania do LABORATORIUM nr 3  

Podstawowe algorytmy przetwarzania tablic
(wypełnianie, porównywanie elementów, wyszukiwanie, 
przesuwanie, usuwanie, dodawanie elementów)
Tablica pseudo-dynamiczna
 (statyczna tablica z licznikiem wykorzystywanych elementów)
Parametryzacja algorytmów
Dobór sposobu przekazywania parametrów do/z funkcji
Przykładowe zadania do ĆWICZEŃ nr 3

4

Budowa złożonych programów składających się z wielu funkcji.
Przekazywanie danych pomiędzy funkcjami poprzez listę parametrów oraz return.
 Przykładowe zadania do LABORATORIUM nr 4

Ćwiczenia z definiowaniem własnych funkcji.
Zależności pomiędzy:
       definicją, prototypem i wywołaniem funkcji.
Składanie (zagnieżdżanie funkcji).
Omówienie przekazywania parametrów: "przez wartość",
"przez adres" i "przez referencję".
Przykładowe zadania do ĆWICZEŃ nr 4

5

c.d. operacji na tablicach jedno i dwu-wymiarowych
Dostęp do zmiennych za pomocą wskaźników
Łańcuchy znaków - przetwarzanie tekstów
Przykładowe zadania do LABORATORIUM nr 5

Arytmetyka wskaźników, konwersja (rzutowanie) wskaźników
Ćwiczenia z dostępu do dowolnego obszaru pamięci.
Funkcje przetwarzające teksty
- omówienie standardowych (biblioteka <string.h>)
- tworzenie własnych funkcji
Dynamiczna alokacja pamięci – tablice jednowymiarowe o zmiennym rozmiarze - realokacja.
Przykładowe zadania do ĆWICZEŃ nr 5

6

Typ strukturalny
Złożone reprezentacje danych:
- tablica struktur
- struktura tablic
- struktura tablic struktur
- itp.
Przykładowe zadania do LABORATORIUM nr 6

Strukturalna dekompozycja dużych programów
oraz złożonych reprezentacji danych.
Omówienie i ćwiczenia z reprezentacją problemu
"prostej bazy danych" typu:
  
struktura BAZA
           {
            - tablica struktur ELEMENT
                   {
                     - pola reprezentowane typami prostymi
                     - pola tekstowe (tablice znaków)
                     - pod-tablice z licznikiem
                     - pola kodowane za pomocą słownika
                   }
            - licznik wykorzystywanych elementów tablicy
         } 
Kodowanie danych "nienumerycznych" - typ wyliczeniowy.
Kodowanie danych za pomocą słownika.

7

Plikowe operacje wejścia/ wyjścia z wykorzystaniem
standardowej biblioteki <stdio.h>
Archiwizacja i przetwarzanie ciągu elementów zapisywanych w pliku

Tekstowa i binarna reprezentacja danych
Ćwiczenia konwersji bin<>txt
Wykrywanie błędów operacji wej/wyj
Sterowanie położeniem wskaźnika pliku
Proste algorytmy przetwarzania plików

(8)

KOLOKWIUM ZALICZENIOWE (pisemna praca kontrolna)

 Przykładowe zadania do realizacji na laboratoriach:

        LABORATORIUM 1:      ( pierwsze programy, instrukcje if else switch )

 

  1. 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ę) 

  2. 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 przynalezności do przedziału wartości: 
    niski < 150cm < średni < 180cm < wysoki

  3. Napisz program wyznaczający pierwiastki (miejsca zerowe)
    trójmianu kwadratowego Ax2 + Bx + C = 0 

  4. 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 2:        ( pętle )

  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 wyznaczający iteracyjnie (numerycznie) sumę szeregu:
    1/x + 1/x 2 + 1/x3 + 1/x4 +  . . .  + 1/xn

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

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


 
 

          LABORATORIUM 3:     ( tablice )

  1. Napisz program umozliwiający wczytanie a następnie wyświetlenie
    kilku (np. 10) liczb rzeczywistych przechowywanych w tablicy. 
    Operacje wczytywania i wyświetlania powinny być realizowane za pomocą odrębnych funkcji. 
    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. Rozbudować program z zadania (a) o zestaw funkcji 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 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 4:     ( programy wielo-funkcyjne, funkcje z parametrami )

  1. Przebuduj programy zrealizowane na dotychczasowych 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 BorlandC: 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 naciśniecie klawisza ENTER
    (tak jak opcje w menu środowiska BorlandC).

 



          LABORATORIUM 5:     ( wskaźniki, łańcuchy znaków )

  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 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

    Dodatkowo można napisać fragment programu, który wyświetli
    zawartości poszczególnych bajtów zajmowanych w pamięci
    przez w/w zmienne.

  2. Ćwiczenie w wykorzystaniu zapisu wskaźnikowego jako metody dostępu
    do elementów tablicy.

    Napisz funkcje wykonujące podstawowe operacje na tablicach
    (tzn. wczytywanie, wyświetlanie, liczenie sredniej, max, min)
    ale W ZAPISIE WSKAŹNIKOWYM !

  3. Łańcuchy - Napisz funkcje:
       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>.

  4. 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) 

 

          LABORATORIUM 6:     ( typ stukturalny - baza danych wykorzystująca tablice struktur)

  1. Zdefiniuj strukturę pozwalającą przechowywać dane pojedynczego elementu
    wybranej bazy danych np. katalogu książek w bibliotece, spisu samochodów w autokomisie,
    zestawienia miesięcznych wydatków studenta, itp.

    Następnie zdefiniuj N-elementową (pseudo-dynamiczną) tablicę w/w struktur
    pozwalającą przechowywać dane wielu elementów (ale nie więcej niż N)
    z dodatkowym licznikiem informującym o ilości wpisanych danych.

  2. Napisz funkcje pozwalające wczytywać i wyświetlać zawartość bazy.
    Uwaga: w/w tablice lub struktury powinny być przekazywane jako parametry funkcji !

  3. Napisz funkcję pozwalającą wyszukać w bazie elementy o zadanych parametrach
    np. samochód marki FIAT, rocznik nie starszy niż 1990,
         o cenie z zadanego przedziału.

Dodatkowe zadania "dla zaawansowanych":

  1. Napisz funkcję umożliwiającą edycję/poprawianie danych pojedynczych
    elementów bazy. Np zmianę ceny samochodu w autokomisie,
    aktualizację adresu w bazie danych personalnych, itp

  2. Napisz funkcję umożliwiającą interaktywne przeglądanie zawartości bazy.
    Uwzględnij przypadki, gdy dane zapisane w bazie nie zmieszczą się
    na jednym ekranie (np. katalog 1000 tytułów ksiażek i nazwisk autorów).
    - w najprostszym przypadku (przeglądanie bazy od pierwszego do
      ostatniego elementu) wystarczy wprowadzenie tzw. stronicowania,
    - najbardziej uniwersalnym rozwiązaniem jest umożliwienie "sterowania"
      przeglądaniem za pomocą strzałek na klawiaturze tzn:
               klawisz  "<-"  oznacza: wyświetl poprzedni element bazy
               klawisz   "->"  oznacza: wyświetl następny element bazy
               klawisz   "ESC" oznacza: zakończ przeglądanie


Przykładowe zadania do realizacji na ćwiczeniach:

          ĆWICZENIE 1:

  1. Narysuj schematy blokowe prostych algorytmów przetwarzających sekwencję trzech liczb
    wprowadzanych z klawiatury i wyświetlających 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. 

  2. Napisz łańcuch formatujący dla instrukcji printf wyświetlający na ekranie zmienną rzeczywistą typu double:
    - z dokładnością do trzeciego miejsca po przecinku, 
    - samą część całkowitą, 
    - w zapisie naukowym (wykładniczym) 

  3. Napisz program dialogowy wczytujący z klawiatury podstawowe dane dwóch pracowników
    a następnie wyświetlający je "kolumnami" w ten sposób 
    aby zawartość wytłuszczonych pól "nazwisko", "imię", "data" 
    zajmowała zawsze tyle samo miejsca niezależnie od wartośc czy ilości liter: 
    np. 
     Nazwisko: Kowalski      Imię: Jan     Urodzony: 21.03.1980  Staż:  3 lata  Stawka:  15.50 zł/godz 
     Nazwisko: Sienkiewicz   Imię: Tomasz  Urodzony: 08.11.1985  Staż: 15 lat   Stawka: 123.00 zł/godz 

    Dobierz odpowiednie typy zmiennych do reprezentowania w/w danych. 

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

    - wartości wyrażeń:                         
  1. Napisz wyrażenie logiczne sprawdzające czy z odcinków a,b,c da się zbudować trójkąt.

  2. Napisz wyrażenie logiczne sprawdzające czy data zapisana za pomocą trzech zmiennych
    dzien_1, miesiąc_1, rok_1 jest mniejsza od daty zapisanej za pomocą trzech zmiennych
    dzien_2, miesiac_2, rok_2


 

          ĆWICZENIE 2:

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

  2. 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)

  3. 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).

  4. 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ść,

  5. Podaj dwa przykłady problemów, które najwygodniej jest zapisać za pomocą pętli while( )
    oraz dwa inne, które najlepiej oprogramować za pomocą pętli do while( ) .
    Uzasadnij które z nich można zastąpić pętlą for( )

  6. Podaj możliwie najprostszy sposób spowodowania, że program zawierający pętlę while( )
    zacznie się zachowywać jak program zawierający pętlę do while( ) .
    Tzn. pętla zawsze się wykona przynajmniej jeden raz.

    Czy istnieje analogiczna możliwość zamiany rolami pętli do while( ) za pomocą pętli while( )  ?
    Podaj przykład.

  1. Na załączonym listingu zaznacz zakres widoczności poszczególnych zmiennych a
    i uzupełnij odpowiadające im łańcuchy formatujące w instrukcjach printf   (zastępując znaki ___ ).
    Wskaż również miejsca w których wartość zmiennych a jest niezdefiniowana (przypadkowa).

#include <stdio.h>
double a;   //pierwsze a  

void Funkcja( void ) { 
long a;   //drugie a
a = 20*a;
printf("\nWewnatrz funkcji a = %___", a );
}

void main( ) {
  printf("Na poczatku main a = %___", a );
  a = 111;
    {
     char a;   //trzecie a
     printf("\nWewnatrz main a = %___", a );
    }
  Funkcja();
  printf("\nPo wywolaniu funkcji a = %___", a );
}
 

  1. Naszkicuj diagram ilustrujący strukturalny podział problemu prostej gry komputerowej tzw. Strzelanki
    na pod-zadania (przykładową listę podzadań uzupełnij brakującymi elementami):
    - rysowanie pocisku na pozycji (x,y),
    - rysowanie statku kosmicznego na pozycji (x,y)
    - wyświetlenie początkowej planszy gry (tła)
    - wyświetlenie komunikatu "Koniec gry"
    - rysowanie wybuchu poczynając od pozycji (x,y)
    - odczyt danych z urządzenia sterującego (klawiatury, myszki lub joysticka)
    itd.


          ĆWICZENIE 3:  

  1. 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 ?

  2. 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,

  3. 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)

  4. Napisz program, który pozwoli gromadzić w uporządkowanej tablicy liczb
    informacje o najlepszych „czasach” uzyskiwanych przez sprintera podczas treningu.
    Do gromadzenia tych informacji wykorzystaj pseudo-dynamiczną tablicę
    o stałym rozmiarze 100 elementów wykorzystującą dodatkową
    zmienną pomocniczą zliczającą ilość wprowadzonych wyników.
    Nowy wynik powinien być wprowadzany do tablicy w taki sposób
    aby po jego wprowadzeniu zawartość tablicy była nadal uporządkowana niemalejąco.

  5. 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”


          ĆWICZENIE 4: (funkcje – przekazywanie argumentów) 

 Przygotuj krótkie programy ilustrujące odpowiedzi na poniższe pytania:

  1. Czy w języku C/C++ można zdefiniować dwie funkcje o takiej samej nazwie?
    Jak to się powinno zrobić ? (jeżeli można)

  2. Co się stanie jeżeli w funkcji zwracającej wartość (typu innego niż void)
    zapomnimy napisać polecenia  return  wewnątrz kodu funkcji?

  3. Czym się różni zakończenie funkcji poleceniem
         return(0);
    od
         exit(0);

  4. Czym się różnią stosowane w języku C++ trzy sposoby przekazywania argumentów funkcji?
    Który z nich jest najlepszy (najprostszy, najszybszy, najbardziej wygodny, najbezpieczniejszy)

  5. Czym się różnią:
      - definicja funkcji
      - wywołanie funkcji
      - prototyp funkcji
    Jakie informacje muszą być w nich zawarte (np. w prototypie funkcji)
    a które są opcjonalne, tzn. mogą zostać pominięte?

  6. W jaki sposób przekazujemy do/z funkcji argumenty typu tablicowego?
    Czy tablica może być przekazana do funkcji „przez wartość”
    (tzn. że funkcja korzysta z kopii tablicy)

  7. Czy w języku C++ można wywołać funkcję podając mniejszą ilość argumentów
    niż ta którą podano w definicji lub prototypie funkcji?

  8. Czy poprawne są następujące deklaracje:
        void funkcja_A(int tablica[10]);
        void funkcja_B(int tablica[ ]);
        void funkcja_C(int [10] );
        void funkcja_D(int [ ] );
        void funkcja_E( [ ] );

  9. Jakie ma znaczenie modyfikator const, który można wykorzystać w linii definiującej argumenty funkcji?
       const int funkcja_A (const int x, const int* y, const int& z);

  10. Czym się różnią zmienne definiowane wewnątrz ciała funkcji (automatyczne, lokalne)
    od zmiennych definiowanych poza funkcjami (globalne) ?

  11. Jaki znaczenie mają specyfikatory staticregister występujące przed definicjami zmiennych wewnątrz  funkcji?

  12. Jaki znaczenie ma słowo kluczowe inline występujące w linii definiującej nagłówek funkcji?
    Kiedy należy je wykorzystywać a kiedy jest to niewskazane?

  13. Czym się różnią funkcje zdefiniowane następującymi prototypami:
        int funkcja_A(void);
        int* funkcja_B(void);
        int& funkcja_C(void);

  14. Jakie znaczenie mają argumenty funkcji głównej: „int main( int argc, char** argv) ?
    Jak można je wykorzystać ?

  15. Czy w języku C++ można napisać funkcję o dowolnej ilości argumentów?
    Podaj przykład jak można to zrobić (jeżeli można).

  16. Czy typ argumentów funkcji może być zmienny?
    Tzn. czy można wywoływać tą samą funkcję z argumentami różnego typu?

  17. Czy nazwa funkcji może być „zmienną” ?

  18. Czy w języku C++ można utworzyć tablicę, której elementami są funkcje?


          ĆWICZENIE 5: (wskaźniki, funkcje przetwarzające teksty, dynamiczna alokacja pamięci) 

  1. Napisz program wyświetlający na konsoli (dziesiętnie oraz szesnastkowo)
    wartości kolejnych bajtów kodujących w pamięci zawartości zmiennych kilku wybranych typów
    np. char, int, float, double
    Jak należałoby rozbudować ten program
    aby zawartości kolejnych bajtów były wyświetlane w postaci binarnej ?
    (czy można to zrobić za pomocą funkcji ze standardowych bibliotek C++)

  2. Napisz funkcję formatującą tekst poprzez usunięcie
    wszystkich początkowych i końcowych spacji
    z łańcucha zadanego jako parametr wejściowy tej funkcji.

  3. Napisz funkcję formatującą zadany tekst w taki sposób
    aby kolejne wyrazy lub liczby były pooddzielane dokładnie pojedynczymi spacjami.
    Np. zamienającą tekst ”AAA   BBBBB     C     DD     EEEE       ”
    na ”AAA BBBBB C DD EEEE”

  4. Napisz funkcję wyznaczającą sumę wartości liczb całkowitych
    przechowywanych w pamięci komputera w postaci tekstowej
    (np. char* liczby = ”12   -3    64    2     78”; )

  5. Napisz program wykonujący proste obliczenia na dynamicznej tablicy liczb
    o rozmiarze zmienianym przez użytkownika w czasie działania programu.
    Program powinien posiadać MENU umożliwiające:
    - zadawanie (lub zmianę) rozmiaru tablicy przez użytkownika
    - dopisywanie nowych liczb na końcu tablicy (z rezerwacją nowego miejsca)
    - usunięcie dowolnego elementu z tablicy (ze zwolnieniem niewykorzystywanej pamięci)

  6. Napisz funkcję, która pozwoli wczytać do dynamicznej tablicy znaków
    tekst składający się z dowolnej (nieznanej na początku) ilości liter.
    Tzn. w czasie wczytywania, w miarę wprowadzania kolejnych liter,
    rozmiar wykorzystywanej tablicy powinien być dynamicznie powiększany.

  7. Napisz funkcję, która odfiltrowuje (usuwa) z zadanej dynamicznej tablicy liczb rzeczywistych
    wszystkie elementy o wartości ujemnej.
    Parametrem wejściowym tej funkcji powinien być początkowy adres tablicy oraz jej rozmiar.
    Efektem końcowym powinien być adres tablicy wynikowej (zawierającej tylko liczby nieujemne)
    oraz jej rozmiar (najczęściej różny od rozmiaru tablicy wejściowej).
    Uwzględnij przypadek, gdy tablica wejściowa zawiera tylko liczby ujemne!

Dodatkowe:

  1. Wyjaśnij różnice pomiędzy realizacją dynamicznej alokacji pamięci
    za pomocą funkcji calloc( ), malloc( ), free()
    a wykorzystaniem do tego celu operatorów new i delete

  2. Wyjaśnij jak działa funkcja realloc( ).
    Zastanów się dlaczego w języku C++ nie wprowadzono operatora,
    który byłby odpowiednikiem funkcji realloc( )

  3. Napisz program pozwalający przechowywać w pamięci komputera dowolnej wielkości tablicę tekstów.
    Oprogramuj operacje: wczytywania, wyświetlania, wyszukiwania i sortowania
    tekstów przechowywanych w tej tablicy.

  


Literatura:

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