====== Instrukcje sterujące - warunki i pętle ====== * Warunki: * [[http://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#if|if]] * [[http://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#switch|switch]] - lista wyboru * Pętle: * [[http://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#while|while]] * [[http://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#for|for]] * [[http://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#do..while|do while]] * Skok * [[http://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#goto|goto]] - NAJLEPIEJ NIE UŻYWAĆ!!!! * [[https://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#continue|continue]] - kontynuacja pętli * [[https://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#break|break]] - przerwanie pętli lub instrukcji ''switch'' ===== Warunek if ===== {{zajecia:pp1_2021_1:if3.png?500|}} **Przykład** #include /* program sprawdza czy podana liczba jest parzysta */ int main() { int x; printf("Podaj liczbe calkowita: "); scanf("%d", &x); if( x % 2 == 0 ) { printf("Liczba %d jest parzysta\n", x); } return 0; } {{zajecia:pp1_2021_1:operatory_relacji.png?500|}} Operator ''='' to operator przypisania wartości do zmiennej a operator ''=='' to operator sprawdzający, czy wartości są równe. int x = 0; if ( x = 1 ) printf("Czy to jest błąd?") {{zajecia:pp1_2021_1:if_else3.png?500|}} #include /* program sprawdza czy podana liczba jest dodatnia czy ujemna */ int main() { int liczba; printf("Podaj liczbe: "); scanf("%d",&liczba); if( liczba > 0 ) printf("Liczba %d jest wieksza od zera\n",liczba); else printf("Liczba %d jest mniejsza od zera\n",liczba); return 0; } ===== Zadanie - miejsca zerowe ===== Napisz program do wyznaczania miejsc zerowych równania kwadratowego ''y = ax2 + bx +c''. **Dane:** trzy liczby rzeczywiste określające parabolę: ''a'', ''b'', ''c'' \\ **Wynik:** informacja o ilości miejsc zerowych (lub ich braku) oraz wartości miejsc zerowych x1, x2\\ ** Uwaga ** Do obliczania pierwiastka kwadratowego wykorzystaj funkcję [[https://pl.wikibooks.org/wiki/C/sqrt|sqrt()]] z biblioteki [[https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny#math.h|math.h]]. \\ Kompilując program korzystający z funkcji matematycznych dla kompilatora GCC należy dodać opcję ''**-lm**'', np.: cc pierwiastek.c -lm -o pierwiastek **Przykład:** 1 2 3 Brak miejsc zerowych 1 -4 -4 Jedno miejsce zerowe 2.000000 1 0 -4 Dwa miejsca zerowe -2.000000 i 2.000000 ** Dodatkowe ćwiczenia ** * Dodaj do programu z poprzednich zajęć zabezpieczenie przed wykonaniem operacji dzielenia przez zero. * Dopisz do przedstawionego powyżej przykładu warunek sprawdzający czy: * dana liczba jest liczbą parzystą, * jest liczbą podzielną przez 3, * ostatnią cyfrą podanej liczby jest 1. * Do programu obliczającego pierwiastki równania kwadratowego dodaj instrukcje weryfikujące, czy rzeczywiście f(x1)=0 oraz f(x2)=0. Sprawdź czy program poprawnie wyznacza miejsca zerowe poniższych równań i jeśli występują niedokładności to popraw program tak aby je zniwelować: \\ y = x2 - 6.433 x + 0.009474 \\ y = 0.2 x2 - 56 x + 1. ===== Pętla while ===== {{zajecia:pp1_2021_1:while3.png?600 |}} #include /* program wyswietla sekwencje liczb calkowitych od 1 do podanej przez uzytkownika wartosci */ int main() { int liczba; int i = 0; printf("Podaj liczbe: "); scanf("%d",&liczba); while(i <= liczba) { printf("%d\n",i); i = i + 1; } return 0; } ===== Zadanie - Sumowanie liczb ===== Napisz program, który wczytuje kolejno liczby rzeczywiste aż do momentu gdy użytkownik poda wartość 0, po czym wyświetla sumę wczytanych liczb. **Dane:** ciąg liczb rzeczywistych zakończonych wartością 0 \\ **Wynik:** suma podanych liczb\\ **Przykład:** 1 2 3 0 suma 6.000000 5 3.1 -2.5 0 suma 5.600000 ===== Zadanie - Statystyka ===== Rozbuduj program z poprzedniego zadania tak aby dla podanego ciągu liczb obok sumy wyświetlał także wartości: * ilość liczb * ilość liczb większych od 0 * wartość średnia * wartość minimalna * wartość maksymalna Końcowa wartość 0 nie jest brana do obliczeń. **Dane:** ciąg liczb rzeczywistych zakończonych wartością 0 \\ **Wynik:** ilość podanych liczb, ilość liczb większych od 0, suma, średnia, wartość minimalna i maksymalna z podanych liczb\\ **Przykład:** 1 2 3 0 ilosc 3 dodatnie 3 suma 6.000000 srednia 2 min 1 max 3 5 3.1 -2.5 0 ilosc 3 dodatnie 2 suma 5.600000 srednia 1.866 min -2.500000 max 5.000000 ===== Zadanie - Faktoryzacja ===== **Problem:** rozkład liczby całkowitej na czynniki pierwsze\\ **Dane:** liczba całkowita ''n''\\ **Wynik:** ciąg liczb pierwszych większych od 1, których iloczyn wynosi ''n''\\ **Przykładowe wyniki**\\ n=10 2 5 n=12 2 2 3 n=149 149 ===== Zadanie - Zgadywanka ===== Napisz grę w której użytkownik próbuje odgadnąć pewną wylosowaną wartość całkowitą z zakresu od 1 do 100. W zależności o podanej przez użytkownika liczby całkowitej program: * wyświetla komunikat "za duzo", gdy podana wartość jest większa od szukanej * wyświetla kominukat "za malo", gry podana wartość jest za mała * wyświetla komunkat "Brawo !" i kończy działanie gdy użytkownik odgadnie szukaną wartość * wyświetla szukaną wartość i kończy działanie gdy użytkownik poda liczbę 0 Na koniec program wyświetla także komunikat o liczbie podjętych przez użytkownika prób. Do losowania liczb całkowitych wykorzystaj funkcję ''[[https://pl.wikibooks.org/wiki/C/rand|rand()]]'' z biblioteki ''[[https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny#stdlib.h|stdlib.h]]''. int rand(void); Funkcja ta przy każdym uruchomieniu zwraca liczbę całkowitą pseudolosową z zakresu od 0 do wartości określonej przez ''RAND_MAX''. Generator liczb losowych można zainicjować za pomocą funkcji ''srand()'' void srand(int seed); Chcąc uzyskać za każdym razem inny ciąg liczb najwygodniej jest zainicjować generator wartością związaną z aktualnym czasem: funkcja ''[[https://pl.wikibooks.org/wiki/C/time|time()]]'' z biblioteki ''time.h'' zwraca liczbę sekund, które upłynęły od dnia 1 stycznia 1970 roku godziny 0:00:00 czasu uniwersalnego. **Przykład użycia funkcji rand()**\\ #include #include #include int main() { int i=0; srand(time(0)); while(i<10) { printf("%d\n",rand()); i = i +1; } } **Przykładowe wyniki zadania**\\ 2 za malo 50 za duzo 42 Brawo! Liczba podejsc 3 2 za malo 50 za duzo 0 Szukana liczba to 3 Liczba podejsc 2 ===== Dodatkowe ćwiczenia ===== - napisz program, który dla podanych 3 liczb rzeczywistych ''a'', ''b'', i ''c'' wypisze sekwencję liczb od ''a'' do ''b'' z krokiem ''c''. Zabezpiecz program przed możliwością wprowadzenia takich danych wejściowych, które mogłyby spowodować nieskończone wykonywanie się programu (np. krok ''c=0''). - wyświetl tablicę znaków ASCII poczynając od znaku SPACE (32) do znaku DEL (127) wraz z odpowiednimi wartościami liczbowymi w systemie dziesiętnym, szesnastkowym i ósemkowym. - Napisz program wyświetlający figury geometryczne w trybie tekstowym, wypełnione lub puste. Dla podanej wartości całkowitej program wysiwietla: * kwadrat o zadanej długości boku * trójkąt prostokątny równoramienny o zadanej długości przyprostokątnych * okrąg o zadanym promieniu - Napisz program, który dla podanej podstawy i wykładnika oblicza potęgę. Dla uproszczenia przyjmujemy, że wykładnik jest liczbą całkowitą. - Napisz program wyświetlający wartość silni z podanej przez użytkownika liczby całkowitej. - Napisz program wyświetlający tabliczkę mnożenia, której rozmiar ustalany jest przez użytkownika.