Podstawy Informatyki. Wykład 5 Różne pożyteczne algorytmy

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

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

Podstawy Informatyki

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

for (i=1; i<=10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Podstawy Informatyki. Inżynieria Ciepła, I rok. Iteracja warunkowadopóki(while) Blok instrukcji. Pascal: begin instrukcja1; C: { end;

1 Podstawy c++ w pigułce.

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

Część 4 życie programu

1 Podstawy c++ w pigułce.

I - Microsoft Visual Studio C++

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Wstęp do Informatyki

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

Proste programy w C++ zadania

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

Język ludzki kod maszynowy

Programowanie komputerowe. Zajęcia 1

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

Wstęp do programowania

2 Przygotował: mgr inż. Maciej Lasota

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

3. Instrukcje warunkowe

C++ wprowadzanie zmiennych

Mnożenie macierzy. Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność

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

Podstawy programowania w języku C

Programowanie strukturalne i obiektowe

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

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wykład 3 Typy danych w C++/CLI, typy fundamentalne, operacje wejścia/wyjścia, właściwości klasy (property) Zofia Kruczkiewicz

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

1. Rozwiązać układ równań { x 2 = 2y 1

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

Kontrola przebiegu programu

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

( wykł. dr Marek Piasecki )

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

Pytania sprawdzające wiedzę z programowania C++

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

Podstawowe działania w rachunku macierzowym

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

MATEMATYKA 9. INSTYTUT MEDICUS Kurs przygotowawczy do matury i rekrutacji na studia medyczne Rok 2017/2018 FUNKCJE WYKŁADNICZE, LOGARYTMY

Struktura pliku projektu Console Application

1. Wprowadzenie do C/C++

Podstawy programowania C. dr. Krystyna Łapin

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

z programowania z przykładowymi rozwiązaniami

Języki programowania - podstawy

Instrukcje sterujące

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

KASA EDUKACYJNA INSTRUKCJA. WARIANT I - dla dzieci młodszych

Podstawy Programowania. Wykład 1

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Zagadnienia transportowe

PowerShell. Sławomir Wawrzyniak

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Microsoft IT Academy kurs programowania

Wstęp do Programowania, laboratorium 02

Wykład 1

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wstęp do Programowania 2

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Instrukcje sterujące. Programowanie Proceduralne 1

1. Wprowadzenie do C/C++

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

#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 ); }

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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

Podstawy programowania w języku C

wykład I uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Wstęp do języka C wykład I dr Jarosław Mederski Spis Ogólne informacje

Wprowadzenie do języka Java

1 Granice funkcji. Definicja 1 (Granica w sensie Cauchy ego). Mówimy, że liczba g jest granicą funkcji f(x) w punkcie x = a, co zapisujemy.

Programowanie 2. Język C++. Wykład 2.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

dr Gabriela Omiecińska pokój 274 piątek: sobota PDF stworzony przez wersję demonstracyjną pdffactory

Programowanie Procedurale

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

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

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

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

Zmienne, instrukcje warunkowe

Wstęp do programowania

PRACA KLASOWA PO REALIZACJI PROGRAMU NAUCZANIA W KLASIE 4

PROGRAMOWANIE w C prolog

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

G PROGRAMMING. Part #4

Programowanie - instrukcje sterujące

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Transkrypt:

Podstawy Informatyki Wykład 5 Różne pożyteczne algorytmy

Algorytm sprawdzania parzystości liczby We: sprawdzana liczba x y = (x/2)*2 WY: x nieparzyste N? x=y T WY: x parzyste

Algorytm sprawdzania parzystości liczby Program parzystosc; Deklaracja zmiennych x,y: całkowita; Początek pisz( podaj liczbe x ); czytaj(x); y := x/2; y := y*2; jeżeli (x=y) to pisz ( liczba x jest parzysta ) w przeciwnym razie pisz ( liczba x jest nieparzysta ) koniec. Uwaga: Program ma sens tylko dzięki własności dzielenia liczb całkowitych.

Algorytm sprawdzania czy trójkąt jest prostokątny We: a,b,c boki trójkąta d = a*a + b*b WY: trójkąt nie jest prostokątny N? d=c*c T WY: trójkąt jest prostokątny

Algorytm sprawdzania czy trójkąt jest prostokątny Program trojkat prostokatny; Deklaracja zmiennych a,b,c,d: całkowita; Początek pisz( podaj boki a,b,c); d:=a*a+b*b; jeżeli (d=c*c) to pisz ( trójkąt prostokątny ) Gdzie tkwi błąd? Jak poprawić ten program? koniec.. w przeciwnym razie pisz ( trójkąt nie jest prostokątny )

Obliczanie pierwiastka kwadratowego Obliczanie pierwiastka kwadratowego: Przykład: Jak obliczyć pierwiastek z x? Metoda Newtona: y= y+ 2 yx x- liczba pierwiastkowana y - wynik pierwiastkowania.

Obliczanie pierwiastka kwadratowego - algorytm: Program pierwiastek kwadratowy; Deklaracja zmiennych x,y: i : Początek. koniec. rzeczywista; całkowita; pisz( podaj x); y := 1; dla i:=0 do i:= 20 y:=(y+x/y)/2; pisz ( pierwiastek z, x, =, y)

Sito Erastotenesa Sito Erastotenesa Wyszukiwanie liczb pierwszych 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2

Sito Erastotenesa 2 3 5 7 9 11 13 15 17 19 21 23 25 2 3 5 7 11 13 17 19 23 25 Kiedy koniec? Dla n

program sito a: tablica [1...1000] elementów całkowitych i,j,n,m,x,y:całkowite pisz 'podaj górną granicę przedziału, max 1000' czytaj n m=int(sqrt(n)) maksymalny mnoznik pierwiastek z n) dla i=1 do n wykonuj a[i]=i podstawienie kolejnych liczb do tablicy dla j=2 do m wykonuj początek jeśli a[j] <>0 to początek dla i=j+1 do n wykonuj początek x=a[i] y=(x/j)*j sprawdzanie podzielności jeśli x=y to a[i]=0 koniec koniec koniec

pisz 'w podanym zakresie liczby pierwsze to:' dla i=2 do n jeśli a[i] <>0 to drukuj a[i] koniec

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 Koniec lat 80 standard ANSI C 1983 - C++ (Bjarne Stroustrup) Do chwili obecnej nie stosuje się jednego standardu!

Kompilatory C++ Microsoft Visual C++ (w ramach licencji MSDN AA) Darmowe: Linux (PC), Solaris (SUN) : http://gcc.gnu.org/ - g++ Windows : http://www.bloodshed.net/dev/devcpp.html - Dev-C++ http://www.delorie.com/djgpp/ - DJGPP http://www.mingw.org/ - MinGW

Kompilacja nagłówki moduły biblioteki *.cpp kompilator linker programm błędy błędy UNIX Kompilacja: 1) g++ prog.cpp 2) g++ -o prog prog.cpp Uruchomienie: 1) a.out 2) prog

Pierwszy program #include <iostream> #include <string> using namespace std; int main() string komunikat; double a,b,c; komunikat = "Koniec obliczeń"; cout <<"Podaj a i b: "; cin >>a>>b; c=a+b; cout <<" suma "<<a<<" i "<<b<<" wynosi "<<c<<'\n'; cout<<komunikat<<'\n'; return 0;

Dyrektywy preprocesora #include <iostream> #include <string> Program przed kompilacją dołącza zewnętrzne pliki np pliki nagłówkowe. Poniżej fragment pliku iostream: extern _IO_istream_withassign cin; // clog->rdbuf() == cerr->rdbuf() extern _IO_ostream_withassign cout, cerr; Zdefiniowanie przestrzeni nazw: using namespace std;

Program główny int main()...... return 0; Program główny traktowany jest jak funkcja musi zwrócić jakąś wartość (typu integer) Zwracając do systemu operacyjnego wartość 0 informujemy, że program zakończył się bez błędu.

Deklaracja zmiennych string komunikat; double a,b,c; short int - typ całkowity krótki int - typ całkowity. long int - typ całkowity długi float - typ zmiennoprzecinkowy pojedynczej precyzji. double - typ zmiennoprzecinkowy podwójnej precyzji. long double - typ zmiennoprzecinkowy podwójnej precyzji długi. char - typ znakowy string ciąg znaków Nazwy zmiennych mogą składać się z liter,cyfr i podkreślenia _ Nazwa nie może się zaczynać od cyfry unsigned zmienna bez znaku (tylko dodatnia) dla typów int int ( 127,128) unsigned int (0,255)

Operatory komunikat = "Koniec obliczeń"; c=a+b; operator przypisania = operator dodawania + operator odejmowania - operator mnożenia * operator dzielenia / operator reszty z dzielenia (modulo) % operator znaku liczby (np. -45)

Operatory złożone += zmienna += 2 zmienna = zmienna + 2 - = zmienna -= 7 zmienna = zmienna - 7 *= zmienna *= 3 zmienna = zmienna * 3 /= zmienna /= 5 zmienna = zmienna / 5 %= zmienna %= 3 zmienna = zmienna % 3

Operatory inkrementacji i dekrementacji ++ zwiększenie wartości o 1, np. i++ to jest to samo co i=i+1 -- zmniejszenie wartości o 1, np. i-- to jest to samo co i=i-1 Uwaga! Operatory te można stosować przed i po zmiennej, tzn. liczba++ lub ++liczba. Podobnie dla --. Mimo, że działanie operatora w obu wypadkach jest podobne, to nie jest jednak identyczne! ++liczba najpierw dodaje do liczby 1, a potem zwraca jej wartość liczba++ najpierw zwraca wartość, a potem dodaje liczba =5; a) cout<<++liczba; drukuje 6 b) cout<<liczba++; drukuje 5 a liczba jest po instrukcji a lub b zawsze równa 6

== równa się!= jest różne > jest większe >= jest większe lub równe < jest mniejsze <= jest mniejsze lub równe Operatory relacji Operatory logiczne suma - prawdziwe jeśli którekolwiek z wyrażeń jest prawdziwe && iloczyn - prawdziwe jeśli oba wyrażenia są prawdziwe! negacja logiczna - powoduje zaprzeczenie wyrażenia Uwaga! Przypisanie = zwraca wartość przypisania czyli np. a=3 zwraca wartość 3, a każda liczba różna od zera jest w języku C++ traktowana jako prawda. Tylko wartość 0 jest traktowana jako fałsz. (a=2) (3==5) zawsze prawda; (a==2) (3==5) niekoniecznie

Opercje wejścia i wyjścia Strumienie biblioteka iostream cout - powiązany ze standardowym urządzeniem wyjścia cin - powiązany ze standardowym urządzeniem wejścia cerr - strumień błędów - połączony ze standardowym urządzeniem wyjścia clog - podobnie jak cerr, ale wydajniejszy przy wielu danych << - operator wysyłania do strumienia >> - operator pobierania ze strumienia np. cin >>a>>b; cout <<x1; cout <<y1<<' '<<y2<<'\n';

Instrukcja warunkowa if (warunek) instrukcja1; else instrukcja2; if (warunek) instrukcja1; instrukcja2;... instrukcjan; else instrukcja1; instrukcja2;... instrukcjan;

Tablice int calkowite[20]; - przechowuje 20 liczb typu int char znaki[5]; - p. 5 znaków double liczby[1000]; - p. 1000 liczb typu double string napisy[5]; - p. 5 napisów (wieloznakowych) Uwaga! Rozmiar tablicy musi być podany przed kompilacją znaki[0] - pierwszy element tablicy znaki znaki[4] piąty element tablicy

int calk[5]=2,-3,4,8,12; int aa[3]=12,-3; Inicjacja tablicy Nie zainicjowane wyrazy otrzymują wartość 0 Nie zainicjowana tablica ma nieokreślone wartości. int bb[3]=2,-3,4,8; //Kompilator wykaże błąd! a=bb[4] program nie zasygnalizuje błędu, ale przeczyta nieprzewidywalne dane!

Pętle (1) - for for (licznik=pocz;licznik<konc;++licznik) Instrukcje w pętli... licznik zmienna sterująca pętlą Wykonuje się dla wartości licznik: od pocz do konc z dodaniem 1 (++licznik) za każdym cyklem -------------------------------------------------------------------------------------------- for (licznik=pocz;licznik<konc;++licznik) Instrukcje w pętli... ++licznik Licznik zwiększamy dwa razy!

int licznik; for (licznik=pocz;licznik<konc;++licznik) Instrukcje w pętli... Pętla wykona się 9 razy Po zakończeniu pętli zmienna licznik wynosi 10 --------------------------------------------------------------------------------- Nie musimy deklarować oddzielnej zmiennej licznik: for (int licznik=pocz;licznik<konc;++licznik) Instrukcje w pętli... Po zakończeniu pętli zmienna licznik... nie istnieje

int licznik; for (licznik=10;licznik>=0;--licznik) Instrukcje w pętli... Odliczanie "z góry" Pętla wykona się 11 razy Po zakończeniu pętli zmienna licznik wynosi -1 Nie możemy w tym przypadku zadeklarować zmiennej licznik jako unsigned int

Pętle zagnieżdżone i j k int i, j,k=1; 1 1 5 4 1 2 for (i=1;i<=10; i+=3) for (j=5;j>=2;--j) Instrukcje w pętli... cout<<i<<j<<k; ++k; 1 1 4 4 4 4 7 7 7 7 3 2 5 4 3 2 5 4 3 2 3 4 5 6 7 8 9 10 11 12 10 5 13 10 4 14 10 3 15 10 2 16

Pętle (2) do... while do instrukcje w pętli... while (warunek); Wykonuje się dla wartości warunek: prawda Gdy warunek przestaje być prawdziwy wychodzimy z pętli -------------------------------------------------------------------------------------------- Pętla wykona się co najmniej jeden raz! W pętli for warunek (zakresu) był sprawdzany na początku i instrukcje w pętli mogły się nie wykonać ani raz!

int i=3; do instrukcje w pętli... cout<<i<<'\n'; ++i; while (i<10); 3 4 5 6 7 8 9 Pętle (2) do... while int i=3; do instrukcje w pętli... cout<<i<<'\n'; ++i; while (i<1); 3

Pętle (3) while while (warunek) instrukcje w pętli... Wykonuje się dla wartości warunek: prawda Gdy warunek przestaje być prawdziwy wychodzimy z pętli -------------------------------------------------------------------------------------------- Pętla może się nie wykonać ani jeden raz! W pętli while warunek jest sprawdzany na początku i instrukcje w pętli mogą się w ogóle nie wykonać

Pętle (3) while int i=3; while (i<10) instrukcje w pętli... cout<<i<<'\n'; ++i; 3 4 5 6 7 8 9 int i=3; while (i<1) instrukcje w pętli... cout<<i<<'\n'; ++i; (nic)

Pętle i tablice int tabl[n]; //tablica n-elementowa unsigned int i; //zmienna sterujaca petlami for (i=0;i<n;++i) // wczytanie elementow tablicy cout <<"Podaj "<<i+1<<". element tablicy: "; cin >>tabl[i]; for (i=0;i<n;++i) // dodanie liczby 10 do kazdego elementu tablicy tabl [i]+=10; for (i=0;i<n;++i) // wypisanie elementow tablicy cout <<tabl[i]<<'\n ';

Pętle i tablice const int n=26; // rozmiar tablicy z danymi float dane[n]; unsigned int i; //zmienna sterujaca petlami float suma,srednia; // suma wyrazow, petla while i=0; suma=0; while (i<n) suma+=dane[i]; ++i; srednia=suma/n;

Break przerwanie pętli Liczymy średnią arytmetyczną wczytanych liczb (max 100). Element równy zero kończy wczytywanie. int i; float a,suma=0,srednia; for (i=0;i<99;++i) cin>>a; if (a==0) break; suma+=a; srednia=suma/i; cout<<srednia<<'\n' Jeśli stosujemy zagnieżdżone pętle i użyjemy instrukcji break w pętli najbardziej wewnętrznej, to zostanie przerwana jedynie ta najbardziej wewnętrzna pętla, pozostałe pętle będą się wykonywać.

Continue przerwanie kroku pętli Z przedziału 1..n podajemy liczby podzielne przez 3 for (unsigned int i=0;i<=n;++i) if ((i%3)!=0) continue; cout <<"Liczba "<<i<<"jest podzielna przez 3\n"; Program wraca na początek pętli i wykonuje kolejny krok

instrukcje programu... goto NazwaEtykiety2;... NazwaEtykiety1:...... goto NazwaEtykiety1;...... NazwaEtykiety2:...... Etykiety i instrukcje skoku goto W miejscu umieszczenia etykiety dwukropek Po instrukcji goto średnik

Operator warunkowy wyrażenie1? wyrażenie2 : wyrażenie3; Jeżeli wyrażenie1 jest prawdziwe, to wykonuj wyrażenie2, a jeśli jest fałszywe wykonuj wyrażenie3 (a<b)? cout <<"a jest mniejsze" : cout <<"b jest mniejsze"; zastępuje: if (a<b) cout <<"a jest mniejsze"; else cout <<"b jest mniejsze";

Instrukcja wyboru switch switch (wyrażenie) case wartosc1: Instrukcje1; break; case wartosc2: Instrukcje2; break;... case wartoscn: InstrukcjeN; break; default: InstrukcjaDomyslna; Obliczana jest wartość wyrażenia. Jeśli jest równa wartosc1 wykonywane są instrukcje1, jeśli wynik wynosi wartość2 wykonywane są instrukcje2 itd. Jeśli wynik wyrażenia nie jest równy żadnemu przypadkowi (case) wykonywana jest instrukcja domyślna (default)