====== 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.