Cwiczenia_Wstęp do informatyki dr. Elżbieta Kryś . p. 1 Algorytmem nazywa się poddający się interpretacji skończony zbiór instrukcji wykonania zadania mającego określony stan końcowy dla każdego zestawu danych wejściowych W algorytmach mogą występować kroki powtarzane (iteracje) a także struktury warunkowe typu rozwidleń Napisać fragment programu na obliczenie sumy oraz liczby elementów ujemnych i dodatnich w zadanym ciągu {a}, składającym się z N elementów różnych od zera. N = 10. {a} a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3 -2 5 8 12 -4 -26 12 45 -76 Sd Su lu ld wariant1: Sd = 0; ld = 0; Su = 0; lu = 0; for (i = 1; i <= N; i = i+1) if ( a[i] > 0 ) { Sd = Sd + a[i]; ld = ld + 1; } else { Su = Su + a[i]; lu = lu + 1; } wariant 2: et1 : et2 : et3 : Sd = 0; ld = 0; Su = 0; lu = 0; i = 1; if (a[i] > 0) goto et2; Su = Su + a[i]; lu = lu + 1; goto et3; Sd = Sd + a[i]; ld = ld + 1; i = i + 1; if (i <= N ) goto et1; Najtrudniejszą częścią rozwiązania problemu na komputerze jest prawidłowe zaprojektowanie algorytmu rozwiązania. Wszystkie programy mogą być napisane w oparciu o trzy struktury sterujące: strukturę sekwencji strukturę wyboru strukturę powtórzenia. Cw z petli 1 Cwiczenia_Wstęp do informatyki dr. Elżbieta Kryś . p. 2 Struktura sekwencji - dopóki nie jest powiedziane inaczej, "komputer" wykonuje wyrażenia programu jedno po drugim w porządku w jakim zostały napisane do sumy dodaj x suma=suma+x licznik=licznik+1 do licznika dodaj 1 Działanie programu jest graficzną reprezentacją algorytmu lub jego części. Można używać określonych symboli specjalnego przeznaczenia: prostokąty, romby, owale, koła. Strzałki łączące te symbole to linie przepływu. Symbol prostokąta = symbol działania = > dowolne działanie, także operacja wejścia/wyjścia (input/output) C++ dostarcza trzech typów struktur wyboru: if (pojedyncza struktura wyboru) if / else (podwójna struktura wyboru) switch (struktura wielokrotnego wyboru) C++ dostarcza trzech typów struktur powtórzenia: while do / while for C++ posiada siedem struktur sterujących: - sekwencję - trzy typy wyboru - trzy typy powtórzenia (loop, pętle) Instrukcja warunkowa if Instrukcja warunkowa umożliwia wykonanie pewnej instrukcji w zależności od wartości wyrażenia. Wszystkie wartości różne od 0 są traktowane jako prawda, równe 0 jako fałsz. Wyrażenia logiczne są liczone tylko do momentu, w którym można określić jego wartość. W obu rozkazach instrukcja może być instrukcją złożoną Cw z petli 2 Cwiczenia_Wstęp do informatyki dr. Elżbieta Kryś . p. 3 W pierwszym przypadku instrukcja wykonuje się, jeśli wartość wyrażenia jest różna od 0. W drugim wykonuje się jedna z dwóch podanych instrukcji (nigdy obie) - pierwsza, gdy wartość wyrażenia jest różna od 0, druga - gdy wartość wyrażenia jest równa 0. Przykłady: /*---------------------------------------------------------------------------------------Algorytm oblicza wartość funkcji f(x) w punkcie x. Funkcja zadana jest wzorem: f(x) = 1/(x^2 + 1), dla x <=0 f(x) = ln x, dla x > 0 /*---------------------------------------------------------------------------------------float x, f; cout << "Podaj wartość x: "; cin >> x; if (x <= 0) f = 1/(pow(x,3) + 1); else f = log(x); cout << "\nDla x = "; cout << x << " funkcja F(x) = "; cout << f; Możemy stosować wybór wielowariantowy używając zagnieżdżoną instrukcję if..else: if ( warunek1 ) instrukcja1; else if ( warunek2 ) instrukcja2; else if ( warunek3 ) instrukcja3; ...................................................; else if ( warunekN ) instrukcjaN; /* Warunek trojkata */ float a,b,c; cout << "Podaj a: "; cin >> a; cout << "a = " << a << endl; cout << "\nPodaj b: "; cin >> b; cout << "b = " << b << endl; Cw z petli 3 Cwiczenia_Wstęp do informatyki dr. Elżbieta Kryś . p. 4 cout << "\nPodaj c: "; cin >> c; cout << "c = " << c << endl << endl; if (a+b > c) cout << "Spelniony jest I warunek trojkata; " << a+b << endl; else cout << "Nie jest spelniony I warunek trojkata; " << a+b << endl; if (b+c > a) cout << "Spelniony jest II warunek trojkata; " << b+c << endl; else cout << "Nie jest spelniony II warunek trojkata; "<< b+c << endl; if (a+c > b) cout << "Spelniony jest III warunek trojkata; " << a+c << endl; else cout << "Nie jest spelniony III warunek trojkata; "<< a+c << endl; } /*-------------------------------------------------------------------------------------------------*/ /*Algorytm oblicza stopień na podstawie liczby otrzymanych punktów */ /* Kryteria: 0.. 49 pkt. - 2 /* 50.. 59 pkt. - 3 /* 60.. 69 pkt. - 3.5 /* 70.. 79 pkt. - 4 /* 80.. 89 pkt. - 4.5 /* 90..100 pkt. - 5 /*------------------------------------------------------------------------------------------------ */ */ */ */ */ */ int lp; float stopien; cout << "Podaj liczbę punktów (0 <= lp <= 100): "; cin >> lp; if (lp <= 49) stopien = 2; else if (lp <= 59) stopien = 3; else if (lp <= 69) stopien = 3.5; else if (lp <= 79) stopien = 4; else if (lp <= 89) stopien = 4.5; else stopien = 5; cout << "Twoja ocena: "<< stopien ; } Zadania poziomu "1" - instrukcje podstawowe (10 zadań) Wymagania: - instrukcja podstawiania, instrukcja if, - podstawowe operatory i funkcje (np. pierwiastek, logarytm, f. trygonometryczne) - zmienne typu całkowitego i zmiennoprzecinkowego, - podstawowe instrukcje wejścia/wyjścia (cin, cout). uwaga: w rozwiązaniach nie stosujemy tablic. 1.01 Napisz algorytm rozwiązujący równanie kwadratowe. Dane wejściowe: wartości trzech współczynników. Wyjściowy wydruk na ekranie: a) wartości pierwiastków rzeczywistych, b) wartości pierwiastków rzeczywistych i urojonych. 1.02 Napisz algorytm który wczyta trzy wartości typu rzeczywistego i na wyjściu wydrukuje czy mogą one być długościami boków trójkąta. Dane wejściowe: trzy liczby. Wydruk wyjściowy na ekranie: łańcuch znaków: "wczytane wartości mogą być bokami trójkata" lub " wczytane wartości NIE mogą być bokami trójkąta". Cw z petli 4 Cwiczenia_Wstęp do informatyki dr. Elżbieta Kryś . p. 5 1.03 Napisz algorytm który wczyta 20 liczb rzeczywistych i po ich wczytaniu wydrukuje największą z wczytanych liczb oraz jako która z kolei była wczytana. Dane wejściowe: 20 liczb. Wydruk wyjściowy (na ekranie): wartość największej z wczytanych liczb oraz jej numer kolejny przy wczytywaniu. a) zaproponuj rozwiązanie w przypadku jeśli dwie lub więcej z wczytanych liczb będzie miało równe maksymalne wartości. 1.04 Napisz algorytm który znajdzie najmniejszą wartość z kolejno wczytywanych liczb. Dane wejściowe: liczba mówiąca ile liczb będzie wczytanych, wczytywane liczby. Wydruk wyjściowy: wartość najmniejszej z wczytanych liczb oraz jej numer kolejny przy wczytywaniu. 1.05 Rozwiąż zadanie 1.04 zmodyfikowane następująco: wczytywane są tylko liczby dodatnie, nie wiesz ile będzie wczytanych liczb (czyli zaproponuj sposób zakończenia programu po wczytaniu ostatniej liczby dodatniej). 1.06 Napisz algorytm który wczyta a) dwie b) trzy liczby calkowite i wydrukuje ich największy wspólny podzielnik 1.07 Napisz algorytm rozwiązujący układ dwóch równań liniowych z dwoma niewiadomymi. ax + by = c dx + ey = f Dane wejściowe: a, b, c, d, e, f. Wydruk wyjściowy: wartości x i y. 1.08 Napisz algorytm który wczyta liczbę calkowitą (z przedziału: 0 – 1000, zapisaną w systemie dziesiętnym) i wydrukuje tę samą liczbę przedstawioną w systemie: a) dwójkowym, b) trójkowym, c) ósemkowym, d) szesnastkowym (heksadecymalnym). 1.09 Napisz algorytm który wczyta "n" liczb i wydrukuje ich: a) średnią arytmetyczną, b) wariancję. n x )2 ( xi Podpowiedź: wariancję liczymy wg wzoru: V 1 n ; gdzie <x> oznacza średnią arytmetyczną. 1.10 Napisz algorytm który wczyta parę liczb rzeczywistych (X, Y) i określi czy punkt płaszczyźnie wyznaczony tymi liczbami leży: a) wewnątrz zacienionego obszaru na rysunku poniżej, b) na granicy zacienionego obszaru, c) poza granicami zacienionego obszaru. Cw z petli 5 na