Upload
others
View
19
Download
0
Embed Size (px)
Citation preview
3
Informacje organizacyjne
Wykładowca: dr inż. Małgorzata Detka
Numer pokoju: 5.08, budynek D
Numer telefonu: 41 34-24-157
Adres e-mail: [email protected]
4
Literatura
Brian W. Kernighan, Dennis M. Ritchie, „Język ANSI C. Programowanie”, Wydanie 2, Wydawnictwo Helion, Gliwice 2010
PiotrWróblewski, „Algorytmy, struktury danych i techniki programowania”, Helion, Gliwice 1997
Jon Bentley, „Perełki Oprogramowania”, WNT, Warszawa 1992
Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman „Algorytmy i struktury danych”, Helion, Gliwice 2003
5
Literatura
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, „Wprowadzenie do algorytmów”, WNT, Warszawa 1998
Donald E. Knuth, „Sztuka programowania”, WNT, Warszawa 2002
Steven S. Skiena, “The Algorithm Design Manual”,Springer-Verlang, London 2010 (w języku angielskim)
6
Literaturazasoby internetowe
Wikibooks: Język C
The GNU C programming tutorial
Learning GNU C
The GNU C Library
8
Programowanie
Programowanie komputerów – jest to zespół czynności,którego celem jest przygotowanie programu dla systemukomputerowego. W skład tych czynności wchodzą:opracowanie modelu problemu, który chcemy rozwiązać zapomocą komputera, opracowanie algorytmu (lub algorytmów)rozwiązania, zakodowanie tego algorytmu za pomocąwybranego języka programowania oraz usunięcie błędówskładniowych i logicznych.
9
Program komputerowy
Program komputerowy – to zapis algorytmu lub algorytmówrozwiązania pewnych problemów w określonym językuprogramowania.
10
Algorytm
Algorytm – jest to skończony zbiór precyzyjniezdefiniowanych czynności koniecznych do wykonaniaokreślonego zadania.
Zapis algorytmu działania w wybranym języku programowania nazywamy implementacją algorytmu.
11
Język programowania
Językiem programowania nazywamy zestaw zasadtekstowego lub graficznego opisu algorytmu za pomocąprzyjętych elementów języka.Po implementacji algorytmu w wybranym języku opisutekstowego powstaje kod źródłowy programu, czyli tekstprogramu.
12
Program komputerowy
Tworzenie programu komputerowego dzielimy na dwa etapy:
ETAP 1Po zrodzeniu się pomysłu powinien powstać algorytm. Algorytm wymuszastosowanie podziału programu na funkcje, zmienne oraz obiekty, na którychprogram będzie operował, jak również wprowadzenie procedur, któreopisują wykonywane operacje.
ETAP 2Algorytm zapisujemy w wybranym języku programowania, stosującdostępne struktury danych i funkcje – tworzymy kod źródłowy programu. Wtrakcie tworzenia programu kod poddajemy debugowaniu, a efekt pracymożemy sprawdzić po kompilacji kodu na program wykonywalny.
13
Program komputerowy
DEBUGGINGW trakcie pisania programu w kodzie źródłowym mogą pojawić się błędy, np. literówki lub funkcje, które nie zostały zdefiniowane. Aby wychwycić wszystkie niebezpieczne miejsca w kodzie źródłowym, kod poddaje się debugowaniu (wyszukiwaniu błędów – robaków).
KOMPILACJAKod źródłowy napisany jest w języku programowania czytelnym dla programisty, ale nie dla komputera. Dlatego musi być zamieniony na instrukcje zrozumiałe dla komputera, a właściwie na ciąg zer i jedynek. Proces ten nazywa się kompilacją, a programy, które realizują ten proces nazywamy kompilatorami.Po kompilacji otrzymuje się program wykonywalny , tzn. gotowy do bezpośredniego uruchomienia przez komputer.
14
Języki programowania Kod maszynowyKomputer jako urządzenie elektroniczne działa na zasadzie przekazywaniapodzespołom sygnałów binarnych – „1” (np. od 2,7 V do 5 V) lub „0” (np. od 0 V do1,8 V). Kod maszynowy jest odpowiednikiem sygnałów binarnych, reprezentującychciąg instrukcji obsługiwanych przez sprzęt (zapis kodu za pomocą instrukcjiprocesora).Języki niskopoziomowePrzedstawiają one instrukcje udostępniane przez system komputerowy w postaciprostych oznaczeń (o ograniczonej liczbie, zakodowane w procesorze). Do językówniskopoziomowych należą Assemblery.Języki wysokopoziomoweSą to języki o wyższym poziomie abstrakcji, bardziej zrozumiałe dla człowieka iniezależne od architektury elektrycznej sprzętu komputerowego.Np. wyświetlenie tekstu na ekranie używając assemblera wymaga napisaniakilkudziesięciu instrukcji. W języku wysokopoziomowym wystarczy wpisać np.print(‘tekst’).Pascal, C, C++, Java.
15
Języki programowania
Języki wysokopoziomowe dzielimy na dwie grupy:• Interpretowalne• Kompilowalne.
Języki interpretowalne nie wymagają kompilacji – HTML, PHP, JavaScript, używane do tworzenia serwisów WWW.
Języki kompilowalne wymagają procesu kompilacji kodu źródłowego do postaci kodu maszynowego, aby program mógł być wykonywany – Pascal, C, C++, Java.
16
Środowiska programistyczne
Do utworzenia programu w danym języku niezbędne są edytor tekstu,debugger i kompilator.
Programy te mogą tworzyć integralne środowisko pracy, udostępniającekombinacje tych funkcji – mówimy wówczas o środowiskuprogramistycznymnp.. Code::Blocks.
17
Algorytm
Jeżeli mamy do wykonania jakieś zadanie, budujemy sposób, przepisrealizacji tego zadania. Taki przepis to algorytm. Dopiero po zapisaniu wkonkretnym języku programowania algorytm staje się programem.
Algorytm to sposób postępowania, który prowadzi do rozwiązania wskończonej liczbie kroków.
18
Własności algorytmu
Skończoność – wykonanie algorytmu zawsze musi się zatrzymać po skończonej liczbiekroków. Procedura, która ma wszystkie cechy algorytmu, poza skończonością nazywanajest procedurą obliczeniową.
Dobre zdefiniowanie – każdy krok algorytmu musi być opisany precyzyjnie, dla każdegoprzypadku akcje muszą być opisane ściśle i jednoznacznie,
Dane wejściowe – algorytm ma zero lub więcej danych wejściowych, tj. wartości, które sąznane przed rozpoczęciem wykonania algorytmu,
Dane wyjściowe – algorytm generuje jedną lub więcej danych wyjściowych, czyli wartościw określony sposób powiązanych z danymi wejściowymi.
Efektywność – z praktycznego punktu widzenia, algorytm nie tylko powinien daćsię wykonać w skończonym czasie, ale również ten czas powinien być możliwiekrótki.
19
Zapis algorytmu
Algorytmy mogą być zapisane w postaci zrozumiałej dlaczłowieka lub nadającej się do wykonania przez komputer. Wpierwszym przypadku może on być opisany słownie lubprzedstawiony za pomocą schematu blokowego.
21
Zapis algorytmu
Schemat blokowy – szczególna forma zapisu algorytmu,złożona z bloków działań w formie figur geometrycznychpołączonych skierowanymi liniami obrazującymi możliweprzebiegi działań.
22
Elementy schematu blokowego
Start – początek programu
Stop – koniec programu
Blok wejścia – wprowadzanie danych
23
Elementy schematu blokowego
Blok wyjścia – wyprowadzanie wyników
Blok operacyjny – przetwarzanie danych
Blok decyzyjny
24
Elementy schematu blokowego
Pętla „dopóki” - z warunkiem na początku
Pętla „powtórz” - z warunkiem na końcu
26
Algorytmy
Algorytmy dzielimy na:
algorytmy liniowe, jeśli wykorzystują operacje
bezpośredniego następstwa,
algorytmy warunkowe, jeśli wykorzystują operacje
warunkowe,
algorytmy iteracyjne, jeśli wykorzystują pętle.
28
Przykład 1
#include <stdio.h>#include <stdlib.h>
int main(){
int a,b,suma;
printf("Podaj a: ");scanf("%d",&a);printf("Podaj b: ");scanf("%d",&b);suma=a + b;printf("Suma: %d",suma);return 0;
}
30
Przykład 2#include <stdio.h>#include <stdlib.h>
int main(){
int a,b,c,min;printf("Podaj a: ");scanf("%d",&a);printf("Podaj b: ");scanf("%d",&b);printf("Podaj a: ");scanf("%d",&c);min=a;if(b<min) min=b;if(c<min) min=c; printf("Liczba minimalna: %d",min);return 0;
}
32
Przykład 3
main(){float x,f;printf("Podaj x: ");scanf("%f",&x);if(x<=5)
f=pow((x-5),2);else
f=sqrt(x-5);printf("Wartosc funkcji
dla %f wynosi:%f",x,f);}
34
Przykład 4int main(){
float x,f;
printf("Podaj x: ");scanf("%f",&x);if(x<=-1)
f=x;else
if(x>1)f=-x;
elsef=-1;
printf("%f",f);
return 0;}
36
Przykład 5#include <stdio.h>#include <stdlib.h>
int main(){
float a, b, c, delta, x, x1, x2;
printf("Podaj a: ");scanf("%f",&a);printf("Podaj b: ");scanf("%f",&b);printf("Podaj c: ");scanf("%f",&c);delta = b*b-4*a*c;if(delta<0) printf("Brak
pierwiastkow rzeczywistych");
else if(delta==0) {x=-b/(2*a);printf("x=%f",x);
}else{x1=(-b-sqrt(delta))/(2*a);x2=(-b+sqrt(delta))/(2*a);printf("x1=%f, x2=%f",x1,x2);
}return 0;
}
38
Przykład 6
main(){int n,x,suma;
printf("Podaj ilosc elementow n: ");
scanf("%d",&n);suma=0;for(int i=0; i<n;i++){
printf("Podaj x:");scanf("%d",&x);suma=suma+x;
}printf("Suma: %d",suma);
}
39
Przykład 7
Algorytm Eukildesa wyznaczania największego wspólnegodzielnika dodatnich liczb całkowitych (NWD).
ProblemDane są dwie liczby całkowite M i N, należy znaleźć ich największywspólny dzielnik, tj. największą dodatnią liczbę całkowitą, któradzieli całkowicie zarówno M, jak i N.
40
Przykład 7main(){
int M,N,R;
printf("Podaj pierwsza liczbe naturalna M:");
scanf("%d",&M);printf("Podaj druga liczbe
naturalna N:");scanf("%d",&N);R=M % N;while(R!=0){
M=N;N=R;R=M%N;
}printf("%d",N);return 0;
}