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 3 , Lab 4
, Lab 5 , Lab 6 , Lab
7
Podstawowe informacje:
PRZYKŁADOWE
ZADANIA DO REALIZACJI
LABORATORIUM
NR 1. |
- Napisz program wyświetlający na ekranie swoją
"Wizytówkę"
tzn. nazwisko, imię, adres, telefon, e-mail, itp.
- 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.
- 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 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. |
- 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
- 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.
- Program wczytujący z klawiatury długości trzech
odcinków
i sprawdzający czy da się z nich zbudować trójkąt.
- 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
- 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. |
- 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 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 program wyznaczający iteracyjnie
(numerycznie) sumę szeregu:
1/x + 1/x 2 + 1/x3 + 1/x4 + . .
. + 1/xn
- 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ść,
- Napisz program wyświetlający na ekranie "choinkę" o
wysokości zadawanej z klawiatury
*
***
*****
*******
#
|
LABORATORIUM
NR 4. |
- 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] =
.......
- 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)
- 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 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”
- 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. |
- Ć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
- Napisz program, który wyświetli w kodzie
szesnastkowym (heksadecymalnie)
zawartości poszczególnych bajtów kodujących zmienne z zadania (a)
- Ć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. |
- 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)
- 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 ).
- 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. |
- 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>.
- 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
|