Algoritmi e strutture dati APPUNTI SUL LINGUAGGIO C

Slides:



Advertisements
Presentazioni simili
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Advertisements

Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica PROBLEMI E ALGORITMI LINGUAGGIO MACCHINA.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
© 2007 SEI-Società Editrice Internazionale, Apogeo
La rappresentazione degli algoritmi
Java World Introduzione.
Introduzione al linguaggio C
Dal problema al processo risolutivo
Process synchronization
7. Strutture di controllo Ing. Simona Colucci
IL CONCETTO DI ALGORITMO
Dal problema al processo risolutivo
10. Programmazione Ricorsiva Ing. Simona Colucci
SWITCH – CASE LINGUAGGIO C.
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
L’AMBIENTE CODE BLOCKS E L’IO
TIPI PRIMITIVI TIPI STRUTTURATI
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Ambienti di Programmazione per il Software di Base
Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
Corso Java Introduzione.
Programmazione e Laboratorio di Programmazione
Java World Cicli e Array.
Programmazione e Laboratorio di Programmazione
Classe III A A.s – 2012 Programma di Informatica
Programmazione e Laboratorio di Programmazione
Programmare.
Corso Java Cicli e Array.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Strutture di Controllo
Secondo Programma in C.
Programmazione e Laboratorio di Programmazione
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Vari e semplici programmi.
Programmazione e Laboratorio di Programmazione
Ricorsione 16/01/2019 package.
Sviluppo di un programma
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
Definizione di linguaggio di programmazione
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
La struttura dei primi programma in C
Processi decisionali e funzioni di controllo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Fondamenti di Informatica
Java Introduzione.
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
La programmazione strutturata
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione Procedurale
Transcript della presentazione:

Algoritmi e strutture dati APPUNTI SUL LINGUAGGIO C Introduzione al C Lezione I

Linguaggi macchina, assembley e di alto livello Linguaggi macchina: lingua naturale di un particolare computer, esso consiste di sequenze di numeri (1 o 0) e dipende dalla macchina 0000111101 1111110001 0011001111 Linguaggi assembly: abbreviazioni simili all’inglese, per rappresentare le operazioni elementari del computer LOAD N ADD X Linguaggi ad alto livello: singole istruzioni contenenti notazioni matematiche utilizzate comunemente x = n + 2;

Paradigmi di programmazione Esistono diversi approcci alla programmazione, chiamati paradigmi di programmazione: Programmazione imperativa: un programma specifica le azioni che devono essere eseguite in sequenza per calcolare i risultati a partire dai dati in ingresso. Programmazione orientata agli oggetti : un programma modella una realtà di interesse come una collezione di oggetti software che cooperano

Programma Java Oggetto Software Oggetto Software Classe Principale

Programma Java public class “nome della classe” { attributi metodi … } Oggetto Software

Programma Java Oggetto Software principale public class “nome della classe” { attributi metodi public static void main(String[] args) { … }

Esempio di Programmazione Un contadino deve recintare un campo di forma rettangolare

Steps di programmazione Problema Bisogna calcolare il perimetro del campo Algoritmo programma

Steps di programmazione Problema Misurare base e altezza (possiamo pensare siano dati conosciuti da input) Perimetro = 2 (base + altezza) Emettere il risultato Algoritmo programma

Steps di programmazione Problema Java: Bisogna individuare gli oggetti software che intervengono nel programma Algoritmo programma

Java Oggetto Software Campo Rettangolare DATI base altezza OPERAZIONI calcoloPerimetro

Programma Java Oggetto Software public class Campo { int base; int altezza; public Campo(int b, int a) { this.base = b; this.altezza = a; } public int perimetro(){ return (a+b)*2; … Oggetto Software

Programma Java Oggetto Software principale public class Principale { … // attributi … // metodi public static void main(String[] args) { … Campo c = new Campo(2,3); }

Programma Java Che succede in memoria? Oggetto Software principale public class Principale { … // attributi … // metodi public static void main(String[] args) { … Campo c = new Campo(2,3); }

Come è fatta la memoria 1000 5 int x = 5;

Strumenti per la programmazione Per eseguire un programma Java bisogna svolgere le seguenti attività editing rendere il programma accessibile al calcolatore compilazione tradurre il programma in un formato eseguibile dal calcolatore esecuzione far eseguire il programma al calcolatore

Editing Scriviamo il programma: public class esempio2 { public static void main(String[] args) { System.out.println(“Programma Java”); System.out.println(“Fondamenti di informatica”); … }

Compilazione e compilatori 101010001010001010101010101010101010010100000000001111111111111

Compilazione e compilatori traduzione (che preserva il significato) da un linguaggio di alto livello a un linguaggio macchina dal codice sorgente (codice) – linguaggio di alto livello al codice eseguibile (eseguibile) – linguaggio macchina Compilazione e compilatori codice sorgente compilazione codice eseguibile ... 0010100100010010100111010101001001

Esecuzione Il codice eseguibile di un programma può venire eseguito direttamente da un calcolatore serve il codice eseguibile – ma non il codice sorgente ... 0010100100010010100111010101001001 codice eseguibile Programma Java Fondamenti di informatica esecuzione

imperativo Il linguaggio C Il C è un linguaggio di programmazione di tipo imperativo un programma è una lista di istruzioni, di imperi che il calcolatore deve eseguire. Versione standard del C: ANSI/ISO 9899

Le librerie in C I programmi scritti in C consistono in moduli chiamati funzioni; esiste una ricca collezione di funzioni già esistenti chiamata libreria standard del C. Obiettivo riusabilità del software: approccio di costruzione a blocchi per creare programmi; inutile ricostruire funzioni già esistenti, ma riusare ciò che già esiste fondendolo con ciò che viene costruito ex-novo. Obiettivo efficienza: utilizzare le funzioni della libreria ANSI potrà migliorare l’efficienza del programma. Obiettivo portabilità: utilizzare le funzioni ANSI invece di scrivere le proprie versioni.

Il linguaggio C Il C è un tipico linguaggio di programmazione strutturata: scrittura di programmi chiari, dalla correttezza dimostrabile e semplici da modificare. Il linguaggio C permette di scrivere programmi molto compatti Il linguaggio C permette di accedere e gestire direttamente le risorse hardware dell’elaboratore (in maniera indipendente dall’architettura)

L’ambiente C Editor Disk Disk Disk Linker Disk Loader CPU Fase 1 Programma creato con l’editor Fase 1 Editor Disk Preprocessore Fase 2 Disk Il Preprocessore esegue il codice Compilatore Fase 3 Disk Compilatore crea il codice oggetto Linker Fase 4 Disk Collega il codice oggetto alle librerie Loader Memoria Primaria Fase 5 Carica in memoria il programma CPU Fase 6 Memoria Primaria Esegue una istruzione alla volta

Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main() { printf(“Hello World!\n”); }

Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main() { printf(“Hello World!\n”); } L’istruzione è chiamata “direttiva di compilazione” e serve ad includere informazioni relative a una libreria predefinita del C che contiene le funzioni di input/output.

Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main() { printf(“Hello World!\n”); } La parola main() identifica il programma principale e rappresenta il punto di ingresso del programma all’inizio della sua esecuzione

Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main() { printf(“Hello World!\n”); } Si possono specificare commenti racchiudendoli tra i simboli /* e */ Ogni istruzione è conclusa dal simbolo <<;>> Le parentesi graffe delimitano un blocco

Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main() { printf(“Hello World!\n”); } Per la stampa su video printf e tra apici la stringa costante Esistono sequenze nelle stringhe che indicano caratteri speciali: per esempio \n indica il carattere di new line che quando viene incontrato sposta il carattere successivo alla riga seguente

Caratteri speciali Tipo di opzione Descrizione \n Ritorno a capo \t   Tipo di opzione Descrizione \n Ritorno a capo \t Tabulazione orizzontale \b Tabulazione verticale \a Torna indietro di uno spazio \f Salto pagina  

Variabili in C /* Programma per il calcolo del fattoriale */ #include <stdio.h> main() { int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; while (n>1) { fat = fat * n; n = n-1; } printf(“Risultato = %d\n”,fat);

Variabili in C /* Programma per il calcolo del fattoriale */ #include <stdio.h> main() { int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; Una variabile viene dichiarata scrivendo il tipo seguito dal nome della variabile. Una variabile può essere inizializzata all’atto della sua dichiarazione (int a=1).

Tipi di dato elementari Tipi di dichiarazione Rappresentazione Char Carattere (es. 'à) Int Numero intero (es. 3) Short Numero intero corto Long Numero intero lungo Float Numero reale "corto" (es 14.4) Double Numero reale "lungo" In C non esiste il tipo boolean: Si usa la convenzione che lo zero rappresenta il valore falso e l’uno il valore vero (tutti i valori diversi da zero rappresentano il vero)

Input/Output /* Programma per il calcolo del fattoriale */ #include <stdio.h> main() { int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; La lettura e la stampa di variabili richiede spesso la specifica del loro formato: le istruzioni printf, scanf hanno in genere più argomenti.

Argomenti di printf e scanf printf ( "<stringa>" , <elenco argomenti> ); scanf ( "<stringa>" , <elenco argomenti> );

Input/Output La lettura e la stampa di variabili richiede spesso la specifica del loro formato: le istruzioni printf, scanf hanno in genere più argomenti. /* Programma per il calcolo del fattoriale */ #include <stdio.h> main() { int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; ---- printf(“Risultato = %d\n”,fat);

Argomenti di printf e scanf Il primo è una stringa di caratteri (da stampare per la printf) nella quale ogni % indica il punto in cui vanno sostituiti, nell’ordine, gli argomenti che seguono; Il carattere che segue il simbolo % indica il tipo dell’argomento (d indica un valore intero); Gli altri argomenti specificano le variabili di input/output (quelle di input sono precedute dal simbolo speciale &).

scanf ( “ %d ” , &n ); printf ( “ Risultato = %d \n ” , fat ); Assegna alla variabile n l’argomento inserito Tipo di argomento da inserire Stampa nel punto indicato il valore contenuto dalla variabile fat Tipo di argomento da stampare printf ( “ Risultato = %d \n ” , fat );

Argomenti di printf e scanf Sintassi da utilizzare Descrizione %d Dati di tipo int %lf %l %f Dati di tipo double Dati di tipo long Dati di tipo float %c Dati di tipo char %s Dati di tipo stringhe

L’istruzione di assegnazione si indica con il simbolo = Assegnazione in C /* Programma per il calcolo del fattoriale */ #include <stdio.h> main() { int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; L’istruzione di assegnazione si indica con il simbolo =

Un’istruzione composta è delimitata da un blocco Blocchi in C while (n>1) { fat = fat * n; n = n-1; } printf(“Risultato = %d\n”,fat); Un’istruzione composta è delimitata da un blocco

Operatori ed espressioni in C Operazioni con gli int (interi) Descrizione delle operazioni * moltiplicazione 4*5=20. Moltiplica i numeri inseriti + addizione 2+10=12 Somma i numeri inseriti - sottrazione 3-2=1 Sottrae i numeri inseriti / divisione 5/4=1 Divide e il risultato è senza resto % divisione con modulo 10%7=3 Divide e come risultato abbiamo il resto

Operatori ed espressioni in C Operazioni con i double (reali) Descrizione delle operazioni * moltiplicazione 4.5*2.0=9.0 Moltiplica i numeri inseriti + addizione 2.0+10.2=12.2 Somma i numeri inseriti - sottrazione 3.0-2.1=0.9 Sottrae i numeri inseriti / divisione 3.0/2.0=1.5 Tipo di espressione Descrizione x++ Incremento della variabile x di 1 y-- Decremento della variabile y di 1 a+=b e a*=b a=a+b e a=a*b

Operatori ed espressioni in C Operatori relazionali Descrizione x == y Testa se il valore di x è uguale a y x > y Testa se x è maggiore di y x >= y Testa se x è maggiore uguale di y x < y Testa se x è minore di y x <= y Testa se x è minore uguale di y x != y Testa se x è diverso da y

Operatori ed espressioni in C Operatori logici Descrizione && AND || OR ! NOT Operatore condizionale Descrizione <op1>?<op2>:<op3> Vale <op2> se <op1> è vero altrimenti <op3> Es. (a>b)?a:b calcola il massimo tra a e b

Istruzioni di controllo condizionali Istruzione condizionale if if ( <espr> ) <istr1> else <istr2> Se <espr> è vera viene eseguito <istr1> altrimenti verrà eseguito <istr2> Es. if (a>b) printf(“il maggiore è %d”, a); else printf(“il maggiore è %d”, b);

Istruzioni di controllo condizionali Istruzione condizionale switch switch ( <espr> ) { case <costante1> : <istr1> [break] case <costante2> : <istr2> [break] …. default : <istr> } Se <espr> vale <costante n> vera viene eseguito <istr n>; in tutti gli altri casi (caso di default) verrà eseguito <istr>. Per convenzione dopo l’istruzione che si vuole eseguire si usa il comando break per uscire dall’istruzione condizionale.

Istruzioni di controllo condizionali Es. Vogliamo impostare il numero di giorni n di cui è fatto ogni mese: switch ( mese ) { case 2: n=28; break; case 4 : case 6: case 9 : case 11: n=30; break; default : n=31; }

Istruzioni di controllo iterative Istruzione while while ( <espr> ) <istr> oppure do <istr> Fino a che <espr> è vera viene eseguito <istr>. Prima valuta espr e poi esegue istr Prima esegue istr poi valuta espr

Istruzioni di controllo iterative Es. Calcoliamo il fattoriale di un numero i: while ( i>1 ) { fat *= i; i--; } do { while ( i>1 );

Istruzioni di controllo iterative Istruzione for for ( <espr_init>; <espr_test>; <espr_incr> ) <istr> corrisponde a: <espr_init> while ( <espr_test> ) { <espr_incr>; } Es. for ( i=n; i>1; i-- ) fat *= i;

Costanti simboliche in C #define <nome> <valore> Si definiscono facendo uso della direttiva define che va messa nell’intestazione del programma. Es. #define PIGRECO 3.14 #define N 100 #define TRUE 1 #define FALSE 0 main() { …. }

Esempio di programma C Lettura ed analisi del problema: deduzione dei dati di input Costruzione di un procedimento risolutivo: algoritmo Traduzione delle istruzioni dell’algoritmo in linguaggio C

Esempio di programma C Lettura ed analisi del problema: deduzione dei dati di input “Scrivere un programma C che calcoli le quattro operazioni sui numeri interi.” Input: a op b , in cui a e b sono due interi e op è una delle quattro operazioni [+,-,*,/] Oss. La divisione sui numeri interi emette anche il resto

Esempio di programma C Costruzione di un procedimento risolutivo: algoritmo a,b op op = ? + - * / a+b a-b a*b a/b,a%b

Traduzione delle istruzioni dell’algoritmo in linguaggio C Esempio di programma C Traduzione delle istruzioni dell’algoritmo in linguaggio C Un programma C consta di tre parti fondamentali: Intestazione: spazio dedicato agli include per includere librerie Dichiarazioni : funzioni,costanti, macro… Blocco principale : il main() in cui elencare le istruzioni

Traduzione delle istruzioni dell’algoritmo in linguaggio C Esempio di programma C Traduzione delle istruzioni dell’algoritmo in linguaggio C /* Programma che calcola le quattro operazioni sui numeri interi */ #include <stdio.h> main () { int a,b; char op; printf(“Operazione su interi:”); scanf(“%d %c %d”, &a,&op,&b); printf(“Risultato:\t”);

Traduzione delle istruzioni dell’algoritmo in linguaggio C Esempio di programma C Traduzione delle istruzioni dell’algoritmo in linguaggio C /* Calcolo e stampa */ switch (op) { case ‘+’: printf(“%d”,a+b); break; case ‘-’: printf(“%d”,a-b); case ‘*’: printf(“%d”,a*b); case ‘/’: printf(“%d con resto di %d”,a/b,a%b); default: printf(“Operatore sconosciuto”); }

/* Programma che calcola le quattro operazioni sui numeri interi */ #include <stdio.h> main () { int a,b; char op; printf(“Operazione su interi:”); scanf(“%d %c %d”, &a,&op,&b); printf(“Risultato:\t”); /* Calcolo e stampa */ switch (op) { case ‘+’: printf(“%d”,a+b); break; case ‘-’: printf(“%d”,a-b); case ‘*’: printf(“%d”,a*b); case ‘/’: printf(“%d con resto di %d”,a/b,a%b); default: printf(“Operatore sconosciuto”); }

Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Introduzione al C FINE