Rodzaje błędów w programach. Wykład9.UWAGIOGÓLNE,str.1

Podobne dokumenty
Błędy leksykalne są na ogół nietrudne do znalezienia.

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

W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Deklaracje. W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

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

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

Poprawność semantyczna

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Tablice, funkcje - wprowadzenie

Java EE produkcja oprogramowania

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

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Funkcje. Funkcje. liczba rzeczywista r punkt, w którym wartość wielomianu nas interesuje. Szukane: liczba rzeczywista

Wskaźniki w C. Anna Gogolińska

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Algorytm. a programowanie -

JĘZYKI PROGRAMOWANIA

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

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

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Stefan Sokołowski JĘZYKIPROGRAMOWANIA. Inst. Informatyki UG, Gdańsk, 2012/2013

Programowanie obiektowe

Microsoft IT Academy kurs programowania

Wstęp do programowania

Podstawy Informatyki. Algorytmy i ich poprawność

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Podstawy Programowania.

Podstawy programowania

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

Wstęp do programowania

Tablice, funkcje, wskaźniki - wprowadzenie

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Wstęp do programowania

Podstawy programowania - 1

KONSTRUKCJA KOMPILATORÓW

Jerzy Nawrocki, Wprowadzenie do informatyki

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Poprawność algorytmów

Podstawy Programowania

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Języki formalne i techniki translacji

Wstęp do programowania

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Programowanie komputerowe. Zajęcia 4

Laboratorium 5: Tablice. Wyszukiwanie binarne

Język C zajęcia nr 7. Uwagi dotyczące stylu programowania

Podstawy programowania (1)

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

1 Podstawy c++ w pigułce.

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Praktyka Programowania

Pytania sprawdzające wiedzę z programowania C++

Wstęp do informatyki- wykład 7

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Wprowadzenie do języka Java

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Zmienne, stałe i operatory

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Jerzy Nawrocki, Wprowadzenie do informatyki

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wartości domyślne, przeciażenia funkcji

Laboratorium nr 10. Temat: Funkcje cz.2.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Podstawy Kompilatorów

Podstawy programowania C. dr. Krystyna Łapin

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie komputerowe. Zajęcia 3

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

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

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Szablony funkcji i szablony klas

Podstawy programowania w języku C++

tablica: dane_liczbowe

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Język ludzki kod maszynowy

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

EGZAMIN MATURALNY 2011 INFORMATYKA

Wskaźniki. Informatyka

Programowanie obiektowe

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

Przypomnienie o klasach i obiektach

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

- - Ocena wykonaniu zad3. Brak zad3

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

Język C++ Różnice między C a C++

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

EGZAMIN MATURALNY Z INFORMATYKI 11 MAJA 2018 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Transkrypt:

Wykład9.UWAGIOGÓLNE,str.1

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka.

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1;

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1; Sygn. błędu w C: expected expression before = token

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1; Sygn. błędu w C: expected expression before = token M foor(i=0; i<100; i=i+1) s=s+i;

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1; Sygn. błędu w C: expected expression before = token M foor(i=0; i<100; i=i+1) s=s+i; Traktowany przez C jak identyfikator.

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1; Sygn. błędu w C: expected expression before = token M foor(i=0; i<100; i=i+1) s=s+i; Traktowany przez C jak identyfikator. Mx=6.02F-23;

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1; Sygn. błędu w C: expected expression before = token M foor(i=0; i<100; i=i+1) s=s+i; Traktowany przez C jak identyfikator. Mx=6.02F-23; Działanie nieokreślone: ignoruje F.

Wykład9.UWAGIOGÓLNE,str.1 Błąd leksykalny pojedyncza jednostka leksykalna(operator, słowo kluczowe, liczba itp.), której nie przewiduje definicja języka. Mn:=1; Sygn. błędu w C: expected expression before = token M foor(i=0; i<100; i=i+1) s=s+i; Traktowany przez C jak identyfikator. Mx=6.02F-23; Działanie nieokreślone: ignoruje F. Błędy leksykalne są na ogół nietrudne do znalezienia.

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione.

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2);

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2); Sygn.błęduwC:expected ; before ) token

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2); Sygn.błęduwC:expected ; before ) token Mx+1=x;

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2); Sygn.błęduwC:expected ; before ) token Mx+1=x; Sygn. błędu w C: lvalue required as left operand of assignment

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2); Sygn.błęduwC:expected ; before ) token Mx+1=x; Sygn. błędu w C: lvalue required as left operand of assignment M for(i=0, i<100, i=i+1);

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2); Sygn.błęduwC:expected ; before ) token Mx+1=x; Sygn. błędu w C: lvalue required as left operand of assignment M for(i=0, i<100, i=i+1); Sygn.błęduwC:expected ; before ) token

Wykład9.UWAGIOGÓLNE,str.2 Błąd składniowy poprawne jednostki leksykalne są niepoprawnie zestawione. Mx=(x+1)/2); Sygn.błęduwC:expected ; before ) token Mx+1=x; Sygn. błędu w C: lvalue required as left operand of assignment M for(i=0, i<100, i=i+1); Sygn.błęduwC:expected ; before ) token Błędy składniowe są na ogół niezbyt trudne do znalezienia ale błąd może występować wcześniej, niż sygnalizuje kompilator.

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu.

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2;

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2; Sygn. błędu w C: invalidoperandstobinary%(have double and int )

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2; Sygn. błędu w C: invalidoperandstobinary%(have double and int ) Mdoublea[10]; a=0.1;

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2; Sygn. błędu w C: invalidoperandstobinary%(have double and int ) Mdoublea[10]; a=0.1; Sygn. błędu w C: incompatible types in assignment

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2; Sygn. błędu w C: invalidoperandstobinary%(have double and int ) Mdoublea[10]; a=0.1; Sygn. błędu w C: incompatible types in assignment M char tab[10]; tab[0] ="czesc";

Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2; Sygn. błędu w C: invalidoperandstobinary%(have double and int ) Mdoublea[10]; a=0.1; Sygn. błędu w C: incompatible types in assignment M char tab[10]; tab[0] ="czesc"; Ostrzeżenie w C: assignment makes integer from pointer without a cast

Błędy typu są niezbyt trudne do znalezienia, jeśli są sygnalizowane. Czasem niesąiwtedyjestźle... Rodzaje błędów w programach Wykład9.UWAGIOGÓLNE,str.3 Błąd typowania wyrażenie użyte w kontekście, w którym potrzebne jest wyr. innego typu. Mdoublex; x=x%2; Sygn. błędu w C: invalidoperandstobinary%(have double and int ) Mdoublea[10]; a=0.1; Sygn. błędu w C: incompatible types in assignment M char tab[10]; tab[0] ="czesc"; Ostrzeżenie w C: assignment makes integer from pointer without a cast

Wykład9.UWAGIOGÓLNE,str.4 Błąd semantyczny niezadeklarowanie identyfikatora, lub pomylenie zakresu jego deklaracji.

Wykład9.UWAGIOGÓLNE,str.4 Błąd semantyczny niezadeklarowanie identyfikatora, lub pomylenie zakresu jego deklaracji. Mmain() {i=0; }

Wykład9.UWAGIOGÓLNE,str.4 Błąd semantyczny niezadeklarowanie identyfikatora, lub pomylenie zakresu jego deklaracji. Mmain() {i=0; } Sygn. błędu w C: i undeclared

Wykład9.UWAGIOGÓLNE,str.4 Błąd semantyczny niezadeklarowanie identyfikatora, lub pomylenie zakresu jego deklaracji. Mmain() {i=0; } Sygn. błędu w C: i undeclared Mdoublex; int qq(intx) {returnx; } main() {x=x%2; }

Wykład9.UWAGIOGÓLNE,str.4 Błąd semantyczny niezadeklarowanie identyfikatora, lub pomylenie zakresu jego deklaracji. Mmain() {i=0; } Sygn. błędu w C: i undeclared Mdoublex; int qq(intx) {returnx; } main() {x=x%2; } Sygn. błędu w C: invalidoperandstobinary%(have double and int )

Wykład9.UWAGIOGÓLNE,str.4 Błąd semantyczny niezadeklarowanie identyfikatora, lub pomylenie zakresu jego deklaracji. Mmain() {i=0; } Sygn. błędu w C: i undeclared Mdoublex; int qq(intx) {returnx; } main() {x=x%2; } Sygn. błędu w C: invalidoperandstobinary%(have double and int ) Brak deklaracji jest łatwy do znalezienia, jeśli jest sygnalizowany. Pomylenie zakresu może dać trudny do znalezienia błąd logiczny(patrz dalej).

Wykład9.UWAGIOGÓLNE,str.5 Błąd działania skompilowany program natrafia na niemożność dalszego działania.

Wykład9.UWAGIOGÓLNE,str.5 Błąd działania skompilowany program natrafia na niemożność dalszego działania. Mn=n/(2*n/2-n);

Wykład9.UWAGIOGÓLNE,str.5 Błąd działania skompilowany program natrafia na niemożność dalszego działania. Mn=n/(2*n/2-n); W C zatrzymanie z komunikatem: Floating point exception

Wykład9.UWAGIOGÓLNE,str.5 Błąd działania skompilowany program natrafia na niemożność dalszego działania. Mn=n/(2*n/2-n); W C zatrzymanie z komunikatem: Floating point exception M i=0; while(i<=0) { a[i]=0; i=i-1; }

Wykład9.UWAGIOGÓLNE,str.5 Błąd działania skompilowany program natrafia na niemożność dalszego działania. Mn=n/(2*n/2-n); W C zatrzymanie z komunikatem: Floating point exception M i=0; while(i<=0) { a[i]=0; i=i-1; } W C zatrzymanie z komunikatem: Segmentation fault

Wykład9.UWAGIOGÓLNE,str.5 Błąd działania skompilowany program natrafia na niemożność dalszego działania. Mn=n/(2*n/2-n); W C zatrzymanie z komunikatem: Floating point exception M i=0; while(i<=0) { a[i]=0; i=i-1; } W C zatrzymanie z komunikatem: Segmentation fault Znalezienie utrudnia fakt, że błąd może wystąpić lub nie, zależnie od danych. Przyczyną może być błąd logiczny(patrz dalej).

Wykład9.UWAGIOGÓLNE,str.6 Nieskończone obliczenie obliczenie nigdy się nie kończy.

Wykład9.UWAGIOGÓLNE,str.6 Nieskończone obliczenie obliczenie nigdy się nie kończy. Mk=0;q=0; while(n>0) {n=n-k;q=q+1; }

Wykład9.UWAGIOGÓLNE,str.6 Nieskończone obliczenie obliczenie nigdy się nie kończy. Mk=0;q=0; while(n>0) {n=n-k;q=q+1; } M void qq(int n) { int k; k=n/2; if(n>0){qq(k); qq(n-k);} } main() {qq(5); }

Wykład9.UWAGIOGÓLNE,str.6 Nieskończone obliczenie obliczenie nigdy się nie kończy. Mk=0;q=0; while(n>0) {n=n-k;q=q+1; } M void qq(int n) { int k; k=n/2; if(n>0){qq(k); qq(n-k);} } main() {qq(5); } Przyczyna nieskończonego obliczenia może być trudna do znalezienia; może nią być błąd logiczny(patrz dalej).

Wykład9.UWAGIOGÓLNE,str.7 Błąd logiczny programliczynieto,cotrzeba.

Wykład9.UWAGIOGÓLNE,str.7 Błąd logiczny programliczynieto,cotrzeba. Mint pot2(intw) { int p,p2,x; p=2;x=1; while(w%2==0) {p=p*p;w=w/2; } p2=p*p; while(w>3) {x=x*p2;w=w-2; } return x*p*p2; }

Wykład9.UWAGIOGÓLNE,str.7 Błąd logiczny programliczynieto,cotrzeba. Mint pot2(intw) { int p,p2,x; p=2;x=1; while(w%2==0) {p=p*p;w=w/2; } p2=p*p; while(w>3) {x=x*p2;w=w-2; } return x*p*p2; } pot2(w)=2 w jeśliwniejestpotęgą2

Wykład9.UWAGIOGÓLNE,str.7 Błąd logiczny programliczynieto,cotrzeba. Mint pot2(intw) { int p,p2,x; p=2;x=1; while(w%2==0) {p=p*p;w=w/2; } p2=p*p; while(w>3) {x=x*p2;w=w-2; } return x*p*p2; } pot2(w)=2 w jeśliwniejestpotęgą2

Wykład9.UWAGIOGÓLNE,str.7 Błąd logiczny programliczynieto,cotrzeba. Mint pot2(intw) { int p,p2,x; p=2;x=1; while(w%2==0) {p=p*p;w=w/2; } p2=p*p; while(w>3) {x=x*p2;w=w-2; } return x*p*p2; } pot2(w)=2 w jeśliwniejestpotęgą2 alejeśliwjestpotęgą2,topot2(w)=2 3w

Wykład9.UWAGIOGÓLNE,str.7 Błąd logiczny programliczynieto,cotrzeba. Mint pot2(intw) { int p,p2,x; p=2;x=1; while(w%2==0) {p=p*p;w=w/2; } p2=p*p; while(w>3) {x=x*p2;w=w-2; } return x*p*p2; } pot2(w)=2 w jeśliwniejestpotęgą2 alejeśliwjestpotęgą2,topot2(w)=2 3w Może być bardzo trudno ustalić, dlaczego program liczy dobrze dla jednych danychaźledlainnych.

Wykład9.UWAGIOGÓLNE,str.8 łatwe błąd leksykalny błąd składniowy błąd typowania błąd semantyczny błąd działania nieskończone obliczenie trudne błąd logiczny

Wykład9.UWAGIOGÓLNE,str.8 łatwe błąd leksykalny błąd składniowy błąd typowania błąd semantyczny błąd działania nieskończone obliczenie trudne błąd logiczny Przy programowaniu bezpośrednio w języku maszyny przeważająca większość błędów to błędy logiczne trudne do znalezienia.

Wykład9.UWAGIOGÓLNE,str.8 łatwe błąd leksykalny błąd składniowy błąd typowania błąd semantyczny błąd działania nieskończone obliczenie trudne błąd logiczny Przy programowaniu bezpośrednio w języku maszyny przeważająca większość błędów to błędy logiczne trudne do znalezienia. We współczesnych językach programowania wysokiego poziomu programista rzadziej popełnia błędy logiczne, a częściej błędy należące do łatwiejszych rodzajów.

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy komenda po jej wykonaniu int a[5],b[5],i; for(i=0; i<5; i=i+1) a[i]=1; for(i=0; i<10; i=i+1) b[i]=2; a[0]=2 a[1]=2 a[2]=2 a[3]=2 a[4]=2 b[0]=2 b[1]=2 b[2]=2 b[3]=2 b[4]=2

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy komenda po jej wykonaniu int a[5],b[5],i; for(i=0; i<5; i=i+1) a[i]=1; for(i=0; i<10; i=i+1) b[i]=2; a[0]=? a[1]=? a[2]=? a[3]=? a[4]=? b[0]=? b[1]=? b[2]=? b[3]=? b[4]=?

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy komenda po jej wykonaniu int a[5],b[5],i; for(i=0; i<5; i=i+1) a[i]=1; for(i=0; i<10; i=i+1) b[i]=2; a[0]=1 a[1]=1 a[2]=1 a[3]=1 a[4]=1 b[0]=? b[1]=? b[2]=? b[3]=? b[4]=?

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy komenda po jej wykonaniu int a[5],b[5],i; for(i=0; i<5; i=i+1) a[i]=1; for(i=0; i<10; i=i+1) b[i]=2; a[0]=2 a[1]=2 a[2]=2 a[3]=2 a[4]=2 b[0]=2 b[1]=2 b[2]=2 b[3]=2 b[4]=2

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy komenda po jej wykonaniu int a[5],b[5],i; for(i=0; i<5; i=i+1) a[i]=1; for(i=0; i<10; i=i+1) b[i]=2; a[0]=2 a[1]=2 a[2]=2 a[3]=2 a[4]=2 b[0]=2 b[1]=2 b[2]=2 b[3]=2 b[4]=2 Nadanie wartości tablicy b, wyjechane poza jej zakres, niejawnie zmieniło wartości tablicy a.

Wykład9.UWAGIOGÓLNE,str.9 Niebezpieczne konstrukcje w jęz. programowania Brak sygnalizacji przekroczenia zakresu tablicy komenda po jej wykonaniu int a[5],b[5],i; for(i=0; i<5; i=i+1) a[i]=1; for(i=0; i<10; i=i+1) b[i]=2; a[0]=2 a[1]=2 a[2]=2 a[3]=2 a[4]=2 b[0]=2 b[1]=2 b[2]=2 b[3]=2 b[4]=2 Nadanie wartości tablicy b, wyjechane poza jej zakres, niejawnie zmieniło wartości tablicy a. Taksiędziejem.in.wC.

Wykład 9. UWAGI OGÓLNE, str. 10 Niebezpieczne konstrukcje w jęz. programowania Brak jawnych deklaracji

Wykład 9. UWAGI OGÓLNE, str. 10 Niebezpieczne konstrukcje w jęz. programowania Brak jawnych deklaracji Mi=0; ikwadr=0; while(i<n) { ikwadrat=ikwadr+2*i+1; i=i+1; }

Wykład 9. UWAGI OGÓLNE, str. 10 Niebezpieczne konstrukcje w jęz. programowania Brak jawnych deklaracji Mi=0; ikwadr=0; while(i<n) { ikwadrat=ikwadr+2*i+1; i=i+1; } Błąd w nazwie zmiennej powoduje błędny wynik, zamiast komunikatu.

Wykład 9. UWAGI OGÓLNE, str. 10 Niebezpieczne konstrukcje w jęz. programowania Brak jawnych deklaracji Mi=0; ikwadr=0; while(i<n) { ikwadrat=ikwadr+2*i+1; i=i+1; } Błąd w nazwie zmiennej powoduje błędny wynik, zamiast komunikatu. Taksiędziejem.in.wjęzykubasha,wPHP,...,wwieluinnych.

Wykład 9. UWAGI OGÓLNE, str. 11 Niebezpieczne konstrukcje w jęz. programowania Brak dyscypliny typowania

Wykład 9. UWAGI OGÓLNE, str. 11 Niebezpieczne konstrukcje w jęz. programowania Brak dyscypliny typowania Mmain() { intn; if(n=2* a ) printf("%s\n","pierwszy rok informatyki"+1); }

Wykład 9. UWAGI OGÓLNE, str. 11 Niebezpieczne konstrukcje w jęz. programowania Brak dyscypliny typowania Mmain() { intn; if(n=2* a ) printf("%s\n","pierwszy rok informatyki"+1); } Pomnożenie znaku przez 2, przypisanie w warunku if, dodanie liczby do napisu nie są sygnalizowane jako błąd.

Wykład 9. UWAGI OGÓLNE, str. 11 Niebezpieczne konstrukcje w jęz. programowania Brak dyscypliny typowania Mmain() { intn; if(n=2* a ) printf("%s\n","pierwszy rok informatyki"+1); } Pomnożenie znaku przez 2, przypisanie w warunku if, dodanie liczby do napisu nie są sygnalizowane jako błąd. To jest autentyczny przykład w C.

Wykład 9. UWAGI OGÓLNE, str. 12 Niebezpieczne konstrukcje w jęz. programowania Skoki(i breaki)

Wykład 9. UWAGI OGÓLNE, str. 12 Niebezpieczne konstrukcje w jęz. programowania Skoki(i breaki) schemat i 0 ikwad 0 L i<n i N ikwad ikwad+2 i+1 i i+1 E program ze skokami program bez skoków i=0; i kwad=0; L: if(i>=n) goto E; L:ikwad= L:ikwad+ L:2*i+1; L:i=i+1; L:gotoL; E: i=0; i kwad=0; while(i<n) { ikwad= ikwad+ 2*i+1; i=i+1; }

Wykład 9. UWAGI OGÓLNE, str. 12 Niebezpieczne konstrukcje w jęz. programowania Skoki(i breaki) schemat i 0 ikwad 0 L i<n i N ikwad ikwad+2 i+1 i i+1 E program ze skokami program bez skoków i=0; i kwad=0; L: if(i>=n) goto E; L:ikwad= L:ikwad+ L:2*i+1; L:i=i+1; L:gotoL; E: i=0; i kwad=0; while(i<n) { ikwad= ikwad+ 2*i+1; i=i+1; }

Wykład 9. UWAGI OGÓLNE, str. 12 Niebezpieczne konstrukcje w jęz. programowania Skoki(i breaki) schemat i 0 ikwad 0 L i<n i N ikwad ikwad+2 i+1 i i+1 E program ze skokami program bez skoków i=0; i kwad=0; L: if(i>=n) goto E; L:ikwad= L:ikwad+ L:2*i+1; L:i=i+1; L:gotoL; E: i=0; i kwad=0; while(i<n) { ikwad= ikwad+ 2*i+1; i=i+1; }

Wykład 9. UWAGI OGÓLNE, str. 12 Niebezpieczne konstrukcje w jęz. programowania Skoki(i breaki) schemat i 0 ikwad 0 L i<n i N ikwad ikwad+2 i+1 i i+1 E program ze skokami program bez skoków i=0; i kwad=0; L: if(i>=n) goto E; L:ikwad= L:ikwad+ L:2*i+1; L:i=i+1; L:gotoL; E: i=0; i kwad=0; while(i<n) { ikwad= ikwad+ 2*i+1; i=i+1; } Skoki umożliwiają realizację dowolnego schematu, nawet bardzo nieporządnego. Ale schemat i program ze skokami są narażone na błędy logiczne związane np. z możliwością skoku w nieprawidłowe miejsce.

Wykład 9. UWAGI OGÓLNE, str. 12 Niebezpieczne konstrukcje w jęz. programowania Skoki(i breaki) schemat i 0 ikwad 0 L i<n i N ikwad ikwad+2 i+1 i i+1 E program ze skokami program bez skoków i=0; i kwad=0; L: if(i>=n) goto E; L:ikwad= L:ikwad+ L:2*i+1; L:i=i+1; L:gotoL; E: i=0; i kwad=0; while(i<n) { ikwad= ikwad+ 2*i+1; i=i+1; } Skoki umożliwiają realizację dowolnego schematu, nawet bardzo nieporządnego. Ale schemat i program ze skokami są narażone na błędy logiczne związane np. z możliwością skoku w nieprawidłowe miejsce. SkokiibreakisądopuszczonewC.

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"...")

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"..."), inne narzędzia.

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"..."), inne narzędzia. Przekazywanie informacji między modułami powinno odbywać się jawnie, raczej przez parametry niż przez zmienne globalne.

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"..."), inne narzędzia. Przekazywanie informacji między modułami powinno odbywać się jawnie, raczej przez parametry niż przez zmienne globalne. Czytelność kodu źródłowego

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"..."), inne narzędzia. Przekazywanie informacji między modułami powinno odbywać się jawnie, raczej przez parametry niż przez zmienne globalne. Czytelność kodu źródłowego mnemotechniczne nazwy identyfikatorów

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"..."), inne narzędzia. Przekazywanie informacji między modułami powinno odbywać się jawnie, raczej przez parametry niż przez zmienne globalne. Czytelność kodu źródłowego mnemotechniczne nazwy identyfikatorów, przemyślane komentarze

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 13 Podział programu na(względnie) niezależne moduły funkcje, program w wielu plikach(dyrektywa#include"..."), inne narzędzia. Przekazywanie informacji między modułami powinno odbywać się jawnie, raczej przez parametry niż przez zmienne globalne. Czytelność kodu źródłowego mnemotechniczne nazwy identyfikatorów, przemyślane komentarze, wcięcia.

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 14 Unikanie sztuczek

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 14 Unikanie sztuczek zwykłe kopiowanie void kopiuj1 (charcel[],charzrodlo[]) { inti; i=0; while(zrodlo[i]!= \0 ) { cel[i] = zrodlo[i]; i=i+1; } cel[i]= \0 ; } trikowe kopiowanie void kopiuj2 (charcel[],charzrodlo[]) { while ((*cel++=*zrodlo++)!= \0 ); }

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 14 Unikanie sztuczek zwykłe kopiowanie void kopiuj1 (charcel[],charzrodlo[]) { inti; i=0; while(zrodlo[i]!= \0 ) { cel[i] = zrodlo[i]; i=i+1; } cel[i]= \0 ; } trikowe kopiowanie void kopiuj2 (charcel[],charzrodlo[]) { while ((*cel++=*zrodlo++)!= \0 ); }

Styl programowania Wykład 9. UWAGI OGÓLNE, str. 14 Unikanie sztuczek zwykłe kopiowanie void kopiuj1 (charcel[],charzrodlo[]) { inti; i=0; while(zrodlo[i]!= \0 ) { cel[i] = zrodlo[i]; i=i+1; } cel[i]= \0 ; } trikowe kopiowanie void kopiuj2 (charcel[],charzrodlo[]) { while ((*cel++=*zrodlo++)!= \0 ); } Program czytelny jest lepszy od kryptycznego, nawet jeśli jest dłuższy!

Granice informatyki Wykład 9. UWAGI OGÓLNE, str. 15 Czykomputerypotrafiąwszystko?

Granice informatyki Wykład 9. UWAGI OGÓLNE, str. 15 Czykomputerypotrafiąwszystko? Jakoż zbudowali inżynierowie królewscy wyborną maszynę cyfrową na Księżycu[...].Królzrazutakiowakdzielnośćmaszynypróbował;razzaśnakazał jej telegraficznie, aby elektroskoku dokonała: był bowiem ciekaw, czy prawdą jest, co mówili inżynierowie, że machina ta umie wszystko. Jeśli wszystkoumie takmyślał toniechskacze.wszelakotreśćdepeszy uległa drobnemu zniekształceniu i maszyna otrzymała rozkaz, iż nie elektroskok, lecz elektrosmok ma przez nią zostać wykonany; i jak najlepiej umiała wypełniła polecenie. Stanisław Lem. Bajka o maszynie cyfrowej, co ze smokiem walczyła. Bajki robotów. Wydawnictwo Literackie, Kraków 1978, str. 63.

Granice informatyki Wykład 9. UWAGI OGÓLNE, str. 16 Czykomputerypotrafiąwszystko?

Granice informatyki Wykład 9. UWAGI OGÓLNE, str. 16 Czykomputerypotrafiąwszystko? TWIERDZENIE: (nierozstrzygalność problemu stopu) MNie istnieje(meta)program komputerowy, który potrafiłby wczytać dowolny program P i dane D, a następnie w skończonym czasie prawidłowo przewidzieć, czy P zatrzyma się na D.

Granice informatyki Wykład 9. UWAGI OGÓLNE, str. 16 Czykomputerypotrafiąwszystko? TWIERDZENIE: (nierozstrzygalność problemu stopu) MNie istnieje(meta)program komputerowy, który potrafiłby wczytać dowolny program P i dane D, a następnie w skończonym czasie prawidłowo przewidzieć, czy P zatrzyma się na D. TWIERDZENIE: (nierozstrzygalność poprawności) MNie istnieje(meta)program komputerowy, który potrafiłby wczytać dowolnyprogrampidwieasercjeaib,anastępniewskończonymczasie prawidłowo orzec, czy P jest częściowo poprawny względem A i B.

Granice informatyki Wykład 9. UWAGI OGÓLNE, str. 16 Czykomputerypotrafiąwszystko? TWIERDZENIE: (nierozstrzygalność problemu stopu) MNie istnieje(meta)program komputerowy, który potrafiłby wczytać dowolny program P i dane D, a następnie w skończonym czasie prawidłowo przewidzieć, czy P zatrzyma się na D. TWIERDZENIE: (nierozstrzygalność poprawności) MNie istnieje(meta)program komputerowy, który potrafiłby wczytać dowolnyprogrampidwieasercjeaib,anastępniewskończonymczasie prawidłowo orzec, czy P jest częściowo poprawny względem A i B. Hipoteza: (P NP) MNieistniejeprogramkomputerowyPiwielomianW,takiżePpotrafiłby wczytać dowolną formułę logiczną i prawidłowo orzec w czasie W(n), gdzie n jest długością formuły, czy jest ona tautologią.