Politechnika
Wrocławska,
Wydział Informatyki i Telekomunikacji, 1 rok studiów, sem. zimowy 2023/2024
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 )
|
-
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ę)
-
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
-
Napisz program wyznaczający pierwiastki (miejsca
zerowe)
trójmianu kwadratowego Ax2 + Bx + C =
0
-
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 )
|
-
Napisz program rysujący na ekranie poziomą kreskę
(ze znaków
minus)
o długości zadawanej z klawiatury.
-
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.
-
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.
-
Napisz program wyznaczający iteracyjnie
(numerycznie) sumę
szeregu:
1/x + 1/x 2 + 1/x3 + 1/x4
+ . .
. + 1/xn
-
Napisz program wyświetlający na ekranie "choinkę"
o wysokości zadawanej z klawiatury
*
***
*****
*******
#
|
LABORATORIUM 3: ( tablice
)
|
-
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] =
.......
-
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)
-
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 )
|
-
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)
-
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 ).
-
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 )
|
-
Ć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.
-
Ć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 !
-
Ł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>.
-
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)
|
-
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.
-
Napisz funkcje
pozwalające wczytywać
i wyświetlać zawartość bazy.
Uwaga:
w/w tablice lub
struktury powinny być przekazywane jako parametry funkcji !
-
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":
-
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
-
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:
|
-
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.
-
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)
-
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.
-
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ń: |
|
![](wzor_2.gif) |
-
Napisz wyrażenie logiczne sprawdzające czy z
odcinków a,b,c
da się zbudować trójkąt.
-
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:
|
-
Napisz program wyświetlający na ekranie kolejne 100
liczb
parzystych
-
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)
-
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).
-
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ść,
-
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( )
-
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.
-
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 );
}
-
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:
|
-
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 ?
-
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,
-
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)
-
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.
-
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:
-
Czy w języku C/C++ można zdefiniować dwie funkcje o
takiej
samej nazwie?
Jak to się powinno zrobić ? (jeżeli można)
-
Co się stanie jeżeli w funkcji zwracającej wartość
(typu
innego niż void)
zapomnimy napisać polecenia return
wewnątrz kodu
funkcji?
-
Czym się różni zakończenie funkcji poleceniem
return(0);
od
exit(0);
-
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)
-
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?
-
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)
-
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?
-
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( [ ] );
-
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);
-
Czym się różnią zmienne definiowane wewnątrz ciała
funkcji
(automatyczne, lokalne)
od zmiennych definiowanych poza funkcjami (globalne) ?
-
Jaki znaczenie mają specyfikatory static
i register
występujące przed definicjami zmiennych wewnątrz funkcji?
-
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?
-
Czym się różnią funkcje zdefiniowane następującymi
prototypami:
int funkcja_A(void);
int* funkcja_B(void);
int&
funkcja_C(void);
-
Jakie znaczenie mają argumenty funkcji głównej: „int
main(
int argc, char** argv) ?
Jak można je wykorzystać ?
-
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).
-
Czy typ argumentów funkcji może być zmienny?
Tzn. czy można wywoływać tą samą funkcję z argumentami różnego typu?
-
Czy nazwa funkcji może być „zmienną” ?
-
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)
|
-
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++)
-
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.
-
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”
-
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”; )
-
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)
-
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.
-
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:
-
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
-
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( )
-
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 ++ "
|