Appunti di programmazione

Appunti per il corso universitario di programmazione, riferito al linguaggio ANSI C
Redatti all'università di Venezia

ARGOMENTI

STRUTTURA COMPUTER

DEFINIZIONI

TASTIERA E TIPI

AMBIENTE E MEMORIA

COMANDI

FUNZIONI E PROCEDURE

TIPI DERIVATI

PUNTATORI

STRINGHE

ARRAY DI PUNTATORI

STRUTTURE

TYPEDEF E ENUM

PUNTATORI A PROCEDURE

ALLOCAZIONE DINAMICA

LISTE

ALGORITMI

ERRORI

TYPEDEF

typedef viene usata per assegnare un alias a un qualsiasi tipo, fondamentale o derivato; non definisce un nuovo tipo, ma introduce un nome che corrisponde a uno dei tipi definiti



typedef char C;


dopo questa dichiarazione potrò utilizzare per dichiarare variabili invece che l'identificatore char l'identificatore C


typedef struct Nodo{

int tag;

struct Nodo *sin;

struct Nodo *des;

}Nodo;

Nodo d;


typedef char Colonna[13];


Colonna k;

for (i = 0; i < 13; i++)

k[i] = 'x';


typedef struct Linea{

Punto p1;

Punto p2;

}Linea; //uso la lettera maiuscola per distinguerla dalle variabili e dalle costanti


Punto a, b;

Linea linea;

a.x = 0;

a.y = 1;

b.x = 1;

b.y = 0;

linea.p1 = a;

linea.p2 = b;


void medio(Linea l, Punto *m){

(*m).x = (l.p1.x + l.p2.x)/2;

(*m).y = ()/2;

}


int main(){

Punto a,b,m;

Linea l;

scanf(“ %d”, &(a.x));

medio(l, &m); //

}


(*m).x = dereferenzio m e prendo c; posso scrivere anche m -> x

COME NON SPRECARE MEMORIA NELL’ALLOCAZIONE DINAMICA CON LE STRINGHE

es.

typedef struct {

char titolo[30];

char autore[15];

} Libro;


Libro *lib;

lib = (Libro *) malloc (sizeof(Libro));

strcpy( lib -> titolo, “La divina commedia”);

strcpy( lib -> autore, “Dante”);


in questa maniera rischiamo di non avere spazio per stringhe lunghe, oppure di sprecare spazio nel caso dobbiamo inserire stringhe corte; meglio procedere in questa maniera:


typedef struct {

char *titolo;

char *autore;

} Libro;


Libro *lib;

lib = (Libro *) malloc (sizeof(Libro));


così ho allocato spazio solo per due puntatori, prima di inserire le stringhe per titolo e autore bisogna allocare lo spazio necessario a contenerle


lib->titolo =(char *) malloc (sizeof(char)*40);

lib->autore =(char *) malloc (sizeof(char)*15);

strcpy( lib->titolo, “Harry Potter e l’ordine della fenice”);

strcpy( lib->autore, “J.K. Rowling”);

IL TIPO ENUMERATIVO

programma per gestire un negozio di vestiti

S M L XL XXL

0 1 2 3 4


enum Taglia {S, M, L, XL, XXL}

se voglio evitare di dover scrivere enum a ogni dichiarazione:

typedef enum Taglia {S, M, L, XL, XXL} Taglia;


Taglia h;

if (h == s)

typedef struct pantaloni{

Taglia t;

Colore c;

}Pantaloni;


typedef enum colore{Red, Green,..., Black} Colore;

gli elementi definiti in realtà sono numeri, es. Red = 0


Pantaloni p;

p.t = S;

p.c = Black;


Non è possibile stampare i nomi effettivi degli enumeratori

Ritorna sopra | Home page