Politechnika Wrocławska,
Wydział Elektroniki, 1 rok studiów, sem. zimowy 2012/2013
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 zajęć:
- Microsoft
Visual Studio
lub
- Bloodshed Dev C++
lub
- Borland C++ Builder
Archiwum: Lab_JP1_2006
- treści zadań 30-sto godzinnego laboratorium realizowanego w 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 inżynierskim
-
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ń: |
|
|
-
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
maleją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 definicje:
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++"
- Robert Lafore
"Programowanie w języku C przy użyciu Turbo C++ "
- Bjarne Stroustrup
"Język C++ "
- Robert Sedgewick "Algorytmy w C ++ "
- Kent Reisdorph "C++
Builder 6 - dla każdego" (do laboratorium z wykorzystaniem C++
Buildera)
|