Si chiama programmazione strutturata. Tecnologia di programmazione strutturale. Principi di base della programmazione strutturata

FGBOU VO "Stato della Mordovia

Istituto Pedagogico intitolato a M.E. evsevyeva"

Facoltà di Fisica e Matematica

Dipartimento di Informatica e Ingegneria Informatica

ASTRATTO

“Principi di programmazione strutturata. Strutture algoritmiche di base e loro sovrapposizioni"

Completato da: studente gr. MDM-212

Bagdanova Jana

Saransk 2016

introduzione

All'inizio degli anni '70 del XX secolo, quando lo sviluppo dei linguaggi di programmazione raggiunse un livello piuttosto elevato e i sistemi software creati raggiunsero dimensioni piuttosto impressionanti (centinaia di migliaia - milioni di comandi), divenne ovvio che i progetti software era diventato troppo complesso per progettare, codificare e debuggare con successo entro tempi accettabili. I programmatori che risolvevano problemi complessi si trovavano di fronte al problema della crescita del numero e delle dimensioni dei programmi a tal punto che l'ulteriore processo di sviluppo diventava quasi ingestibile e nessuno degli sviluppatori poteva dire con certezza che il prodotto software creato fa sempre quello che è richiesto e che non fa nulla che non sia richiesto. Si pone così il problema di un cambiamento radicale negli approcci alla creazione di grandi sistemi software.

Sulla base di questi problemi, i principali programmatori degli anni '70 (Dijkstra , Wirth , Dal , xoap , Giordania , Costantino , Myers ecc.), sono state sviluppate regole rigorose per la gestione del progetto, che sono state chiamatemetodologia strutturale .

Un passo importante nello sviluppo di questo approccio furono le conferenze internazionali di programmazione tenutesi nel 1968-69. Sul secondo di loroEdsger Dijkstra usato per la prima volta il termineprogrammazione strutturata ” e ha proposto un modo fondamentalmente nuovo di creare programmi. Considerava il programma come un insieme di livelli astratti gerarchici che consentivano:

    strutturare chiaramente il programma, che ne ha migliorato la comprensione da parte dei programmatori;

    eseguire prove della sua correttezza e quindi aumentare l'affidabilità del programma;

    ridurre i tempi di sviluppo dei programmi.

Un altro impulso a cambiare il modo in cui pensano i programmatori è stata la lettera pubblicataDijkstra direttore di uno degli editori scientifici, che si intitolava "L'istruzione GOTO dovrebbe essere considerata dannosa ". Questa lettera provocò un'aspra polemica tra i programmatori dell'epoca, ma alla fine vinse il pensiero strutturale, che, oltre aDijkstra , attivamente supportato dal professore presso l'Università Tecnica di ZurigoWirth e professore all'Università di Oxfordxoap . Un risultato della controversia fu la dimostrazione che qualsiasi programma poteva essere scritto utilizzando solo una semplice sequenza di istruzioni, un costrutto iterativo comeMentre ( Ciao ) e la costruzione della sceltacaso ( scelta ) e l'operatorevai a ( vai a ) non è un costrutto di controllo necessario nella programmazione strutturata. Sfortunatamente, controversie sull'operatorevai a ha avuto un "effetto collaterale" negativo - abbastanza spesso programmare senzavai a si identificava con tutta la programmazione strutturata. Tuttavia, gli obiettivi della programmazione strutturata sono molto più globali e seri.

1. BASI DI TECNOLOGIA DI PROGRAMMAZIONE STRUTTURALE

Programmazione strutturata - metodologia di sviluppo Software, che si basa sulla rappresentazione del programma sotto forma di una struttura gerarchica di blocchi. Proposto negli anni '70 del XX secolo. E. Dijkstroy, sviluppato e integrato da N. Wirth (Fig. 1).

Edsger Wiebe Dijkstra (1930 - 2002) - Scienziato olandese, le cui idee hanno influenzato lo sviluppo dell'industria dei computer. Conosciuto come il creatore dell'algoritmo per trovare il cammino minimo su un grafo, uno dei fondatori della programmazione strutturata. Nel 1972 ha vinto il Premio Turing.

Niklaus Wirth (1934) - Scienziato svizzero, informatico, uno dei teorici più famosi nello sviluppo dei linguaggi di programmazione, professore di informatica, vincitore del Premio Turing nel 1984. Principale sviluppatore di linguaggi di programmazione Pascal, Modula-2, Oberon .

Riso. 1. I pionieri della programmazione strutturata sono E. Dijkstra e N. Wirth.

La metodologia di programmazione strutturata è apparsa come risultato della crescente complessità dei compiti risolti sui computer e della corrispondente complicazione del software: negli anni '70 del XX secolo. il volume e la complessità dei programmi ha raggiunto un livello tale che lo sviluppo "intuitivo" (non strutturato) dei programmi, che era la norma in più presto cessato di soddisfare le esigenze della pratica. I programmi stavano diventando troppo complessi per essere adeguatamente mantenuti, quindi era necessaria una certa sistematizzazione del processo di sviluppo e della struttura del programma.

L'operatoreVAI A ( Operatore di salto incondizionato ). L'uso errato e sconsiderato di transizioni arbitrarie nel testo del programma ha portato a programmi confusi e mal strutturati (i cosiddetti.coda di spaghetti ), secondo il cui testo era quasi impossibile comprendere l'ordine di esecuzione e l'interdipendenza dei frammenti.

La programmazione strutturata si basa sui principiscomposizione sequenziale compiti eintenzionale suostrutturazione nei singoli componenti. I metodi di programmazione strutturata sono un insieme di principi tecnici e organizzativi della progettazione di sistemi di prodotti software.

Tipici metodi di programmazione strutturata sono:

    progettazione dall'alto verso il basso (disegno dall'alto verso il basso);

    modulare (procedurale)programmazione ;

    codifica strutturale .

Secondo la metodologia della programmazione strutturata:

1. Qualsiasi programma è una struttura costruita da tre tipi strutture di base:

    esecuzione sequenziale - una singola esecuzione delle operazioni nell'ordine in cui sono scritte nel testo del programma;

    ramificazione - un'unica esecuzione di una di due o più operazioni, in funzione del verificarsi di una data condizione;

    ciclo - esecuzione ripetuta della stessa operazione fino a quando non viene soddisfatta una data condizione (la condizione per continuare il ciclo).

Nel programma, le strutture di base possono essere annidate l'una nell'altra arbitrariamente, ma non sono forniti altri mezzi per controllare la sequenza delle operazioni.

2. Ripetizione di frammenti del programma (o non ripetizione, ma rappresentazione logicamente coerente blocchi di calcolo) può essere scritto nella formasubroutine (procedure o funzioni). In questo caso, nel testo del programma principale, al posto del frammento posto nel sottoprogramma, viene inserita l'istruzione di chiamata del sottoprogramma. Quando viene eseguita tale istruzione, viene eseguita la subroutine richiamata, dopodiché l'esecuzione del programma continua con l'istruzione successiva all'istruzione di chiamata della subroutine.

3. Lo sviluppo del programma avviene passo dopo passo, utilizzando il metodo "top-down".

Innanzitutto, viene scritto il testo del programma principale, in cui, invece di ogni frammento logico di testo connesso, viene inserita una chiamata alla subroutine che eseguirà questo frammento. Invece di subroutine reali e funzionanti, "spine ' che non fanno nulla. Il programma risultante viene verificato e sottoposto a debug. Dopo che il programmatore è convinto che le subroutine siano chiamate nella sequenza corretta (ovvero, la struttura generale del programma è corretta), le stub routine vengono sostituite in sequenza con quelle reali e lo sviluppo di ciascuna subroutine viene eseguito allo stesso modo come programma principale. Lo sviluppo termina quando non è rimasto un solo "stub" che non sia stato rimosso. Tale sequenza garantisce che in ogni fase dello sviluppo il programmatore si occupi simultaneamente di un insieme visibile e comprensibile di frammenti e possa essere sicuro che la struttura generale di tutti i livelli superiori del programma sia corretta. Durante la manutenzione e le modifiche al programma, diventa chiaro quali procedure devono essere modificate e vengono eseguite senza influire sulle parti del programma che non sono direttamente correlate ad esse. Ciò garantisce che quando si apportano modifiche e si correggono errori, alcune parti del programma che sono attualmente fuori dall'attenzione del programmatore non falliranno.

Seguendo i principi della programmazione strutturata si rendevano normalmente leggibili i testi dei programmi, anche di notevoli dimensioni. La comprensione dei programmi è diventata molto più semplice, è diventato possibile sviluppare programmi in una normale modalità industriale, quando un programma può essere compreso senza troppe difficoltà non solo dal suo autore, ma anche da altri programmatori. Ciò ha permesso di sviluppare sistemi software piuttosto grandi per l'epoca dalle forze dei team di sviluppo e di mantenere questi complessi per molti anni, anche a fronte di inevitabili cambiamenti nella composizione del personale.

La metodologia di sviluppo del software strutturale è stata riconosciuta come "la più forte formalizzazione degli anni '70". Successivamente, la parola "strutturale" è diventata di moda nel settore e ha iniziato ad essere utilizzata ovunque fosse necessario e dove non fosse necessario. Sono apparsi lavori su "progettazione strutturale", "collaudo strutturale", "progettazione strutturale", ecc.

I vantaggi della programmazione strutturata includono quanto segue:

1. La programmazione strutturale consente di ridurre significativamente il numero di opzioni per la creazione di un programma secondo le stesse specifiche, il che riduce significativamente la complessità del programma e ne facilita la comprensione da parte di altri sviluppatori.

2. Nei programmi strutturati, gli operatori logicamente correlati sono visivamente più vicini e quelli debolmente correlati sono più lontani, il che rende possibile fare a meno dei diagrammi di flusso e di altre forme grafiche di rappresentazione degli algoritmi (infatti, il programma stesso è il proprio diagramma di flusso).

3. Il processo di test e debug dei programmi strutturati è notevolmente semplificato.

Consideriamo più in dettaglio i principali metodi di programmazione strutturata.

1.1. Obiettivi e principi della programmazione strutturata

Gli obiettivi della programmazione strutturata Sono:

    Garantire la disciplina della programmazione nel processo di creazione di sistemi software .

    Miglioramento della leggibilità del programma . La leggibilità migliora se vengono seguite le seguenti regole:

    • evitare di utilizzare costrutti linguistici con semantica non ovvia;

      adoperarsi per localizzare l'azione delle strutture di controllo e l'uso delle strutture dati;

      progettare un programma in modo che possa essere letto dall'inizio alla fine senza salti di controllo a un'altra pagina.

    Migliorare l'efficienza del programma . Ciò può essere ottenuto strutturando il programma in moduli in modo che gli errori possano essere facilmente trovati e corretti e che il testo di ogni modulo possa essere riscritto indipendentemente dagli altri per aumentare l'efficienza.

    Miglioramento dell'affidabilità del programma . Ciò può essere ottenuto se il programma è facile da testare end-to-end e non crea problemi per l'organizzazione del processo di debug. Ciò è garantito da una buona strutturazione del programma quando è suddiviso in moduli e dal rispetto delle regole per la scrittura di programmi leggibili.

    Riduzione di tempi e costi sviluppo software . Ciò accade quando ogni programmatore di un team di sviluppo diventa in grado di scrivere ed eseguire il debug di più codice rispetto a prima.

Principaleprincipi di programmazione strutturata riassunti in Tav. 1.

Tabella 1. Principi di programmazione strutturata

Principio

Spiegazione

Astrazione

L'astrazione consente al programmatore di immaginare la soluzione desiderata a un problema senza dover prendere in considerazione molti dettagli in un attimo. Il programmatore può guardare il programma a strati: il livello superiore mostra molta astrazione, rendendo più facile osservare il design, mentre il livello inferiore mostra i dettagli fini dell'implementazione.

Formalità

L'uso di un approccio metodologico rigoroso nello sviluppo del programma, che è la base per la trasformazione della programmazione dall'improvvisazione in una disciplina ingegneristica. Questo principio fornisce una base per dimostrare la correttezza dei programmi, in quanto consente di studiare i programmi (algoritmi) come oggetti matematici.

"Dividi e governa"

Dividere il programma in frammenti separati (moduli) che sono facili da gestire e consentono debug e test indipendenti.

Ordinamento gerarchico

La struttura della divisione in parti non è meno importante del fatto stesso di tale divisione. Questo principio pone l'esigenza di una strutturazione gerarchica delle relazioni tra i moduli pacchetto software, che facilita il raggiungimento degli obiettivi della programmazione strutturata.

1.2. Progettazione dall'alto verso il basso

La specifica dell'attività funge da punto di partenza per la creazione di un programma. È necessario capire quali azioni dovrebbero essere intraprese per risolvere il problema, descriverle in linguaggio naturale e con un livello di astrazione sufficientemente elevato.

La specifica dell'attività è il suo progetto principale. Da esso si passa al programma, affinando gradualmente la descrizione.

Si chiama il graduale perfezionamento del progettometodo di progettazione dall'alto verso il basso ( passo dopo passo Oprogettazione dall'alto verso il basso ).

Esempio 1 Ad esempio, considera un progetto di vestizione per bambini.

Soluzione:

1. Scopo primario :

Vestiti.

2. Specificazione dell'obiettivo nella prima fase :

Indossa la metà inferiore.

Indossa la metà superiore.

2.1. La metà inferiore può essere indossata in due fasi:

Metti i pantaloni.

Indossa calze e stivali.

2.2. La metà superiore può anche essere vestita in due fasi:

Indossa una maglietta.

Indossa una giacca.

3. Progetto definitivo sembra così:

Metti i pantaloni.

Metti i calzini.

Indossa gli stivali.

Indossa una maglietta.

Indossa una giacca.

Metodo di progettazione top-down comporta una scomposizione sequenziale della funzione informatica complessiva in semplici elementi funzionali (“top-down”). Di conseguenza, viene costruito uno schema gerarchico -struttura funzionale dell'algoritmo ( FSA ), che riflette la composizione e la subordinazione delle singole funzioni (Fig. 2).

Allegato 1

Applicazione N

Funzione 1

Funzione 2

Funzione M

Dipartimento 11

Dipartimento 1 K

Sottofazione M 1

Sottofazione M 2

Sottofazione mp

Obiettivo 1

Sottoobiettivo 11

Sottoobiettivo 1S

Bersaglio2

sottoobiettivo2 1

sottoobiettivo2 Q

Riso. 2. Struttura funzionale dell'applicazione

La sequenza di azioni per lo sviluppo dell'applicazione FSA è la seguente:

    determinatoobiettivi di automazione area tematica e loro gerarchia (obiettivo-sottoobiettivo);

    installatocomposizione delle domande (compiti di elaborazione) che assicurano l'attuazione degli obiettivi prefissati;

    da specificarela natura del rapporto applicazioni e loro caratteristiche principali (informazioni per la risoluzione dei problemi, tempo e frequenza della soluzione, condizioni per l'esecuzione, ecc.);

    necessario per risolvere i problemifunzioni di elaborazione dei dati ;

    eseguitascomposizione delle funzioni di elaborazione fino alla necessaria complessità strutturale attuata dal toolkit proposto.

Questa struttura dell'applicazione riflette il più importante -composto Erelazione di funzioni informazioni di elaborazione per l'implementazione dell'applicazione, sebbene non divulghi la logica dell'esecuzione di ogni singola funzione, le condizioni o la frequenza delle loro chiamate.

1.3. Programmazione modulare

Programmazione modulare è una conseguenza naturale della progettazione top-down ed è che il programma è suddiviso in parti −moduli , sviluppato separatamente.

Modulo è una parte indipendente del programma, che ha uno scopo specifico e fornisce funzioni predefinite trattamento indipendentemente dagli altri moduli software. Il modulo è costituito da un insieme logicamente interconnesso di elementi funzionali.

Nella programmazione, un modulo è separatosottoprogramma , e le subroutine sono spesso chiamateprocedure Oprocedure funzionali . Pertanto, viene anche chiamata la programmazione modulareprocedurale .

Quando creano prodotti software, si distinguonomoduli riutilizzabili , vengono eseguite la loro tipizzazione e unificazione, grazie alla quale si riducono i tempi e i costi di manodopera per lo sviluppo di un prodotto software nel suo insieme.

Alcuni prodotti software utilizzano moduli di librerie già pronte di subroutine standard, procedure, funzioni, oggetti, metodi di elaborazione dei dati.

Tra i tanti moduli ci sono:

    modulo di testa - gestisce il lancio del prodotto software (esiste al singolare);

    modulo di controllo – fornisce una chiamata ad altri moduli per l'elaborazione;

    moduli di lavoro - svolgere funzioni di elaborazione;

    moduli di servizio e librerie , utilità - Implementare funzioni di servizio.

Nel lavoro del prodotto software, vengono attivati ​​​​i moduli software necessari. I moduli di controllo impostano la sequenza di chiamata per l'esecuzione del modulo successivo. La comunicazione delle informazioni dei moduli viene fornita attraverso l'uso di un database comune o il trasferimento di dati tra moduli tramite variabili di scambio.

Ogni modulo può essere configurato come file self-storing; per il funzionamento del prodotto software è necessaria la presenza di moduli software in composizione completa.

Il modulo deve avere quanto segueproprietà :

    un'entrata e un'uscita - all'ingresso, il modulo del programma riceve un certo set di dati iniziali, esegue un'elaborazione significativa e restituisce un set di dati di risultato, ad es. implementa il principio standardIPO ( Input-Processo-Uscita ingresso-processo-uscita );

    completezza funzionale - il modulo esegue un elenco di operazioni regolamentate per l'attuazione di ogni singola funzione nella sua interezza, sufficiente a completare il trattamento avviato;

    indipendenza logica - il risultato del lavoro del modulo del programma dipende solo dai dati iniziali, ma non dipende dal lavoro di altri moduli;

    collegamenti informativi deboli con altri moduli software – lo scambio di informazioni tra i moduli dovrebbe essere ridotto al minimo possibile;

    prevedibile per dimensioni e complessità del codice del programma .

I moduli contengono:

    determinazione dei dati disponibili per l'elaborazione;

    operazioni di trattamento dei dati;

    schemi di interconnessione con altri moduli.

Ogni modulo è composto daspecifiche Ecorpo . Specifiche definire le regole per l'utilizzo del modulo, ecorpo - un modo per implementare il processo di elaborazione.

Funzioni dello stesso tipo sono implementate dagli stessi moduli. La funzione di primo livello è fornita dal modulo principale; gestisce l'esecuzione delle sottofunzioni a cui i sottomoduli corrispondono.

Quando si determina un insieme di moduli che implementano le funzioni di un particolare algoritmo, è necessario tenere conto di quanto segue:

    ogni modulo viene chiamato in esecuzione da un modulo di livello superiore e, dopo aver completato il proprio lavoro, restituisce il controllo al modulo che lo ha chiamato;

    prendere le decisioni principali nell'algoritmo è portato al livello più alto possibile nella gerarchia;

    per utilizzare la stessa funzione in punti diversi dell'algoritmo, viene creato un modulo, che viene chiamato per l'esecuzione secondo necessità.

Come risultato di un ulteriore perfezionamento dell'algoritmo, aschema funzionale-modulare ( FM ) algoritmo applicativo, che è la base per la programmazione (Fig. 2).

La composizione e il tipo di moduli del programma, il loro scopo e la natura dell'uso nel programma sono in gran parte determinati dagli strumenti.

Il secondo livello della gerarchia programmi

Il primo livello della gerarchia programmi

Modulo di testa

(programma server)

Modulo di controllo 1

(direttore del programma 1)

modulo di controllo n

(responsabile programma n)

Modulo 1A

(sottoprogramma 1A)

Modulo 1B

(sottoprogramma 1B)

Modulo 1W

(sottoprogramma 1 W )

Modulo 0A

(sottoprogramma 0A)

Modulo 0B

(sottoprogramma 0B)

Modulo nA

(sottoprogramma nA)

modulo nB

(sottoprogramma nB)

modulo nW

(sottoprogramma nW)

Il terzo livello della gerarchia programmi

Riso. 3. Struttura funzionale-modulare dell'algoritmo applicativo

La maggior parte dei moderni programmi applicativi per l'utente finale opera in una modalità interattiva di interazione con l'utente in modo tale che vengano scambiati messaggi che influenzano l'elaborazione dei dati. Nella modalità di dialogo, sotto l'influenza dell'utente, vengono avviate le funzioni di elaborazione, le proprietà dell'oggetto vengono modificate, i parametri di output delle informazioni vengono configurati, ecc. Il processo di dialogo è controllato in base allo scenario creato, per il quale sono definiti:

    punti (momento, condizione) dell'inizio del dialogo;

    l'iniziatore del dialogo è una persona o un prodotto software;

    parametri e contenuto della finestra di dialogo - messaggi, composizione e struttura del menu, maschere, ecc.;

    la reazione del prodotto software alla fine del dialogo.

Più adatto per la creazione di processi di dialogo e interfaccia utente finaleorientato agli oggetti utensili sviluppo del programma .

1.4. Codifica strutturale

La pratica della programmazione ha mostrato la necessità di una metodologia scientificamente fondata per lo sviluppo e la documentazione di algoritmi e programmi. Questa metodologia dovrebbe riguardare l'analisi del problema originario, suddividendolo in parti sufficientemente indipendenti e programmando tali parti nel modo più indipendente possibile l'una dall'altra. Questa metodologia ècodifica strutturale ( programmazione ).

Codifica strutturale è un metodo per scrivere programmi che hanno una certa struttura e sono quindi facili da capire, testare, modificare e usare.

Questo metodo si basa sull'uso di un piccolo insieme di semplici strutture di controllo (operatori strutturali ), il cui corretto funzionamento è facile da analizzare e stabilire. In questo caso, alcuni operatori sono costituiti da altri nidificati in essi.

La proprietà strutturale degli operatori è quellaogni operatore ha un input e un output . Viene chiamato un programma costruito da istruzioni strutturatestrutturato .

Il fondamento della programmazione strutturata èteorema di strutturazione , formulata dai matematici italiani K. Bohm e G. Jacopini nel 1966

Il teorema stabilisce che non importa quanto sia complesso il compito, lo schema dell'algoritmo per risolverlo (e, di conseguenza, il programma) può sempre essere rappresentato come una composizione di tre tipi di blocchi nidificati:

    seguente (inizio-fine inizio-fine ),

    ramificazione (Se - Poi - altro se-allora-altro ),

    cicli con precondizione (Mentre Ciao ).

In altre parole, queste strutture elementari hannocompletezza funzionale , cioè. qualsiasi algoritmo può essere implementato come composizione di queste tre strutture.

In pratica, questo teorema evita l'uso di operatori di transizionevai a , che rende algoritmi e programmi visivi e di facile comprensione.

I tipi delle principali strutture di controllo dell'algoritmo sono mostrati in fig. 4.

1. Struttura come "seguente » (figura 4, UN) è formato da una sequenza di azioni, S 1, S 2, …, sn di seguito uno dopo l'altro:

eseguireS 1;

eseguireS 2;

eseguiresn .

In un processo computazionale lineare, tutte le operazioni vengono eseguite in sequenza nell'ordine in cui sono scritte. Un tipico esempio di tale processo è uno schema computazionale standard costituito da tre fasi:

    inserimento dei dati iniziali;

    calcolo per formule;

    uscita del risultato.

Nel linguaggioPasquale tale struttura è racchiusa tra parentesi operatoreInizio ... FINE :

Inizio

S 1;

S 2;

...

sn ;

FINE

Riso. 4. Strutture algoritmiche di base:

UN) seguente (Inizio FINE ); B) ramificazione (Se Poi Altro ); V) ciclo con precondizione (Mentre Fare )

2. Struttura come " ramificazione » (SE - ALLORA - ALTRO ) (figura 4,B ) – ne fornisce, a seconda dell'esito del controllo, i presuppostiR , che accetta uno dei due valori booleani (VERO ) ONO (Falso ), la scelta di uno dei modi alternativi dell'algoritmo:

Se R

quindi eseguire S 1

altrimenti eseguire S 2 .

Ogni percorso porta a un'uscita comune, quindi l'algoritmo continuerà indipendentemente dal percorso scelto.

Nel linguaggioPasquale

Se P

Poi S 1

Altro S 2;

3. Struttura come "ciclo con precondizione » (figura 4, v) - prevede l'esecuzione ripetuta dell'azione S a seconda di quale valore assume la condizione logica R:

Fino aR

adempiereS .

Il ciclo termina quando la condizione R non viene eseguito.

Nel linguaggio Pasquale tale struttura ha il seguente formato:

Mentre P Fare

S ;

L'insieme esteso di strutture algoritmiche elementari include inoltre le seguenti strutture di controllo (Fig. 5).

4. Struttura come " ramo abbreviato » (SE POI ) (figura 5,UN ) – se il risultato del controllo della condizioneR assume il valore (VERO ), quindi l'azione viene eseguitaS ; in caso contrario, questa azione viene saltata e il controllo viene trasferito alla seguente struttura:

Se R

quindi eseguire S 1 .

Nel linguaggioPasquale tale struttura ha il seguente formato:

Se P

Poi S ;

5 . Struttura come " la scelta è diversa » (figura 5,B ) sono una versione estesa di una struttura comeSE - ALLORA - ALTRO . Qui la condizione da verificare èR può assumere non due valori logici, ma diversi valori ordinali, ad esempio 1, 2, ...,N . SeR = io , quindi l'azione verrà eseguitaSi . Se il valoreR uscirà dall'intervallo di valori validi, quindi l'azione viene eseguitaS (versione breve)scelta » non viene intrapresa alcuna azione e il controllo passa alla struttura successiva. Nel linguaggioPasquale tale struttura ha il seguente formato:

caso P Di

1:S1;

2:S2;

n: Sn

Altro S

FINE;

Riso. 5. Ulteriori strutture algoritmiche elementari:

UN) ramo abbreviato (Se Poi ); B) la scelta è diversa (caso Di Altro );
V) ciclo con postcondizione (Ripetere Fino a ); G) ciclo con parametro (Per A ( Giù verso ) – Fare )

6. Struttura come " ciclo con postcondizione » (figura 5,v ) - prevede l'esecuzione ripetuta dell'azioneS finché la condizione non è soddisfattaR .

Nel linguaggioPasquale tale struttura ha il seguente formato:

Ripetere

S

Fino a P ;

7. Struttura come " ciclo con parametro » (figura 5,G ) - fornisce un'esecuzione ripetuta predeterminata di un'azioneS . In questo caso, le seguenti operazioni tipiche vengono eseguite in sequenza qui:

    impostando il valore iniziale del parametro del ciclo utilizzato (ad esempio, se la variabile del ciclo è io, quindi viene assegnato il valore io 1, cioè io:=io 1);

    compiere azioni S fornito nel corpo del loop;

    modificando il parametro loop, che garantisce il calcolo del risultato con nuovi dati iniziali (ad esempio, se il parametro loop io modifiche in incrementi io 3, io:=ioio 3);

    controllando il valore corrente del parametro del ciclo con un dato valore finale ( io<=io 2);

    passaggio alla ripetizione del corpo del ciclo se il parametro del ciclo non ha superato il valore finale, altrimenti - l'esecuzione delle seguenti azioni o l'output del risultato.

Nel linguaggioPasquale tale struttura ha il seguente formato:

Per Variabile := io 1 A (Giù) io 3 Fare

S ;

Considerando lo schema del programma, è possibile individuare parti (frammenti) che hanno una struttura abbastanza semplice e comprensibile. Rappresentare questi frammenti come blocchi ingranditi facilita notevolmente la percezione dell'algoritmo (e successivamente del programma) nel suo insieme.

Le dichiarazioni strutturali vengono solitamente utilizzate nelle prime fasi della progettazione del programma dall'alto verso il basso.

Così,programmazione strutturata basato sustruttura modulare prodotto software etipico (di base ) strutture di governo algoritmi di elaborazione dati di vari moduli software.

CONCLUSIONI

    La programmazione strutturata è una metodologia di sviluppo software basata sulla rappresentazione di un programma sotto forma di una struttura a blocchi gerarchici. Proposto negli anni '70 del XX secolo. E. Dijkstroy, sviluppato e integrato da N. Wirth. Tipici metodi di programmazione strutturata sono: progettazione top-down (progettazione dall'alto verso il basso); programmazione modulare (procedurale); codifica strutturale.

    Gli obiettivi della programmazione strutturata sono: garantire la disciplina della programmazione, aumentare l'efficienza e l'affidabilità dei programmi, ridurre i tempi ei costi di sviluppo del software. Principi base della programmazione strutturata: astrazione, formalità, "divide et impera", ordinamento gerarchico.

    Il metodo di progettazione top-down prevede la scomposizione sequenziale della funzione complessiva di elaborazione dei dati in semplici elementi funzionali ("top-down"). I mezzi per raggiungere gli obiettivi del livello precedente si trasformano negli obiettivi di quello inferiore.

    La codifica strutturale è un metodo per scrivere programmi che hanno una struttura specifica. Si basa sull'uso di un piccolo insieme di affermazioni strutturali, la cui correttezza è facile da analizzare e stabilire. In questo caso, alcuni operatori sono costituiti da altri nidificati in essi.

    Il fondamento della programmazione strutturata è il teorema di strutturazione, formulato dai matematici italiani C. Bohm e G. Iacopini nel 1966. Il teorema stabilisce che non importa quanto sia complesso il compito, lo schema dell'algoritmo per risolverlo (e, di conseguenza, il programma) può sempre essere rappresentato come una composizione di tre tipi di blocchi annidati: seguenti (inizio-fine - inizio-fine), diramazione (if-then-else - if-then-else), cicli con una precondizione (while - while ).

* E. Dijkstra ha dato la seguente definizione: “ La programmazione strutturata è una disciplina che il programmatore si impone.».

Programmazione strutturata - uno dei maggiori progressi nella tecnologia di programmazione. Sebbene quasi tutti abbiano l'idea più generale e piuttosto vaga di programmazione strutturata, non esiste una definizione chiara generalmente accettata. La programmazione strutturata mira a scrivere programmi di minima complessità, a far pensare chiaramente il programmatore, a rendere il programma più facile da capire.

Il testo del programma dovrebbe essere tale da poter essere letto "dall'alto verso il basso". L'uso illimitato delle istruzioni GO TO viola questa condizione, motivo per cui la programmazione strutturata viene spesso definita programmazione non GO TO.

Puoi fare esempi di programmi che non contengono GO TO , e sono disposti ordinatamente in una scala in base al livello di annidamento delle istruzioni, ma sono completamente incomprensibili e ci sono altri programmi che contengono GO TO e sono ancora comprensibili. Quindi la presenza o l'assenza di GO TO è un cattivo indicatore della qualità del programma (illustrazione in D. Knuth). Eppure: il più difficile da controllare e potenzialmente instabile è l'operatore di filiale incondizionato - VAI A .

La struttura del corpo del modulo ei costrutti di programmazione di base utilizzati devono essere potenzialmente resistenti a guasti hardware, distorsioni dei dati di origine ed errori di programma.

Qualsiasi programma può essere sintetizzato sulla base di strutture di base elementari di tre tipi:

1. Sequenza semplice. 2. Condizioni (alternative).

3. Ripetizione (cicli, iterazioni). Sono possibili uno dei due o entrambi i tipi:

Fai "fino a" Fai "non ancora"

4. Puoi aggiungere un quarto design: una scelta (interruttore).

I blocchi sono definiti in modo ricorsivo: i rettangoli rappresentano i blocchi di costruzione nidificati utilizzati al posto di un rettangolo.

Le costruzioni elementari elencate, ad esempio, nel linguaggio Pascal sono implementate come segue:

Operatore condizionale SE tronco d'albero. esp. POI operatore 1 ALTRO operatore2;

SE tronco d'albero. espressione POI operatore;

Ripetizione (cicli, iterazioni)

a) Fai "mentre" WHILE condizione di continuazione FARE operatore;

b) RIPETERE "non ancora". operatore FINO A condizione di cessazione;

c) Loop con iterazione FOR K:=B1 TO B2 DO operatore;

FOR K:=B2 FINO A B1 DO operatore;

Scelta (cambia) CASO condizione DI

N1, ... Nk : operatore 1;

Ni, ...Nm: operatore pag;

FINE ;

Nel linguaggio FoxBASE, questi costrutti sono implementati come:

Operatore condizionale SE tronco d'albero. espressione

operatori1

[ALTRO]

operatori2]

FINISCI SE

Ciclo FARE DURANTE espressione

operatori

FINE

Scelta (cambia) FARE IL CASO

CASO tronco d'albero. espressione 1

operatori

CASO tronco d'albero. espressione2

Operatori

CASO tronco d'albero. Espressione pag

Operatori

FINALE

Ogni struttura è caratterizzata da un unico punto di trasferimento del controllo alla struttura (single entry) e da un unico punto di uscita dalla struttura.

Queste costruzioni hanno un valore sistematizzante e disciplinante. La semplicità delle strutture iniziali della programmazione strutturata impedisce complessi collegamenti informativi e intimidatori trasferimenti di controllo.

Con un aumento della struttura dei moduli, la complessità dei programmi diminuisce, la loro visibilità aumenta, il che aiuta a ridurre il numero di errori. Tuttavia, per migliorare la qualità dei programmi, è necessario pagare con memoria e tempo aggiuntivi per la loro implementazione su un computer.

La struttura del programma dipende dal linguaggio di programmazione utilizzato. I moderni strumenti di sviluppo software sono i "migliori" linguaggi di programmazione strutturati. Dei linguaggi di programmazione comuni, Pascal, Basic, FoxBASE sono considerati i più adatti. La programmazione strutturata, ad esempio, in linguaggio assembly è quasi impossibile. Il fatto stesso di utilizzare il linguaggio assembly indica che il programma è scritto principalmente in termini di linguaggio macchina.

La programmazione strutturale si concentra sulla comunicazione con le persone, non con una macchina, e promuove la scrittura di programmi che siano una soluzione semplice e chiara a un problema.

È importante che un programmatore, anche quando inizia a programmare la logica, pensi in termini di costrutti strutturali di base.

La posizione sull'istruzione GO TO dovrebbe essere: evitare di utilizzare GO TO ove possibile, ma non a scapito della chiarezza del programma. Spesso ha senso utilizzare GO TO per uscire da un ciclo o da un modulo, per saltare a costrutti ON (ad esempio, nel linguaggio Basic) o per evitare un annidamento troppo profondo di fork, soprattutto perché il salto è successivo (situato sotto) istruzioni programmatiche e strutturali il programma continua ad essere facilmente leggibile dall'alto verso il basso. L'uso peggiore dell'istruzione GO TO è trasferire il controllo a un'istruzione superiore (precedente) nel testo del programma.

Inoltre, per facilitare la lettura del programma, il suo testo deve essere fisicamente diviso in parti, aggiungendo righe vuote tra sezioni, divisioni. Il testo del programma deve essere scritto con gli spostamenti corretti, in modo che le interruzioni nella sequenza di esecuzione siano facilmente rintracciabili. Le istruzioni eseguibili monouso di ciascun modulo devono stare su una pagina del dispositivo di stampa.

I primi programmi consistevano in diverse decine - centinaia di istruzioni macchina. Complessi software e sistemi informativi inclusi da diverse decine di migliaia a milioni di operatori in linguaggi di alto livello. Con l'aumentare del volume degli strumenti software, il processo di debugging, quelli. rilevamento e correzione degli errori. La pratica ha dimostrato che è quasi impossibile scrivere un programma più o meno grande senza errori. Inoltre, anche durante il funzionamento dei programmi finiti, vengono rilevati errori persi durante il debug. Gli errori rientrano in diverse categorie.

Il più semplice sono gli errori di sintassi. Sono associati all'ortografia errata dei costrutti linguistici e vengono rilevati immediatamente, nel momento in cui il compilatore tenta di tradurre il programma in linguaggio macchina.

Se tutti gli errori di sintassi e di collegamento vengono corretti, il programma inizia a funzionare (stage correre). Tuttavia, questa fase può essere interrotta da un'operazione non valida (ad esempio, divisione per zero), nel qual caso si parla di errore di runtime. (Errori di runtime). Oppure il programma ha contato fino alla fine, ma i risultati ottenuti non sono corretti. Ciò può essere causato da errori dell'algoritmo o errori nell'organizzazione delle comunicazioni tra moduli, errori di conversione del tipo di dati o semplici errori di battitura (ad esempio, lo zero è stato perso durante la scrittura del numero 100 e il programma ha utilizzato 10 nei calcoli).

Gli errori di runtime vengono rilevati risolvendo una serie di test case (esecuzione del programma), il cui risultato è noto in anticipo. Di norma, il tempo impiegato per trovare tali errori supera notevolmente il tempo impiegato per scrivere il programma stesso e correggere gli errori di sintassi. Lo sviluppo del concetto di programmazione è strettamente correlato al problema della riduzione degli sprechi durante la scrittura di un programma.

Sono in fase di sviluppo i fondamenti teorici della programmazione strutturata, la teoria della dimostrazione della correttezza di un programma e la programmazione basata sull'evidenza.

Il concetto di programmazione strutturata implica un approccio scientificamente fondato alla costruzione di un programma e alle possibilità di un linguaggio di programmazione, che ridurrà significativamente la quantità di possibili errori. Un significativo sviluppo del concetto è stato raggiunto nel linguaggio di programmazione strutturato Pasquale. L'essenza della programmazione strutturata è che i dati sono, prima di tutto, astrazioni di oggetti reali e sono preferibilmente formulati come strutture astratte che potrebbero non avere un'implementazione specifica in un linguaggio di programmazione. Nel processo di costruzione di un programma, la rappresentazione dei dati viene gradualmente raffinata in seguito all'affinamento dell'algoritmo.

Un linguaggio di programmazione strutturato dovrebbe fornire la possibilità di costruire i propri tipi di dati. Al livello più basso si trovano le strutture fondamentali predefinite nel linguaggio (ad esempio: tipi scalari, record, array e set). Da strutture fondamentali, come da molecole, si costruiscono strutture complicate. Le variabili della struttura fondamentale possono solo modificare il valore, conservando il tipo o l'insieme di valori validi e la dimensione che occupano. Le strutture complicate sono caratterizzate da un cambiamento non solo nel significato, ma anche nella forma stessa della rappresentazione, nella composizione delle strutture fondamentali in esse incluse. La gestione dinamica della memoria è implementata a livello di puntatore e i dati dinamici sono combinati in una struttura ad albero (alberi).

Inoltre, ci sono determinati requisiti per la tipizzazione dei dati, grazie ai quali è possibile determinare il tipo di qualsiasi espressione o variabile senza la necessità di calcoli, ad es. in fase di traduzione. In questo caso, è possibile evitare un gran numero di errori di runtime difficili da trovare rilevandoli nella fase di traduzione del programma.

Il concetto di programmazione strutturata implica non solo l'uso di linguaggi speciali e l'applicazione di un certo stile di programmazione. Prima di tutto, questa è la filosofia della programmazione, che influisce anche su un aspetto come la metodologia per insegnare ai programmatori.

Si noti che la programmazione è un'attività vasta e varia, che spesso richiede un lavoro mentale complesso. È sbagliato pensare che la programmazione possa ridursi all'utilizzo di ricette già pronte basate su una descrizione sistematica dei blocchi più semplici. Gli studenti devono sviluppare la capacità di pensare in modo creativo, e qui il ruolo dell'insegnante è estremamente importante, mostrando come fa questo e quello. La creatività non è soggetta a canoni, metodi e tecnologie. Come metodo di insegnamento viene adottata un'attenta selezione e considerazione di esempi caratteristici. Occorre considerare programmi complessi e lunghi, che spesso si incontrano nella pratica e che meglio si prestano a individuare quella sfuggente ma importante proprietà chiamata stile programmazione. L'analisi di programmi lunghi è un esercizio dell'arte di leggerli, che non è meno importante della capacità di scrivere programmi.

Controllare le domande e le attività

5.1. Assegna un nome e descrivi brevemente le parti del comando del programma.

5.2. La base per il programma di funzionamento dell'IOI è ____; dagli una definizione.

5.3. Cosa si intende per programmazione in codici?

5.4. Cosa sai del linguaggio assembly?

5.5. Quali linguaggi di programmazione sono chiamati indipendenti dalla macchina?

5.6. In che modo la "traduzione" di un programma scritto in un linguaggio algoritmico in un codice oggetto è comprensibile a un computer?

5.7. Cosa si intende per programmazione modulare e modulo separato?

5.8. Cosa sai della programmazione strutturata?

Programmazione strutturata- una metodologia di programmazione volta a creare programmi logicamente semplici e comprensibili. La programmazione strutturata si basa sul presupposto che la logica e la comprensibilità del programma facilitino lo sviluppo, la verifica della correttezza e la successiva manutenzione del programma, assicurandone altresì l'affidabilità.

I principi caratteristici della programmazione strutturata sono:

· programmazione dall'alto verso il basso un metodo di sviluppo dei programmi in cui la programmazione avviene secondo il metodo "top-down", dal generale al dettaglio;

· programmazione modulare, in cui attività secondarie relativamente indipendenti sono programmate come moduli di programma separati;

· l'uso di tre strutture di controllo nella programmazione (seguire, scegliere, ripetere). La struttura follow presuppone una sequenza naturale di esecuzione delle istruzioni. La struttura di scelta è data dallo schema “if-then-else” (l'istruzione if). L'operatore loop è associato alla struttura di ripetizione;

· Rifiuto di trasferimenti incondizionati di controllo e uso limitato di variabili globali.

La programmazione strutturata si basa su un teorema che è stato rigorosamente provato nella teoria della programmazione. La sua essenza è che un algoritmo per risolvere qualsiasi problema logico può essere composto solo dalle seguenti strutture. , ramificazione, ciclo. Sono chiamate strutture algoritmiche di base. In effetti, noi e prima in tutti gli esempi considerati di programmi abbiamo aderito ai principi della programmazione strutturata.

Di seguito è riportata una sequenza lineare di azioni (Fig. 2.6):

Riso. 2.6. seguente

Ogni blocco può contenere sia un comando semplice che una struttura complessa, ma deve avere un ingresso e un'uscita.

ramificazione alternativa algoritmica. Il controllo viene trasferito a uno dei due blocchi a seconda della verità o della falsità della condizione. Quindi c'è un'uscita per la continuazione generale (Fig. 2.7):

Riso. 2.7. ramificazione

Ciclo ripetizione di un certo gruppo di azioni per condizione. Ci sono due tipi di ciclo. Primo ciclo con precondizione (Fig. 2.8):

Riso. 2.8. Ciclo con precondizione

Mentre la condizione è vera, viene eseguita la serie che forma il corpo del ciclo.

Il secondo tipo di struttura ciclica ciclo con postcondizione (Fig. 2.9):

Riso. 2.9. Loop con postcondizione

Qui il corpo del ciclo precede la condizione del ciclo. Il corpo del ciclo ripete la sua esecuzione se la condizione è falsa. La ripetizione termina quando la condizione diventa vera.

Teoricamente, solo il primo tipo di ciclo è necessario e sufficiente. ciclo con precondizione. Qualsiasi algoritmo ciclico può essere costruito utilizzandolo. Questa è una versione più generale del loop rispetto al loop-to. Infatti, il corpo del ciclo until verrà eseguito almeno una volta, poiché la condizione viene verificata dopo il suo completamento. E per il ciclo continuo, tale opzione è possibile quando il corpo del ciclo non verrà eseguito nemmeno una volta. Pertanto, in qualsiasi linguaggio di programmazione, ci si potrebbe limitare solo al ciclo while. Tuttavia, in alcuni casi, l'uso del ciclo a è più conveniente, e quindi viene utilizzato.

La programmazione strutturata è talvolta indicata in letteratura come programmazione senza goto. In effetti, con questo approccio non c'è posto per una transizione incondizionata. L'uso ingiustificato dell'operatore goto nei programmi lo priva della sua struttura e, quindi, di tutte le proprietà positive ad esso associate: la trasparenza e l'affidabilità dell'algoritmo. Sebbene questo operatore sia presente in tutti i linguaggi di programmazione procedurale, tuttavia, seguendo un approccio strutturale, il suo utilizzo dovrebbe essere evitato.

Un algoritmo complesso è costituito da strutture di base interconnesse. Queste strutture possono essere collegate in due modi: coerente E nidificato. Questa situazione è simile a quella che osserviamo nell'ingegneria elettrica, dove qualsiasi circuito elettrico arbitrariamente complesso può essere scomposto in sezioni collegate in serie e in parallelo.

Le strutture algoritmiche annidate non sono analoghe ai conduttori collegati in parallelo. Qui, l'analogia con le bambole che nidificano poste l'una dentro l'altra è più adatta. Se il blocco che compone il corpo del ciclo è esso stesso una struttura ciclica, allora significa che ci sono dei cicli nidificati. A sua volta, l'anello interno può avere un altro anello al suo interno e così via. A questo proposito viene introdotto il concetto di profondità di annidamento dei loop. Allo stesso modo, i rami possono essere annidati l'uno nell'altro.

L'approccio strutturale richiede il rispetto dello standard nell'immagine dei diagrammi di flusso degli algoritmi. Devi disegnarli come è stato fatto in tutti gli esempi forniti. Ogni struttura di base deve avere un input e un output. Uno schema a blocchi non standard è poco leggibile, si perde la visibilità dell'algoritmo.

I linguaggi di programmazione Pascal e C sono chiamati linguaggi di programmazione strutturati. Dispongono di tutte le strutture di controllo necessarie per la costruzione strutturale del programma. La strutturazione dell'aspetto del testo del programma dà chiarezza a questa costruzione. La tecnica principale utilizzata per questo spostamenti di linea, che devono rispettare le seguenti regole:

I costrutti dello stesso livello di annidamento sono scritti allo stesso livello verticale (iniziano dalla stessa posizione nella riga);

La costruzione nidificata è scritta spostata lungo la linea di diverse posizioni a destra rispetto alla sua costruzione esterna.

Metodo strutturale di algoritmizzazione non è solo una forma di descrizione dell'algoritmo, ma è anche il modo di pensare di un programmatore . Quando si crea un algoritmo, ci si dovrebbe sforzare di comporlo da strutture standard. Usando un'analogia con l'edificio, possiamo dire che il metodo strutturale per costruire un algoritmo è simile all'assemblaggio di un edificio da sezioni standard, invece di piegare mattone per mattone.

Un'altra importante tecnica tecnologica della programmazione strutturata è la scomposizione del problema da risolvere in sottocompiti. parti del problema originario più semplici dal punto di vista della programmazione. Gli algoritmi per risolvere tali sottoproblemi sono chiamati algoritmi ausiliari. A questo proposito, ci sono due possibili modi nella costruzione dell'algoritmo:

"top down": prima viene costruito l'algoritmo principale, poi gli algoritmi ausiliari;

"dal basso verso l'alto": prima vengono compilati gli algoritmi ausiliari, quindi quello principale.

Il primo approccio è anche chiamato metodo di dettaglio sequenziale, il secondo metodo di assemblaggio.

Il metodo di assemblaggio prevede l'accumulo e l'utilizzo di librerie di algoritmi ausiliari implementati nei linguaggi di programmazione sotto forma di subroutine, procedure e funzioni. Con i dettagli sequenziali, viene prima costruito l'algoritmo principale, quindi vengono introdotte le chiamate agli algoritmi ausiliari del primo livello. Successivamente, vengono compilati algoritmi ausiliari di primo livello, in cui possono esserci chiamate ad algoritmi ausiliari di secondo livello, e così via. Gli algoritmi ausiliari del livello più basso sono costituiti solo da semplici comandi.

Il metodo dei dettagli successivi viene utilizzato in qualsiasi progettazione di oggetti complessi. Questa è la sequenza logica naturale del pensiero del progettista: graduale approfondimento nei dettagli. Nel nostro caso si parla anche di progettazione, ma non di dispositivi tecnici, bensì di algoritmi. È praticamente impossibile costruire un algoritmo piuttosto complicato in un altro modo.

Nel metodo del dettaglio sequenziale, il problema originale viene prima analizzato. Ha compiti secondari. Viene costruita una gerarchia di tali attività secondarie. Successivamente vengono compilati gli algoritmi (o programmi), partendo dall'algoritmo principale (main program), quindi algoritmi ausiliari (subroutine) con un successivo approfondimento di livello, fino ad arrivare ad algoritmi costituiti da semplici comandi.

Primo passo di dettaglio. Per prima cosa, delineiamo tutte le subroutine necessarie, indicando solo le loro intestazioni (specifiche). Al posto del corpo dei sottoprogrammi, scriviamo commenti esplicativi (questo tipo di sottoprogramma è chiamato "stub"). Scriviamo la parte principale del programma. E poi si tornerà alla programmazione dettagliata di procedure e funzioni. Nella prima fase della programmazione, invece del corpo della subroutine, ne descriviamo lo scopo sotto forma di commento.

L'utilizzo della programmazione strutturata consente di aumentare la velocità di scrittura dei programmi e facilitare il debugging del programma scritto. La programmazione strutturale è possibile anche nei linguaggi di programmazione assembler, dove non ci sono operatori strutturali simili agli operatori strutturali dei linguaggi di programmazione C, PASCAL, PL/M.

La programmazione per computer universali è iniziata con la programmazione in codici macchina, poi sono apparsi e hanno iniziato a svilupparsi linguaggi di alto livello, quindi Dijkstroy ha sviluppato i principi della programmazione strutturata, la programmazione a oggetti ha sostituito la programmazione strutturata e la programmazione visiva è attualmente in fase di sviluppo attivo.

La programmazione per i microcontrollori segue in gran parte lo stesso percorso. Il passaggio da uno stadio all'altro dipende dalle risorse interne disponibili dei microcontrollori. Alcuni anni fa, l'uso di linguaggi di alto livello era impossibile a causa della piccola quantità di memoria interna del programma. (Nei modelli economici di microcontrollori, questa situazione è ancora preservata.) Attualmente, con l'avvento dei microcontrollori e con una memoria interna di diverse decine di kilobyte, appare la possibilità di progettare oggetti.

Attualmente, ci sono due modi per scrivere programmi: bottom-up e top-down. Quando si scrive un programma dal basso verso l'alto, è impossibile avviare il debug del programma senza scrivere l'intero programma. Quando si scrive un programma dall'alto verso il basso, che è obbligatorio per la programmazione strutturata, in qualsiasi fase della scrittura di un programma, può essere tradotto ed eseguito, mentre è possibile tenere traccia di tutte le azioni algoritmiche del programma scritto in quel momento. Il processo di scrittura di un programma non è diverso dal processo di creazione di un algoritmo. Inoltre, queste fasi della creazione di un programma possono essere combinate. L'azione algoritmica eseguita viene visualizzata nel nome della subroutine. Per esempio:

L'idea di base alla base della programmazione strutturata è che ci sono solo quattro istruzioni strutturate. Usando questi operatori strutturali, puoi costruire un programma arbitrariamente complesso.

Viene chiamato il primo operatore di struttura catena lineare di operatori. Qualsiasi attività può essere suddivisa in diverse attività secondarie. L'esecuzione dei sottotask può essere affidata a un sottoprogramma, il cui nome può (e dovrebbe) riflettere il sottotask che questo sottoprogramma dovrebbe risolvere. Al momento della scrittura dell'algoritmo (e del programma) di primo livello, non siamo interessati a come verrà risolto questo problema, quindi invece di una vera subroutine, mettiamo