Podstawy programowania
Analiza algorytmów.
Projektowanie algorytmów.
Zad.1. Opracuj algorytm, a następnie program wyznaczający pierwiastki równania kwadratowego tak, aby sprawdzane było czy równanie jest:
• kwadratowe (wtedy wyznacz pierwiastki – jeśli są),
• liniowe (wypisz miejsce zerowe),
• sprzeczne (brak miejsc zerowych) czy tożsamościowe (nieskończenie wiele miejsc zerowych).
Algorytmy iteracyjne
Zad.2. Sformułuj algorytm i napisz program obliczający sumę ciągu N kolejnych liczb naturalnych. Wartość N jest wprowadzana z klawiatury. Wyświetl wyniki podając ilość sumowanych liczb i wartość ich sumy.
Start
Stop Podaj N
Wyświetlenie sum
sum=sum+j;
j=j+1;
j<N
T
N
j=0; sum=0;
N – liczba liczb j – licznik, iterator
sum – suma wyrazów ciągu
Pętla for
• stosowana wtedy, gdy dokładnie wiadomo ile razy pętla ma się wykonać,
• najbardziej odporna na przypadkowe błędy programisty Składnia:
for (instrukcja_inicjujaca; wyrazenie_warunkowe; instrukcja_kroku) {
// instrukcje;
}
instrukcja_inicjujaca – najczęściej operacja przypisania początkowej wartości iteratorowi, np. int i = 0. Obiekt zdefiniowany w instrukcji inicjującej istnieje tylko w ramach pętli for (to zmienna automatyczna o zasięgu blokowym).
wyrazenie_warunkowe – pętla (czyli instrukcje zawarte pomiędzy klamrami) wykonuje się tak długo, jak wyrażenie to ma wartość true, np. i < 10
instrukcja_kroku – instrukcja powodująca zmianę wartości iteratora, np. ++i Te trzy elementy muszą być rozdzielone średnikami ;
Składnia nieskończonej pętli for: for(;;);
Algorytmy iteracyjne
Zad.3. Sformułuj algorytm i napisz program obliczający sumę N liczb naturalnych podawanych przez użytkownika. Wartość N jest wprowadzana z klawiatury. Wyświetl wyniki podając ilość sumowanych liczb i wartość ich sumy.
Start
Stop Podaj N
Wyświetlenie sum
sum=sum+licz;
j=j+1; j<N
T
N
j=0; sum=0;
N – liczba liczb j – licznik, iterator
licz – liczby podawane przez użytkownika
sum – suma podanych liczb
Podaj licz
Algorytmy iteracyjne
Zad.4. Sformułuj algorytm i napisz program obliczający sumę liczb podawanych przez użytkownika. Obliczenia kończy wpisanie liczby 0.
Start
Stop
Wyświetlenie sum
sum=sum+licz;
licz=0
TN
sum=0;
N – liczba liczb j – licznik, iterator
sum – suma wyrazów ciągu
Podaj licz
Pętla while
• stosowana wtedy, gdy nie wiadomo z góry ile razy pętla ma się wykonać (np.
liczbę tę wprowadza użytkownik programu)
• podatna na błędy programisty, ponieważ instrukcja_inicjujaca, wyrazenie_warunkowe oraz instrukcja_kroku nie znajdują się w jednej linii, więc łatwo o którejś z nich zapomnieć.
Składnia:
instrukcja_inicjujaca;
while (wyrazenie_warunkowe) {
instrukcje;
instrukcja_kroku;
}
Cechą charakterystyczną pętli while jest to, że instrukcje mogą nigdy się nie wykonać, jeśli wyrazenie_warunkowe ma początkowo wartość false.
Składnia nieskończonej pętli while:
while(true) {
instrukcje;
}
Pętla do while
• stosowana wtedy, gdy nie wiadomo z góry ile razy pętla ma się wykonać (np.
liczbę tę wprowadza użytkownik programu) – podobnie jak pętla while,
• podatna na błędy programisty, ponieważ instrukcja_inicjujaca, wyrazenie_warunkowe oraz instrukcja_kroku nie znajdują się w jednej linii, więc łatwo o którejś z nich zapomnieć – podobnie jak pętla while,
Składnia:
instrukcja_inicjujaca;
do {
instrukcje;
instrukcja_kroku;
} while (wyrazenie_warunkowe);
Cechą charakterystyczną pętli while jest to, że instrukcje muszą się wykonać co najmniej raz, nawet jeśli wyrazenie_warunkowe ma początkowo wartość false.
Sprawdzenie warunku znajduje się bowiem po instrukcjach (w pętli while – przed).
Składnia nieskończonej pętli do while:
do {
instrukcje;
} while(true);
Algorytmy iteracyjne
Zad.5. Sformułuj algorytm i napisz program obliczający n-tą potęgę zadanej liczby x.
Zadania
Zad.6. Napisz program symulujący odliczanie bomby używając pętli:
a) while(), b) do while(), c) for().
Należy wypisać wszystkie kolejne liczby całkowite (łącznie z zerem), a po upływie zadanego czasu napis „Boom!”.
Wskazówka: do odmierzania czasu wykorzystaj funkcję Sleep(ms) z biblioteki windows.h.
Zad.8. Napisz program, który będzie prosił o hasło dostępu do systemu dopóki nie otrzyma hasła poprawnego.
• gdy je otrzyma wyświetli napis „Zalogowano!”.
• w przypadku więcej niż 5 prób wypisze komunikat: „Dostęp zablokowany!”
Zad.9. Zmodyfikuj program obliczający potęgę liczby tak, aby umożliwiał ponowne wykonanie obliczeń. Wpisanie litery n kończy działanie programu.
Zad.7. Napisz program, który za pomocą pętli for sumuje liczby parzyste w przedziale od 1 do 100.
Liczby losowe w C++
• Liczby „losowe” generowane przez komputer wyznaczane są na podstawie przyjętego algorytmu (wzoru generacyjnego), więc są przewidywalne.
Z tego powodu nazywane są liczbami pseudolosowymi.
• W C++ za generację takich liczb odpowiada m.in. funkcja rand(), która zwraca liczbę całkowitą z przedziału od 0 do RAND_MAX (wykorzystywany jest równomierny rozkład prawdopodobieństwa). Makro RAND_MAX wynosi co najmniej 32 767.
• W celu zapewnienia zmienności generowanych liczb pomiędzy uruchomieniami programu konieczna jest inicjalizacja generatora liczbą o charakterze zmiennym, do czego dobrze nadaje się aktualny czas (funkcja time() ). Za inicjalizację odpowiada funkcja srand().
• deklaracje funkcji srand() i rand() znajdują się w pliku nagłówkowym cstdlib
Zad.10. Napisz program, który wygeneruje trzy liczby losowe: pierwszą z przedziału od 0 do 99, drugą z przedziału od 1 do 100, trzecią z przedziału od 1985 do 2014.
Zad.11. Gra w ”Za dużo, za mało”. Komputer losuje liczbę całkowitą z zakresu 1...100, a gracz ma za zadanie odgadnąć, co to za liczba. Jeżeli podana wartość jest:
• większa – wyświetlany jest komunikat „Podałeś za dużą wartość”,
• mniejsza – wyświetlany jest komunikat „Podałeś za małą wartość”,
• identyczna z wylosowaną – wyświetlany jest komunikat „Gratulacje” i gra
• się kończy.