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



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

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

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

Podstawy programowania. Wykład 3 Konstrukcje sterujące. 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 skrót z wykładów:

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

Java EE produkcja oprogramowania

Poprawność semantyczna

Tablice, funkcje - wprowadzenie

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

Algorytm. a programowanie -

Wskaźniki w C. Anna Gogolińska

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

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

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

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Programowanie obiektowe

JĘZYKI PROGRAMOWANIA

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

Podstawy Informatyki. Algorytmy i ich poprawność

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Microsoft IT Academy kurs programowania

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

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

Programowanie komputerowe. Zajęcia 4

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

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

Laboratorium 5: Tablice. Wyszukiwanie binarne

Podstawy Programowania.

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

Tablice, funkcje, wskaźniki - wprowadzenie

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

Podstawy programowania

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

Podstawy programowania - 1

Wstęp do programowania

Jerzy Nawrocki, Wprowadzenie do informatyki

Poprawność algorytmów

KONSTRUKCJA KOMPILATORÓW

Podstawy Programowania

Wstęp do programowania

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

Języki formalne i techniki translacji

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

Podstawy programowania C. dr. Krystyna Łapin

Wstęp do programowania

EGZAMIN MATURALNY 2011 INFORMATYKA

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

Podstawy programowania (1)

Praktyka Programowania

Wstęp do programowania

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

1 Podstawy c++ w pigułce.

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

Wprowadzenie do języka Java

Pytania sprawdzające wiedzę z programowania C++

Wstęp do informatyki- wykład 7

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Jerzy Nawrocki, Wprowadzenie do informatyki

Zmienne, stałe i operatory

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

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

Języki programowania zasady ich tworzenia

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

Szablony funkcji i szablony klas

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

Programowanie komputerów

Wartości domyślne, przeciażenia funkcji

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

Laboratorium nr 10. Temat: Funkcje cz.2.

Podstawy Programowania

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

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

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

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy Kompilatorów

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

Wskaźniki. Informatyka

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

Wprowadzenie do programowania współbieżnego

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

Podstawy programowania w języku C++

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

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

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

Język ludzki kod maszynowy

tablica: dane_liczbowe

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

Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

Transkrypt:

Rodzaje błędów w programach 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. Rodzaje błędów w programach 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.

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

Rodzaje błędów w programach 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). Rodzaje błędów w programach 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).

Rodzaje błędów w programach 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. Rodzaje błędów w programach 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 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 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 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) 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 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 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 Czy komputery potrafią 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 Czy komputery potrafią 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ą.