• Nie Znaleziono Wyników

Ćwiczenia podstawowe, zestaw 5, część 1

N/A
N/A
Protected

Academic year: 2021

Share "Ćwiczenia podstawowe, zestaw 5, część 1"

Copied!
5
0
0

Pełen tekst

(1)

Ćwiczenia podstawowe, zestaw 5, część 1

1 Napisz zestaw funkcji identyfikujących rodzaj znaku

Należy napisać funkcje, pozwalające na identyfikowanie typu znaku przekazanego parametrem.

Załóżmy, że tworzymy funkcję:

int is_lower( char c );

Rezultatem funkcji ma być wartość 0, jeżeli znak c nie jest małą literą, lub wartość różną od zera (np. 1), gdy znak c jest małą literą.

Wykorzystanie funkcji może być następujące:

int main() {

char znak;

cout << "Wprowadz mala litere: "; cin >> znak;

if( is_lower( znak ) )

cout << "Wprowadziales mala litere " << znak; else

cout << "Nie wprowadziles malej litery!"; . . .

}

Pozostałe funkcje mogą być wykorzystane w analogiczny sposób.

int is_upper( char c );

Rezultatem funkcji ma być wartość 0, jeżeli znak c nie jest dużą literą, lub wartość różną od zera (np. 1), gdy znak c jest dużą literą.

int is_digit( char c );

Rezultatem funkcji ma być wartość 0, jeżeli znak c nie jest cyfrą dziesiętną, lub wartość różną od zera (np. 1), gdy znak c jest cyfrą dziesiętną.

int is_oct_digit( char c );

Rezultatem funkcji ma być wartość 0, jeżeli znak c nie jest cyfrą ósemkową, lub wartość różną od zera (np. 1), gdy znak c jest cyfrą ósemkową.

int is_hex_digit( char c );

Rezultatem funkcji ma być wartość 0, jeżeli znak c nie jest cyfrą szesnastkową, lub wartość różną od zera (np. 1), gdy znak c jest cyfrą szesnastkową.

(2)

2 Napisz zestaw funkcji zamiany wielkości liter

Należy napisać funkcje, pozwalające na zamianę wielkości znaku, będącego literą, odpowiednio z dużej na małą, oraz z małej na dużą (zakładamy wykorzystanie kodu ASCII):

char to_lower( char c );

char to_upper( char c );

Jeżeli funkcja to_lower otrzyma w parametrze c znak będący dużą literą, rezultatem funkcji ma być odpowiednia mała litera. Jeżeli znak c nie jest dużą literą, rezultatem funkcji ma być znak c.

Analogicznie, jeżeli funkcja to_upper otrzyma w parametrze c znak będący małą literą, rezultatem funkcji ma być odpowiednia duża litera. Jeżeli znak c nie jest małą literą, rezultatem funkcji ma być znak c.

Należy wykorzystać fakt, że przesunięcie pomiędzy literami dużymi a małymi w kodzie ASCII wynosi 32 (zobacz materiały wykładowe).

Wykorzystanie funkcji to_lower może być następujące:

int main() {

char znak;

cout << "Wprowadz mala litere; "; cin >> znak;

if( ! is_lower( znak ) )

cout << "Nie wprowadziles malej litery!"; else

{

znak = to_upper( znak );

cout << "Duzy odpowiednik wprowadzonej litery to " << znak; }

. . . }

3 Napisz zestaw funkcji wczytującej liczby z zadanego zakresu

Należy napisać funkcje:

int czytaj_liczbe_int_z_zakresu( int dol, int gora );

float czytaj_liczbe_float_z_zakresu( float dol, float gora );

Funkcje odczytują z klawiatury liczbę, przy czym pozwalają tylko na wprowadzenie liczby należącej do przedziału domkniętego określonego parametrami dol i gora.

(3)

Odpytywanie użytkownika trwa tak długo, aż zostanie wprowadzona liczba z odpowiedniego zakresu. Należy kontrolować wartości parametrów dol i gora.

4 Program obliczający pola figur płaskich

Należy napisać program pozwalający na obliczanie pól i obwodów wybranych figur płaskich: kwadratu, prostokąta, koła, trójkąta.

Scenariusz działania programu:

1. Program wyświetla informację o jego przeznaczeniu.

2. Program wyświetla menu główne pozwalające na wybór figury, dla której mają być wykonane obliczenia.

3. Po wybraniu figury, program wczytuje wymagane dane oraz wyświetla obliczone pole i obwód.

4. Program wraca do menu głównego, pozwalając na powtórzenie obliczeń dla dowolnej figury.

5. Program kończy swoje działanie po naciśnięciu przez użytkownika wybranego klawisza zakończenia.

Wymagania

Program ma być podzielony na funkcje realizujące spójne funkcjonalnie czynności. Ilustruje to przedstawiony dalej program przykładowy. Po realizacji pierwszej wersji programu, opartej na poniższym szablonie, należy koniecznie rozbudować program o elementy opisane w sekcji Rozszerzenia.

Rozszerzenia

Proszę rozszerzyć program o kontrolę poprawności prowadzanych parametrów na etapie ich wpisywania, tak, aby program nie pozwolił na wprowadzenie zerowej lub ujemnej liczby określającej np. bok, czy promień. Kontrolowane prowadzanie danych należy zawrzeć w odpowiednim podprogramie.

Program przykładowy

#include <iostream> #include <cstdlib> using namespace std;

// Prototypy wykorzystywanych w programie funkcji void wyswietl_menu();

void obliczenia_dla_kwadratu(); void obliczenia_dla_prostokata(); void obliczenia_dla_kola();

void obliczenia_dla_trojkata(); float pole_kwadratu( float bok );

(4)

int main() {

char klawisz;

cout << endl << "Obliczam parametry figur plaskich"; do { wyswietl_menu(); cin >> klawisz; switch( klawisz ) { case '1' : obliczenia_dla_kwadratu(); break; case '2' : obliczenia_dla_prostokata(); break; case '3' : obliczenia_dla_kola(); break; case '4' : obliczenia_dla_trojkata(); break; } }

while( klawisz != 'z' && klawisz != 'Z' );

return EXIT_SUCCESS; }

void wyswietl_menu( void ) {

cout << "\n1.Kwadrat\n2.Prostokat\n3.Kolo\n4.Trojkat\n5.Trapez" << endl; cout << "\nWybierz numer figury lub Z by zakonczyc: ";

}

void obliczenia_dla_kwadratu( void ) {

float bok;

cout << endl << "Obliczenia dla kwadratu"; cout << endl << "Podaj dlugosc boku: "; cin >> bok;

cout << "Pole : " << pole_kwadratu( bok ); cin.get();

}

(5)

{ }

void obliczenia_dla_kola( void ) {

}

void obliczenia_dla_trojkata( void ) {

}

void obliczenia_dla_trapezu( void ) {

}

float pole_kwadratu( float bok ) {

return bok * bok; }

float obwod_kwadratu( float bok ) {

return 4 * bok; }

float wczytaj_liczbe_f( char komunikat[] ) {

char bufor_tekstowy[ 80 ];

printf( komunikat );

fgets( bufor_tekstowy, 80, stdin ) ; return atof( bufor_tekstowy );

}

Proszę przeanalizować kod i sposób analogiczny zaprogramować brakujące funkcje. Wiem, że niektóre podprogramy wyglądają na „naciągane”. Są krótkie, gdyby je wyeliminować, program stałby się krótszy. Nie to jest jednak naszym celem. Celem jest systematyczne i konsekwentne stosowanie podprogramów do podziału programu na funkcjonalnie spójne fragmenty oraz do wyeliminowania powtarzających się fragmentów kodu.

Cytaty

Powiązane dokumenty

Aby dowiedzieć się czy dana liczba dzieli się przez 7, skreślamy jej ostatnie trzy cyfry, a od tak powstałej liczby odejmujemy liczbę skreśloną, jeśli ta różnica dzieli

Dzisiaj kolejna historyjka obrazkowa, dowiemy się co słychać u Tigera, otwórzcie proszę książkę na stronie 52, przyjrzyjcie się obrazkom i zastanówcie o czym będzie

[r]

Zadanie 13. Oba gazy przereagowały całkowicie. Napisz równanie reakcji i oblicz liczbę cząsteczek otrzymanego produktu z dokładnością do drugiego miejsca po

Stwórz własny styl listy – pierwszy poziom ustaw czcionkę Arial 12 ustaw liczby, drugi poziom Batang 10 – zastosuj do listy jedzenie, piwo.. Wybierz zestaw stylów swobodny,

[r]

- ściśle rosnąca wtedy i tylko wtedy, gdy jej pochodna jest nieujemna oraz między każdymi dwoma punktami przedziału P znajduje się punkt, w którym pochodna ' f jest dodatnia, -

Funkcja jest wygodnym sposobem zamknięcia pewnych obliczeń w „czarnej skrzynce”, której później można używać nie dbając o to, jak je zrealizowano.. Ogólnie definicja