LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Un linguaggio algoritmico educativo è un mezzo per registrare algoritmi in una forma intermedia tra la registrazione di un algoritmo in un linguaggio naturale (umano) e una registrazione in un linguaggio di computer (linguaggio di programmazione).

I vantaggi del linguaggio algoritmico educativo includono la sua semplicità, nonché il fatto che l'algoritmo è scritto in russo utilizzando un certo numero limitato di parole, il cui significato e metodo di utilizzo sono rigorosamente definiti. Queste parole sono chiamate parole di servizio.

Per distinguere le parole di servizio dalle altre parole della lingua, vengono sottolineate durante la scrittura.

Un record di algoritmo in un linguaggio algoritmico educativo è costituito da un'intestazione e da un corpo dell'algoritmo. Il corpo dell'algoritmo è tra le parole chiave presto e con ed è una sequenza di istruzioni dell'algoritmo. Il titolo include il nome dell'algoritmo, riflettendo il suo contenuto, elenchi di dati di input (argomenti) e risultati.

L'attributo dell'intestazione dell'algoritmo è la parola chiave alg.

Quindi, l'algoritmo scritto nel linguaggio algoritmico educativo ha la seguente forma:

alg nome algoritmo

arg elenco dei dati di origine

tagliare elenco dei risultati

sequenza di comandi dell'algoritmo

Si consiglia di iniziare lo studio del linguaggio algoritmico della scuola con il comando di assegnazione, è uno dei comandi principali.

È scritto così:

<переменная> := <выражение>

Il segno ": \u003d" legge "assegnare".

Nel caso in cui il valore a cui è assegnato il valore sia compreso nella parte destra del comando, avviene quanto segue:

1) il valore dell'espressione scritta a destra del comando di assegnazione viene calcolato utilizzando i valori correnti di tutti i valori inclusi in questa espressione;

2) il nuovo valore di corrente calcolato viene assegnato alla variabile. In questo caso, il valore precedente della variabile viene distrutto.

Pertanto, il comando b: \u003d a + b significa che il valore della variabile a viene aggiunto al valore corrente precedente del valore b e il risultato ottenuto diventa il nuovo valore corrente del valore b.

Questo esempio illustra le tre proprietà principali dell'assegnazione:

1) finché a una variabile non viene assegnato un valore, rimane indefinita;

2) il valore assegnato ad una variabile viene memorizzato in essa fino alla successiva assegnazione di un nuovo valore a questa variabile;

3) il nuovo valore assegnato alla variabile sostituisce il suo valore precedente.

Ora familiarizziamo con le strutture di base, iniziamo con un'operazione come "segui". Formato da una sequenza di azioni che si susseguono:

azione 1

azione 2

. . . . . . . . .

azione n

Successivamente, esamineremo la struttura di ramificazione di base. Fornisce, a seconda del risultato del controllo della condizione (sì o no), la scelta di una delle modalità alternative di funzionamento dell'algoritmo. Ciascuno dei percorsi porta a un'uscita comune, quindi l'algoritmo continuerà a funzionare indipendentemente dal percorso intrapreso. La struttura ramificata si presenta in quattro gusti principali:



1. se-allora;

se una condizione

poi azioni

2. se-allora-altrimenti;

se una condizione

poi azione 1

altrimenti azione 2

scelta

acondizione 1: azioni 1

acondizione 2: azioni 2

. . . . . . . . . . . .

a condizione N: azioni N

{altrimentiazioni N + 1}

Infine, la struttura di base di un ciclo che utilizza il linguaggio algoritmico della scuola sarà simile a questa.

Algoritmo: un'istruzione accurata e comprensibile all'esecutore per eseguire una sequenza di azioni volte a risolvere il compito.

Il nome "algoritmo" deriva dalla forma latina del nome del matematico dell'Asia centrale al-Khwarizmi - Algorithmi. L'algoritmo è uno dei concetti di base dell'informatica e della matematica.

Un esecutore di algoritmo è un sistema astratto o reale (tecnico, biologico o biotecnologico) in grado di eseguire le azioni prescritte dall'algoritmo.

L'esecutore è caratterizzato da:

azioni elementari;

sistema di comando;

L'ambiente (o ambientazione) è "l'habitat" del performer. Ad esempio, per un robot esecutore di un libro di testo scolastico, mercoledì è un campo cellulare infinito. Anche le pareti e le celle ombreggiate fanno parte dell'ambiente. E la loro posizione e la posizione del Robot stesso determinano lo stato specifico dell'ambiente.

Ogni esecutore può eseguire comandi solo da un certo elenco strettamente specificato: il sistema di comando dell'esecutore. Per ogni comando devono essere specificate le condizioni di applicabilità (in quali stati dell'ambiente il comando può essere eseguito) e devono essere descritti i risultati dell'esecuzione del comando. Ad esempio, il comando "su" del Robot può essere eseguito se non c'è un muro sopra il Robot. Il suo risultato è lo spostamento del Robot di una cella in su.

Dopo aver chiamato il comando, l'esecutore esegue l'azione elementare corrispondente.

Gli errori dell'esecutore si verificano quando un comando viene richiamato con uno stato non valido dell'ambiente.

Di solito l'esecutore non sa nulla dello scopo dell'algoritmo. Segue tutti i comandi che riceve, senza chiedere le domande "perché" o "perché".

In informatica, un computer è un esecutore universale di algoritmi.

Le principali proprietà degli algoritmi sono le seguenti:

Comprensibilità per l'artista - ad es. l'esecutore dell'algoritmo deve sapere come eseguirlo.

Discrezione (discontinuità, separazione) - es. l'algoritmo dovrebbe rappresentare il processo di risoluzione del problema come esecuzione sequenziale di passaggi (stadi) semplici (o precedentemente definiti).

Definizione - ad es. ogni regola dell'algoritmo dovrebbe essere chiara, inequivocabile e non lasciare spazio all'arbitrarietà. A causa di questa proprietà, l'esecuzione dell'algoritmo è di natura meccanica e non richiede istruzioni o informazioni aggiuntive sul problema da risolvere.

Performance (o arto). Questa proprietà consiste nel fatto che l'algoritmo dovrebbe portare alla soluzione del problema in un numero finito di passaggi.

Personaggio di massa. Ciò significa che l'algoritmo per risolvere il problema è sviluppato in una forma generale, ad es. dovrebbe essere applicabile per una certa classe di problemi che differiscono solo nei dati iniziali. In questo caso, i dati iniziali possono essere selezionati da una certa area, chiamata area di applicabilità dell'algoritmo.

In pratica, le seguenti forme di presentazione degli algoritmi sono le più comuni:

verbale (record in linguaggio naturale);

grafica (immagini da simboli grafici);

pseudocodici (descrizioni semi-formalizzate di algoritmi in un linguaggio algoritmico condizionale, inclusi sia elementi del linguaggio di programmazione che frasi in linguaggio naturale, notazione matematica generalmente accettata, ecc.);

software (testi in linguaggi di programmazione).

Il modo verbale di scrivere algoritmi è una descrizione delle fasi sequenziali dell'elaborazione dei dati. L'algoritmo è impostato in forma libera in linguaggio naturale.

Per esempio. Scrivi un algoritmo per trovare il massimo comune divisore (MCD) di due numeri naturali.

L'algoritmo può essere il seguente:

impostare due numeri;

se i numeri sono uguali, prendi uno qualsiasi di loro come risposta e fermati, altrimenti continua l'algoritmo;

determinare il più grande dei numeri;

sostituire il più grande dei numeri con la differenza tra il più grande e il più piccolo dei numeri;

ripetere l'algoritmo dal passaggio 2.

L'algoritmo descritto è applicabile a qualsiasi numero naturale e dovrebbe portare alla soluzione del problema. Verificalo tu stesso utilizzando questo algoritmo per determinare il massimo comune divisore di 125 e 75.

Il metodo verbale non è diffuso per i seguenti motivi:

tali descrizioni non sono strettamente formalizzate;

soffre di verbosità dei record;

consentire ambiguità nell'interpretazione dei singoli regolamenti.

Il modo grafico di presentare gli algoritmi è più compatto e chiaro rispetto a quello verbale.

In una presentazione grafica, l'algoritmo è rappresentato come una sequenza di blocchi funzionali interconnessi, ciascuno dei quali corrisponde all'esecuzione di una o più azioni.

Questa rappresentazione grafica è chiamata diagramma di flusso o diagramma di flusso.

Nel diagramma di flusso, ogni tipo di azione (input dei dati iniziali, calcolo dei valori di espressione, condizioni di controllo, controllo della ripetizione delle azioni, completamento dell'elaborazione, ecc.) Corrisponde a una figura geometrica rappresentata come un simbolo di blocco. I simboli di blocco sono collegati da linee di transizione che determinano l'ordine delle azioni.

La tabella 1 elenca i simboli più comunemente usati.

Il blocco "processo" viene utilizzato per designare un'azione o una sequenza di azioni che modificano il valore, la forma di presentazione o il posizionamento dei dati. Per migliorare la chiarezza del diagramma, è possibile combinare diversi blocchi di elaborazione separati in un unico blocco. La rappresentazione delle singole operazioni è abbastanza gratuita.

Il blocco "decisione" viene utilizzato per indicare le transizioni del controllo condizionale. Ogni blocco "soluzione" deve indicare la domanda, la condizione o il confronto che definisce.

Il blocco "modifica" viene utilizzato per organizzare strutture cicliche. (La parola modifica significa modifica, trasformazione). Il parametro del ciclo viene scritto all'interno del blocco, per il quale vengono specificati il \u200b\u200bvalore iniziale, la condizione al contorno e il passo di modifica del valore del parametro per ogni ripetizione.

Il blocco "processo predefinito" viene utilizzato per specificare chiamate ad algoritmi ausiliari che esistono autonomamente sotto forma di alcuni moduli indipendenti e per chiamate a routine di libreria.

Lo pseudocodice è un sistema di notazione e regole progettato per registrare in modo coerente gli algoritmi.

Occupa un posto intermedio tra i linguaggi naturali e quelli formali.

Da un lato, è simile a un normale linguaggio naturale, quindi gli algoritmi possono essere scritti e letti come un normale testo. D'altra parte, alcune costruzioni formali e simboli matematici sono usati nello pseudocodice, il che avvicina la notazione dell'algoritmo alla notazione matematica generalmente accettata.

Lo pseudocodice non accetta le rigide regole sintattiche per la scrittura di comandi inerenti ai linguaggi formali, il che rende più facile scrivere un algoritmo in fase di progettazione e consente di utilizzare un insieme più ampio di comandi progettati per un esecutore astratto. Tuttavia, lo pseudocodice di solito contiene alcuni costrutti inerenti ai linguaggi formali, il che rende più facile passare dalla scrittura in pseudocodice alla scrittura di un algoritmo in un linguaggio formale. In particolare, nello pseudocodice, proprio come nei linguaggi formali, ci sono parole funzionali, il cui significato è determinato una volta per tutte. Sono evidenziati in grassetto nel testo stampato e sottolineati nel testo scritto a mano. Non esiste una definizione singola o formale di pseudocodice, pertanto sono possibili vari pseudocodici, che differiscono per l'insieme di parole di servizio e le costruzioni di base (di base).

Un esempio di pseudocodice è un linguaggio algoritmico scolastico in notazione russa (scuola AY), descritto nel libro di testo di A.G. Kushnirenko et al. "Fundamentals of Informatics and Computer Engineering", 1991. In quanto segue chiameremo questo linguaggio semplicemente "linguaggio algoritmico".

Parole di servizio di base

Vista generale dell'algoritmo:

nome algoritmo alg (argomenti e risultati)

vengono fornite le condizioni di applicabilità dell'algoritmo

hai bisogno dell'obiettivo dell'algoritmo

avviare la descrizione dei valori intermedi

| sequenza di comandi (corpo dell'algoritmo)

La parte dell'algoritmo dalla parola alg all'inizio della parola è chiamata intestazione e la parte tra l'inizio e la fine delle parole è chiamata corpo dell'algoritmo.

Nella frase al, dopo il nome dell'algoritmo, tra parentesi, sono indicate le caratteristiche (arg, res) e il tipo del valore (intero, cosa, sym, lit o log) di tutte le variabili di input (argomenti) e di output (risultati). Quando si descrivono gli array (tabelle), viene utilizzata la scheda della parola di servizio, integrata da coppie di limiti per ogni indice di elementi dell'array.

Esempi di frasi alg:

alg Volume e area di un cilindro (arg item R, H, res item V, S)

alg Roots QvUr (arg cosa a, b, c, rez cosa x1, x2, rez lit t)

alg Exclude elemento (arg intero N, arg rez cosa tab A)

alg diagonal (arg cel N, arg cel tab A, res lit Otvet)

I suggerimenti forniti e necessari sono facoltativi. Si consiglia di scrivere in esse dichiarazioni che descrivono lo stato dell'ambiente dell'esecutore dell'algoritmo, ad esempio:

sostituzione alg (arg lit Str1, Str2, arg res lit Text)

dato | le lunghezze delle sottostringhe Str1 e Str2 sono le stesse

bisogno | ovunque nella sottostringa della stringa di testo Str1 è sostituito da Str2

alg Numero di massimi (arg int N, arg real tab A, res intero K)

dato | N\u003e 0

bisogno | K - il numero di elementi massimi nella tabella A

alg Resistance (arg cosa R1, R2, arg int N, res cosa R)

dato | N\u003e 5, R1\u003e 0, R2\u003e 0

bisogno | R - resistenza del circuito

Qui nelle frasi è dato e necessario dopo il "|" i commenti vengono registrati. I commenti possono essere inseriti alla fine di qualsiasi riga. Non vengono elaborati dal traduttore, ma rendono l'algoritmo molto più facile da capire.

Gli algoritmi possono essere pensati come alcune strutture, costituite da elementi di base separati (cioè di base).

Naturalmente, con un tale approccio agli algoritmi, lo studio dei principi di base della loro progettazione dovrebbe iniziare con lo studio di questi elementi di base.

Per descriverli utilizzeremo il linguaggio degli schemi algoritmici e il linguaggio algoritmico della scuola.

La struttura logica di qualsiasi algoritmo può essere rappresentata da una combinazione di tre strutture di base:

seguire,

ramificazione,

Le strutture di base sono caratterizzate dalla presenza di un ingresso e di un'uscita.

Parte dell'algoritmo dalla parola alg alla parola presto chiamato il titolo e la parte tra le parole presto e con - il corpo dell'algoritmo.

In una frase alg dopo il nome dell'algoritmo, tra parentesi, sono indicate le caratteristiche (arg, res) e il tipo di valori (intero, cosa, sim, lit, log) per tutte le variabili di input (argomenti) e di output (risultati).

Quando si descrivono gli array (tabelle), viene utilizzata una parola speciale tab, integrato da coppie di limiti per ogni indice di elementi dell'array.

Esempi di frasi alg:

alg Volume e area di un cilindro (arg item R, H, res item V, S)

alg Roots QvUr (arg cosa a, b, c, rez cosa x1, x2, rez lit t)

alg Exclude elemento (arg intero N, arg rez cosa tab A)

alg diagonal (arg cel N, arg cel tab A, res lit Otvet)

Frasi con parole dato e bisogno opzionale. Si consiglia di scrivere in esse dichiarazioni che descrivono lo stato dell'ambiente dell'esecutore dell'algoritmo, ad esempio:

Sostituzione Alg (arg lit Str1, Str2, arg rez lit Text) data | le lunghezze delle sottostringhe Str1 e Str2 sono le stesse devono | ovunque nella sottostringa della stringa di testo Str1 è sostituito da Str2

Alg Numero di massimi (intero arg N, tab materiale arg A, intero res K) dato | N\u003e 0 deve | K - il numero di elementi massimi nella tabella A

Resistenza Alg (arg cosa R1, R2, arg int N, res cosa R) data | N\u003e 5, R1\u003e 0, R2\u003e 0 deve | R - resistenza del circuito

Qui nelle frasi dato e bisogno dopo "|" i commenti vengono registrati. I commenti possono essere inseriti alla fine di qualsiasi riga. Non vengono elaborati dal traduttore del computer, ma facilitano notevolmente la comprensione dell'algoritmo.

Comandi del linguaggio di programmazione della scuola AYa

Operatore di assegnazione... Serve per valutare le espressioni e assegnare i loro valori alle variabili. Vista generale dell'operatore: A: \u003d B, dove il segno ": \u003d" indica un'operazione di assegnazione, ad es. il comando per sostituire il valore precedente della variabile A sul lato sinistro con il valore calcolato dell'espressione B sul lato destro.


Per esempio, a: \u003d (b + c) * sin (Pi / 4);

io: \u003d io + 1 .

Per ingresso e uscita i dati utilizzano i comandi

· ingresso nomi di variabili

· produzione nomi di variabili, espressioni, testi.

Per ramificazione l'algoritmo utilizza i comandi se una e scelta.

Organizzare cicli - squadre per e fino adescritto sotto.

Un esempio di scrittura di un algoritmo nella lingua della scuola AYa.

Alg Somma dei quadrati (arg int n, tagliato intatto S) dato | n\u003e 0 deve | S \u003d 1 * 1 + 2 * 2 + 3 * 3 + ... + n * ninit intero io ingresso n; S : =0 ntsper i da 1 an S : \u003d S + io * i kts output "S \u003d", Scon

LINGUA ALGORITMICA - un sistema artificiale di mezzi linguistici con capacità espressive sufficienti a consentirgli di specificare qualsiasi prescrizione deterministica generalmente intesa appartenente a una classe predeterminata, la cui attuazione porta da dati iniziali variabili entro certi limiti al risultato desiderato. Questo tipo di prescrizione si chiama algoritmi , da cui il termine "linguaggio algoritmico" stesso. È stato introdotto nell'uso sistematico nel 1958 da G. Bottenbruch. Storicamente, il concetto di linguaggio algoritmico si è formato negli anni '50. 20 ° secolo nel processo di formazione della programmazione informatica come disciplina scientifica indipendente. Tuttavia, le origini teoriche di questo concetto possono essere fatte risalire alle opere degli anni '30. S.K.Kleeney, E.L. Post, A.M. Turing e A. Church sul chiarimento del concetto matematico generale dell'algoritmo. Attualmente, la teoria dei linguaggi algoritmici, così come i problemi associati al loro sviluppo e utilizzo, è uno dei rami più importanti dell'informatica.

Sotto l'aspetto logico-linguistico ed epistemologico, i linguaggi algoritmici sono uno dei modelli dell'imperativo (stato d'animo imperativo), e quindi agiscono, da un lato, come mezzo di fissaggio della conoscenza operativa, e dall'altro, come strumento di comunicazione macchina, uomo-macchina o anche solo umana ... In un breve periodo di tempo, i linguaggi algoritmici si sono trasformati in un nuovo mezzo cognitivo, organicamente incluso nell'attività umana scientifica e pratica. Solitamente sono soggetti al requisito di "universalità", che consiste nel fatto che dovrebbe essere possibile simulare con il loro aiuto eventuali algoritmi tra quelli che forniscono un raffinamento del concetto generale di algoritmo (ad esempio, macchine di Turing). L'assoluta precisione della sintassi di un linguaggio algoritmico non è necessaria in tutti i casi. È obbligatorio in considerazioni sostanziali. Ma in determinate situazioni (ad esempio, quando testi scritti in un linguaggio algoritmico iniziano a fungere da mezzo di comunicazione con un computer), questo linguaggio algoritmico dovrebbe essere progettato sotto forma di un appropriato linguaggio formalizzato con sintassi ben definita e ben definita semantica le sue categorie grammaticali. Il posto centrale in tali linguaggi algoritmici è occupato da testi chiamati programmi (infatti, sono loro che esprimono il concetto di algoritmo). Il concetto di programma è formulato in termini puramente strutturali della sintassi di questo linguaggio, senza alcun riferimento a categorie semantiche. La descrizione della procedura di esecuzione del programma è della stessa natura. Pertanto, nel ruolo di esecutore di algoritmi scritti in linguaggi algoritmici formalizzati, non solo una persona può agire, ma anche un dispositivo automatico dotato di capacità adeguate, ad esempio un computer. Linguaggi algoritmici "teorici" (come il linguaggio delle macchine di Turing o normali algoritmi di Markov) sono alla base della teoria generale degli algoritmi.

Linguaggi algoritmici "pratici" - i cosiddetti. i linguaggi di programmazione per computer (attualmente ce ne sono più di un migliaio) vengono utilizzati nella pratica della risoluzione automatica di problemi di natura molto varia. Nella fase iniziale della programmazione, sono stati utilizzati linguaggi algoritmici "machine-oriented" (i cosiddetti linguaggi di "basso livello"), che hanno tenuto conto della struttura o anche delle caratteristiche di computer specifici (set di istruzioni, caratteristiche e struttura della memoria, ecc.). Poi sono stati sostituiti da linguaggi algoritmici "orientati ai problemi" (linguaggi "di alto livello"), che hanno liberato l'utente dalla necessità di concentrarsi su un certo tipo di macchina e quindi ha dato ai suoi sforzi un orientamento matematico molto maggiore. Ulteriori sviluppi dell'idea di un linguaggio algoritmico sono stati i linguaggi di programmazione di natura più generale, non necessariamente algoritmica. Come i linguaggi algoritmici, tali linguaggi sono finalizzati in ultima analisi anche all'ottenimento di programmi macchina, ma in molti casi i loro testi consentono una certa libertà di esecuzione e, di regola, forniscono solo materiale per la sintesi degli algoritmi ricercati, e non gli algoritmi stessi. La penetrazione sempre più rapida dei computer nella sfera scientifica, culturale e sociale porta ad un aumento significativo del ruolo dei linguaggi algoritmici nella vita della società, e questo si esprime, in particolare, nel fatto che algoritmi e programmi che li implementano (cioè, in ultima analisi, testi in alcuni linguaggi algoritmici) stanno acquisendo sempre più il carattere di risorse reali del potenziale economico, scientifico e culturale della società, che a sua volta dà luogo a un numero significativo di gravi problemi metodologici ed epistemologici. Inoltre, l'uso in continua espansione (fino a tutti i giorni) dei linguaggi algoritmici porta alla creazione di uno stile di pensiero speciale, e anche il rapporto tra il pensiero di questo tipo e quello matematico tradizionale è un problema metodologico importante e poco sviluppato.

Letteratura:

1. Knut D.L'arte della programmazione per computer, volumi 1-3. M., 1976;

2. Ershov A.P.Introduzione alla programmazione teorica: conversazioni sul metodo. M., 1977;

3. Dijkstra E.Disciplina della programmazione. M '1978.

Un computer può eseguire un programma solo se le istruzioni in esso contenute sono rappresentate in codice macchina binario, ad es. espresso in una lingua il cui alfabeto è composto da uno logico e da zero. Per i primi computer, i programmi venivano compilati direttamente in codici macchina, che richiedevano elevate qualifiche di programmatori e alti costi di manodopera, quindi, già negli anni '40, iniziò lo sviluppo dei linguaggi di programmazione, che nel loro vocabolario sarebbero stati il \u200b\u200bpiù vicino possibile al linguaggio naturale dell'uomo. Tali linguaggi di programmazione sono chiamati algoritmico.

Un passo intermedio verso lo sviluppo di linguaggi algoritmici è stato il linguaggio Assemblatore... In Assembler, le istruzioni non sono rappresentate da numeri binari, ma come combinazioni di caratteri (codici mnemonici), con cui è possibile riprodurre il significato dell'istruzione, il che elimina in modo significativo le difficoltà e gli svantaggi della programmazione in linguaggio macchina. Tuttavia, Assembler presenta anche degli svantaggi: è un linguaggio orientato alla macchina e viene creato un linguaggio assembly separato per ciascun computer. La programmazione in Assembler richiede che un programmatore abbia una buona conoscenza dell'architettura (dispositivo) di un computer ed è associata a costi di manodopera significativi, allo stesso tempo, è con l'aiuto di Assembler che è possibile utilizzare al meglio le risorse del computer in un programma (memoria, velocità), pertanto Assembler è ancora ampiamente distribuito tra i professionisti programmatori.

Il primo linguaggio algoritmico era Fortran, creato nel 1957. da specialisti IBM sotto la direzione di John Backus. Ora ci sono molti linguaggi algoritmici: Pascal, C, Algol, PL1, Basic, Lisp, Prolog e molti altri.

I linguaggi algoritmici e gli assemblatori sono linguaggi di codifica dei caratteri, ad es. a linguaggi che non operano con codici macchina, ma con notazioni simboliche convenzionali, pertanto i programmi scritti in questi linguaggi non possono essere eseguiti direttamente su un computer. Affinché un programma del genere funzioni, il suo testo deve essere convertito in codici macchina. Per questo, ci sono programmi di traduzione speciali (traduttori). Esistono 2 tipi di traduttori: compilatore e interprete. Compilatore trasmette l'intero programma in una sola volta e solo dopo la sua esecuzione è possibile. Interprete - è un traduttore più semplice, traduce sequenzialmente le istruzioni del programma e lo esegue anche in parti.

21) La struttura del programma in C / C ++.

Un programma C ++ è costituito da funzioni , descrizioni e direttive del preprocessore ... Una delle funzioni deve avere un nome principale ... L'esecuzione del programma inizia con la prima istruzione di questa funzione. La definizione di funzione più semplice ha il seguente formato:


Di norma, una funzione viene utilizzata per calcolare un valore, quindi il suo tipo è indicato prima del nome della funzione. Di seguito sono riportate le informazioni più essenziali sulle funzioni:

  • se la funzione non deve restituire un valore, viene specificato il tipo void:
  • il corpo della funzione è un blocco ed è quindi racchiuso tra parentesi graffe;
  • le funzioni non possono essere annidate;
  • ogni istruzione termina con un punto e virgola (ad eccezione delle istruzioni composte).

Un esempio della struttura di un programma contenente le funzioni main, fl e f2:

Il programma può essere composto da più file moduli (file sorgenti).

Alcune note sull'I / O in C ++

C ++ non ha I / O integrato: viene eseguito utilizzando le funzioni, i tipi e gli oggetti contenuti nelle librerie standard. Vengono utilizzati due modi: funzioni ereditate dal linguaggio C e oggetti C ++.

Funzionalità di I / O di base in stile C:

int scanf (const char * format, ...) // input
int printf (const char * format, ...) // output

Eseguono input e output formattati di un numero arbitrario di valori in base alla stringa di formato. La stringa di formato contiene caratteri che vengono copiati nello stream (sullo schermo) in output o richiesti dallo stream (dalla tastiera) in input e le specifiche di conversione che iniziano con un segno% che vengono sostituite con valori specifici in input e output.

Un programma di esempio che utilizza funzioni di I / O in stile C:

#includere
int main () (
int i;
printf ("Immettere un numero intero \\ n");
scanf ("% d", & i);
printf ("Hai inserito il numero% d, grazie!", i);
return 0;
}

La prima riga di questo programma è una direttiva del preprocessore, in base alla quale viene inserito un file di intestazione nel testo del programma contenente una descrizione delle funzioni di input / output utilizzate nel programma (in questo caso, le parentesi angolari sono un elemento del linguaggio). Tutte le direttive del preprocessore iniziano con un segno #.

La terza riga è una descrizione di una variabile intera denominata i.

La funzione printf sulla quarta riga stampa il prompt "Immettere un numero intero" e continua su una nuova riga dopo la sequenza di escape \\ n. La funzione scanf inserisce un numero intero immesso dalla tastiera nella variabile i (il segno & indica l'operazione per ottenere un indirizzo) e l'operatore successivo visualizza la stringa specificata sullo schermo, sostituendo la specifica di conversione
sul valore di questo numero.

Ed ecco come appare lo stesso programma usando la libreria di classi C ++:

#includere
int main () (
int i;
cout<< "Введите целое число\\ n"; cin \u003e\u003e i;
cout<< "Вы ввели число " << i << ", спасибо!";
return 0;
}

Il file di intestazione contiene una descrizione di un insieme di classi per la gestione dell'I / O. Definisce gli oggetti stream standard cin per l'input da tastiera e cout per l'output sullo schermo, nonché le operazioni di flusso.< < и чтения из потока >>.

22) L'alfabeto e gli identificatori nel linguaggio C / C ++.

ALFABETO
lettere latine maiuscole e minuscole e trattino basso;
Numeri arabi da 0 a 9;
caratteri di spazio bianco: spazio, tabulazioni, caratteri di nuova riga.
personaggi speciali:

I lessemi linguistici sono formati da caratteri alfabetici:
identificatori;
parole chiave (riservate);
segni di operazione;
costanti;
delimitatori (parentesi, punto, virgola, spazi).

IDENTIFICATORI
L'identificatore può utilizzare lettere latine, numeri e trattini bassi;
Le lettere maiuscole e minuscole sono diverse;
Il primo carattere di un identificatore può essere una lettera o un trattino basso, ma non un numero;
Gli spazi all'interno dei nomi non sono consentiti;
La lunghezza di un identificatore non è limitata dallo standard, ma alcuni compilatori e linker lo impongono;
L'identificatore non deve essere lo stesso delle parole chiave;
Non è consigliabile iniziare gli identificatori con un carattere di sottolineatura (possono coincidere con i nomi delle funzioni o delle variabili di sistema);
Sugli identificatori utilizzati per definire variabili esterne;
Esistono limitazioni del linker (l'utilizzo di linker diversi o versioni del linker impone requisiti diversi sui nomi delle variabili esterne).

Parole chiave C ++

23) Tipi di dati interi in C / C ++.

Il tipo di dati intero è progettato per rappresentare numeri interi ordinari nella memoria del computer. Il tipo intero principale e più comune è il tipo int... Le sue varietà sono usate molto meno spesso: corto (numero intero breve) e lungo (intero lungo). I tipi interi includono anche il tipo char (carattere). Inoltre, se necessario, puoi utilizzare il tipo lungo lungo (long-long!), che, sebbene non definito dallo standard, è supportato da molti compilatori C ++. Per impostazione predefinita, tutti i tipi interi sono iconico, cioè il bit più significativo in tali numeri determina il segno del numero: 0 è un numero positivo, 1 è un numero negativo. Oltre ai numeri con segno in C ++, puoi usare non firmato... In questo caso, tutte le cifre sono coinvolte nella formazione di un numero intero. Quando si descrivono variabili intere senza segno, la parola viene aggiunta non firmato (non firmato).

Tabella riepilogativa dei tipi di dati interi con segno:

Tipo di dati Dimensioni, byte Gamma di valori
char -128 ... 127
corto -32768 ... 32767
int -2147483648 ... 2147483647
lungo -2147483648 ... 2147483647
lungo lungo -9223372036854775808 ... 9223372036854775807

Tabella riepilogativa dei tipi di dati interi senza segno:

Tipo di dati Dimensioni, byte Gamma di valori
carattere non firmato 0 ... 255
corto non firmato 0 ... 65535
unsigned int (puoi semplicemente unsigned) 0 ... 4294967295
non firmato a lungo 0 ... 4294967295
non firmato lungo lungo 0 ... 18446744073709551615

Non vale la pena ricordare i valori limite, soprattutto per interi da 4 o 8 byte, è sufficiente sapere almeno quale ordine possono essere questi valori, ad esempio, tipo int - circa 2 · 10 9.

In pratica, si consiglia di utilizzare ovunque il tipo intero di base, ad es. int... Il punto è che i dati del tipo intero di base vengono quasi sempre elaborati più velocemente dei dati di altri tipi interi. Tipi brevi ( char, corto) sono adatti per memorizzare matrici di numeri di grandi dimensioni per risparmiare memoria, a condizione che i valori degli elementi non superino il limite per questi tipi. I tipi lunghi sono necessari in una situazione in cui non c'è abbastanza tipo int.

24) Tipi di dati reali nel linguaggio C / C ++.

Una caratteristica dei numeri reali (reali) è che sono quasi sempre memorizzati approssimativamente nella memoria del computer e quando si eseguono operazioni aritmetiche su tali dati, si accumula un errore di calcolo.

Esistono tre tipi di dati reali: galleggiante, doppio e doppio lungo... Viene considerato il tipo principale doppio... Quindi, tutte le funzioni matematiche di default funzionano con il tipo doppio... La tabella seguente mostra le principali caratteristiche dei tipi reali:

Un tipo doppio lungo attualmente è generalmente uguale al tipo doppio e di solito non viene utilizzato nella pratica. Quando si utilizzano compilatori a 16 bit meno recenti, dati come doppio lungo hanno una dimensione di 10 byte e sono precisi fino a 19 cifre decimali.

Si consiglia di utilizzare solo il tipo ovunque doppio... È sempre più veloce da lavorare, ci sono meno possibilità di una notevole perdita di precisione con un numero elevato di calcoli. Un tipo galleggiante può essere utile solo per la memorizzazione di array di grandi dimensioni, purché questo tipo sia sufficiente per risolvere il problema.

25) Tipo di dati carattere in C / C ++.

Non esiste alcun tipo di dati nello standard C ++ che possa essere considerato veramente simbolico. Per rappresentare informazioni simboliche, ci sono due tipi di dati adatti a questo scopo, questi sono char e wchar_t, sebbene entrambi questi tipi siano intrinsecamente tipi interi. Ad esempio, puoi prendere il carattere "A" e dividerlo per il numero 2. A proposito, cosa succede? Suggerimento: carattere spaziale. Per i tipi di carattere "normali", come Pascal o C #, le operazioni aritmetiche sui caratteri sono proibite.

Un tipo char utilizzato per rappresentare i caratteri secondo il sistema di codifica ASCII (American Standard Code for Information Interchange). Questo è un codice a sette bit, è sufficiente codificare 128 caratteri diversi con codici da 0 a 127. I caratteri con codici da 128 a 255 sono usati per codificare font nazionali, caratteri pseudo-grafici, ecc.

Un tipo wchar_t è progettato per funzionare con un set di caratteri per i quali 1 byte non è sufficiente, ad esempio Unicode. Tipo di dimensione wchar_t di solito 2 byte. Se devi usare costanti stringa come wchar_t, quindi vengono scritti con il prefisso Les. L "Parola".

26) L'operatore di assegnazione e l'operatore vuoto in C / C ++

Operatore di assegnazione è l'operatore più comunemente usato. Il suo scopo è assegnare un nuovo valore a una variabile. Esistono tre forme di questo operatore in C ++.

1)Operatore di assegnazione semplice scritto così:

variabile \u003d espressione;

Questo operatore funziona come segue: in primo luogo, viene valutata l'espressione scritta a destra del simbolo dell'operazione = (uguale), il risultato viene assegnato alla variabile a sinistra del segno = ... Il tipo di risultato deve essere uguale al tipo della variabile scritta a sinistra, oppure essere riducibile ad essa.

A sinistra del segno = può esserci solo una variabile, a destra puoi scrivere sia una costante che una variabile e, in generale, un'espressione di qualsiasi complessità.

Operatori di esempio

y \u003d x + 3 * r;

s \u003d sin (x);

2)Assegnazione multipla - in tale operatore, in sequenza da destra a sinistra, a più variabili viene assegnato lo stesso valore, ad esempio:

a \u003d b \u003d c \u003d 1;

Quindi puoi immediatamente determinare, ad esempio, che in un triangolo equilatero tutti i lati sono uguali allo stesso numero 1. L'operatore sopra è equivalente all'esecuzione sequenziale di tre operatori:

Naturalmente, è più facile per noi scrivere un operatore, non tre. Il programma è più breve, il testo sembra più naturale e questa struttura funziona un po 'più velocemente.

3)Assegnazione durante l'esecuzione di un'operazione in forma generale è scritto come segue:

variabile op_sign \u003d espressione;

ed è equivalente alla scrittura

variabile \u003d espressione variabile op_sign;

Ad esempio, l'operatore:

s + \u003d 5; // 1a opzione

fa lo stesso dell'operatore

s \u003d s + 5; // Seconda opzione

vale a dire: prendi il vecchio valore dalla variabile s, aggiungi ad esso il numero 5 e riscrivi il valore risultante nella variabile s.

Come puoi vedere, il record della 1a variante è più corto del record della 2a variante e viene eseguito più velocemente, poiché nella 1a variante l'indirizzo della variabile s viene calcolato 1 volta e nella 2a variante - due volte.

Operatore vuoto

Una dichiarazione vuota è una dichiarazione che non fa nulla. Perché hai bisogno di un operatore "inutile"?

Un operatore vuoto viene utilizzato nei casi in cui, secondo la sintassi del linguaggio, è necessario scrivere un operatore, ma secondo la logica del programma, non faremo nulla. Quindi, un'istruzione vuota può essere richiesta in un'istruzione di ramificazione quando non è necessario fare nulla su un ramo, così come per definire un'etichetta per un salto nel testo del programma e talvolta per un corpo di ciclo vuoto.

Un operatore vuoto è un singolo carattere ; (punto e virgola), ad esempio:

c \u003d a + b; ;

Ecco il primo personaggio ; (punto e virgola) completa l'istruzione di assegnazione e il secondo carattere ci fornisce solo un'istruzione vuota. In questa situazione, l'operatore vuoto non è affatto necessario (ma non è nemmeno un errore di sintassi!), Viene fornito solo per chiarimenti. Ulteriori esempi "ragionevoli" di utilizzo dell'operatore vuoto verranno forniti più avanti negli argomenti correlati.

27) Operazioni aritmetiche in C / C ++.

Queste sono le operazioni più comunemente utilizzate. Il loro significato è vicino a quello che si conosce da un corso di matematica. Quindi, li elenchiamo:

L'addizione e la sottrazione hanno una priorità inferiore rispetto a moltiplicazione, divisione e resto. Per modificare l'ordine di calcolo, utilizzare le parentesi, ad esempio, per moltiplicare per 2 la somma di due numeri UN e B tu puoi scrivere:

Ulteriore. Come puoi vedere dai risultati ottenuti, in C ++ un carattere / significa due diverse operazioni. Se uno o entrambi gli operandi sono reali, viene eseguita la divisione ordinaria, se entrambi gli operandi sono numeri interi, viene eseguita la divisione intera e il risultato sarà di tipo intero. L'utilizzo di questa operazione richiede un'attenzione particolare, ad esempio, se si programma il calcolo di un'espressione matematica

letteralmente, ad es. Così:

1/3 * peccato (2 * X)

quindi il risultato indipendentemente dal valore X sarà sempre zero, poiché l'espressione 1/3 significa intera divisione. Per risolvere il problema, è sufficiente rendere reale uno degli operandi

1.0 / 3 * sin (2 * X)

L'operazione di calcolo del resto ( % ) è applicabile solo per operandi interi.

Cambio di segno... Operazione unaria " - "Significa un cambio di segno. Come puoi vedere dalla tabella generale di tutte le operazioni, ha una priorità molto alta, superiore, ad esempio, all'operazione di moltiplicazione. Pertanto, nell'espressione

in primo luogo, il segno è cambiato per UNe poi moltiplicazione -UN sul B.

Per l'accoppiamento, c'è anche un'operazione più unario, cioè sa scrivere

Per quali scopi viene utilizzato? È difficile da dire. Ma esiste una tale possibilità.

Più interessanti e, soprattutto, molto comuni sono le operazioni di incremento automatico e decremento automatico.

LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam