Ogólne zasady projektowania algorytmów i programowania



Podobne dokumenty
Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

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

Możliwe strategie tworzenia niezawodnego oprogramowania:

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Układ równań liniowych

Zapisywanie algorytmów w języku programowania

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Podstawy Informatyki. Sprawność algorytmów

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Informatyka 1. Złożoność obliczeniowa

Matematyczne Podstawy Informatyki

Definicje. Algorytm to:

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Wykład 7. Projektowanie kodu oprogramowania

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

Podstawy Programowania. Złożoność obliczeniowa

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

Wstęp do programowania

Dlaczego testowanie jest ważne?

Optymalizacja ciągła

Wymagania na poszczególne oceny szkolne dla klasy VI. (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej.

Żurek INFOBroker. Szkolenia warsztaty konsultacje MS Excel. tel

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

EGZAMIN MATURALNY 2012 INFORMATYKA

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Faza strategiczna. Synteza. Analiza. Instalacja. Faza strategiczna. Dokumentacja. kodowanie implementacja. produkt konserwacja

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

TEORETYCZNE PODSTAWY INFORMATYKI

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Przyspieszenie obróbki CNC z edytorem ścieżki. narzędzia w ZW3D. ZW3D CAD/CAM Biała księga

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Excel w obliczeniach naukowych i inżynierskich. Wydanie II.

Praktyczny Excel. 50 praktycznych formuł na każdą okazję

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Zaawansowane algorytmy i struktury danych

Wprowadzenie do złożoności obliczeniowej

ECDL Podstawy programowania Sylabus - wersja 1.0

Zasady analizy algorytmów

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Autorski program nauczania

Efektywność algorytmów

Wymagania edukacyjne z informatyki dla uczniów klas VI SP nr 53 w Krakowie w roku szkolnym 2019/2020

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Laboratorium nr 1. i 2.

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Złożoność obliczeniowa zadania, zestaw 2

Programowanie i techniki algorytmiczne

EGZAMIN MATURALNY 2013 INFORMATYKA

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Techniki Optymalizacji: Stochastyczny spadek wzdłuż gradientu I

Sortowanie - wybrane algorytmy

EGZAMIN MATURALNY 2013 INFORMATYKA

Wyszukiwanie. Wyszukiwanie binarne

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

INFORMATYKA POZIOM ROZSZERZONY

INFORMATYKA POZIOM ROZSZERZONY

Język programowania C C Programming Language. ogólnoakademicki

Historia modeli programowania

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Żurek INFOBroker dobre kursy, szkolenia i konsultacje MS Excel

Wymagania edukacyjne z informatyki w klasie VIII

Wyszukiwanie binarne

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Języki programowania

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Zad. 3: Układ równań liniowych

Język ludzki kod maszynowy

Algorytmika i pseudoprogramowanie

Programowanie obiektowe

Języki i techniki programowania Ćwiczenia 2

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Obróbka po realnej powierzchni o Bez siatki trójkątów o Lepsza jakość po obróbce wykańczającej o Tylko jedna tolerancja jakości powierzchni

COMARCH IT AKADEMIA. Programista VBA w Microsoft Excel (microbootcamp)

Szablony funkcji i szablony klas

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

3.1. Na dobry początek

Rozdział 1 PROGRAMOWANIE LINIOWE

Kompletna dokumentacja kontenera C++ vector w -

Podstawy Programowania

Jeszcze o algorytmach

Plan nauczania informatyki Opracował: mgr Daniel Starego

Zapisywanie w wybranej notacji algorytmów z warunkami i iteracyjnych

Algorytm. Krótka historia algorytmów

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

Wstęp do programowania

Efektywna metoda sortowania sortowanie przez scalanie

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Transkrypt:

Ogólne zasady projektowania algorytmów i programowania Pracuj nad właściwie sformułowanym problemem dokładna analiza nawet małego zadania może prowadzić do ogromnych korzyści praktycznych: skrócenia długości kodu, czasu programowania, czasu wykonania programu definicja zadania zajmuje w skrajnym przypadku nawet 90% ogólnego czasu produkcji programu! problem często jest psychologiczny a nie techniczny zleceniodawca, zasugerowany przez jakieś czynniki, często próbuje narzucić programiście niewłaściwe rozwiązanie etap ten jest źródłem największej liczby błędów, szczególnie gdy dodatkowe życzenia klienta (zleceniodawcy) są zgłaszane zbyt późno 1

Zbadaj przestrzeń rozwiązań programista musi być nieco leniwy: nigdy nie powinien zabierać się do programowania pierwszego pomysłu, który wpadnie mu do głowy problem, który wydaje się trudny, może mieć proste, nieoczekiwane rozwiązanie przykłady: - wyszukiwanie binarne zamiast liniowego: zyskujemy na koszcie obliczeniowym z O(n) do O(log n). Ograniczenie metoda działa na zbiorach posortowanych! - szukanie największej sumy spójnego fragmentu wektora: różne metody, od działającej w czasie sześciennym do liniowego - zbiór anagramów: permutacje liter w wyrazie? Bardzo nieefektywne: n! operacji; porównywanie par wyrazów n wyrazów x n porównań co najmniej kilka godzin pracy; alternatywa: posortowanie alfabetyczne liter w wyrazach rozpatruj rozwiązania niekoniecznie związane z koniecznością programowania, np. wykorzystanie arkusza kalkulacyjnego lub bazy danych + kilka makr rozpatruj rozwiązania pozainformatyczne np. przesyłanie danych 2

Przyjrzyj się danym stosuj odpowiednie do zadania struktury danych, uzyskując: przyspieszenie działania programu, oszczędność pamięci, łatwiejszą konserwację w przyszłości przekształć powtarzający się kod w tablice, przykład: zmienne -> tablica ukrywaj skomplikowane struktury: definiuj je jako abstrakcyjny typ i określ wykonywane na nich operacje w ramach klasy pozwalaj danym określać strukturę programu, przykład: korespondencja seryjna Korzystaj z oszacowań szacuj wstępnie czas wykonania zadania oraz zajętość pamięci, aby odrzucić nierealne rozwiązania stosuj współczynniki bezpieczeństwa 3

Pisz poprawne programy programiści są optymistami: częsta praktyka (niestety): napiszę swój kawałek kodu, podam dalej i modlę się, żeby zadziałał, a błędami niech zajmie się»sekcja Jakości Kodu i Testowania«stosuj dowodzenie poprawności kodu oraz jego testowanie stosuj asercje: precyzyjne wyrażenie zależności między danymi wejściowymi, zmiennymi w programie i danymi wyjściowymi wykorzystuj asercje do dowodzenia poprawności instrukcji sekwencyjnych, instrukcji warunkowych, pętli, funkcji błędy najczęściej pojawiają się w łatwiejszych częściach kodu, do trudniejszych części programiści bardziej się przykładają Używaj gotowych komponentów / bibliotek / funkcji systemowych stosuj biblioteki / programy dostarczane przez system nie odkrywaj od nowa Ameryki 4

Buduj prototypy pozwalają np. na wybranie najlepszego rozwiązania z kilku dobrych można go szybko przekazać do testowania, podczas gdy można dalej pracować np. nad interfejsem Jeżeli trzeba, idź na ustępstwa stosuj kompromis między czasem wykonania programu a rozmiarem wymaganej przez ten program pamięci stosuj kompromis pomiędzy stopniem optymalizacji kodu a jego przejrzystością przykład z wyliczaniem silni algorytm siłowy kontra tablicowanie danych analogia do wszelkich innych problemów inżynierskich: samolot, zużycie paliwa a przyspieszenie ale bez przesady! Kompromis to obustronne ustępstwa! 5

Nie komplikuj Antoine de Saint-Exupery: Konstruktor wie, że osiągnął doskonałość nie wtedy, gdy do jego konstrukcji nic nie można dodać, ale wtedy, gdy nic z niej nie można ująć Einstein: rozwiązuj problemy w tak prosty sposób jak to tylko możliwe, ale nie prościej! prosty kod jest bezpieczniejszy, odporniejszy i efektywniejszy niż jego bardziej skomplikowany odpowiednik najtańszymi, najszybszymi, najdokładniejszymi i najsolidniejszymi elementami systemu komputerowego są te, których w nim nie ma nie pisz dużego programu tam, gdzie wystarczy mały ogólniejszy problem może być prostszy optymalizuj kod (zarówno pod względem czasu wykonania jak i użycia pamięci) tylko wtedy, jeżeli konieczne trzeba to zrobić; nie optymalizuj za wcześnie efektywność staraj się zapewnić na najwyższym poziomie: definicji problemu, struktury systemu, stosowanych algorytmów i doborze struktur danych 6

Pisz przejrzysty kod stosuj formatowanie kodu źródłowego pracuj na różnych poziomach abstrakcji (odróżniaj co robi projektowany element od tego jak to robi) 7