Algorytmy i język C++ Tomasz Bielaczyc

Wielkość: px
Rozpocząć pokaz od strony:

Download "Algorytmy i język C++ Tomasz Bielaczyc"

Transkrypt

1

2 Literatura T. H. Cormen, C. E. Leiserson, R. L. Rivest, Wprowadzenie do algorytmów, WNT, 1997, J. Grębosz, Symfonia C++ standard, Editions 200 Kraków,2008, D. Harel, Rzecz o istocie informatyki (algorytmika), WNT, 1992, K. Jamsa, Wygraj z C++, ZNI "MIKOM", 1996.

3 Początek W IV w. p. n. e. Euklides podał algorytm wyznaczania NWD dwóch liczb naturalnych - jest to pierwszy znany algorytm. W III w. p. n. e. Eratostenes podał metodę znajdowania liczb pierwszych. Słowo algorytm wywodzi się od nazwiska perskiego matematyka z IX wieku Muhammeda Alchwarizmi (łac. Algorismus), który podał reguły dodawania, odejmowania, mnożenia i dzielenia liczb dziesiętnych.

4 Pierwsze kalkulatory William Oughtred stworzył suwak logarytmiczny w 1632 roku - po tym jak John Napier odkrył logarytmy. W 1642 roku Blaise Pascal stworzył Pascaline - pierwszy mechaniczny kalkulator - posiadający 8 obrotowych tarcz, dało się na nim wykonywać operacje dodawania i odejmowania na ośmiocyfrowych liczbach (zbudował takich urządzeń koło pięćdziesięciu - można je oglądać w muzeach). W 1694 roku Gottfried Wilhelm Leibniz zbudował Staffelwalze - wałek korkowy - maszynę do mnożenia (którą zaprojektował w 1671 roku). Thomas de Colmar skonstruował w 1820 roku kalkulator działający dzięki bębnom z kołami zębatymi - był on masowo produkowany przez kolejne 100 lat. Kalkulatory bazujące na prototypie stworzonym przez Willgodta Odhnera w 1890 roku używające tarcz z ruchomymi bolcami używane były do lat siedemdziesiątych dwudziestego wieku.

5 Pierwsze komputery W 1833 roku Charles Babbage zbudował "maszyne różnicową" służącą do obliczania pewnych wzorów matematycznych. Zrobił też projekt "maszyny analitycznej" do realizacji algorytmów zakodowanych w postaci otworów wydziurkowanych w kartach (wzorowanej na krośnie tkackim wynalezionym w 1801 roku przez Josepha Jacquarda). Kiedy Ada Byron zasugerowała, aby zilustrować działanie maszyny, pokazując, jak obliczałaby liczby Bernoulliego powstał algorytm uważany dziś za pierwszy program komputerowy.

6 Pierwsze współczesne komputery W 1890 roku Herman Hollerith zbudował maszyną tabulacyjną umożliwiającą dokonanie spisu ludności w USA w niecałe 3 lata. Do wprowadzania, sortowania i podliczania danych wykorzystywała dziurkowane karty. W 1896 roku Hollerith założył firmę Tabulating Machine Company, która w 1911 przekształciła się w International Business Machines (IBM). W 1939 Wiliam Hewlett i David Packard założyli firmę HP. Pierwszy komputer używający systemu binarnego został stworzony w 1933 roku przez Konrada Zuse. W 1945 roku powstał ENIAC - ważący 27 ton i zawierający lamp eelektronowych komputer służył do obliczeń różnorakiego rodzaju. W tym samym roku powstały tranzystory, dzięki którym kilka lat póżniej prędkość i wydajność komputerów została zwielokrotniona.

7 Asemblery Pierwsze "prawdziwe" komputery powstały w latach 40-tych XX wieku. Pierwsze języki programowania to asemblery. Są to języki bardzo zbliżone do kodu maszynowego. Jedna instrukcja języka odpowiada tutaj jednej instrukcji dla procesora. Języki tego typu nazywamy językami programowania niskiego poziomu. Kompilatory (języki tłumaczące zapis symboliczny na maszynowy) w tym przypadku również nazywane są asemblerami.

8 Języki wysokiego poziomu Aby ułatwić pracę użytkownikowi powstały języki wysokiego poziomu. Są to języki w dużym stopniu zrozumiałe dla użytkownika. Do przerobienia na język maszynowy konieczny jest kompilator, który rozbija polecenia na podpolecenia języka maszynowego. Przykładowe dzisiaj stosowane języki wysokiego poziomu to Java, Pascal, Python. Pierwszym takim językiem był Fortran stworzony w latach 50-tych przez Johna Backusa. Na przełomie lat 50-tych i 60-tych powstał Algol pierwszy język zaprojektowany we współpracy międzynarodowej.

9 Początki C W 1966 roku Martin Richards zaprojektował język BCPL (Basic Combined Programming Language). Jego następcą był język B, natomiast w 1972 roku Dennis Ritchie i Ken Thompson stworzyli język C (dla rozszerzenia możliwości języka B). Dopiero w 1978 roku język zyskał (ogromne) zainteresowanie w związku z pojawieniem się książki Briana Kerninghana i Dennisa Ritchiego pt. The C Programming Language (Język C, WNT, 1988). W 1981 roku po wprowadzeniu przez IBM komputera PC, język C oderwał się od UNIXowych korzeni i stał się populanym językiem mikrokomputerów.

10 C++ Język C zyskał popularność wśród programistów, gdyż umożliwia większą, niż inne języki kontrolę nad komputerem (można powiedzieć, że jest językiem niższego poziomu, niż np. Java). W roku 1983 Bjarne Stroustrup rozwinął C++. Rozszerza on C między innymi o obiekty (struktury mogące przechowywać dane i funkcje).

11 Kompilatory Rozwojowi języka grozi zawsze rozbicie na wiele niezgodnych ze sobą pakietów programowania. Kompilatory języka C dla PC są zgodne w obszarach objętych normą ANSI/ISO (American National Standarts Institute - Amerykański Narodowy Instytut Normalizacji, International Organization for Standardization - Międzynarodowa Organizacja Normalizacyjna), ale poza nimi występują różnice.

12 Najkrótszy możliwy program Najkrótszy możliwy program w języku C to main() {} Każdy program musi posiadać funkcję główną, której polecenia znajdują się w nawiasie {}. (W zależności od kompilatora do funkcji głównej często dodaje się przedrostek void lub int). Oczywiście powyższy program nic nie robi.

13 Instrukcja include Aby móc używać podstawowych komend wejścia/wyjścia musimy umieścić w programie ich definicje. Robimy to za pomocą instrukcji #include. Jest to dyrektywa preprocesora (kompilator wykonuje ją przed kompilowaniem). Dołącza ona plik odpowiedniej biblioteki. W poniższym przypadku mówi kompilatorowi, aby pobrał plik stdio.h i umieścił jego zawartość w tym miejscu programu.

14 Pierwszy program #include <stdio.h> int main() { printf("witaj świecie!"); //wypisuje na ekran: // Witaj świecie! }

15 Biblioteki W trakcie tego wykładu zamiast stdio.h będziemy używać biblioteki iostream. Ponadto dodamy przestrzeń nazw poleceniem using namespace std; (bez tego przed niektórymi poleceniami konieczne byłoby dopisywanie przedrostka std::). (Podobny do iostream z przestrzenią nazw std zasób poleceń, chociaż mniejszy, daje biblioteka iostream.h.)

16 Polecenia wejścia - wyjścia Jako polecenia standartowego wyjścia (wypisywania na ekran) będziemy wówczas mogli użyć cout (jest to polecenie języka C++) zamiast komendy printf z biblioteki stdio.h. Dla standartowego wejścia użyjemy komendy cin (a nie polecenia scanf).

17 Polecenia wejścia - wyjścia Wczytywane zmienne oddzielamy od siebie (oraz od polecenia cin) sybmolem >>. Wypisywane zmienne oraz wypisywany tekst (który wstawiamy w cudzysłów) odzielamy symbolem << (składnia poleceń printf oraz scanf jest bardziej skomplikowana)

18 Polecenia pomocnicze Poleceniem system("chcp 1250"); otrzymujemy możliwość dostania w konsoli polskich znaków - trzeba w tym celu we właściwościach konsoli wybrać czcionka: Lucida Console. Poleceniem ("cls"); możemy wyczyścić tekst w konsoli - po uruchomieniu programu pojawi się tylko tekst tego programu dotyczący. Aby konsola nie zniknęła natychmiast po wykonaniu zadania 1 w treści kodu programu musimy dopisać polecenie system("pause"); 1 dotyczy np. wxdev-c++

19 Zmienne typu char Zmienna typu char odpowiada jednemu znakowi i zajmuje jeden bajt pamięci (może ona służyć także do reprezentowania liczb w zakresie od -128 do 127).

20 Zmienne typu char Poniższy program wczytuje, a następnie wypisuje dwie litery. #include<iostream> using namespace std; int main( ) { char a, b; //deklarujemy dwie zmienne typu char cout<<"podaj swoje inicjały\n"; //"\n"-przejście do nowej linii cin >> a >> b; //wczytanie zmiennych a, b cout<<"imię zaczyna się od "<<a<<", a nazwisko od "<<b<<".\n"; }

21 Tablica znaków W poniższej funkcji głównej programu aby wczytać ciąg liter użyjemy tablicy znaków typu char. char IMIE[15]; //15 - maksymalna długość ciągu znaków cout << "Jak masz na imię? \n"; cin >> IMIE; //wczytanie ciągu znaków cout << "Witaj " << IMIE << "! \n";

22 Zmienne typu string Zamiast deklarować tablicę znaków możemy użyć zmiennej typu string. Niektóre kompilatory wymagają dodania biblioteki string (czyli dopisania w nagłówku #include <string>). Napiszmy jeszcze raz podobny program string imie, adres, dane; cout << "Podaj swoje imię. \n"; cin >> imie; cout << "Podaj swój adres. \n"; cin >> adres; //wpisujemy bez użycia spacji

23 Zmienne typu string Na koniec wypiszmy dane cout << "imię: " << imie << ", adres: " << adres << endl; (Ten sam efekt wypisania danych uzyskamy pisząc dane="imię: "+imie+", adres: "+adres; cout << dane << endl; //endl = "\n" )

24 Zmienna typu int Jednym z najbardziej popularnych typów zmiennych jest zmienna typu int. Typ int ma obecnie 2 rozmiar czterech bajtów (32 bitów) i obejmuje liczby całkowite z zakresu od (czyli ) do Zmienna unsigned mając 4 bajty reprezentuje liczby od 0 do Gdybyśmy chcieli działać na jeszcze większych liczbach możemy użyć zmiennej typu long long o rozmiarze ośmiu bajtów. 2 zależnie od kompilatora i od procesora, można to sprawdzić wpisując w programie cout «sizeof(int);

25 Zmienna typu int Dopiszmy do naszego programu pytanie o wiek. int wiek; int rok=2011; //deklarując zmienną możemy przypisać jej wartość cout << "Ile lat skończyłeś(łaś) lub skończysz w tym roku? \n"; cin >> wiek; rok = rok-wiek; //przypisanie nowej wartości zmiennej rok cout << "Urodziłeś się w " << rok << " roku. \n";

26 Działania, zakres int-a Oczywiście, +, są standartowymi działaniami. Operacja / daje dla zmiennych całkowitych wynik dzielenia z resztą (działanie na int-ach musi zwracać int-a). Działanie % daje resztę z dzielenia. Łatwo podać przykład dwóch liczb będących w zakresie int-a, których iloczyn bądź suma wychodzą poza ten zakres - wówczas otrzymamy nieprawidłowy wynik.

27 Kod ASCII Kod ASCII (American Standard Code for Information Interchange) przyporządkowuje liczby z zakresu literom i innym symbolom. Duże litery są reprezentowane liczbami od 65 do 90, a małe liczbami od 97 do 122. Wykonując poniższy program można sprawdzić jaką liczbą jest kodowany dany znak.

28 Kod ASCII Pisząc char znak; cin >> znak; int kod=znak; otrzymamy przyporządkowanie znakowi wpisanemu z klawiatury jego kodu ASCII. Następnie możemy go wypisać cout<<"znak "<<znak<<" jest kodowany liczbą "<<kod<<".";

29 Zadania Zadanie Napisz program proszący o podanie pięciu liter, a następnie wypisujący je na ekran w odwrotnej kolejności. Zadanie Napisz program pytający o imię, nazwisko oraz miasto zamieszkania, a następnie wypisujący te dane na ekran.

30 Zadania Zadanie Napisz program proszący o podanie dwóch liczb całkowitych, a następnie wypisujący ich sumę, różnicę, iloczyn oraz wynik dzielenia z resztą pierwszej przez drugą i drugiej przez pierwszą. Zadanie Napisz program pytający o rok i miesiąc urodzenia oraz wypisujący na ekran ilość przeżytych miesięcy. Zadanie Pisząc c=a%b; przypisujemy zmiennej c resztę z dzielenia a przez b. Napisz program obliczjący resztę z dzielenia pierwszej podanej liczby przez drugą bez użycia %.

31 Zadania Zadanie Napisz program proszący o wpisanie kolejnych trzech znaków z klawiatury i wypisujący ich kod ASCII. Zadanie Napisz program proszący o podanie liczby z zakresu od 97 do 122, a następnie wypisujący dla jakiej litery podana liczba jest kodem.

32 Instrukcja if Instrukcja warunkowa if umożliwia wykonanie pewnego polecenia lub bloku poleceń przy założeniu, że spełniony jest odpowiedni warunek. Może być postaci if(warunek) instrukcje lub if(warunek) instrukcja1 else instrukcja2 i tak dalej.

33 Instrukcja if Jeżeli instrukcja składa się z więcej niż jednego polecenia musi cała być wzięta w nawias { }. W warunku często używamy operacji relacji: == równy, > większy, >= większy lub równy, < mniejszy, <= mniejszy lub równy,! = różny oraz operatorów logicznych && oraz, lub,! nieprawda, że.

34 Podzielność Sprawdźmy podzielność jednej liczby całkowitej przez drugą. int a, b; cout << "Podaj a \n"; cin >> a; cout << "Podaj b \n"; cin >> b; if (a%b>0) cout << "Liczba a nie jest podzielna przez b. \n"; else cout << "Liczba b dzieli a. \n";

35 Minimum Znajdźmy teraz najmniejszą z trzech różnych liczb. int a, b, c; cout << "Podaj trzy różne liczby \n"; cin >> a >> b >> c; if (a<b && a<c) cout << "Pierwsza podadana liczba jest najmniejsza. \n"; else if (b<c) cout << "Druga podadana liczba jest najmniejsza. \n"; else cout << "Trzecia podadana liczba jest najmniejsza. \n";

36 Typ zmiennoprzecinkowy W poniższej funkcji użyjemy zmiennej typu float. Zajmuje ona 4 bajty pamięci, ma zakres od do i dokładność 6 cyfr znaczących. Przykładowo zapis e+09 oznacza liczbę , zapis e-13 oznacza

37 Równanie liniowe Aby rozwiązać równanie liniowe ax = b najpierw wczytajemy dane. float a, b, wynik; cout <<"Rozwiążmy równanie liniowe postaci ax=b. \n"; cout << "a="; cin >> a; cout << "b="; cin >> b;

38 Równanie liniowe Mamy trzy możliwości if (a!=0) { wynik=b/a; //dla typu float / jest zwykłym dzieleniem cout <<"Rozwiazaniem jest b/a=" <<wynik <<endl; } else if (b==0) cout <<"Rozwiązaniem jest każda liczba rzeczywista.\n"; else cout << "Równanie nie ma rozwiązań. \n";

39 Instrukcja switch W przypadku, gdy alternatywnych warunków jest więcej (i gdy da się je przedstawić za pomocą wartości) warto użyć instrukcji switch. Po wczytaniu danych float a,b; char dzialanie; cout << "Wprowadz dane: <liczba> <dzialanie> <liczba> \n"; cin >> a >> dzialanie >> b; możemy napisać funkcję definiującą wybrane działanie.

40 Instrukcja switch switch(dzialanie) { case + : cout << a+b << endl; break; case - : cout << a-b << endl; break; case * : cout << a*b << endl; break; case / : if(b==0) cout << "Nie dziel przez zero! \n" else cout << a/b << endl; break; default: cout << "Nieznane działanie" << endl; }

41 Dokładność Jeśli po uruchomieniu powyższego programu wpiszemy sumowanie bardzo dużej i bardzo małej liczby możemy dostać nieprawdziwy lub niedokładny wynik. Przykładowo sumując otrzymamy wynik Sześciocyfrowa dokładność zmiennych typu float nie pozwala otrzymać precyzyjnego wyniku w tym przypadku.

42 Dokładność Możemy poprawić dokładność używając zmiennej typu double. Ma on 8 bajtów i dokładność 15 cyfr znaczących. Można za jej pomocą reprezentować liczby z zakresu od 1.7e 308 do 1.7e Aby program wypisywał wynik obliczeń ze zwiększoną dokładnością musimy przed poleceniami wypisywania dodać polecenie cout.precision(15);

43 Inne działania Jeżeli chcemy poza standardowymi działaniami otrzymać na przykład sin(a), cos(a), log(a) lub a b poleceniem pow(a,b) albo całość z a poleceniem floor(a), musimy dołączyć do programu bibliotekę math.h. Napiszmy funkcję, która dla podanych liczb rzeczywistych a, b sprawdza, czy większe jest a b, czy b a.

44 include<math.h> float a,b; cout << "Wpisz dwie liczby \n"; cin >> a >> b; if(pow(a,b)>pow(b,a)) cout<<"a^b="<<pow(a,b)<<"<b^a="<<pow(b,a)<<endl; else if(pow(a,b)<pow(b,a)) cout<<"a^b="<<pow(a,b)<<"<b^a="<<pow(b,a)<<endl; else cout<<"a^b="<<pow(a,b)<<"=b^a="<<pow(b,a)<<endl;

45 Zadania Zadanie Napisz program proszący o podanie liczby całkowitej, a następnie wypisujący jej wartość bezwzględną. Zadanie Napisz (używając instrukcji switch) program pytający o ocenę jaką dostałeś na ostatnim egzaminie i po wczytaniu cyfry wypisujący ocenę pisemnie.

46 Zadania Zadanie Napisz program proszący o podanie trzech liczb całkowitych, a następnie stwierdzający, która z nich (lub które) jest największa. Zadanie Napisz program proszący o wybranie obliczenia pole koła lub pola trójkąta równobocznego, następnie proszący o podanie średnicy (lub długości boku) i obliczający (z dokładnością 15 cyfr) pole wybranej figury. Zadanie Napisz program proszący o podanie parametrów a, b, c, a następnie rozwiązujący równanie kwadratowe ax 2 + bx + c = 0.

47 Pętla for Pętla for ma postać for(stan początkowy; warunek; zmiany) instrukcje Przykładowo pętla służąca do wypisania 20 kolejnych liczb parzystych będzie wyglądać następująco int i, n=20; for(i = 0; i < n; i++) //instrukcje będą wykonywane dopóki i<n cout << 2*i << ", "; //i++ oznacza zwiększenie i o 1

48 Pętla for Napiszmy funkcję proszącą o podanie liczby naturalnej n, a następnie dla liczb i < n sprawdzający, czy i jest dzielnikiem n. int i, n; cout <<"Podaj liczbę n"<<endl; cin >>n; for(i = 2; i < n; i++) { if(n%i==0) cout <<"Liczba "<<i<<" dzieli "<<n<<".\n"; else cout <<"Liczba "<<i<<" nie dzieli "<<n<<".\n"; }

49 Liczby pierwsze Chcąc dostać odpowiedź na pytanie, czy n jest liczbą pierwszą w powyższym programie zadeklarujemy dodatkowo zmienną odp=0 oraz zmodyfikujemy warunek w następujący sposób if(n%i==0) odp=1; a na koniec napiszemy if(odp==0) cout <<"Liczba "<<n<<" jest pierwsza.\n"; else cout <<"Liczba "<<n<<" nie jest pierwsza.\n";

50 Ciąg liczb losowych Napiszmy program wczytujący losowy ciąg liczb z zakresu od 1 do 1000, a następnie znajdujący element maksymalny. Aby móc losować liczby poleceniem rand() potrzebujemy (dla niektórych kompilatorów) biblioteki stdlib.h. Aby tablica "wylosowanych" liczb nie była za każdym wykonaniem programu taka sama (początkowa wartość generatora jest za każdym razem taka sama) wstawimy przed pętlą polecenie srand(time(0)); które jako wartość początkową bierze liczbę sekund, która upłynęła od północy 1 stycznia 1970 roku. Potrzebna jest do tego (dla pewnych kompilatorów) biblioteka ctime. (Ponadto w preambule możemy zdefiniować stałą N równą 20 poleceniem #define N 20.)

51 Maksimum Losowanie ciągu liczb będzie wyglądać następująco int main() { srand(time(0)); int i, max=0; int T[N]; //deklarujemy tablicę (statyczną) for(i = 0; i < N; i++) { T[i] = rand() % (1000); cout << T[i] << endl; } }

52 Maksimum Dopiszmy pętlę znajdującą element maksymalny. for(i = 0; i < N; i++) if(t[i]>max) max = T[i]; cout << "Maksymalna z powyższych liczb to " << max << endl;

53 Złożoność Zauważmy, że szukając maksymalnego elementu wykonaliśmy n operacji porównania. Oznacza to, że program ma złożoność obliczeniową O(n) - czas wykonania jest proporcjonalny do liczby n danych wejściowych (rośnie liniowo ze wzrostem liczby elementów).

54 Złożoność Programy o złożoności O(n) działają dosyć szybko nawet dla dużych n. Dużo wolniej działają programy o złożoności O(n 2 ) (przykładowo dla n = średnio szybkiemu komputerowi wykonanie programu zajmie około jednej sekundy, czas rośnie tutaj z kwadratem, więc dla n = wykonanie programu zajmie około 16 sekund, dla n = ponad minutę). Dlatego warto, gdy tylko to możliwe, zastępować je programami o złożoności O(n logn).

55 Zadania Zadanie Napisz program sprawdzający czy podana liczba jest liczbą pierwszą. Zadanie Napisz program liczący silnię zadanej liczby. (Co się stanie, gdy wynik przekroczy zakres inta?) Zadanie Napisz program proszący o podanie liczby miesięcy n, kwoty k oraz oprocentowania rocznego p (z miesięczną kapitalizacją) i liczący jaką kwotę otrzymamy wpłacając k złotych na n miesięcy.

56 Zadania Zadanie Napisz program proszący o podanie liczby n, a następnie o wpisanie n liczb rzeczywistych i liczący ich sumę. (Czy możemy dodawać liczby bardzo duże do liczb bliskich zeru?) Zadanie Napisz program wczytujący losowo ciąg 1000 liczb naturalnych mniejszych od i sprawdzający, czy w tablicy znajduje się liczba 1000, a jeśli tak, to na którym miejscu. Zadanie Napisz program wczytujący dla podanej liczby n < ciąg liczb naturalnych długości n oraz znajdujący równocześnie (jedna pętla) minimalny i maksymalny element tego ciągu. (Jaka jest najmniejsza, a jaka największa ilość porównań, które program wykona?)

57 Pętla do while Pętla do while ma postać do instrukcje while(warunek); Instrukcje będą wykonywane dopóki spełniony będzie zadany warunek (zatem wykonanie instrukcji powinno między innymi zmieniać wartość zadaną w warunku).

58 Pętla do while - suma Napiszmy pętlę sumującą kolejne podawane liczby do momentu, gdy suma przekroczy wartość int a, suma=0; cout << "Wpisuj kolejne liczby. \n"; do { cin >> a; suma+=a; //równoznaczne z suma=suma+a; cout << "suma=" << suma << endl; } while(suma<=100);

59 Pętla while W powyższym przypadku instrukcja zostanie wykonana co najmniej raz. Jeśli zastosujemy pętlę while zaczyniemy od sprawdzenia warunku, więc możemy ani razu nie wykonać instrukcji. Pętla while jest postaci while(warunek) instrukcje

60 Pętla while - potęgi Napiszmy funkcję liczącą kolejną potęgę podanej liczby, dopóki jest ona mniejsza niż int liczba; cout << "Podaj liczbę \n"; cin >> liczba; int potega=liczba, wykladnik=1; while(potega<1000) { cout << liczba <<"^"<< wykladnik << "=" << potega << endl; potega*=liczba; //lub potega = liczba*potega; wykladnik++; }

61 do while vs while Zauważmy, że gdybyśmy użyli tutaj pętli do while, to w przypadku, gdyby pierwsza podana liczba była większa od 1000, wypisany zostanie pierwsza potęga tej liczby mimo, iż wypisywane miały być tylko potęgi mniejsze od Pętle do while, while oraz for można stosować zamiennie (w powyższym programie po dokonaniu pewnych poprawek moglibyśmy użyć pętli do while, a nawet for), jednak czasem użycie jednej jest dużo wygodniejsze niż innych.

62 Wyszukiwanie elementu w tablicy Aby napisać algorytm sprawdzający, czy dany element znajduje się w danej uporządkowanej tablicy liczb, możemy np. sprawdzić po kolei wszystkie elementy tablicy. Algorytm taki ma złożoność pesymistyczną O(n).

63 Wyszukiwanie binarne Algorytm wyszukiwania binarnego polega na wybraniu środkowego elementu tablicy i sprawdzeniu czy jest on szukanym elementem, a jeśli nie, to czy jest mniejszy czy większy od elementu szukanego. Jeśli jest mniejszy, powtarzamy procedurę dla lewej połowy tablicy, jeśli większy, dla prawej połowy. Ponieważ w każdym kroku zmniejszamy zakres poszukiwań co najmniej dwukrotnie, więc algorytm ma złożoność O(log n) (log rozumiany jest jako logarytm o podstawie 2). Poniższy program sprawdza, czy we wczytanej wcześniej tablicy T takiej, że T[i]<T[i+1] dla i {1,...,N}, znajduje się liczba S.

64 Wyszukiwanie binarne int l=1, p=n, odp=0, n; while (l<=p && odp==0) { n=(l+p)/2; if (T[n] < S) l=n+1; else if (T[n] > S) p=n-1; else odp = 1; }

65 Wyszukiwanie binarne Na koniec wypiszemy wynik if(wynik==1) cout<<"ciąg zawiera liczbę 200 \n"; else cout<<"ciąg nie zawiera liczby 200 \n"; Jeśli na koniec wynik=1, to znaczy, że nasz rosnący ciąg stu liczb naturalnych zawiera liczbę 200.

66 Potęgowanie binarne Najprostszy algorytm obliczający n m polega na wykonaniu m 1 kolejnych mnożeń przez n. Algorytm potęgowania binarnego polega na zastąpieniu działania n m równoważnym działaniem (n 2 ) m/2, czyli podstawieniem n = n*n; m = m/2; gdy wykładnik jest parzysty, lub działaniem n n m 1, czyli podstawieniem wynik = wynik*n; m--; gdy wykładnik jest nieparzysty.

67 Potęgowanie binarne Procedurę powtarzamy dopóki wykładnik jest różny od zera. Otrzymamy przykładowo 2 10 = 4 5 = = = =

68 Algorytn Euklidesa Pętlę while zastosujemy także w algorytmie Euklidesa, który służy do obliczania największego wspólnego dzielnika podanych liczb a i b. Polega on na obliczeniu r - reszty z dzielenia a przez b, zastąpieniu a przez b, zaś b przez r oraz w przypadku b > 0, powtórzeniu całej procedury. W momencie, kiedy b = 0, "obecne" a jest największym wspólnym dzielnikiem.

69 Algorytm Euklidesa int a,b,r ; cout << "Podaj dwie liczby naturalne.\n"; cin >> a >> b; while(b>0) { r=a%b; a=b; b=r; } cout << "NWD(a,b)=" << a << endl;

70 Zadania Zadanie Napisz program wymnażający kolejne wczytywane liczby rzeczywiste i wypisujący iloczyn na ekran, do momentu, gdy iloczyn przekroczy Zadanie Napisz program sumujący wczytane liczby rzeczywiste i wypisujący sumę na ekran, do momentu, aż wpisane zostanie zero. Zadanie Napisz program raz za razem proszący o podanie dwóch liczb naturalnych, i sprawdzający, czy pierwsza jest podzielna przez drugą, aż do momentu, gdy po raz drugi pierwsza liczba będzie podzielna przez drugą.

71 Zadania Zadanie Napisz program wczytujący losowo rosnący ciąg 1000 liczb naturalnych mniejszych od i sprawdzający, czy w tablicy znajduje się liczba 1000, a jeśli tak, to na którym miejscu. Zadanie Napisz program wczytujący podstawę i wykładnik i liczący binarnie potęgę. Zadanie Napisz program raz za razem proszący o podanie dwóch liczb naturalnych i liczący ich największy wspólny dzielnik do momentu, gdy wynik wyniesie 2 lub 3.

72 Zadania Zadanie Napisz program proszący o wpisywanie kolejnych ocen i liczący na bieżąco średnią, aż do momentu wpisania zera. Zadanie Napisz program proszący o podanie kwoty początkowej k, oprocentowania rocznego p (z miesięczną kapitalizacją) oraz kwoty wypłacanej co miesiąc m (zaraz po kapitalizacji odsetek) i sprawdzający kiedy opróżnimy konto (o ile nastąpi to przed upływem 10 lat) lub obliczający stan konta po 10 latach.

73 Sortowanie bąbelkowe Istnieje wiele sposobów na uporządkowanie danego ciągu liczb w kolejności od najmniejszej do największej. Jednym z prostszych jest sortowanie bąbelkowe. Ma ono złożoność O(n 2 ) (później podany zostanie algorytm sortowania o optymistycznej złożoności O(n log n)). Sortowanie bąbelkowe polega na kolejnym porównywaniu dwóch sąsiadujących elementów ciągu i ewentualnym ich zamienianiu tak, aby większy z nich występował jako późniejszy. Po jednokrotnym przeglądnięciu w ten sposób całej tablicy największy element ląduje na końcu. Po n 1 powtórzeniach tej procedury elementy tablicy będą uporządkowane od najmniejszego do największego. Napiszmy funkcję sortującą.

74 Sortowanie bąbelkowe for(i = 0; i < n-1; i++) for(j = 0; j < n-i; j++) if(t[j] > T[j+1]) swap(t[j],t[j+i]); //zamieniamy wartości miejscami Zauważmy, że w wewnętrznej pętli bierzemy j do n-i. Elementy tablicy od n-i do n są w tym momencie już posortowane.

75 Sortowanie bąbelkowe Na koniec wypisujemy posortowany ciąg for(i=0; i<n; i++) cout << T[i] << endl;

76 Sortowanie przez wybór Bardzo podobny jest algorytm sortowania przez wybór. Polega on na znalezieniu najmniejszego elementu tablicy i zamienieniu go z pierwszym elementem, następnie znalezieniu najmniejszego z pozostałych i zamienieniu go z drugim itd.

77 Przeliczanie systemów liczbowych Aby napisać program przeliczający systemy, przykładowo z dziesiętnego na szesnastkowy, musimy zdefiniować tablicę szesnastu znaków - każdy przypisany jednej cyfrze zadanej liczby. int ODP[7]; //w tę tablicę wpiszemy odpowiedniki cyfr //rozwinięcia szesnastkowego zadanej liczby int liczba, pozycja=0; char CYFRA[]=" ABCDEF"; //czyli CYFRA[0]=0; //... CYFRA[15]=F; (Podobnie możemy definiować tablice int-ów, np. int T[]={3,5,2,6,1} ustala rozmiar tablicy na 5. )

78 Przeliczanie systemów liczbowych Obliczając resztę z dzielenia naszej liczby przez 16 dostajemy ostatnią cyfrę rozwinięcia, po podzieleniu całkowitym liczby przez 16 powtarzając procedurę otrzymujemy kolejne cyfry, aż wynik całkowitego dzielenia przez 16 wynosi zero. cin >> liczba; while(liczba!=0) { ODP[pozycja] = liczba%16; liczba = liczba/16; pozycja++; }

79 Przeliczanie systemów liczbowych Teraz możemy wypisać wynik; cout << "Wynik zapisany cyframi szesnastkowymi: \n"; for(i=pozycja; i>0; i--) cout << CYFRA[ODP[i-1]];

80 Liczby słownie Za pomocą podobnego algorytmu możemy napisać program wyświetlający podaną liczbę słownie (tzn. wypisujący kolejno cyfry tej liczby. Po zdefiniowaniu nazw cyfr string NAPIS[10]={"zero","jeden","dwa","trzy","cztery", "piec","szesc","siedem","osiem","dziewiec"}; cyfry od ostatniej do pierwszej otrzymamy jako reszty z kolejnych dzieleń zadanej liczby przez 10.

81 Sito Erastotenesa Eratostenes w trzecim wieku przed naszą erą przedstawił następujący algorytm wyszukiwania liczb pierwszych. Wszystkie wielokrotności liczby 2 większe od niej samej oznaczamy jako liczby złożone. Z liczb większych od 2 wybieramy najmniejszą niezaznaczoną jeszcze liczbę (czyli 3) i wszystkie jej wielokrotności większe od niej samej oznaczamy jako złożone (niektóre liczby będą zaznaczane więcej niż raz). Postępując dalej według tej procedury jako liczby złożone oznaczamy wielokrotności 5, 7, 11 it.d. Dla danej liczby n wszystkie liczby mniejsze od n, które w efekcie powyższej procedury nie zostały oznaczone jako złożone, są liczbami pierwszymi.

82 Sito Erastotenesa Ustalmy liczbę n i wszystkie liczby mniejsze od niej oznaczamy jedynką. cout << "Ile liczb sprawdzić? \n"; cin >> n; int* T; //deklarujemy tablicę T = new int[n]; //definiujemy rozmiar tablicy for(i = 2; i < n; i++) T[i] =1; //kolejne liczby zaznaczamy //jako potencjalnie pierwsze

83 Tablica jako wskaźnik do pamięci Deklarując zmienną nadajemy nazwę pewnemu obszarowi pamięci, natomiast nazwa tablicy wskazuje dokładnie na miejsce w pamięci, gdzie ta tablica się zaczyna. Jeśli stosujemy dynamiczną alokację zmiennych (czyli rozmiar tablicy definiujemy na etapie wykonywania programu), musimy (dla niektórych kompilatorów) użyć powyższej składni lub napisać int*t=new int[n]. Operator * oznacza, że deklarujemy wskaźnik do pamięci. Operator new przydziela pamięć.

84 Sito Erastotenesa Zerem oznaczamy wszystkie liczby mniejsze od n, które są złożone, for (i = 2; i <= n; i++) if (T[i]==1) for (j = i; j*i < n; j++) T[i*j] =0; i wypiszmy liczby pierwsze mniejsze od n (czyli te numery, dla których wartość elenentu tablicy jest równa 1). for (i = 2; i < n; i++) if (T[i]==1) cout << i << ", ";

85 Schemat Hornera Aby obliczyć wartość wielomianu P n (x) = a n x n + a n 1 x n a 1 x + a 0 w danym punkcie x należy wykonać n dodawań, n mnożeń przez współczynnik a i oraz n(n 1)/2 mnożeń potrzebnych do podniesienia x na każdym miejscu do odpowiedniej potęgi. Ilość tych działań można zmniejszyć stosując schemat Hornera.

86 Schemat Hornera Schemat Hornera polega na rozpisaniu wielomianu P n (x) = a n x n + a n 1 x n a 1 x + a 0 = x(a n x n 1 + a n 1 x n a 1 ) + a 0 = = x(x(a n x n 2 + a n 1 x n a 2 ) + a 1 ) + a 0 = = x(x(...x(x a n + a n 1 ) + a n 2 ) a 1 ) + a 0 i obliczeniu jego wartości. Zauważmy, że wówczas wykonane zostanie jedynie n mnożeń oraz n dodawań, zatem zmniejszymy złożoność z O(n 2 ) do O(n).

87 Schemat Hornera Mając wczytane współczynniki wielomianu a[i] oraz wartość x użyć można w tym celu pętli; s=a[n]; for (int i=n-1; i>=0; i--) s=s*x+a[i];

88 Zadania Zadanie Napisz program proszący o podanie 10 liczb, a następnie sortujący (metodą bąbelkową) ten ciąg. Zrób to bez użycia polecenia swap Zadanie Napisz program wczytujący dla podanej liczby n losowy ciąg długości n oraz sortujący (przez wybór) ten ciąg. Omów złożoność programu. Zadanie Napisz program zadający pytanie na jaki system od dwójkowego do szesnastkowego zamienić zadaną liczbę zapisaną w systemie dziesiętnym, a następnie wyświetlający wynik w zadanym systemie.

89 Zadania Zadanie Napisz program wypisujący zadaną liczbę jako ciąg słów oznaczających jej kolejne cyfry. Zadanie Napisz program znajdujący dla zadanej liczby naturalnej najlepsze naturalne przybliżenie jej pierwiastka.

90 Zadania Zadanie Napisz program sprawdzający, ile jest liczb pierwszych mniejszych od podanej liczby. Zadanie Napisz program, który dla podanej liczby wspólczynników wczyta je po kolei i korzystając ze schematu Hornera policzy wartość wielomianu w zadanym punkcie. (Napisz program liczący wartość wielomianu bez użycia schematu Hornera. Porównaj złożoność tych dwóch programów.)

91 Macierz Macierz wyrazić możemy dwuwymiarową tablicą. Aby wypisać wcześniej zdefiniowaną macierz A o m kolumnach i n wierszach napiszemy for(i=0; i<n; i++) { for(j=0; j<m; j++) cout<<a[i][j]<<" "; cout<<endl; }

92 Macierze Aby zdefiniować macierz B jako transponowaną do A wystarczy podstawić B[j][i]=A[i][j] (jeśli A ma rozmiary n m, to B musi mieć rozmiary m n). Aby dodać dwie macierze A, i B (tych samych rozmiarów) wystarczy dla każdych i,j dodać A[i][j]+B[i][j].

93 Mnożenie macierzy Zdefiniujmy dwie macierze takie, aby liczba kolumn pierwszej z nich była równa liczbie wierszy drugiej. float A[3][4] = {{1,2,0,0}, {1,3,2,0}, {3,0,1,1}}; float B[4][2] = {{1, 2}, {2, 0.6}, {0, 1}, {3, 5}};

94 Mnożenie macierzy Aby pomnożyć macierze A, i B musimy policzyć odpowiednie sumy iloczynów; float AB[3][2]={{0}}; //deklarujemy macierz AB //na początku na każdym miejscu tablicy są zera for(int i=0; i<3; i++) for(int j=0; j<2; j++) for(int k=0; k<4; k++) AB[i][j] = AB[i][j]+A[i][k]*B[k][j];

95 Mnożenie macierzy Na koniec wypiszemy wynik: for(int i=0; i<3; j++) { for(int j=0; i<j; i++) cout << AB[i][j] << " "; cout << endl; }

96 Metoda Gaussa - Jordana Metoda Gaussa - Jordana rozwiązywania układów równań (mających tyle samo zmiennych, co równań) polega na wpisaniu wspólczynników układu w macierz uzupełnioną, a następnie wykonywaniu operacji na wierszach macierzy.

97 Metoda Gaussa - Jordana Napiszmy program rozwiązujący układ trzech równań z trzema niewiadomymi x + 2y = 3 3x + 6y + z = 5 4x + 2z = 8 Najpierw musimy wpisać w tablicę macierz współczynników, float A[3][4]={{1, 2, 0, 3},{3, 6, 1, 5},{4, 0, 2, 8}};

98 Metoda Gaussa - Jordana Pierwszy wiersz mnożymy przez stałą, aby na pierwszym miejscu uzyskać jedynkę, nastepnie odejmujemy ten wiersz pomnożony przez odpowiednie stałe od pozostałych wierszy, aby na tym miejscu dostać zera. W następnym kroku drugi wiersz mnożymy przez stałą, aby na drugim miejscu uzyskać jedynkę, nastepnie odejmujemy ten wiersz pomnożony przez odpowiednie stałe od pozostałych wierszy, aby na tym miejscu dostać zera. Podobnie postępujemy dla każdego następnego wiersza.

99 Metoda Gaussa - Jordana for(k=0; k<3; k++) { for(j=k; j<4; j++) A[k][j] = A[k][j]/A[k][k]; for(i=0; i<3; i++) if(i!= k) for(j=k; j<4; j++) A[i][j] = A[i][j]-A[i][k]*A[k][j]; }

100 Metoda Gaussa - Jordana Jeśli na miejscu, na którym powinniśmy uzyskać jedynkę znajduje się zero musimy zamienić dany wiersz z którymś z kolejnych, który w tym miejscu nie ma zera - jeśli każdy z nich ma na tym miejscu zero, to układ nie ma jednoznacznego rozwiązania. Jeśli układ ma jednoznaczne rozwiązanie, to po zastosowaniu powyższych przekształceń do wszystkich wierszy otrzymujemy macierz diagonalną jednostkową (+ kolumna rozwiązań).

101 Metoda Gaussa - Jordana if(a[k][k]==0) { brakrozw=1; for(i=k+1; i<3; i++) if(a[i][k]!=0) { for( j=0; j<4; j++) swap(a[i][j],a[k][j]); brakrozw=0; } }

102 Metoda Gaussa - Jordana Na koniec możemy wypisać rozwiązanie for(int i=0; i<3; i++) cout << "x(" << i << ")=" << A[i][3] << endl;

103 Zadania Zadanie Napisz program proszący o podanie rozmiarów macierzy (nie większych niż 5 5), a następnie wypisujący podaną macierz oraz macierz transponowaną. (Aby utworzyć tablicę dwuwymiarową dowolnego zadanego za pomocą zmiennych rozmiaru musielibyśmy napisać cin>>n>>m; float**a=new float*[n]; for( i=0; i<n; ++i) A[i]=new float[m]; Ponieważ w zadaniu rozmiar tablicy jest ograniczony od góry, więc nie musimy stosować tej procedury.)

104 Zadania Zadanie Napisz program sumujący dowolne dwie macierze o zadanym rozmiarze mniejszym od 5 5. Zadanie Napisz program mnożący dowolne dwie macierze o zadanych rozmiarach mniejszych niż 6 6 lub stwierdzający, że jest to niemożliwe. Zadanie Napisz program, który po wczytaniu współczynników rozwiązuje układ czterech równań liniowych lub stwierdza, że rozwiązanie jest niemożliwe.

105 Funkcje Funkcja główna nie musi być jedyną funkcją w programie. Często wygodnie jest zdefiniować pewną procedurę, a następnie wywoływać w programie jej wykonanie. Przy pisaniu dłuższych programów może to znacznie ułatwić pracę - program staje się czytelniejszy i każdą funkcję możemy wywoływać w programie dowolną ilość razy z różnymi argumentami. Funkcje umieszczamy w nagłówku - muszą one znajdować się poza funkcją główną programu.

106 Funkcja void Funkcja może nie zwracać żadnej wartości (funkcja typu void), tylko wykonywać jakąś czynność, np. wypisywanie na ekran. void pisz(int liczba) /*argumentem tej funkcji jest zmienna liczba typu int (funkcja może mieć jeden lub więcej argumentów)*/ { cout << "Podana liczba to " << liczba << endl; } Po zadeklarowaniu zmiennej (np. int a=5;) naszą funkcję wywołamy poleceniem pisz(a);

107 Funkcja typu int Częto używamy funkcji, które zwracają jakąś wartość. Przykładowo funkcja int wyznacznik(int x, int y, int z, int v) { return(x*v-y*z); } zwraca wyznacznik macierzy 2 2.

108 Funkcja typu int Teraz możemy w funkcji głównej wczytać dane i wypisać wyznacznik macierzy; int a11,a12,a21,a22; cout << "Podaj dane \n"; cin >> a11 >> a12 >> a21 >> a22; cout << wyznacznik(a11,a12,a21,a22);

109 Funkcja - algorytm Euklidesa Napiszmy funkcję liczącą największy wspólny dzielnik dwóch liczb. int NWD(int x, int y){ int r; while(y!=0){ r=x%y; x=y; y=r; } return(x); }

110 Funkcja - algorytm Euklidesa Możemy użyć jej na przykład do skracania ułamków; int d,a,b; do{ cout << "Podaj licznik i mianownik.\n"; cin << a << b; if(b!=0){ d = NWD(a,b); cout << "Wynik=" << a/d << "/" << b/d << endl; } else cout << "Błędne dane.\n"; } while(b!=0)

111 Zmienne lokalne Zauważmy, że zmienną r użytą w funkcji NWD zadeklarowaliśmy wewnątrz funkcji. Jest to zmienna lokalna, tzn. jest widoczna tylko wewnątrz funkcji. Zmienne deklarowane w funkcji głównej programu także nazywamy zmiennymi lokalnymi. Deklarowanie zmiennych poza jakąkolwiek funkcją (zmienne globalne) jest stosowane, gdy chcemy korzystać z tej zmiennej w różnych funkcjach programu (w innym wypadku wygodniej jest używać zmiennych lokalnych). (Pamięć zarezerwowana dla zmiennej globalnej jest czyszczona przed uruchomieniem programu, zatem zmienna globalna ma po zadeklarowaniu wartość zero, podczas, gdy zmienna lokalna r przed przypisaniem jej wartości przyjmuje pewną losową wartość.)

112 Metoda połowienia przedziału Metoda połowienia przedziału służy do znajdowania dla danej funkcji ciągłej miejsca zerowego w zadanym przedziale, o ile na jego brzegach funkcja przyjmuje przeciwne wartości. Miejsce zerowe wyznaczane jest z określoną dokładnością.

113 Metoda połowienia przedziału W nagłówku zdefiniujmy stałą wyznaczającą dokładność rozwiązania oraz funkcję f określającą naszą funkcję matematyczną. const double dokl = 0.001; double f(double x) { return tan(x/100); }

114 Metoda połowienia przedziału W funkcji głównej musimy wczytać wartości a oraz b i jeśli f(a) i f(b) są przeciwnych znaków, to wybieramy tę połówkę przedziału, na brzegach której wartości są przeciwne i powtarzamy tę procedurę, aż do zbliżenia się wartości funkcji do zera z zadaną dokładnością. do{ s = (a+b)/2; if(f(a)*f(s) < 0) b = s; else a = s; } while(fabs(f(s)) > dokl);//fabs oznacza wartość bezwzględną

115 Metoda połowienia przedziału Na koniec możemy wypisać wynik cout << "Miejsce zerowe funkcji f to " << s << endl; //f(s)=0

116 Metoda siecznych Podobny efekt możemy otrzymać stosując metodę siecznych. Możemy ją zastosować jeśli f jest funkcją ciągłą przyjmującą na brzegach przedziału (a,b) przeciwne wartości oraz taką, że f (x) 0.

117 Metoda siecznych Dla danych a,b punkt c definiujemy punkt przecięcia osi OX z sieczną łączącą (a,f (a)) oraz (b,f (b)), czyli b a c = b f (b) f (b) f (a). Za a podstawiamy wartość b, a za b wartość c i powtarzamy procedurę. Postępujemy tak dopóki f (c) jest większe od ustalonej stałej wyznaczającej dokładność.

118 Metoda siecznych Przedstawiony powyżej algorytm zapisany w języku C wyglądać będzie następująco do { c = b-f(b)*(b-a)/(f(b)-f(a)); a = b; b = c; } while(fabs(f(c)) > dokl);

119 Zadania Zadanie Napisz program wczytujący licznik i mianownik i następnie skracający zadany w ten sposób ułamek do momentu, gdy wynik wyniesie 1 2. Zadanie Napisz program znajdujący metodą połowienia przedziału miejsce zerowe dla funkcji f (x) = tg( x 100 ) pomiędzy dowolnymi punktami z dokładnością i wypisujący przybliżone miejsce zerowe oraz wartość funkcji w tym punkcie.

120 Zadania Zadanie Napisz program znajdujący metodą siecznych miejsce zerowe dla funkcji f (x) = tg( x 100 ) pomiędzy dowolnymi punktami z dokładnością i wypisujący przybliżone miejsce zerowe. Porównaj ilość kroków, w jakiej ten i poprzedni program znajdować będą miejsce zerowe.

121 Rekurencja - ciąg Fibinacciego Ważnym aspektem stosowania funkcji jest fakt, iż umożliwiają one rekurencje - tzn. wywołanie samej siebie. Funkcja zwracająca dany wyraz ciągu Fibonacciego wyglądać będzie tak int fib(int n) { if(n<=2) return(1); else return(fib(n-2)+fib(n-1)); }

122 Ciąg Fibinacciego Po zadeklarowaniu w programie zmiennej k i przypisaniu jej wartości k-ty wyraz ciągu Fibonacciego wypiszemy na ekran poleceniem cout << fib(k). Do zdefiniowania funkcji i jej wywołania możemy użyć tych samych nazw zmiennych lub różnych - w każdym przypadku zmienne te musimy zadeklarować osobno wewnątrz funkcji i osobno w funkcji głównej programu.

123 Rekurencja - symbol Newtona Wartość symbolu Newtona można policzyć ze wzoru ( ) n k = n! (n k)!k!. Można też skorzystać z własności ( ) ( n k = n 1 ) ( k 1 + n 1 ) k i napisać funkcję rekurencyjną, int newton(int n, int k) { } if(n==k k==0) else return 1; return newton(n-1,k-1)+newton(n-1,k);

124 Symbol Newtona Po podaniu n oraz k wypiszemy wynik. cout << "(n po k)= " << newton(n,k) << endl;

125 Funkcja Ackermana Przykładem funkcji rekurencyjnej jest funkcja Ackermana. Można zapisać ją wzorem n + 1 m = 0 F (m,n) = F (m 1,1) m > 0,n = 0. F (m 1,F (m,n 1)) m,n > 0

126 Funkcja Ackermana Funkcję Ackermana zapiszemy wzorem rekurencyjnym int acker(int m, int n) { if(m==0) return(n+1); else if(n==0) return(acker(m-1,1)); else return(acker(m-1,acker(m,n-1))); } a wywołamy cout << "acker("<<m<<","<<n<<")=" << acker(m,n) << endl;

127 Rekurencja - algorytm Euklisesa Pseudokod procedury rekurencyjnej obliczającej największy wspólny dzielnik dwóch liczb wygląda następująco euklid(a,b) 1 if b=0 2 then return a 3 else return eukl(b, a mod b)

128 Rekurencja - algorytm Euklisesa W języku C++ procedura rekurencyjna obliczająca największy wspólny dzielnik przyjmie postać: int euklid(int a, int b) { if(b==0) return a; else return euklid(b,a%b); }

129 Poprawność algorytmu Euklidesa Zauważmy, że jest to wersja rekurencyjna algorytmu euklidesa (Na każdym kroku za a podstawiane jest b, a za b podstawiane jest a (mod b) dopóki b 0). Ponadto zauważmy, że NWD(a, b) dzieli NWD(b, a(mod)b) oraz NWD(b, a(mod)b) dzieli NWD(a, b), co dowodzi, iż powyższa funkcja rzeczywiście wyznacza największy wspólny dzielnik dwóch liczb.

130 Sortowanie szybkie Sortowanie szybkie polega na przeniesieniu na początek tablicy elementów mniejszych od pierwszego elementu, a na koniec większych, a następnie powtarzaniu tej czynności dla początkowej i końcowej części tablicy. Rekursja kończy się, gdy kolejny fragment uzyskany z podziału zawiera tylko jeden element.

131 Sortowanie szybkie void sortuj(int T[],int L,int P){ //T[] <-> *T int i=l, j=p, v=t[l]; do{ while (T[i]<v) i++; while (v<t[j]) j--; if (i<=j){ swap(t[i], T[j]); i++; j--; } } while (i<=j); if (L<j) sortuj(t,l,j); if (i<p) sortuj(t,i,p); }

132 Zadania Zadanie Napisz program, który dla podanej liczby n wypisuje n pierwszych wyrazów ciągu Fibonacciego. Zadanie Napisz program liczący silnię za pomocą funkcji rekurencyjnej.

133 Zadania Zadanie Napisz programy liczące dla zadanych n oraz k wartość ( n k) wprost ze wzoru oraz rekurencyjnie. Porównaj szybkość i zakres poprawnego działania obu programów. Zadanie Napisz program wczytujący długość ciągu oraz kolejne elementy ciągu, a następnie porządkujący je zgodnie z algorytmem szybkiego sortowania. Omów pesymistyczną i optymistyczną złożoność tego algorytmu.

134 Wczytywanie po znaku, ASCII Pisząc j=getc(stdin); przypisujemy zmiennej j wczytany z klawiatury znak (o ile j jest zadeklarowane jako char) lub wartość w kodzie ASCII tego znaku (o ile j jest zadeklarowane jako int). Pamiętamy, że ASCII (American Standard Code for Information Interchange) jest to kod przyporządkowujący liczby z zakresu literom, cyfrom i innym znakom.

135 ASCII, wczytywanie po znaku Poniższy program pozwala na wczytanie ciągu znaków dowolnej długości, a po naciśnięciu klawisza enter (wartość 10 w kodzie ASCII) wypisuje ich wartości w kodzie ASCII. int j; do { j=getc(stdin); cout<<j<<", "; } while(j!=10); //wczytywane są kolejne znaki //i wypisywana jest ich wartość //aż do naciśnięcia ENTER

136 ASCII - reprezentacja liczb Po wykonaniu powyższego programu możemy zauważyć, że chcąc poprawnie zinterpretować znaki reprezentujące cyfry musimy od reprezantacji znaku odjąć 48.

137 ASCII Napiszmy program, który wczytuje ciąg znaków, a następnie po kolei wypisuje, czy dany znak jest liczbą czy literą. int j; do { j=getc(stdin); if(j>47&&j<58) cout<<"cyfra \n"; else if((j>64&&j<91) (j>96&&j<123)) cout<<"litera\n"; else cout<<"ani cyfra, ani litera\n"; } while(j!=10);

138 ASCII - tablica znaków Aby wczytać ciąg znaków i zapamiętać go w tablicy najpierw zadeklarujemy tablicę i pomocnicze zmienne char A[100]; int i=0; Następnie wczytamy tablicę znaków do { i++; A[i]=getc(stdin); } while(a[i]!=10);

139 ASCII - tablica znaków Aby wypisać wczytany ciąg znaków w odwrotnej kolejności napiszemy for(j=i-1; j>0; j--) cout<<a[j]; cout<<endl;

140 System dwójkowy Napiszmy program przeliczający podaną liczbę z systemu dwójkowego do dziesiętnego. Najpierw deklarujemy zmienne i wczytujemy ciąg znaków (złożony z zer i jedynek). int A[31]; int i=0, r=0, k; cout<<"podaj liczbę w systemie dwójkowym.\n"; do { i++; A[i]=getc(stdin)-48; } while(a[i]!=-38);

141 System dwójkowy Następnie obliczamy sumę odpowiednich potęg dwójki pomnożonych przez odpowiednie współczynniki. i--; for(k=i; k>0 ; k--) r+=(a[k]*pow(2,i-k)); cout<<r<<endl;

142 Duże liczby Napiszmy teraz program sumujący dwie dowolnie duże liczby (wychodzące poza zakres int-a). Na początek wczytamy dwie liczby jako tablice cyfr. int A[100], B[100], i=0, j=0, r=0, k; do { i++; A[i]=getc(stdin)-48; } while(a[i]!=-38);

143 Duże liczby i podobnie do { j++; B[j]=getc(stdin)-48; } while(b[j]!=-38); Załóżmy najpierw, że obie wczytane liczby są tej samej długości.

144 Dodawanie pisemne Ich sumę policzymy stosując schemat dodawania pisemnego. A[0]=0; B[0]=0; j--; for(k=j; k>=0 ; k--) { B[k]=B[k]+A[k]+r; if(b[k]>9) { r=1; B[k]=B[k]-10; } else r=0; }

145 Dodawanie pisemne Na koniec możemy wypisać wynik. if(b[0]!=0) cout<<b[0]; for(k=1; k<=j; k++) cout<<b[k];

146 Dodawanie pisemne W przypadku, gdy wczytane liczby nie będą tej samej długości możemy przesunąć mniejszą liczbę (tak aby była tej samej długości, co większa) a na początkowych miejscach umieścić zera. Powiedzmy, że pierwsza liczba jest mniejsza. for(k=j-1; k>j-i; k--) A[k]=A[k-j+i]; for(k=j-i; k>0; k--) A[k]=0;

147 Podzielność Mając wczytaną liczbę w tablicy a[i] możemy sprawdzić jej podzielność przez 3: s=0; for(k=0; k<i ; k++) s+=a[k] if(s%3==0) cout<<"wczytana liczba jest podzielna przez 3.\n"; else cout<<"wczytana liczba nie jest podzielna przez 3.\n";

148 Zadania Zadanie Napisz program wczytujący ciąg znaków oraz sprawdzający, czy najwięcej wczytano dużych liter, małych liter, czy innych znaków. Zadanie Napisz program wczytujący ciąg znaków oraz liczący sumę cyfr, które się wśród tych znaków znalazły. Zadanie Napisz program wczytujący dwie liczby jako ciągi znaków, a następnie sprawdzający która z nich jest większa.

149 Zadania Zadanie Napisz program wczytujący trzy liczby jako ciągi znaków, a następnie dodający je pisemnie. Zadanie Napisz program wczytujący dwie liczby - jedną jako ciąg znaków, drugą typu int i mnożący je. Zadanie Napisz program wczytujący liczbę jako ciąg znaków, a następnie sprawdzający, czy jest ona podzielna przez 11.

150 Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy int, a wskaz oznacza, że wskaz jest wskaźnikiem do zmiennej typu int (a nie zmienną typu int). int *wsk; //deklaracja wskaźnika wsk=new int; //przydzielenie zmiennej miejsce w pamięci *wsk=5; //zapisanie liczby 5 w tym miejscu pamięci cout << *wsk << endl; delete wsk; //zwolnienie pamięci wskazywanej przez wskaźnik

151 Wskaźniki Polecenie delete zwalnia miejsce w pamięci, w którym przechowywana jest nasza zmienna - pamięć nie będzie zatem zajmowana przez cały czas wykonywania programu, co ma miejsce przy normalnym deklarowaniu zmiennych.

152 Wskaźniki int* T; int n, i; cout << "Podaj rozmiar tablicy. \n"; cin >> n; T = new int[n]; cout << "Podaj elementy tablicy \n"; for (i=0; i<n; i++) cin>>t[i]; cout << "Zawartosc tablicy: \n"; for (i=0; i<n; i++) cout << T[i] << ", "; delete [] T;

153 Aliasy Operator & adresu (referencji) występuje przy deklaracji zmiennej zwanej referencją. W poniższym przykładzie symbol & pomiędzy int, a alias oznacza, że zmienna alias jest typu referencyjnego i podszywa się pod zmienną x typu int. int x = 15; int & alias = x; cout << alias;

154 Wskaźniki Zamiast operatora * wyłuskania (dereferencji) w poniższym przypadku int x=35; int * wsk=&x; *wsk = 45; cout << x; wygodniej użyć operatora referencji int x=35; int& alias=x; alias = 45; cout << x;

155 Wskaźniki Funkcja skracająca ułamek postaci int skrac0(int a, int b) { int d=nwd(a,b); a=a/d; b=b/d; } nie będzie działać, gdyż wartości wyliczone wewnątrz funkcji nie są widoczne na zewnątrz.

156 Wskaźniki Nie możemy też użyć polecenia return w funkcji, gdyż funkcja ma powinna zwracać licznik i mianownik skróconego ułamka. Ponieważ polecenie return może zwracać tylko jedną wartość (pozostałe wartości wyliczone wewnątrz funkcji nie są widoczne na zewnątrz), więc nie osiągniemy tego standardową procedurą. Możemy jednak napisać funkcję używając wskaźników, która zmienia miejsce w pamięci.

157 Wskaźniki Funkcję skracającą ułamek możemy napisać używając wskaźników. void skrac1(int *a, int *b) { int d=nwd(*a,*b); *a=*a/d; *b=*b/d; } Funkcję taką wywołamy poleceniem skrac1(&licz, &mian). Wynik wypiszemy poleceniem cout << licz << "/" << mian << endl;

158 Tablice a wskaźniki Zauważmy, że funkcja sortowania szybkiego nie zawiera polecenia zwrócenia wartości return, a jednak zmienia wartości w tablicy. Wynika to stąd, że nazwa tablicy jest wskaźnikiem stałym, a nie nazwą zmiennej.

159 Referencje Do skracania ułamków możemy użyć także referencji void skrac2(int &a, int &b) { int d=nwd(a,b); a=a/d; b=b/d; } W tym przypadku funkcję wywołujemy poleceniem skrac2(licz, mian).

160 Struktury Poleceniem struct możemy stworzyć strukturę złożoną ze zmiennych. Stwórzmy strukturę o nazwie autor. struct autor{ string imie, nazwisko, tytul; int rok; }; //deklarujemy zmienne //czyli pola struktury

161 Struktury Możemy teraz zadeklarować zmienne typu autor oraz nadać im cechy. autor os1, os2; os1.imie = "Thomas"; os1.nazwisko = "Cormen"; os1.tytul = "Wprowadzenie do algorytmow"; os1.rok = 1997; cin >> os2.imie >> os2.nazwisko >> os2.tytul >> os2.rok;

Algorytmy i język C++

Algorytmy i język C++ Wykład 6 Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje

Bardziej szczegółowo

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: 1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: * Jan Kowalski * * ul. Zana 31 * 3. Zadeklaruj zmienne przechowujące

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Proste programy w C++ zadania

Proste programy w C++ zadania Proste programy w C++ zadania Zbiór zadao do samodzielnego rozwiązania stanowiący powtórzenie materiału. Podstawy C++ Budowa programu w C++ Dyrektywy preprocesora Usunięcie dublujących się nazw Częśd główna

Bardziej szczegółowo

I. Podstawy języka C powtórka

I. Podstawy języka C powtórka I. Podstawy języka C powtórka Zadanie 1. Utwórz zmienne a = 730 (typu int), b = 106 (typu long long), c = 123.45 (typu double) Wypisz następujące komunikaty: Dane sa liczby: a = 730, b = 106 i c = 123.45.

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski Programowanie w C/C++ Instrukcje - konstrukcje powtórka LABORKA Piotr Ciskowski zadanie 1. Licz się ze sobą Napisz funkcję bez argumentów i bez wyniku, która za każdym wywołaniem będzie podawała, ile razy

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

1 Powtórzenie wiadomości

1 Powtórzenie wiadomości 1 Powtórzenie wiadomości Zadanie 1 Napisać program, który w trybie dialogu z użytkownikiem przyjmie liczbę całkowitą, a następnie wyświetli informację czy jest to liczba parzysta czy nieparzysta oraz czy

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

5. Rekurencja. Przykłady

5. Rekurencja. Przykłady 5. Rekurencja Uwaga! W tym rozdziale nie są omówione żadne nowe konstrukcje języka C++. Omówiona jest za to technika wykorzystująca funkcje, która pozwala na rozwiązanie pewnych nowych rodzajów zadań.

Bardziej szczegółowo

3. Instrukcje warunkowe

3. Instrukcje warunkowe . Instrukcje warunkowe Przykłady.1. Napisz program, który pobierze od użytkownika liczbę i wypisze na ekran słowo ujemna lub nieujemna, w zależności od tego czy dana liczba jest ujemna czy nie. 1 #include

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Przykładowe zadania z teorii liczb

Przykładowe zadania z teorii liczb Przykładowe zadania z teorii liczb I. Podzielność liczb całkowitych. Liczba a = 346 przy dzieleniu przez pewną liczbę dodatnią całkowitą b daje iloraz k = 85 i resztę r. Znaleźć dzielnik b oraz resztę

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0, 2 Arytmetyka Niech b = d r d r 1 d 1 d 0 będzie zapisem liczby w systemie dwójkowym Zamiana zapisu liczby b na system dziesiętny odbywa się poprzez wykonanie dodawania d r 2 r + d r 1 2 r 1 d 1 2 1 + d

Bardziej szczegółowo

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie. Funkcje Deklaracja funkcji typ funkcji identyfikator_funkcji(lista parametrów formalnych); Typ funkcji określa typ wartości zwracanej przez funkcję (typ zdefiniowany pierwotnie jak int, typ zdefiniowany

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

IX. Wskaźniki.(3 godz.)

IX. Wskaźniki.(3 godz.) Opracowała: dr inż. Anna Dubowicka Uczelniane Centrum Komputerowe PK IX. Wskaźniki.(3 godz.) Wskaźnik jest zmienną, która zawiera adres innej. 1. Definiowanie wskaźników. typ * nazwa ; gdzie: znak * informuje

Bardziej szczegółowo

Podstawy Programowania Algorytmy i programowanie

Podstawy Programowania Algorytmy i programowanie Podstawy Programowania Algorytmy i programowanie Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Algorytm Algorytm w matematyce, informatyce, fizyce, itp. lub innej dziedzinie życia,

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119 Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek

Bardziej szczegółowo

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117). 2. Zmienne i stałe Przykłady 2.1. Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117). 5 int a = 281; int b = 117; 7 8 cout

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer

Bardziej szczegółowo

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata MACIERZE Sobiesiak Łukasz Wilczyńska Małgorzata Podstawowe pojęcia dotyczące macierzy Nie bez przyczyny zaczynamy od pojęcia macierzy, które jest niezwykle przydatne we wszystkich zastosowaniach, obliczeniach

Bardziej szczegółowo

Struktura pliku projektu Console Application

Struktura pliku projektu Console Application Struktura pliku projektu Console Application #include #include using namespace std; int main(int argc, char *argv[]) // to jest komentarz system("pause"); return EXIT_SUCCESS; Na początku

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std; Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy Matematyka, królowa nauk Edycja X - etap 2 Bydgoszcz, 16 kwietnia 2011 Fordoński

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. Jarosław Wróblewski Matematyka dla Myślących, 008/09. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. 15 listopada 008 r. Uwaga: Przyjmujemy,

Bardziej szczegółowo

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny ALGORYMY Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1 Robert Malenkowski 1 Liczby rzeczywiste. 1 Liczby naturalne. N {0, 1,, 3, 4, 5, 6, 7, 8...} Liczby naturalne to liczby używane powszechnie do liczenia i ustalania kolejności. Liczby naturalne można ustawić

Bardziej szczegółowo

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic: Tablice TEORIA Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Dzięki stosowaniu tablic, zamiast nazywania każdej z np. stu zmiennych osobno możemy zabudować tablicę 100-elementową,

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

C++ wprowadzanie zmiennych

C++ wprowadzanie zmiennych C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym

Bardziej szczegółowo

Język C, instrukcje sterujące (laboratorium)

Język C, instrukcje sterujące (laboratorium) Język C, instrukcje sterujące (laboratorium) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Na podstawie http://pl.wikibooks.org/wiki/c Wstęp Instrukcja warunkowa Instrukcja if/if-else pozwala na warunkowe

Bardziej szczegółowo

Proste algorytmy w języku C

Proste algorytmy w języku C Proste algorytmy w języku C Michał Rad AGH Laboratorium Maszyn Elektrycznych 2016-12-01 Outline Język C Zadanie pierwsze - obliczanie miejsc zerowych wielomianu Zadanie drugie - znajdowanie największego

Bardziej szczegółowo

2.8. Algorytmy, schematy, programy

2.8. Algorytmy, schematy, programy https://app.wsipnet.pl/podreczniki/strona/38766 2.8. Algorytmy, schematy, programy DOWIESZ SIĘ co oznaczają pojęcia: algorytm, schemat blokowy, język programowania, jakie są sposoby obliczania największego

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); } OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 4 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Pętle wykonujące się podaną liczbę razy Jeśli chcemy wykonać pewien fragment programu określoną liczbę razy, możemy użyć

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą

Bardziej szczegółowo

Podstawy programowania w języku C

Podstawy programowania w języku C Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji,

Bardziej szczegółowo

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst. Schematy blokowe I Jeżeli po schematach blokowych będzie używany język C, to należy używać operatorów: '&&', ' ', '!=', '%' natomiast jeśli Ruby to 'and', 'or', '%', '!='. 1. Dostępne bloki: a) początek:

Bardziej szczegółowo

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe: Podstawy Informatyki Metalurgia, I rok Historia Lata 0-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard Koniec lat 80 standard

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Liczby całkowite i rzeczywiste

Liczby całkowite i rzeczywiste Wykład 4(20 marzec 2014r.) Liczby całkowite i rzeczywiste Paulina Rogowiecka Klaudia Kamińska Adrianna Znyk 1 Spis treści: Czynniki pierwsze metoda próbnych dzieleń Pierwszość liczby naturalnej algorytmy

Bardziej szczegółowo

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++ Podstawy Informatyki Metalurgia, I rok Wykład 6 Krótki kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard

Bardziej szczegółowo

Zadania do samodzielnego rozwiązania

Zadania do samodzielnego rozwiązania Zadania do samodzielnego rozwiązania I. Podzielność liczb całkowitych 1. Pewna liczba sześciocyfrowa a kończy się cyfrą 5. Jeśli tę cyfrę przestawimy na miejsce pierwsze ze strony lewej, to otrzymamy nową

Bardziej szczegółowo

Programowanie obiektowe - zadania

Programowanie obiektowe - zadania Programowanie obiektowe - zadania Elementy języka Java Zad.1. Napisz program, który sprawdza, czy dana liczba całkowita jest parzysta. Zad.2. Napisz program, który sumuje dane dwie liczby tylko w przypadku,

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Funkcja kwadratowa. f(x) = ax 2 + bx + c, Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax 2 + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax 2, a R \

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 3

Programowanie komputerowe. Zajęcia 3 Programowanie komputerowe Zajęcia 3 Instrukcje przypisania Poza zwykłą instrukcją przypisania, powodującą ustawienie wartości zmiennej na podane wyrażenie, istnieje wiele innych, np. += dodaj, a+=b jest

Bardziej szczegółowo

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; } Pętle Pętle (ang. loops), zwane też instrukcjami iteracyjnymi, stanowią podstawę prawie wszystkich algorytmów. Lwia część zadań wykonywanych przez programy komputerowe opiera się w całości lub częściowo

Bardziej szczegółowo

Programowanie w Baltie klasa VII

Programowanie w Baltie klasa VII Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.

Bardziej szczegółowo

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) 1 Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

PROGRAMOWANIE W C++ ZADANIA

PROGRAMOWANIE W C++ ZADANIA PROGRAMOWANIE W C++ ZADANIA Włodzimierz Gajda Rozdział 7 PĘTLE 7.1 PĘTLA FOR: rysowanie wzorków. ZADANIE 7.1.1 Napisz program drukujący na ekranie 19 gwiazdek: ******************* ZADANIE 7.1.2 Napisz

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.

Bardziej szczegółowo

7. Pętle for. Przykłady

7. Pętle for. Przykłady . Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i

Bardziej szczegółowo

Wstęp do informatyki- wykład 1

Wstęp do informatyki- wykład 1 MATEMATYKA 1 Wstęp do informatyki- wykład 1 Systemy liczbowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 = Systemy liczbowe Dla każdej liczby naturalnej x Î N oraz liczby naturalnej p >= 2 istnieją jednoznacznie wyznaczone: liczba n Î N oraz ciąg cyfr c 0, c 1,..., c n-1 (gdzie ck Î {0, 1,..., p - 1}) taki,

Bardziej szczegółowo

Laboratorium nr 1. i 2.

Laboratorium nr 1. i 2. Laboratorium nr 1. i 2. Celem laboratorium jest zapoznanie się ze zintegrowanym środowiskiem programistycznym, na przykładzie podstawowych aplikacji z obsługą standardowego wejścia wyjścia, podstawowych

Bardziej szczegółowo