Programowanie strukturalne to tzw. Technologia programowania strukturalnego. Podstawowe zasady programowania strukturalnego

FGBOU VO „Stan Mordowii

Instytut Pedagogiczny im. M.E. evsevyeva”

Wydział Fizyki i Matematyki

Katedra Informatyki i Inżynierii Komputerowej

ABSTRAKCYJNY

„Zasady programowania strukturalnego. Podstawowe struktury algorytmiczne i ich superpozycje”

Ukończył: uczeń gr. MDM-212

Bagdanowa Jana

Sarańsk 2016

Wstęp

Na początku lat 70. XX wieku, kiedy rozwój języków programowania osiągnął dość wysoki poziom, a tworzone systemy oprogramowania osiągnęły dość imponujące rozmiary (setki tysięcy – miliony poleceń), stało się oczywiste, że projekty oprogramowania stał się zbyt złożony, aby pomyślnie zaprojektować, kodować i debugować w akceptowalnych ramach czasowych. Programiści rozwiązujący złożone problemy stanęli przed problemem wzrostu liczby i rozmiaru programów do tego stopnia, że ​​dalszy proces rozwoju stał się niemal niemożliwy do opanowania, a nikt z twórców nie mógł z całą pewnością stwierdzić, że tworzone oprogramowanie zawsze robi to, co jest wymagane i że nie robi nic, co nie jest wymagane. Tym samym pojawił się problem radykalnej zmiany podejścia do tworzenia dużych systemów oprogramowania.

Opierając się na tych problemach, wiodący programiści lat 70. (Dijkstra , Wirth , Dal , xoap , Jordania , Konstantyn , Myers itp.), opracowano ścisłe zasady zarządzania projektami, które nazwanometodologia strukturalna .

Ważnym krokiem w rozwoju tego podejścia były międzynarodowe konferencje programistyczne, które odbyły się w latach 1968-69. Na drugim z nichEdsger Dijkstra po raz pierwszy użył tego terminuprogramowanie strukturalne ” i zaproponował całkowicie nowy sposób tworzenia programów. Uważał program za zestaw hierarchicznych, abstrakcyjnych poziomów, które umożliwiały:

    przejrzystą strukturę programu, co poprawiło jego zrozumienie przez programistów;

    przeprowadzać dowody jego poprawności, a tym samym zwiększać niezawodność programu;

    skrócić czas tworzenia programów.

Kolejnym impulsem do zmiany sposobu myślenia programistów był opublikowany listDijkstra redaktor jednego z wydawnictw naukowych, który nosił tytuł „Instrukcję GOTO należy uznać za szkodliwą ". List ten wywołał ostre kontrowersje wśród ówczesnych programistów, ale ostatecznie zwyciężyło myślenie strukturalne, które opróczDijkstra , aktywnie wspierany przez profesora Politechniki w ZurychuWirth i profesor na Uniwersytecie Oksfordzkimxoap . Jednym z rezultatów kontrowersji był dowód na to, że każdy program można napisać przy użyciu tylko prostej sekwencji instrukcji, konstrukcji iteracyjnej, takiej jakchwila ( Do widzenia ) i wybrana konstrukcjasprawa ( wybór ) i operatoraiść do ( iść do ) nie jest niezbędną konstrukcją kontrolną w programowaniu strukturalnym. Niestety spory o operatoraiść do miał jeden negatywny "efekt uboczny" - dość często programowanie beziść do został utożsamiony z całym programowaniem strukturalnym. Jednak cele programowania strukturalnego są znacznie bardziej globalne i poważne.

1. PODSTAWY TECHNOLOGII PROGRAMOWANIA STRUKTURALNEGO

Programowanie strukturalne - metodologia rozwoju oprogramowanie, który opiera się na reprezentacji programu w postaci hierarchicznej struktury bloków. Zaproponowany w latach 70. XX wieku. E. Dijkstroy, opracowany i uzupełniony przez N. Wirtha (ryc. 1).

Edsger Wiebe Dijkstra (1930 - 2002) - holenderski naukowiec, którego idee wpłynęły na rozwój przemysłu komputerowego. Znany jako twórca algorytmu znajdowania najkrótszej ścieżki na grafie, jeden z twórców programowania strukturalnego. W 1972 roku zdobył nagrodę Turinga.

Niklausa Wirtha (1934) – szwajcarski naukowiec, informatyk, jeden z najsłynniejszych teoretyków rozwoju języków programowania, profesor informatyki, zdobywca nagrody Turinga w 1984 r. Wiodący twórca języków programowania Pascal, Modula-2, Oberon .

Ryż. 1. Pionierami programowania strukturalnego są E. Dijkstra i N. Wirth.

Metodologia programowania strukturalnego pojawiła się w wyniku rosnącej złożoności zadań rozwiązywanych na komputerach i związanej z tym komplikacji oprogramowania: w latach 70. XX wieku. ilość i złożoność programów osiągnęła taki poziom, że „intuicyjny” (nieustrukturyzowany) rozwój programów, który był normą w bardziej wczesny czas przestało odpowiadać potrzebom praktyki. Programy stawały się zbyt złożone, aby mogły być odpowiednio utrzymywane, dlatego wymagana była pewna systematyzacja procesu rozwoju i struktury programu.

OperatorIŚĆ DO ( bezwarunkowy operator skoku ). Niepoprawne i nieprzemyślane stosowanie dowolnych przejść w tekście programu prowadziło do mylących, źle ustrukturyzowanych programów (tzw.kod spaghetti ), z którego tekstu prawie niemożliwe było zrozumienie kolejności egzekucji i współzależności fragmentów.

Programowanie strukturalne opiera się na zasadachrozkład sekwencyjny zadania icelowy jejstrukturyzacja na poszczególne komponenty. Metody programowania strukturalnego to zestaw technicznych i organizacyjnych zasad projektowania systemów oprogramowania.

Typowe metody programowania strukturalnego to:

    projekt z góry na dół (projekt od góry do dołu);

    modułowy (proceduralny)programowanie ;

    kodowanie strukturalne .

Zgodnie z metodologią programowania strukturalnego:

1. Każdy program jest strukturą zbudowaną z trzy typy podstawowe konstrukcje:

    wykonanie sekwencyjne - pojedyncze wykonanie operacji w kolejności, w jakiej są zapisane w tekście programu;

    rozgałęzienie - jednorazowe wykonanie jednej z dwóch lub więcej operacji, w zależności od spełnienia określonego warunku;

    cykl - wielokrotne wykonanie tej samej operacji, aż do spełnienia zadanego warunku (warunek kontynuacji cyklu).

W programie podstawowe struktury mogą być dowolnie zagnieżdżane w sobie, ale nie są dostępne żadne inne sposoby kontrolowania sekwencji operacji.

2. Powtarzające się fragmenty programu (lub nie powtarzające się, ale reprezentujące logicznie spójne bloki obliczeniowe) można zapisać w postacipodprogramy (procedury lub funkcje). W tym przypadku w tekście programu głównego zamiast fragmentu umieszczonego w podprogramie standardowym wstawiana jest instrukcja wywołania podprogramu standardowego. Gdy taka instrukcja jest wykonywana, wykonywany jest wywołany podprogram, po czym wykonywanie programu jest kontynuowane od instrukcji następującej po instrukcji wywołania podprogramu.

3. Tworzenie programu odbywa się krok po kroku metodą „z góry na dół”.

Najpierw zapisywany jest tekst programu głównego, w którym zamiast każdego połączonego logicznego fragmentu tekstu wstawiane jest wywołanie podprogramu, który wykona ten fragment. Zamiast prawdziwych, działających podprogramów, „buble ' które nic nie robią. Powstały program jest sprawdzany i debugowany. Po przekonaniu programisty, że podprogramy są wywoływane we właściwej kolejności (tj. ogólna struktura programu jest poprawna), procedury zastępcze są sekwencyjnie zastępowane rzeczywistymi, a rozwój każdego podprogramu odbywa się w ten sam sposób jako program główny. Rozwój kończy się, gdy nie zostanie ani jeden „stub”, który nie został usunięty. Taka kolejność zapewnia, że ​​na każdym etapie rozwoju programista jednocześnie ma do czynienia z widocznym i zrozumiałym zestawem fragmentów i ma pewność, że ogólna struktura wszystkich wyższych poziomów programu jest poprawna. Podczas utrzymywania i wprowadzania zmian w programie staje się jasne, które procedury należy zmienić, i są one dokonywane bez wpływu na części programu, które nie są z nimi bezpośrednio związane. Daje to pewność, że podczas wprowadzania zmian i naprawiania błędów część programu, która jest obecnie poza obszarem uwagi programisty, nie zawiedzie.

Kierowanie się zasadami programowania strukturalnego sprawiło, że teksty programów, nawet całkiem dużych, były normalnie czytelne. Zrozumienie programów stało się znacznie łatwiejsze, stało się możliwe tworzenie programów w normalnym trybie przemysłowym, kiedy program może być zrozumiany bez większych trudności nie tylko przez jego autora, ale także przez innych programistów. Umożliwiło to opracowanie dość dużych jak na tamte czasy systemów oprogramowania siłami zespołów programistycznych i utrzymanie tych kompleksów przez wiele lat, nawet w obliczu nieuniknionych zmian w składzie personelu.

Metodologia tworzenia oprogramowania strukturalnego została uznana za „najsilniejszą formalizację lat 70-tych”. Potem słowo „strukturalny” stało się modne w branży i zaczęto go używać wszędzie tam, gdzie było to konieczne i gdzie nie było konieczne. Pojawiły się prace dotyczące „projektowania konstrukcji”, „badania konstrukcji”, „projektowania konstrukcji” itp.

Do zalet programowania strukturalnego należą:

1. Programowanie strukturalne pozwala znacznie ograniczyć liczbę opcji budowania programu według tej samej specyfikacji, co znacznie zmniejsza złożoność programu i ułatwia zrozumienie go innym programistom.

2. W programach strukturalnych operatory powiązane logicznie są wizualnie bliżej, a słabo powiązane są dalej, co pozwala obejść się bez schematów blokowych i innych graficznych form przedstawiania algorytmów (w rzeczywistości sam program jest własnym schematem blokowym).

3. Proces testowania i debugowania programów strukturalnych jest znacznie uproszczony.

Rozważmy bardziej szczegółowo główne metody programowania strukturalnego.

1.1. Cele i zasady programowania strukturalnego

Cele programowania strukturalnego Czy:

    Zapewnienie dyscypliny programowania w procesie tworzenia systemów oprogramowania .

    Poprawa czytelności programu . Czytelność poprawia się, jeśli przestrzegane są następujące zasady:

    • unikać używania konstrukcji językowych o nieoczywistej semantyce;

      dążyć do zlokalizowania działania struktur kontrolnych i wykorzystania struktur danych;

      zaprojektować program tak, aby można go było przeczytać od początku do końca bez przeskoków kontrolnych na inną stronę.

    Poprawa wydajności programu . Można to osiągnąć poprzez podzielenie programu na moduły, dzięki czemu błędy można łatwo znaleźć i poprawić, a tekst dowolnego modułu można przepisać niezależnie od innych w celu zwiększenia wydajności.

    Poprawa niezawodności programu . Można to osiągnąć, jeśli program jest łatwy do testowania od końca do końca i nie stwarza problemów z organizacją procesu debugowania. Zapewnia to dobre ustrukturyzowanie programu przy podziale na moduły oraz przestrzeganie zasad pisania czytelnych programów.

    Redukcja czasu i kosztów rozwój oprogramowania . Dzieje się tak, gdy każdy programista w zespole programistycznym jest w stanie napisać i debugować więcej kodu niż wcześniej.

Głównyzasady programowania strukturalnego podsumowano w tabeli. 1.

Tabela 1. Zasady programowania strukturalnego

Zasada

Wyjaśnienie

Abstrakcja

Abstrakcja pozwala programiście wyobrazić sobie pożądane rozwiązanie problemu bez konieczności natychmiastowego uwzględniania wielu szczegółów. Programista może patrzeć na program warstwami: górny poziom pokazuje dużo abstrakcji, co ułatwia spojrzenie na projekt, podczas gdy dolny poziom pokazuje drobne szczegóły implementacji.

Formalność

Zastosowanie ścisłego podejścia metodologicznego w tworzeniu programu, które jest podstawą do przekształcenia programowania z improwizacji w dyscyplinę inżynierską. Zasada ta stanowi podstawę dowodzenia poprawności programów, gdyż umożliwia badanie programów (algorytmów) jako obiektów matematycznych.

„Dziel i rządź”

Podział programu na osobne fragmenty (moduły), które są łatwe w zarządzaniu i umożliwiają niezależne debugowanie i testowanie.

Porządkowanie hierarchiczne

Struktura podziału na części jest nie mniej ważna niż sam fakt takiego podziału. Zasada ta stawia wymóg hierarchicznej struktury relacji między modułami pakiet oprogramowania, co ułatwia osiągnięcie celów programowania strukturalnego.

1.2. Projekt z góry na dół

Specyfikacja zadania służy jako punkt wyjścia do stworzenia programu. Konieczne jest zrozumienie, jakie działania należy podjąć, aby rozwiązać problem, opisanie ich językiem naturalnym i na odpowiednio wysokim poziomie abstrakcji.

Specyfikacja zadania jest jego głównym planem. Z niego przechodzimy do programu, stopniowo dopracowując opis.

Stopniowe udoskonalanie projektu to tzwmetoda projektowania od góry do dołu ( krok po kroku Lubprojekt z góry na dół ).

Przykład 1 Jako przykład rozważmy projekt ubierania dzieci.

Rozwiązanie:

1. Główny cel :

Ubrać się.

2. Określenie celu w pierwszym kroku :

Noś dolną połowę.

Załóż górną połowę.

2.1. Dolną połowę można założyć w dwóch etapach:

Załóż spodnie.

Załóż skarpetki i buty.

2.2. Górną połowę można również ubrać w dwóch etapach:

Załóż koszulę.

Załóż kurtkę.

3. Ostateczny projekt na to wygląda:

Załóż spodnie.

Załóż skarpetki.

Załóż buty.

Załóż koszulę.

Załóż kurtkę.

Metoda projektowania z góry na dół obejmuje sekwencyjną dekompozycję ogólnej funkcji przetwarzania danych na proste elementy funkcjonalne („z góry na dół”). W rezultacie budowany jest hierarchiczny schemat -struktura funkcjonalna algorytmu ( FSA ), odzwierciedlające skład i podporządkowanie poszczególnych funkcji (ryc. 2).

Aneks 1

Aplikacja N

Funkcja 1

Funkcja 2

Funkcjonować M

Dział 11

Dział 1 k

Podfrakcja M 1

Podfrakcja M 2

Podfrakcja poseł

Cel 1

Cel pośredni 11

Cel pośredni 1S

Cel2

cel cząstkowy2 1

cel cząstkowy2 Q

Ryż. 2. Struktura funkcjonalna aplikacji

Sekwencja działań w celu opracowania aplikacji FSA jest następująca:

    określonycele automatyzacji obszar tematyczny i ich hierarchia (cel-podcel);

    zainstalowanyskład wniosków (zadania przetwarzania) zapewniające realizację wyznaczonych celów;

    zostać określonecharakter związku aplikacje i ich główne cechy (informacje dotyczące rozwiązywania problemów, czasu i częstotliwości rozwiązania, warunków wykonania itp.);

    niezbędne do rozwiązania problemów są określonefunkcje przetwarzania danych ;

    wykonanedekompozycja funkcji przetwarzających aż do niezbędnej złożoności strukturalnej realizowanej za pomocą proponowanego zestawu narzędzi.

Ta struktura aplikacji odzwierciedla najważniejsze -mieszanina Izwiązek funkcji przetwarzanie informacji w celu realizacji aplikacji, chociaż nie ujawnia logiki wykonywania poszczególnych funkcji, warunków ani częstotliwości ich wywoływania.

1.3. Programowanie modułowe

Programowanie modułowe jest naturalną konsekwencją projektowania odgórnego i polega na tym, że program jest podzielony na części −moduły , opracowany oddzielnie.

Moduł jest samodzielną częścią programu, która ma określony cel i zapewnia predefiniowane funkcje przetwarzane niezależnie od innych moduły oprogramowania. Moduł składa się z logicznie połączonego zestawu elementów funkcjonalnych.

W programowaniu moduł jest osobnypodprogram , a podprogramy są często nazywaneprocedury Lubprocedury funkcyjne . Dlatego nazywane jest również programowanie modułoweproceduralny .

Podczas tworzenia oprogramowania wyróżniają sięmoduły wielokrotnego użytku , przeprowadzana jest ich typizacja i unifikacja, dzięki czemu czas i koszty pracy związane z opracowaniem oprogramowania jako całości są zmniejszone.

Niektóre produkty oprogramowania wykorzystują moduły z gotowych bibliotek standardowych podprogramów, procedur, funkcji, obiektów, metod przetwarzania danych.

Wśród wielu modułów znajdują się:

    moduł głowicy - zarządza uruchomieniem oprogramowania (istnieje w liczbie pojedynczej);

    moduł kontrolny – zapewnia wywołanie innych modułów do przetwarzania;

    moduły robocze - wykonywać funkcje przetwarzania;

    moduły serwisowe i biblioteki , media - Implementacja funkcji serwisowych.

W pracy oprogramowania aktywowane są niezbędne moduły oprogramowania. Moduły sterujące ustalają sekwencję wywołań dla wykonania następnego modułu. Komunikację informacyjną modułów zapewnia wykorzystanie wspólnej bazy danych lub międzymodułowy transfer danych poprzez zmienne wymiany.

Każdy moduł można skonfigurować jako plik samozapisujący się; do funkcjonowania oprogramowania konieczna jest obecność modułów oprogramowania w pełnym składzie.

Moduł musi mieć następujące elementynieruchomości :

    jedno wejście i jedno wyjście - na wejściu moduł programu otrzymuje określony zestaw danych początkowych, wykonuje sensowne przetwarzanie i zwraca jeden zestaw danych wynikowych, tj. realizuje standardową zasadęIPO ( Wejście-proces-wyjście wejście-proces-wyjście );

    kompletność funkcjonalna - moduł wykonuje listę operacji regulowanych dla realizacji każdej pojedynczej funkcji w całości, wystarczającej do zakończenia rozpoczętego przetwarzania;

    niezależność logiczna - wynik pracy modułu programu zależy tylko od danych początkowych, ale nie zależy od pracy innych modułów;

    słabe powiązania informacyjne z innymi modułami oprogramowania – wymiana informacji pomiędzy modułami powinna być maksymalnie ograniczona;

    przewidywalny rozmiar i złożoność kodu programu .

Moduły zawierają:

    określenie danych dostępnych do przetwarzania;

    operacje przetwarzania danych;

    schematy połączeń z innymi modułami.

Każdy moduł składa się zspecyfikacje Iciało . Specyfikacje określić zasady korzystania z modułu, orazciało - sposób realizacji procesu przetwarzania.

Funkcje tego samego typu są realizowane przez te same moduły. Funkcję najwyższego poziomu zapewnia moduł główny; zarządza wykonywaniem funkcji podrzędnych, którym odpowiadają podmoduły.

Przy określaniu zestawu modułów realizujących funkcje konkretnego algorytmu należy wziąć pod uwagę:

    każdy moduł jest wywoływany do wykonania przez moduł wyższego poziomu i po zakończeniu swojej pracy zwraca kontrolę do modułu, który go wywołał;

    podejmowanie głównych decyzji w algorytmie odbywa się na najwyższym możliwym poziomie w hierarchii;

    aby użyć tej samej funkcji w różnych miejscach algorytmu, tworzony jest jeden moduł, który w razie potrzeby jest wywoływany do wykonania.

W wyniku dalszego udoskonalania algorytmu, aschemat funkcjonalno-modułowy ( FMS ) algorytm aplikacji, który jest podstawą programowania (rys. 2).

Skład i rodzaj modułów programu, ich przeznaczenie i charakter wykorzystania w programie w dużej mierze determinują narzędzia.

Drugi poziom hierarchii programy

Pierwszy poziom hierarchii programy

Moduł głowicy

(program serwera)

Moduł sterujący 1

(kierownik programu 1)

moduł sterujący nr

(kierownik programu n)

Moduł 1A

(podprogram 1A)

Moduł 1B

(podprogram 1B)

Moduł 1W

(podprogram 1 W )

Moduł 0A

(podprogram 0A)

Moduł 0B

(podprogram 0B)

Moduł nA

(podprogram nA)

moduł NB

(podprogram nB)

moduł nW

(podprogram nW)

Trzeci poziom hierarchii programy

Ryż. 3. Funkcjonalno-modułowa struktura algorytmu aplikacji

Większość nowoczesnych aplikacji dla użytkowników końcowych działa w interaktywnym trybie interakcji z użytkownikiem w taki sposób, że wymieniane są komunikaty, które wpływają na przetwarzanie danych. W trybie dialogowym pod wpływem użytkownika uruchamiane są funkcje przetwarzające, zmieniane są właściwości obiektów, konfigurowane są parametry wyjścia informacyjnego itp. Proces dialogu sterowany jest zgodnie z utworzonym scenariuszem, dla którego zdefiniowane są:

    punkty (moment, warunek) początku dialogu;

    inicjatorem dialogu jest osoba lub oprogramowanie;

    parametry i zawartość dialogów – komunikaty, skład i struktura menu, formularze ekranowe itp.;

    reakcja oprogramowania na koniec dialogu.

Najbardziej odpowiedni do tworzenia procesów dialogowych i interfejsu użytkownika końcowegozorientowany obiektowo narzędzia rozwój programu .

1.4. Kodowanie strukturalne

Praktyka programowania wykazała potrzebę naukowej metodologii opracowywania i dokumentowania algorytmów i programów. Metodologia ta powinna dotyczyć analizy pierwotnego problemu, podzielenia go na dostatecznie niezależne części i zaprogramowania tych części w sposób możliwie niezależny od siebie. Ta metodologia jestkodowanie strukturalne ( programowanie ).

Kodowanie strukturalne to metoda pisania programów, które mają określoną strukturę i dlatego są łatwe do zrozumienia, przetestowania, modyfikacji i użycia.

Metoda ta opiera się na wykorzystaniu niewielkiego zestawu prostych struktur kontrolnych (operatory strukturalne ), którego poprawność działania jest łatwa do przeanalizowania i ustalenia. W tym przypadku niektóre operatory składają się z innych zagnieżdżonych w nich operatorów.

Właściwość strukturalna operatorów jest takakażdy operator ma jedno wejście i jedno wyjście . Nazywa się program zbudowany z instrukcji strukturalnychzbudowany .

Podstawą programowania strukturalnego jesttwierdzenie o strukturze , sformułowane przez włoskich matematyków K. Bohma i G. Jacopiniego w 1966 r.

Twierdzenie stanowi, że bez względu na to, jak złożone jest zadanie, schemat algorytmu jego rozwiązania (i odpowiednio program) zawsze można przedstawić jako kompozycję trzech typów zagnieżdżonych bloków:

    następny (początek-koniec początek Koniec ),

    rozgałęzienie (Jeśli - Następnie - w przeciwnym razie jeśli-to-inaczej ),

    pętle z warunkiem wstępnym (chwila Do widzenia ).

Innymi słowy, te elementarne struktury mająkompletność funkcjonalna , tj. dowolny algorytm można zaimplementować jako kompozycję tych trzech struktur.

W praktyce to Twierdzenie unika użycia operatorów przejściaiść do , co sprawia, że ​​algorytmy i programy są wizualne i łatwe do zrozumienia.

Rodzaje głównych struktur kontrolnych algorytmu pokazano na ryc. 4.

1. Struktura jak „następny » (ryc. 4, A) jest tworzony przez sekwencję działań, S 1, S 2, …, sn następujące po sobie:

wykonaćS 1;

wykonaćS 2;

wykonaćsn .

W liniowym procesie obliczeniowym wszystkie operacje są wykonywane sekwencyjnie w kolejności, w jakiej zostały zapisane. Typowym przykładem takiego procesu jest standardowy schemat obliczeniowy składający się z trzech etapów:

    wprowadzenie danych początkowych;

    obliczenia według wzorów;

    wyjście wynikowe.

w językuPascala taka struktura jest ujęta w nawiasy operatorskieZaczynać ... Koniec :

Zaczynać

S 1;

S 2;

...

sn ;

Koniec

Ryż. 4. Podstawowe struktury algorytmiczne:

A) następny (Zaczynać Koniec ); B) rozgałęzienie (Jeśli Następnie W przeciwnym razie ); V) pętla z warunkiem wstępnym (Chwila Do )

2. Struktura jak „ rozgałęzienie » (JEŚLI - TO - INACZEJ ) (ryc. 4,B ) – określa, w zależności od wyniku sprawdzenia, warunkiR , która przyjmuje jedną z dwóch wartości logicznychTak (PRAWDA ) LubNIE (FAŁSZ ), wybór jednego z alternatywnych sposobów algorytmu:

Jeśli R

następnie wykonaj S 1

inaczej wykonać S 2 .

Każda ścieżka prowadzi do wspólnego wyjścia, więc algorytm będzie kontynuowany niezależnie od wybranej ścieżki.

w językuPascala

Jeśli P

Następnie S 1

W przeciwnym razie S 2;

3. Struktura jak „pętla z warunkiem wstępnym » (ryc. 4, V) - zapewnia powtórne wykonanie akcji S w zależności od tego, jaką wartość przyjmuje warunek logiczny R:

dopókiR

spełnićS .

Pętla kończy się, gdy warunek R nie jest wykonywany.

w języku Pascala taka struktura ma następujący format:

Chwila P Do

S ;

Rozszerzony zestaw elementarnych struktur algorytmicznych obejmuje dodatkowo następujące struktury sterujące (rys. 5).

4. Struktura jak „ oddział skrócony » (JEŚLI NASTĘPNIE ) (ryc. 5,A ) – jeśli wynik sprawdzenia warunkuR nabiera wartościTak (PRAWDA ), następnie akcja jest wykonywanaS ; w przeciwnym razie akcja ta jest pomijana, a sterowanie przekazywane jest do następującej struktury:

Jeśli R

następnie wykonaj S 1 .

w językuPascala taka struktura ma następujący format:

Jeśli P

Następnie S ;

5 . Struktura jak „ wybór jest inny » (ryc. 5,B ) są rozszerzoną wersją struktury typuJEŚLI - TO - INACZEJ . Oto warunek do sprawdzeniaR może przyjmować nie dwie wartości logiczne, ale kilka wartości porządkowych, na przykład 1, 2, ...,N . JeśliR = I , wtedy akcja zostanie wykonanaSi . Jeśli wartośćR wyjdzie poza zakres prawidłowych wartości, wtedy akcja jest wykonywanaS (krótka wersja)wybór » żadna akcja nie jest podejmowana i sterowanie przechodzi do następnej struktury. w językuPascala taka struktura ma następujący format:

sprawa P Z

1:S1;

2:S2;

n: Śn

W przeciwnym razie S

koniec;

Ryż. 5. Dodatkowe elementarne struktury algorytmiczne:

A) oddział skrócony (Jeśli Następnie ); B) wybór jest inny (sprawa Z W przeciwnym razie );
V) pętla z warunkiem końcowym (Powtarzać Dopóki ); G) pętla z parametrem (Dla Do ( Aż do ) – Do )

6. Struktura jak „ pętla z warunkiem końcowym » (ryc. 5,V ) - zapewnia powtórne wykonanie akcjiS do momentu spełnienia warunkuR .

w językuPascala taka struktura ma następujący format:

Powtarzać

S

Dopóki P ;

7. Struktura jak „ pętla z parametrem » (ryc. 5,G ) - zapewnia z góry określone powtórne wykonanie akcjiS . W takim przypadku sekwencyjnie wykonywane są następujące typowe operacje:

    ustawienie wartości początkowej użytego parametru pętli (na przykład, jeśli zmienną pętli jest I, to jest przypisywana wartość I 1, tj. I:=I 1);

    wykonywanie czynności S dostarczone w korpusie pętli;

    zmiana parametru pętli, co zapewnia obliczenie wyniku z nowymi danymi początkowymi (na przykład, jeśli parametr pętli I zmiany w krokach I 3, I:=II 3);

    sprawdzenie aktualnej wartości parametru pętli z zadaną wartością końcową ( I<=I 2);

    przejście do powtórzenia ciała pętli, jeśli parametr pętli nie przekroczył wartości końcowej, w przeciwnym razie - wykonanie kolejnych akcji lub wyprowadzenie wyniku.

w językuPascala taka struktura ma następujący format:

Dla Zmienny := I 1 Do (w dół) I 3 Do

S ;

Biorąc pod uwagę schemat programu, można wyróżnić w nim części (fragmenty), które są dość proste i zrozumiałe w strukturze. Przedstawienie tych fragmentów jako powiększonych bloków znacznie ułatwia postrzeganie algorytmu (a później programu) jako całości.

Instrukcje strukturalne są zwykle używane na wczesnych etapach projektowania programu z góry na dół.

Zatem,programowanie strukturalne oparte nastruktura modułowa oprogramowanie itypowy (podstawowy ) struktury rządzące algorytmy przetwarzania danych różnych modułów oprogramowania.

WNIOSKI

    Programowanie strukturalne to metodologia tworzenia oprogramowania oparta na reprezentacji programu w postaci hierarchicznej struktury blokowej. Zaproponowany w latach 70. XX wieku. E. Dijkstroy, opracowany i uzupełniony przez N. Wirtha. Typowe metody programowania strukturalnego to: projektowanie od góry do dołu (projektowanie od góry do dołu); programowanie modułowe (proceduralne); kodowanie strukturalne.

    Cele programowania strukturalnego to: zapewnienie dyscypliny programowania, zwiększenie wydajności i niezawodności programów, skrócenie czasu i kosztów tworzenia oprogramowania. Podstawowe zasady programowania strukturalnego: abstrakcja, formalność, "dziel i zwyciężaj", hierarchiczne porządkowanie.

    Metoda projektowania top-down polega na sekwencyjnym dekompozycji całej funkcji przetwarzania danych na proste elementy funkcjonalne („top-down”). Środki do osiągnięcia celów na poziomie poprzednim zamieniają się w cele na poziomie niższym.

    Kodowanie strukturalne to metoda pisania programów o określonej strukturze. Opiera się na wykorzystaniu niewielkiego zestawu stwierdzeń strukturalnych, których poprawność jest łatwa do przeanalizowania i ustalenia. W tym przypadku niektóre operatory składają się z innych zagnieżdżonych w nich operatorów.

    Podstawą programowania strukturalnego jest twierdzenie o strukturze, sformułowane przez włoskich matematyków C. Bohma i G. Iacopiniego w 1966 roku. Twierdzenie to stwierdza, że ​​bez względu na to, jak złożone jest zadanie, schemat algorytmu jego rozwiązania (i odpowiednio program) można zawsze przedstawić jako kompozycję trzy typy zagnieżdżonych bloków: następujące (początek-koniec - początek-koniec), rozgałęzione (jeśli-to-else - jeśli-to-else), cykle z warunkiem wstępnym (while - while ).

* E. Dijkstra podał następującą definicję: „ Programowanie strukturalne to dyscyplina, którą programista sam sobie narzuca.».

Programowanie strukturalne - jeden z największych postępów w technologii programowania. Chociaż prawie każdy ma najbardziej ogólne i raczej niejasne pojęcie o programowaniu strukturalnym, nie ma ogólnie przyjętej jasnej definicji. Programowanie strukturalne ma na celu pisanie programów o minimalnej złożoności, aby programista myślał jasno, aby program był łatwiejszy do zrozumienia.

Tekst programu powinien być taki, aby można go było czytać „od góry do dołu”. Nieograniczone użycie instrukcji GO TO narusza ten warunek, dlatego programowanie strukturalne jest często określane jako programowanie non-GO TO.

Możesz podać przykłady programów, które nie zawierają GO TO i są ładnie ułożone w drabince według poziomu zagnieżdżenia instrukcji, ale są zupełnie niezrozumiałe i są inne programy, które zawierają GO TO i są nadal zrozumiałe. Tak więc obecność lub brak GO TO jest słabym wskaźnikiem jakości programu (ilustracja w D. Knuth). A jednak: najtrudniejszy do kontrolowania i potencjalnie niestabilny jest bezwarunkowy operator gałęzi - GO TO .

Struktura ciała modułu oraz stosowane podstawowe konstrukcje programistyczne muszą być potencjalnie odporne na awarie sprzętu, zniekształcenia danych źródłowych oraz błędy programu.

Każdy program można zsyntetyzować na podstawie elementarnych podstawowych struktur trzech typów:

1. Prosta sekwencja. 2. Warunki (alternatywy).

3. Powtórzenia (cykle, iteracje). Możliwy jest jeden z dwóch lub oba typy:

Rób „aż” Rób „jeszcze nie”

4. Możesz dodać czwarty projekt - wybór (przełącznik).

Bloki są definiowane rekurencyjnie: prostokąty reprezentują zagnieżdżone bloki konstrukcyjne używane zamiast prostokąta.

Wymienione konstrukcje elementarne, na przykład w języku Pascal, są implementowane w następujący sposób:

Operator warunkowy JEŚLI dziennik. do potęgi. NASTĘPNIE operator 1 W PRZECIWNYM RAZIE operator2;

JEŚLI dziennik. wyrażenie NASTĘPNIE operator;

Powtórzenie (cykle, iteracje)

a) Rób „podczas gdy”. warunek kontynuacji DO operator;

b) POWTÓRZ "jeszcze nie". operator DOPÓKI warunek zakończenia;

c) Pętla z iteracją FOR K:=B1 TO B2 DO operator;

DLA K:=B2 DO B1 DO operator;

Wybór (przełącznik) SPRAWA stan Z

N1, ... Nk : operator 1;

Ni , ... Nm : operator str;

KONIEC ;

W języku FoxBASE konstrukcje te są realizowane jako:

Operator warunkowy JEŚLI dziennik. wyrażenie

operatorzy1

[W PRZECIWNYM RAZIE]

operatorzy2]

KONIEC

Cykl ROBIĆ, GDY wyrażenie

operatorzy

KONIEC

Wybór (przełącznik) ZROBIĆ PRZYPADEK

SPRAWA dziennik. wyrażenie 1

operatorzy

SPRAWA dziennik. wyrażenie2

Operatorzy

SPRAWA dziennik. Wyrażenie str

Operatorzy

KOŃCÓWKA

Każda konstrukcja charakteryzuje się pojedynczym punktem przekazania kontroli do struktury (pojedyncze wejście) oraz jednym punktem wyjścia z konstrukcji.

Konstrukcje te mają walor systematyzujący i dyscyplinujący. Prostota początkowych struktur programowania strukturalnego zapobiega złożonym powiązaniom informacyjnym i zastraszającemu przekazywaniu kontroli.

Wraz ze wzrostem struktury modułów zmniejsza się złożoność programów, zwiększa się ich widoczność, co pomaga zredukować liczbę błędów. Jednak za poprawę jakości programów trzeba zapłacić dodatkową pamięcią i czasem na ich wdrożenie na komputerze.

Struktura programu zależy od użytego języka programowania. Nowoczesne narzędzia do tworzenia oprogramowania są „najlepszymi” strukturalnymi językami programowania. Spośród popularnych języków programowania Pascal, Basic, FoxBASE są uważane za najbardziej odpowiednie. Programowanie strukturalne, na przykład w języku asemblera, jest prawie niemożliwe. Sam fakt użycia asemblera wskazuje, że program jest napisany głównie w języku maszynowym.

Programowanie strukturalne koncentruje się na komunikowaniu się z ludźmi, a nie z maszyną, i promuje pisanie programów, które są prostym i przejrzystym rozwiązaniem problemu.

Ważne jest, aby programista, nawet zaczynając programować logikę, myślał w kategoriach podstawowych podstawowych konstrukcji strukturalnych.

Pozycja w instrukcji GO TO powinna być następująca: unikaj używania GO TO tam, gdzie to możliwe, ale nie kosztem przejrzystości programu. Często sensowne jest użycie GO TO do wyjścia z pętli lub modułu, przeskoczenia do konstrukcji ON (np. instrukcje programowe i strukturalny program nadal jest łatwy do odczytania od góry do dołu. Najgorszym zastosowaniem instrukcji GO TO jest przeniesienie kontroli do instrukcji znajdującej się wyżej (wcześniejszej) w tekście programu.

Dodatkowo, aby program był łatwiejszy do odczytania, jego tekst musi być fizycznie podzielony na części, dodając puste linie między sekcjami, podziały. Tekst programu musi być napisany z odpowiednimi przesunięciami, tak aby przerwy w sekwencji wykonywania były łatwo śledzone. Instrukcje wykonywalne przeznaczone do jednego celu każdego modułu muszą mieścić się na jednej stronie urządzenia drukującego.

Pierwsze programy składały się z kilkudziesięciu - setek instrukcji maszynowych. Kompleksy oprogramowania i systemy informatyczne obejmowały od kilkudziesięciu tysięcy do milionów operatorów w językach wysokiego poziomu. Wraz ze wzrostem liczby narzędzi programowych proces debugowanie, te. wykrywanie i korygowanie błędów. Praktyka pokazała, że ​​napisanie mniej lub bardziej dużego programu bez błędów jest prawie niemożliwe. Co więcej, nawet podczas działania gotowych programów wykrywane są błędy pominięte podczas debugowania. Błędy dzielą się na kilka kategorii.

Najprostszy to błędy składniowe. Są one związane z błędną pisownią konstrukcji językowych i są wykrywane natychmiast, w momencie, gdy kompilator próbuje przetłumaczyć program na język maszynowy.

Jeśli wszystkie błędy składni i łączenia zostaną poprawione, program zaczyna działać (stage uruchomić). Jednak ten etap może zostać przerwany przez nieprawidłową operację (np. dzielenie przez zero), w takim przypadku mówi się o błędzie wykonania. (Błędy czasu wykonania). Lub program doliczył do końca, ale uzyskane wyniki są nieprawidłowe. Może to być spowodowane błędami algorytmu, błędami w organizacji komunikacji międzymodułowej, błędami konwersji typów danych lub zwykłymi literówkami (np. pominięto zero przy zapisywaniu liczby 100, a program użył 10 w obliczeniach).

Błędy czasu wykonywania są wykrywane przez rozwiązanie serii przypadków testowych (przebieg programu), którego wynik jest z góry znany. Z reguły czas poświęcony na znalezienie takich błędów znacznie przekracza czas poświęcony na napisanie samego programu i poprawienie błędów składniowych. Rozwój koncepcji programowania jest ściśle powiązany z problemem ograniczania marnotrawstwa podczas pisania programu.

Opracowywane są teoretyczne podstawy programowania strukturalnego, teoria dowodzenia poprawności programu oraz programowanie oparte na dowodach.

Koncepcja programowania strukturalnego implikuje takie naukowe podejście do budowy programu i możliwości języka programowania, które znacznie zmniejszy ilość możliwych błędów. Znaczący rozwój koncepcji został osiągnięty w strukturalnym języku programowania Pascala. Istotą programowania strukturalnego jest to, że dane są przede wszystkim abstrakcjami rzeczywistych obiektów i najlepiej formułowane jako struktury abstrakcyjne, które mogą nie mieć określonej implementacji w języku programowania. W procesie konstruowania programu reprezentacja danych jest stopniowo udoskonalana w miarę udoskonalania algorytmu.

Strukturalny język programowania powinien zapewniać możliwość konstruowania własnych typów danych. Na najniższym poziomie znajdują się podstawowe struktury predefiniowane w języku (na przykład: typy skalarne, rekord, tablica i zbiór). Ze struktur fundamentalnych, podobnie jak z molekuł, buduje się struktury skomplikowane. Zmienne struktury fundamentalnej mogą jedynie zmieniać wartość, zachowując typ lub zbiór prawidłowych wartości oraz rozmiar, jaki zajmują. Skomplikowane struktury charakteryzują się zmianą nie tylko znaczenia, ale także samej formy reprezentacji, składu zawartych w nich struktur podstawowych. Zarządzanie pamięcią dynamiczną realizowane jest na poziomie wskaźnika, a dane dynamiczne łączone są w strukturę drzewiastą (drzewa).

Ponadto istnieją pewne wymagania dotyczące typowania danych, dzięki którym można określić typ dowolnego wyrażenia lub zmiennej bez konieczności wykonywania obliczeń, tj. na etapie tłumaczenia. W takim przypadku można uniknąć dużej liczby trudnych do znalezienia błędów wykonawczych, wykrywając je na etapie tłumaczenia programu.

Koncepcja programowania strukturalnego obejmuje nie tylko użycie specjalnych języków i zastosowanie określonego stylu programowania. Przede wszystkim jest to filozofia programowania, która wpływa również na taki aspekt jak metodyka nauczania programistów.

Należy zauważyć, że programowanie jest rozległą i zróżnicowaną działalnością, często wymagającą złożonej pracy umysłowej. Błędem jest sądzić, że programowanie można sprowadzić do korzystania z gotowych receptur opartych na systematycznym opisie najprostszych bloków. Uczniowie muszą rozwinąć umiejętność kreatywnego myślenia, a tutaj rola nauczyciela jest niezwykle ważna, pokazując, jak robi to i tamto. Kreatywność nie podlega kanonom, metodom i technologiom. Jako metodę nauczania przyjęto staranny dobór i rozważenie charakterystycznych przykładów. Konieczne jest rozważenie złożonych i długich programów, które są często spotykane w praktyce i najlepiej nadają się do identyfikacji tej nieuchwytnej, ale ważnej właściwości zwanej styl programowanie. Analiza długich programów jest ćwiczeniem w sztuce ich czytania, co jest nie mniej ważne niż umiejętność pisania programów.

Pytania kontrolne i zadania

5.1. Wymień i krótko opisz części polecenia programu.

5.2. Podstawą programu funkcjonowania IOI jest ____; podaj definicję.

5.3. Co oznacza programowanie w kodach?

5.4. Co wiesz o asemblerze?

5.5. Jakie języki programowania nazywane są niezależnymi od maszyny?

5.6. W jaki sposób „tłumaczenie” programu napisanego w języku algorytmicznym na kod wynikowy jest zrozumiałe dla komputera?

5.7. Co oznacza programowanie modułowe i osobny moduł?

5.8. Co wiesz o programowaniu strukturalnym?

Programowanie strukturalne- metodologia programowania mająca na celu tworzenie logicznie prostych i zrozumiałych programów. Programowanie strukturalne opiera się na założeniu, że logika i zrozumiałość programu ułatwia tworzenie, sprawdzanie poprawności i późniejsze utrzymanie programu, a także zapewnia jego niezawodność.

Charakterystyczne zasady programowania strukturalnego to:

· programowanie z góry na dół metoda tworzenia programów, w której programowanie odbywa się metodą „z góry na dół”, od ogółu do szczegółów;

· programowanie modułowe, w których stosunkowo niezależne podzadania programuje się jako oddzielne moduły programu;

· wykorzystanie w programowaniu trzech struktur kontrolnych (podążanie, wybieranie, powtarzanie). Struktura follow zakłada naturalną kolejność wykonywania instrukcji. Strukturę wyboru określa schemat „if-then-else” (instrukcja if). Operator pętli jest powiązany ze strukturą powtórzeń;

· Odrzucenie bezwarunkowego przekazania kontroli i ograniczone wykorzystanie zmiennych globalnych.

Programowanie strukturalne opiera się na twierdzeniu, które zostało rygorystycznie udowodnione w teorii programowania. Jego istotą jest to, że algorytm rozwiązywania dowolnego problemu logicznego może składać się tylko z następujących struktur. , rozgałęzienie, cykl. Nazywa się je podstawowymi strukturami algorytmicznymi. W rzeczywistości my i wcześniej we wszystkich rozważanych przykładach programów przestrzegaliśmy zasad programowania strukturalnego.

Poniżej przedstawiono liniową sekwencję działań (ryc. 2.6):

Ryż. 2.6. następny

Każdy blok może zawierać zarówno proste polecenie, jak i złożoną strukturę, ale musi mieć jedno wejście i jedno wyjście.

rozgałęzienie alternatywa algorytmiczna. Kontrola jest przenoszona do jednego z dwóch bloków w zależności od prawdziwości lub fałszywości warunku. Następnie jest wyjście do ogólnej kontynuacji (ryc. 2.7):

Ryż. 2.7. rozgałęzienie

Cykl powtórzenie określonej grupy działań według warunku. Istnieją dwa rodzaje cykli. Pierwszy pętla z warunkiem wstępnym (ryc. 2.8):

Ryż. 2.8. Pętla z warunkiem wstępnym

Gdy warunek jest spełniony, wykonywana jest seria tworząca ciało pętli.

Drugi typ struktury cyklicznej pętla z warunkiem końcowym (ryc. 2.9):

Ryż. 2.9. Pętla z warunkiem końcowym

Tutaj treść pętli poprzedza warunek pętli. Ciało pętli powtarza swoje wykonanie, jeśli warunek jest fałszywy. Powtórzenie kończy się, gdy warunek staje się prawdziwy.

Teoretycznie tylko pierwszy rodzaj cyklu jest konieczny i wystarczający. pętla z warunkiem wstępnym. Za jego pomocą można zbudować dowolny algorytm cykliczny. Jest to bardziej ogólna wersja pętli niż pętla do. Rzeczywiście, ciało pętli till zostanie wykonane co najmniej raz, ponieważ warunek jest sprawdzany po jej zakończeniu. A dla pętli-while taka opcja jest możliwa, gdy ciało pętli nie zostanie wykonane ani razu. Dlatego w każdym języku programowania można ograniczyć się tylko do pętli while. Jednak w niektórych przypadkach użycie cyklu do jest wygodniejsze i dlatego jest używane.

Programowanie strukturalne jest czasami określane w literaturze jako programowanie bez goto. Rzeczywiście, przy takim podejściu nie ma miejsca na bezwarunkowe przejście. Nieuzasadnione użycie operatora goto w programach pozbawia go jego struktury, a co za tym idzie wszystkich pozytywnych właściwości z nim związanych: przejrzystości i niezawodności algorytmu. Chociaż ten operator jest obecny we wszystkich językach programowania proceduralnego, to jednak zgodnie z podejściem strukturalnym należy unikać jego używania.

Złożony algorytm składa się z połączonych ze sobą podstawowych struktur. Struktury te można łączyć na dwa sposoby: spójny I zagnieżdżone. Ta sytuacja jest podobna do tej, którą obserwujemy w elektrotechnice, gdzie dowolny dowolnie złożony obwód elektryczny można rozłożyć na sekcje połączone szeregowo i równolegle.

Zagnieżdżone struktury algorytmiczne nie są analogiczne do przewodników połączonych równolegle. Tutaj analogia z lalkami gniazdującymi umieszczonymi jedna w drugiej jest bardziej odpowiednia. Jeśli blok składający się na ciało cyklu sam jest strukturą cykliczną, oznacza to, że istnieją cykle zagnieżdżone. Z kolei wewnętrzna pętla może mieć w sobie inną pętlę i tak dalej. W związku z tym wprowadzono pojęcie głębokości zagnieżdżenia pętli. Podobnie gałęzie mogą być zagnieżdżane w sobie.

Podejście strukturalne wymaga przestrzegania standardu w postaci schematów blokowych algorytmów. Musisz je narysować tak, jak to zrobiono we wszystkich podanych przykładach. Każda podstawowa struktura musi mieć jedno wejście i jedno wyjście. Niestandardowy schemat blokowy jest słabo czytelny, traci się widoczność algorytmu.

Języki programowania Pascal i C nazywane są strukturalnymi językami programowania. Posiadają wszystkie niezbędne struktury kontrolne do strukturalnej konstrukcji programu. Strukturyzacja wyglądu tekstu programu zapewnia przejrzystość tej konstrukcji. Główna technika używana do tego przesunięcia linii, które muszą być zgodne z następującymi zasadami:

Konstrukcje o tym samym poziomie zagnieżdżenia są zapisywane na tym samym poziomie w pionie (zaczynają się od tej samej pozycji w wierszu);

Zagnieżdżona konstrukcja jest zapisywana przesunięta wzdłuż linii o kilka pozycji w prawo względem jej konstrukcji zewnętrznej.

Strukturalna metoda algorytmizacji to nie tylko forma opisu algorytmu, ale także sposób myślenia programisty . Tworząc algorytm należy dążyć do tego, aby składał się on ze standardowych struktur. Korzystając z analogii budowlanej, można powiedzieć, że strukturalna metoda konstruowania algorytmu jest podobna do składania budynku ze standardowych sekcji, w przeciwieństwie do składania cegły po cegle.

Inną ważną techniką technologiczną programowania strukturalnego jest dekompozycja problemu do rozwiązania na podzadania. części pierwotnego problemu, które są prostsze z punktu widzenia programowania. Algorytmy rozwiązywania takich podproblemów nazywane są algorytmami pomocniczymi. W związku z tym możliwe są dwa sposoby konstrukcji algorytmu:

„z góry na dół”: najpierw budowany jest algorytm główny, potem algorytmy pomocnicze;

„oddolnie”: najpierw kompilowane są algorytmy pomocnicze, a następnie główny.

Pierwsze podejście nazywane jest również metodą sekwencyjnego uszczegóławiania, drugie sposób montażu.

Metoda asemblera polega na gromadzeniu i wykorzystywaniu bibliotek algorytmów pomocniczych zaimplementowanych w językach programowania w postaci podprogramów, procedur i funkcji. W przypadku detalowania sekwencyjnego najpierw budowany jest algorytm główny, a następnie wprowadzane są do niego wywołania algorytmów pomocniczych pierwszego poziomu. Następnie kompilowane są algorytmy pomocnicze pierwszego poziomu, w których mogą występować wywołania algorytmów pomocniczych drugiego poziomu i tak dalej. Algorytmy pomocnicze najniższego poziomu składają się tylko z prostych poleceń.

Metodę sukcesywnego detalowania stosuje się przy każdym projektowaniu skomplikowanych obiektów. Taka jest naturalna logiczna kolejność myślenia projektanta: stopniowe zagłębianie się w szczegóły. W naszym przypadku mówimy również o projektowaniu, ale nie o urządzeniach technicznych, ale o algorytmach. Praktycznie niemożliwe jest zbudowanie dość skomplikowanego algorytmu w inny sposób.

W metodzie sekwencyjnego uszczegóławiania najpierw analizowany jest pierwotny problem. Ma podzadania. Budowana jest hierarchia takich podzadań. Następnie kompilowane są algorytmy (lub programy), zaczynając od algorytmu głównego (programu głównego), następnie algorytmy pomocnicze (podprogramy) z kolejnym pogłębianiem poziomu, aż do uzyskania algorytmów składających się z prostych poleceń.

Pierwszy etap detailingu. Najpierw naszkicujemy wszystkie niezbędne podprogramy, wskazując tylko ich nagłówki (specyfikacje). W miejsce treści podprogramów piszemy komentarze wyjaśniające (ten typ podprogramu nazywany jest „stubem”). Napiszmy główną część programu. A potem wrócimy do szczegółowego programowania procedur i funkcji. Na pierwszym etapie programowania zamiast treści podprogramu opisujemy jego cel w formie komentarza.

Zastosowanie programowania strukturalnego pozwala zwiększyć szybkość pisania programów oraz ułatwić debugowanie napisanego programu. Programowanie strukturalne jest również możliwe w językach programowania asembler, w których nie ma operatorów strukturalnych podobnych do operatorów strukturalnych języków programowania C, PASCAL, PL/M.

Programowanie dla komputerów uniwersalnych rozpoczęło się od programowania w kodach maszynowych, potem pojawiły się języki wysokiego poziomu i zaczęły się rozwijać, następnie Dijkstroy opracował zasady programowania strukturalnego, programowanie obiektowe zastąpiło programowanie strukturalne, a obecnie aktywnie rozwija się programowanie wizualne.

Programowanie mikrokontrolerów przebiega w dużej mierze tą samą ścieżką. Przejście z etapu na etap uzależnione jest od dostępnych zasobów wewnętrznych mikrokontrolerów. Jeszcze kilka lat temu korzystanie z języków wysokiego poziomu było niemożliwe ze względu na małą ilość wewnętrznej pamięci programu. (W tanich modelach mikrokontrolerów ta sytuacja jest nadal zachowana.) Obecnie, wraz z pojawieniem się mikrokontrolerów i pamięcią wewnętrzną kilkudziesięciu kilobajtów, pojawia się możliwość projektowania obiektowego.

Obecnie istnieją dwa sposoby pisania programów: od dołu do góry i od góry do dołu. Pisząc program od dołu do góry, nie można rozpocząć debugowania programu bez napisania całego programu. Podczas pisania programu od góry do dołu, co jest obowiązkowe w programowaniu strukturalnym, na każdym etapie pisania programu można go przetłumaczyć i wykonać, a jednocześnie można śledzić wszystkie działania algorytmiczne programu napisanego do tego czasu. Proces pisania programu nie różni się niczym od procesu tworzenia algorytmu. Co więcej, te etapy tworzenia programu można łączyć. Wykonana akcja algorytmiczna jest wyświetlana w nazwie podprogramu standardowego. Na przykład:

Podstawową ideą programowania strukturalnego jest to, że istnieją tylko cztery instrukcje strukturalne. Korzystając z tych operatorów strukturalnych, można zbudować dowolnie złożony program.

Nazywany jest pierwszy operator struktury liniowy łańcuch operatorów. Każde zadanie można podzielić na kilka podzadań. Wykonanie podzadań można powierzyć podprogramowi, którego nazwa może (i powinna) odzwierciedlać podzadanie, które ten podprogram ma rozwiązać. W momencie pisania algorytmu (i programu) najwyższego poziomu nie jesteśmy zainteresowani tym, jak ten problem zostanie rozwiązany, więc zamiast rzeczywistego podprogramu wprowadzamy