Total Hack Cheat
Benvenuto/a su Total hack Cheat....
non aspettate altro tempo Registratevi!!

Parte 1 guida linguaggio C

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso

Parte 1 guida linguaggio C

Messaggio Da RaYoZ il Gio Mag 20, 2010 12:12 pm

Questi accenni di analisi e programmazione strutturata utilizzano come sintassi descrittiva quella definita come notazione algebrica o notazione A.
La notazione A non dispone di forme grammaticali rigide per cui all'interno del testo verranno utilizzati vocaboli simili ma non sempre uguali allo scopo di illustrare i vari passi degli algoritmi qui descritti.
In altre parole la notazione algebrica e' l' analisi eseguita mediante il linguaggio naturale delle problematiche legate agli aspetti dellaprogrammazione che dobbiamo compiere. Una traduzione di questi in un qualsiasi linguaggio di tipo strutturato risultera' molto semplice.
Bisogna tenere a mente che un programma non viene fatto sul computer bensi' prima va studiato e analizzato sulla carta. Non accennare alla notazione A o a qualsiasi metodo di analisi potrebbe portare a pericolose interpretazioni delle strutture di un algoritmo, poi difficilmente correggibili.
Una chiarezza nella stesura dell'algoritmo in notazione A permettera' una facile codifica di questo in qualsiasi linguaggio sia questo C, Pascal o PL1.
La trasformazione dei concetti trattati da notazione algebrica a linguaggio C, in questo capitolo, ha il solo scopo di abituare alla vista di certe forme.
L'apprendimento della sintassi vera e propria non ha molta importanza in questa fase in quanto verra' ripetuta e approfondita nelle sezioni riguardanti il linguaggio C vero e proprio.



Metodo di analisi informatico

Dato un sistema reale munito di una qualsiasi struttura, tutto cio' che permette di descriverlo e' consinderato un informazione. Un' informazione puo' essere di tipo quantitativo o di tipo qualitativo. Il metodo di analisi diretto consiste nell'elaborare direttamente l'insieme.
Ad esempio volendo sapere il numero di persone con i baffi in un certo gruppo dovremmo contare, supponendo questi immobili, le persone che corrispondono a questo requisito.

Il metodo indiretto si basa sull'analisi delle informazioni che si possiedono su un determinato sistema. Nel caso precedente avremmo dovuto attribuire un dato alle persone con i baffi e poi contare quante volte compare
quest'informazione.
In campo informatico possiamo affermare che ad ogni informazione
del sistema reale corrisponde un informazione codificata sul sistema di elaborazione.



Lo studio di un sistema reale su di un calcolatore pretende le seguenti azioni.

- preparazione d'un insieme di dati, informazioni elementari, descriventi il sistema.

- esecuzione dell'elaborazione sul calcolatore

- interpretazione dei dati di risultato rispetto al sistema reale





Tipologia dei dati

La diversita' della natura dei dati elaborati dal computer rende necessaria una suddivisione di questi in insiemi sui quali e' possibile eseguire delle operazioni.
Parleremo per ora solo dei dati semplici e non di quelli strutturati, scomponibili in piu' componenti.
Un tipo non e' altro che un insieme di valori e di operazioni definite su di questo. Una costante e' un valore preso nell'insieme dei valori del tipo.
Una variabile e' costituita da un identificatore, da un tipo e da un valore.
L'identificatore permette di designare la variabile nell'ambito del programma, il tipo e' fisso e il valore puo' essere mutato durante l'esecuzione.
Quando l'insieme di tipo e' un insieme ordinato di valori si dice che si tratta di una variabile scalare.
E' valida la seguente notazione :

Tipo T: (C1, C2, C3, .., Cn)

Dove T e' l'identificatore di tipo e C1, .., Cn sono costanti.
Un esempio:
Tipo DAY: (Lunedi, Martedi, .., Domenica)

In un algoritmo le variabili utilizzate sono di tipo diverso ed e' necessario specificare il tipo di queste.

Si scrivera' :

var VAR1, VAR2, ...., VARn :T

dove VAR1 ecc. sono gli identificatori delle variabili e T e' il tipo che deve essere precedentemente dichiarato.

Molti linguaggi non strutturati come il Basic permettono la dichiarazione automatica al momento dell'assegnazione del valore al suo identificatore anche se l'abitudine a dichiarare il tipo di ogni variabile porta ad una migliore conoscenza sulla natura dei dati trattati.



Un esempio in C di una dichiarazione di variabili e' la seguente:

char a,b; /* In C */

Ai fini dell'analisi strutturata per la codifica delle informazioni possedute utilizzeremo la notazione Algebrica di cui vedremo le caratteristiche.
Vediamo ora i tipi standard in notazione A.



Tipo BOOLEANO

Una dichiarazione di questo tipo designa l'insieme dei valori logici e cioe' vero e falso.
In linguaggio C, al contrario del Pascal che possiede i tipi boolean specifici, viene considerata vera qualsiasi variabile che abbia valore diverso da 0.
Mediante la dichiarazione al preprocessore, di cui parleremo piu'
avanti, possono, per comodita', essere create

#define TRUE 1
#define FALSE 0

e successivamente essere eseguite delle assegnazioni del tipo

int c;
c = FALSE;

Gli operatori di questo tipo sono i seguenti :


Notazione A Descrizione Linguaggio C

O OR logico inclusivo ||
E AND logico &&
NON NOT negazione logica !


Possono essere applicati gli operatori relazionali per creare valori di vero o di falso.
Ad esempio :

int a, b, c; /* dichiara a, b, c interi */
a=5; b=6; /* assegna i valori */
c = a > b; /* c = FALSO */




Il tipo carattere.

In quasi tutti i linguaggi troviamo i 26 caratteri dell'alfabeto, i 10 numeri e altri simboli tra cui alcuni di controllo tipo il CR, lo spazio ecc.
Il tipo standard char rappresenta appunto l'insieme di questi caratteri.
Un esempio di codifica in C e' :

char nome;

Bisogna prestare attenzione al fatto che, ad esempio, il C non considera una variabile char come una stringa, ma per farlo deve essere specificata come array di caratteri.

char stringa[35]; /* Stringa di 36 caratteri (0..35) */

Bisogna anche prestare attenzione che il tipo char in C non e' ad indicare un carattere ma bensi' un tipo particolare che grazie alle sue dimensioni di occupazioni di memoria (1 byte) e' indicato a rappresentare un carattere ASCII (da 0 a 128 per il char e da 0 a 255 per l'unsigned char).
Vedremo, parlando del linguaggio, le modalita' per la creazione e
la gestione di stringhe mediante indici e puntatori.





Il tipo intero.

Sono compresi tutti i numeri interi senza restrizioni.Sono operatori del tipo INTERO :

+ (somma)
- (sottrazione)
* (moltiplicazione)
** (potenza)
/ (divisione intera)

Dicevo prima senza restrizioni.
Parlando esclusivamente di codifica in notazione A puo' essere considerato vero.
In pratica nella traduzione in linguaggio dell'analisi ci troviamo di fronte alle limitazioni di memorizzazione della macchina.
Sappiamo che generalmente una dichiarazione ad intero fa' si' che il sistema riservi 16 bit per la memorizzazione dell' int. Uno di questi bit e' riservato per il segno mentre gli altri 15 per il numero vero e proprio, quindi un totale di 65000 valori compresi da -32768 a +32767.
Conviene al momento dello sviluppo dell'analisi tenerne conto.

Inoltre il tipo int puo' presentare diversita' a seconda della macchina su cui viene compilato un programma. Ad esempio un int su sistema a 32 bit della serie Vax occupa 4 bytes mentre su un Pc IBM solo 2 Bytes.
Il tipo short, simile all'int su PC, del linguaggio C garantisce 16 bit su qualsiasi sistema venga implementato il programma.




Il tipo reale (float).

Il tipo reale descrive un valore senza nessuna limitazione se non quella, come nel caso precedente, dettata dalla capacita' di memorizzazione da parte del sistema.
Molti linguaggi permettono di assegnare alle variabili dei valori piu' o meno estesi.
Un esempio di dichiarazione :

float a;

I calcoli sui numeri reali possono dare luogo a perdite di precisione chiamate errori di troncamento.
Difatti qualsiasi intervallo tra i numeri reali e' costituito da un numero infinito di valori impossibili da rappresentare su un calcolatore.
All'interno del C, a seconda delle dimensioni della cifra da memorizzare esistono altri tipi di definizioni. Una di queste e' il double.
L'utilizzo di questi tipi pretende alcune attenzioni anche per quanto riguarda le librerie da utilizzare. Parleremo di questo argomento nei capitoli riguardanti il linguaggio.



Tabelle

Le tabelle permettono di rappresentare degli insiemi di valori con proprieta'comuni rappresentando il concetto di matrice matematica.
Possiedono anch'esse un identificatore a cui e' associato un insieme di valori.
Il valore di ciascun elemento e' raggiunto mediante l'uso di uno o piu' indici dichiarati sia come tipo che come limiti per ogni singolo indice.
In notazione A :

tab b(1 : 10):intero;
In linguaggio C :
int b[10];


Una tabella puo' essere multidimensionale e cioe' a piu' indici.
Ad esempio :

int b[10][10];

Possiamo, allo scopo di semplificare il concetto, paragonare il tutto ad una matrice in cui il primo indice si riferisce alla riga mentre il secondo al numero di colonna.




Rappresentazione d'un algoritmo.

Un algoritmo o programma e' un insieme di istruzioni strutturate in un certo ordine. Possiamo rappresentare ogni azione all'interno di un blocco e
indicare il tragitto che dovra' seguire il programma, rappresentando in questo modo la struttura dello stesso.
Questo viene chiamato diagramma di flusso. Supponiamo di volere codificare un programma che legga un numero e che stabilisca se questo e' minore o maggiore di 100 avvisando sul risultato del confronto :

var NUMIN: intero;
leggi NUMIN
se NUMIN < 100 allora scrivi "<" se no
scrivi ">"

Utilizzando il diagramma di flusso avremmo :

+-------------+
| leggi NUMIN |
+-------------+
|
/<\ no
/100\_______
\ / |
\ / |
si | |
+------+ +------+
|scrivi| |scrivi |
| < || > |
+------+ +------+

In un diagramma di flusso i blocchi che rappresentano le istruzioni sono collegati tra di loro. In notazione A e' sufficente inserire tra un' istruzione ed un' altra un separatore ad esempio il ';'.
Il linguaggio C possiede un numero ristretto di vocaboli di base ma un' elasticita' incredibile ad essere incrementato mediante l'introduzione di nuove funzioni nelle librerie.
Infatti comandi tra i piu' comuni come printf non sono originali di C ma e' possibile ritrovarli implementati in qualsiasi libreria di compilatore.
In notazione A un discorso di funzioni, intese come sequenza di istruzioni, puo' essere agevolato dall'utilizzo di parole come inizio e fine che sostituiscono l'uso che fa' nel C la parentesi graffa o il begin e l'end del Pascal.





Un diagramma di flusso su di un numero N di istruzioni potrebbe apparire :

+-----------+ in notazione A :
|istruzione1| istruzione1;
+-----------+
|
+-----------+
|istruzione2| istruzione2;istruzione3;
+-----------+
|
+-----------+
|istruzioneN| istruzione N;
+-----------+

Sarebbe corretto :

inizio
istruzione1;
inizio istruzione2;
istruzione3;
fine
istruzione N;
fine



L'assegnazione.

Consiste nel dare ad una variabile il valore di un' espressione dello stesso tipo. In notazione A quest'azione viene espressa dalla freccia <- .
Ad esempio :

V <- E

dove V e' il nome della variabile ed E l'espressione dello stesso tipo associato.
Un esempio di notazione A tradotta in C:


inizio funz() {
var var1,var2,var3:interi; int var1,var2,var3; var1=var2=5;
var1 <- 5; var3 = var1+var2;
var2 <- 3;
var3 <- var1+var2; printf("%d",var3);
scrivi var3; }
fine




L'assegnazione viene rappresentata nei diagrammi a blocchi mediante un rettangolo.

Sono validi costrutti del tipo :

A <- B <- C <- 10;

Il C esegue le assegnazioni da destra verso sinistra, e quindi una sintassi del genere starebbe a significare C che prende valore 10, B che prende valore C ed A che prende il valore di B.

RaYoZ
Admin
Admin

Messaggi : 1040
Punti : 2245
Data d'iscrizione : 03.04.10
Età : 22
Località : immerso nei pensieri

Tornare in alto Andare in basso

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto

- Argomenti simili

 
Permesso di questo forum:
Non puoi rispondere agli argomenti in questo forum