Algorytmy + Struktury danych = Programy



Podobne dokumenty
Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Język programowania PASCAL

Wstęp do programowania. Różne różności

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

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Proste programy w C++ zadania

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

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

INSTRUKCJA ITERACYJNA REPEAT. repeat Instrukcja_1; Instrukcja_2; {... } Instrukcja_N; until wyr ; INSTRUKCJA ITERACYJNA WHILE

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Pascal - wprowadzenie

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

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Informatyka 1. Przetwarzanie tekstów

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Zasady Programowania Strukturalnego

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Proste algorytmy w języku C

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Podstawy Programowania C++

Informatyka A. Algorytmy

Podstawy programowania w języku C

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Instrukcja warunkowa i wyboru

Przykładowerozwiązania.

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Język ludzki kod maszynowy

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

1 Powtórzenie wiadomości

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

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Analiza algorytmów zadania podstawowe

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

1 Podstawy c++ w pigułce.

Algorytmy i struktury danych

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

Programowanie Delphi obliczenia, schematy blokowe

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

I. Podstawy języka C powtórka

Programowanie RAD Delphi

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

Wstęp do programowania

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

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

Proste algorytmy w języku C

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

C++ wprowadzanie zmiennych

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Programowanie w VB Proste algorytmy sortowania

Podprogramy. Procedury

Algorytmy i struktury danych

Laboratorium nr 1. i 2.

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

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

Algorytmy i struktury danych. wykład 1

Wstęp do informatyki Ćwiczenia. Piotr Fulmański

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

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

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

Visual Basic for Application (VBA)

Lekcja 6: Pascal. Procedura i funkcja

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Programowanie strukturalne i obiektowe. Funkcje

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Programowanie - instrukcje sterujące

Informatyka 1. Dokumentacja programu, moduły programowe, typy tablicowe

Przykład programu Rozwiązanie równania postaci:

Programowanie, algorytmy i struktury danych

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

1 Podstawy c++ w pigułce.

Języki skryptowe w programie Plans

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Algorytmika i pseudoprogramowanie

Programowanie strukturalne i obiektowe

Informatyka 1. Rekordy, przeszukiwanie i sortowanie tablic

Zmienne i struktury dynamiczne

Metody numeryczne Laboratorium 2

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

Wprowadzenie do programowania w VBA

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

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Kiedy i czy konieczne?

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Programowanie Proceduralne

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

APROKSYMACJA. Rys. 1. Funkcja aproksymująca zbiór punktów pomiarowych (1) (2) (3) (4) (5) (6) (7) ... Zmienna y

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

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

PLIKI TEKSTOWE F C E 30 0D 0A 42 6F 72 6C 61 6E 64 1A T U R B O _ P A S C A L _ 7. 0

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Transkrypt:

prof dr hab. inz Witold Dzwinel Instytut Informatyki AGH, KRAKÓW Algorytmy + Struktury danych = Programy DELPHI 4.0 TURBO PASCAL 5.5 Metoda TOP - DOWN 1. Wstep: Zlozonosc obliczeniowa: przyklad: znajdowanie liczb pierwszych rozwiazywanie ukladu równan liniowych 2. Struktury danych a. stale, zmienne, typy, tablice, b. stringi, rekordy c. wskazniki d. pliki e. obiekty 3. Instrukcje a. Instrukcje podstawienia i podstawowe instrukcje sterujace (if, for, goto) b. Dodatkowe instrukcje sterujace (if,then,else; while, repeat, case, continue, break, with) c. Funkcje, procedury i metody d. Programy, kompilatory, dyrektywy 4. Algorytmy a. Podstawy algorytmiki: sumowanie szeregu, silnia, operacje na stringach, generator liczb losowych, metody Monte-Carlo b. Podstawowe algorytmy numeryczne: interpolacja, aproksymacja, calkowanie, równania róznicowe, miejsca zerowe, znajdowanie maksimum (minimum funkcji), uklady równan. c. Operacje na tablicach. Wymiana, element maksymalny i minimalny transpozycja, porzadkowanie, mnozenie macierzy, sortowanie, quick-sort, kolejkowanie. d. Operacje na rekordach, tworzenie list, listy polaczone, operacje na strukturach drzewiastych, stosie, i inne struktury dynamiczne. e. Algorytmy rekurencyjne i operacje na obiektach

Cwiczenia No.1 1. Stale i zmienne, typy, if, for, goto - powtórzenie 2. Przyklady: a. Znajdowanie zer równania kwadratowego, b. Znajdowanie liczb pierwszych, c. Silnia, kombinacje k elementowe zbioru N elementowego, ciagi arytmetyczny i geometryczny d. Dodawanie elementów szeregu Taylora z zadana dokladnoscia e. Iteracyjne znajdowanie zer funkcji ================================================================= Komentarze // { } (* *) unit Nazwa; interface implementation. Stale: const Pi = 3.14159; AlaX = Moja kolezanka ; Ilosc = 35; Limit = 25.5; Boltzm = 1.36E-26; Zmienne var Kat: Real; i: Integer; Volume: Real; Radius: Double; NumberX: integer; Nazwisko: char; TablicaA = array [1.. Ilosc] of char; Typy zmiennych: Integer (-2 147 483 648... 2 147 483 647) Real (8 bajtów) Double (8 bajtów)

char (1 bajt) Wyrazenia Volume := 4.0/3.0 * Pi * Radius*Radius*Radius; TablicaA := Obliczono objetosc ; Operatory Arytmetyczne *, /, div,+, -, Przypisania := Logiczne: and, or Relacyjne: = <> < > <= >= Instrukcja sterujaca if then if Radius > Limit then Volume := 4.0/3.0* PI * Radius * Radius * Radius; Wynik := Volume/2; Instrukcja while... do... const con1 = 10; var suma: Real; suma := 0.0; while suma < MAX do suma := suma + con1;

CWICZENIA Napisac algorytm znajdowania wartosci N po K. function Silnia (N:integer):integer; var N,ST, Ind: integer; if (N <> 0) then ST := 1; Ind :=1; while Ind <= Silnia do ST := ST * nd; Ind := Ind + 1; else ST := 1; Silnia := ST; ======================= Rekurencja ============================== function Silnia (N:integer):integer; var N: integer; if (N = 0) then Silnia := 1; else Silnia := N* Silnia (N-1); =============================================== var N,K, Kombin: Integer; Kombin := Silnia(N)/(Silnia(N-K) * Silnia (K));

================Funkcja znajdujaca liczby pierwsze ============= function prime (N:integer): string; const NotPrime = not a prime number ; YesPrime = this is a prime number ; var N, Ns: integer; comm: string; if (N = 1) or (N div 2) = 0 then comm := NotPrime; else Ns := sqrt (N)+1; Ind := 3; while (N div Ind) <> 0 and Ind <= Ns do Ind := Ind + 2; if (Ind >= Ns) then comm := NotPrime; else comm := YesPrime; prime := comm;

======================Rozwiazywanie rownania kwadratowego ============= function sqreqs (a,b,c:real, var x: array [1..2] of real): integer; delta := sqr (b) 4* a*c; if delta < 0 then sqreqs := 0; else if delta = 0 then x[1] := -b/(2*a); x[2] := x[1]; sqreqs := 1; else x[1] := (-b+sqrt(delta))/(2*a); x[2] := (-b- sqrt(delta))/(2*a); sqreqs := 2;

=================Funkcja znajdujaca wartosc e**x ============== function exponent (x, Err:real): real; const Huge = 3.5E24; var error: real; if (x<1.0) then exponent := 1+x; error := Huge; id := 2; while error > Err do exponent := exponent + Power (x,id)/silnia(id); id := id + 1; error := 1.0/Silnia(id); else exponent = -1.0;

ZADANIE: 1. Napisz program znajdujacy wartosc funkcji sinus z zadana dokladnoscia (z szeregu Taylora) 2. Napisz program sumujacy nastepujacy ciag A0=Q0, A1=Q1, An = q*an-1 + q*an-2 3. Napisz program sumujacy odwrotnosci kwadratów elementów tablicy dwuwymiarowej 4. Napisz program znajdujacy macierz transponowana do danej macierzy dwuwymiarowej a[n,n] 5. Napisz program znajdujacy najwieksza wartosc w tablicy jednowymiarowej 6. Napisz kod w Pascalu sortujacy tablice dwuwymiarowa.

1. Instrukcja case Cwiczenia No.2 case PrzekroczeniePredkosci of 0 : Mandat := 0; 5: Mandat := 50; 10: Mandat := 75; 15: Mandat := 100; 20, 25, 30: Mandat := Przekroczenie Predkosci * 20; else Mandat := MaksymalnyMandat; 2. Rekordy Rekord jest to zbiór powiazanych danych zgrupowanych w jednej strukturze. Po zadeklarowaniu typu rekordowego, trzeba zadeklarowac zmienna tego typu, aby umieszczac w niej dane. Skladniki rekordu nosza nazwe pól. type TKartaAdresowA = record imie: string; nazwisko: string; ulica: string; miasto: string; kodpocztowy: integer; const MAX = 10000; var Karta001= array [1..MAX] of TKartaAdresowa; // Wielkosc tego rekordu moze byc rózna ze wzgledu na string (nie jest to dobre // w zapisie na plik Karta001[1].imie := waldus ; Karta001[1].nazwisko := kiepski ; Karta001[1].ulica := Polna ; Karta001[1].kodpocztowy := 320675;

with Karta001[1] do imie := waldus ; nazwisko := kiepski ; ulica := Polna ; kodpocztowy := 320675; Zadania na cwiczenia Skonstruuj typ rekordowy kartoteka, posortuj babelkowo ludzi wzgledem wieku. Dla osob mlodszych niz 65 lat wpisz w polu rekordu StosunekDoSluzby zmobilizowany. Dla osób mlodszych niz 40 lat drugalinia Dla osob mlodszych niz 25 lat pierwsza linia Posortowana tablice rekordów KARTOTEKA uzupelnij rekordami z tablicy wejsciowej INSERT function insert (n:integer, x:array [1..n] of real, var a:real, var k:integer):integer; var i: integer; if k<=0 then insert := 1; for i:=n downto k+1 do x[i] := x[i-1]; x[k] := a; else insert := 0;

function MatrixMult (k,m,n:integer, a:array [1..N, 1..M] of real, b:array [1..M, 1..K] of real, var c:array [1..N,1..K] of real) var n,m,k:integer; if N>=0 and K>=0 or M>=0 then MatrixMult := 1; for n :=1 to N do for k := 1 to K do c[n,k]:= 0; for m := 1 to M do c[n,k] := c[n,k] + a[n, m]*b[m,k] else MatrixMult := 0; function BubbleSort (M: integer, var a: array[1..m] of real): integer; var s: real; i,k,m: integer; m := 0; BubbleSort := 1; while k > 0 do k := 0; for i :=1 to M -1 do if a[i] > a[i+1] then k:=k+1; s := a[i]; a[i] := a[i+1]; a[i+1] := s; if k=0 and m =0 then BubbleSort := 0; m := m+1;

procedure NormalSort (M: integer, var a: array[1..m] of real); var s: real; i,k,l: integer; for k := 1 to M-1 do s := a[k ]; l := k; for i :=k+1 to M do if s < a[i] then s := a[i]; l := i; a[l] := a[k]; a[k] := s; PROJEKTY Na najblizsze cwiczenia: 1. Skonstruuj dowolny typ rekordowy 2. Zdefiniuj tablice rekordow w ktorej dokonywac bedziesz poszukiwania jej elementow zgodnie z zadanymi regulami dla pól. 1. Sortowanie babelkowe rekordow ksiazka cena 2. Sortowanie przez wstawianie, rekordow imie, nazwisko wzrost 3. Znajdowanie liczby pierwszej w zadanej tablicy liczb 4. Sumowanie procentow (suma wplacona, stale odsetki, coroczny podatek Belki, ile bede mial pieniedzy w zadanym miesiacu i roku) 5. Liczenie calki z zadanych funkcji metoda trapezow i Simpsona 6. Program na znajdowanie sumy elementów ciagu Fibonacciego 7. Program na liczenie wartosci funkcji sin(x) z rozwiniecia funkcji w szereg Tylora z zadana dokladnoscia 8. Program do znadowania prostej regresji 9. Metoda regula falsi w znajdowaniu zer zadanej funkcji 10. Program znajdujacy dokladne pierwiastki rownania 3ego stopnia 11. Napisz program ukladajacy rekordy (np. typu kartoteka) na stos (o ograniczonym rozmiarze), wyszukujacy na stosie zadane elementy sortujacy stos w zadanym porzadku. 12. Napisz program wstawiajacy napisany kawalek tekstu w zadane miejsce drugiego tekstu.

13. Napisz program kodujacy tekst w ktorym kluczem kodowym jest odleglosc znaku kodujacego w tablicy ASCII. 14. Napisz program wylawiajacy z tekstu zadany kawalek tekstu 15. Napisz program zamieniajacy w tekscie zadane znaki innymi zadanymi znakami.

Cwiczenia No.3 Kartkówka: 1. Mamy tablice A[100,100] wypelniona rekordami o dwóch polach jedno typu char a drugie typu real. a. zadeklaruj tablice rekordów b. napisz funkcje zwracajaca tablice transponowana do A c. oraz zwracajaca ilosc elementów tablicy dla których pole rzeczywiste posiada wartosc mniejsza od x i wiekszych od y 2. Mamy tablice B[100,10] wypelniona rekordami o dwóch polach jedno typu char a drugie typu integer. a. zadeklaruj tablice rekordów b. napisz funkcje zwracajaca tablice C[10,100] w której wiersze to odpowiednie kolumny macierzy B. c. funkcja zwraca liczbe elementów tablicy w których pole integer jest wieksze od 0. type rec record a1: char; a2: real; var A: array [1,100, 1..100] of rec; b:rec; x,y:real; i,j,l, ilosc: integer; const M = 100; l := 0; for i := 1 to M do for j:= i+1 to M do b := A[i,j]; if b.a2 <y and b.a2>x then l:=l+1; A[i,j] := A[j,i]; if A[j,i].a2 <y and A[j,i].a2>x then l:=l+1; A[j,i] := b; ilosc := l;

Mamy dwa zbiory A i B. Znalezc C sume róznice i iloczyn zbiorów. SUMA ZBIORÓW (N>=M): for i := 1 to N do C[i] := A[i]; k := 0; for i:= 1 to M do b := B[i]; j := 1; while j < N - k do if b = C[j] then C[j] := C[N-k]; k := k +1; j : = j 1; Il[k] : = b; j := j + 1; // ILOCZYN for n := 1 to M do // SUMA C[j+ n-1] := B [n ]; for n := 1 to j-1 do // if j=1 RÓZNICA = zbiór pusty R [n] := C[n]; W DOMU Znajdz: liczbe elementów, ilosc powtórzen, iloczyn, sume i róznice stogów

Cwiczenia No.4 Masz N wygenerowanych losowo punktów w kwadracie a na b. Znajdz najblizszych sasiadów znajdujacych sie nie dalej niz Rcut. Zrób to za pomoca listy polaczonej. algorytm N 2 var X,Y: array [1..N] of real; Lmindis: array [1..N] of real; L:array[1..N] of integer; x, a, b, distx, disty, dist, Rcut, disi, disj: real; i,j:integer; x := iles; for i:=1 to N do X[i] := a*rand(x); Y[i] := b*rand(x); L[i] := 0; Lmindis[i] := Rcut; for i:=1 to N do for j:=i+1 to N do distx := X[i]-X[j]; disty := Y[i]-Y[j]; dist := distx*distx + disty*disty; if dist < Rcut then disi := Lmindis[i]; disj:= Lmindis[j]; if dist < disi then Lmindis[i]:=dist; L[i] := j; if dist < disj then Lmindis[j]:=dist; L[j] := i;

algorytm N var LL: array [1..N] of integer; LH: array [1..Nc] of integer; ncx, ncy, icell, ix, iy: integer; ncx := a/rcut; ncy := b/rcut; for i:=1 to N do LL[i] := 0; for i:=1 to Nc do LH[i] := 0; for i:=1 to N do iy := (Y[i]/b)*ncy; ix := (X[i]/a)*ncx icell := ix + iy*ncx + 1 ; LL[i] := LH[icell]; LH[ice ll] := i; for icell:=1 to Nc do icellx := (icell-1) div ncx; //reszta z dzielenia icelly := (icell-1) / ncx; i := LH[icell]; while i <> 0 do j := LL[i]; // dla innych komorek j:=k:=lh[icell1] while j <> 0 do distx := X[i]-X[j]; disty := Y[i]-Y[j]; dist := distx*distx + disty* disty; if dist < Rcut then disi := Lmindis[i]; disj:= Lmindis[j]; if dist < disi then Lmindis[i]:=dist; L[i] := j; if dist < disj then Lmindis[j]:=dist; L[j] := i; j := LL[j]; i := LL[i]; icellx1 := icellx 1; //sprawdzic war brzegowe icelly1 := icelly; icell 1:= icellx+icelly*ncx;

i := LH[icell1]; while i <> 0 do j := LH[icell]; while j <> 0 do distx := X[i]-X[j]; disty := Y[i]-Y[j]; dist := distx*distx + disty*disty; if dist < Rcut then disi := Lmindis[i]; disj:= Lmindis[j]; if dist < disi then Lmindis[i]:=dist; L[i] := j; if dist < disj then Lmindis[j]:=dist; L[j] := i; j := LL[j]; i := LL[i];