Un esempio per cominciare

Documenti analoghi
Un esempio per cominciare. Inizio e fine di un programma. La somma di 3 numeri PASCAL ANSI C. Regole sintattiche

INTRODUZIONE AL LINGUAGGIO C

Dati due punti sul piano calcolare la loro distanza

02/10/2014. Evoluzione del C. Evoluzione del C. Passi per risolvere un problema con il calcolatore

Costrutti presenti in C ( non disponibili in FORTRAN ) Cicli di iterazione : IL FOR. Esempio: Conversione Fahrenait / Celsius FORTRAN 77 ANSI C

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Il linguaggio C funzioni e puntatori

Qualsiasi programma in C++ segue lo schema: Variabili

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

Introduzione al linguaggio C

Fondamenti di Informatica

Linguaggio C: le funzioni

Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Introduzione alla programmazione in C(++)

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

Laboratorio di Programmazione(corso A) Laurea in Informatica - A.A. 2000/2001 Docente: A. Lanza

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Verso i puntatori: Cosa è una variabile?

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Evoluzione del C 07/04/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 16 IL LINGUAGGIO C

Puntatori. Fondamenti di Programmazione

Corso di Automazione industriale

Corso sul linguaggio C

Lezione 11: Liste a Puntatori e Input/Output

Programmazione Procedurale in Linguaggio C++

Laboratorio di Programmazione

Informatica (A-K) 5. Algoritmi e pseudocodifica

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Esercizi Programmazione I

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Corso di Laboratorio di programmazione e calcolo

Il linguaggio C. Puntatori e dintorni

Guida breve alla programmazione in C: Prontuario delle istruzioni più usate

1

Associazione Variabile-Indirizzo

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Classificazione Tipi semplici predefiniti Definizione di nuovi tipi Tipi strutturati

INTRODUZIONE AL LINGUAGGIO DI PROGRAMMAZIONE PASCAL. Per iniziare lo studio del linguaggio di programmazione pascal, consideriamo il seguente esempio.

Gli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento

Pascal: esempi di programmazione

Operazioni su file di caratteri

Corso di Laboratorio di Sistemi Operativi A.A

Lezione 1. Ing. Colazzo Sebastiano

Prof. G. Ascia. I puntatori. Fondamenti di Informatica

La sezione di dichiarazione delle costanti 1.2 I tipi elementari Classificazione dei tipi Il tipo integer Il tipo boolean

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Fondamenti di Informatica

Informatica (A-K) 7. Linguaggio C - 1

Introduzione al linguaggio C

Precisazione sui tipi in ANSi C

Introduzione alla programmazione in linguaggio C

Laboratorio di Informatica I

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Programmazione a moduli in C

Corso di programmazione in C

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Lezione 6: Array e puntatori

Il linguaggio C. Notate che...

Costanti e Variabili

Appunti di LINGUAGGIO C

Lezione 10. L arte della programmazione

Corso di Informatica A.A

Gli Operatori. Università degli Studi di Brescia

Funzioni. Fondamenti di Informatica, Ingegneria Elettronica, Università La Sapienza Roma. aa R. Beraldi

Passaggio dei parametri

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.

Struttura di un. Struttura dei programmi C

Cosa è una variabile?

ALGORITMI E STRUTTURE DATI

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

INFORMATICA GENERALE Prof. Alberto Postiglione. Università degli Studi di Salerno. UD 3.2b: Programmazione in Pascal (1)

Ambienti di Programmazione per il Software di Base

Laboratorio di Informatica I

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

3. La sintassi di Java

I costrutti del C. Strutture condizionali Strutture iterative Introduzione alle funzioni

Gestione dinamica della memoria

File binari e file di testo

L'Allocazione Dinamica della Memoria nel linguaggio C

Lezione 12: Allocazione Dinamica della Memoria

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Lezione 22: Input/Output e Files

Fondamenti di Informatica L-A

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Tutorato Elementi di Informatica 2018

Il linguaggio C Strutture

Capitolo 2 Introduzione alla programmazione in C

Transcript:

Vs ANSI Almerico Murli- a.a. 2003/2004 1 Un esempio per cominciare La somma di 3 numeri PROGRAM SOMMA; VAR A,B,,d:REAL; BEGIN (* Inizializzazione di A,B, *) READLN(); A:=5.; B:=7.; (* alcolo della somma tra A,B e *) d:=a+b+; (* Stampa del risultato *) WRITELN ( SOMMA=,d); END. #include <stdio.h> main() { /* inzio */ float a,b,,d; /* Inizializzazione di a, b, c */ scanf( %f,& ); a=5.; b=7.; /* alcolo della somma tra a,b e */ d=a+b+; printf( SOMMA= %f \ n,d); /* Stampa del risultato*/ } /* fine */ Almerico Murli- a.a. 2003/2004 2

Inizio e fine di un programma L inizio di un programma è determinato da BEGIN La fine di un programma è determinata da END. L inizio di un programma è determinato dalla prima parentesi { La fine di un programma è determinata dall ultima parentesi } main( ) { /* inizio */ } /* fine */ Almerico Murli- a.a. 2003/2004 3 Regole sintattiche Possibilità di scrivere più istruzioni sulla stessa linea; Non c e differenza tra lettere minuscole o maiuscole. Possibilità di scrivere più istruzioni sulla stessa linea; è differenza tra lettere minuscole e maiuscole. Almerico Murli- a.a. 2003/2004 4

I ommenti (* Inizializzazione di A, B,, d *) (* Inizializzazione di A, B,, d *) La linea di commento è racchiusa tra ( * *) oppure { } /* Inizializzazione di a, b, */ /* Inizializzazione di a, b, */ La stringa di caratteri di un commento è racchiusa tra /* */ Almerico Murli- a.a. 2003/2004 5 Dichiarazioni delle variabili VAR A,B, : REAL; VAR A,B, : REAL; VAR I,J : INTEGER; VAR I,J : INTEGER; float a,b,,d; float a,b,,d; int a,b,,d; int a,b,,d; Almerico Murli- a.a. 2003/2004 6

Operazioni di I/O WRITELN( SOMMA=,); Le operazioni di I/O sono eseguite da istruzioni READ();, READLN(); WRITE();,WRITELN( ); printf( SOMMA= %f \n,c); printf( SOMMA= %f \n,c); Le operazioni di I/O sono eseguite da funzioni di libreria scanf( ); printf( ); Almerico Murli- a.a. 2003/2004 7 Assegnazioni A:=5; A:=5; L operazione di assegnazione si effettua attraverso l operatore := a=5; a=5; L operazione di assegnazione si effettua attraverso l operatore = Almerico Murli- a.a. 2003/2004 8

: Utilizzo degli header file Prima dell istruzione main() e presente una direttiva del tipo: #include file.h Per eseguire Operazioni di I/O Per utilizzare Funzioni Matematiche Gestione Stringhe... file.h contiene: specifiche di funzioni; definizioni di strutture di dati; definizioni di parametri;... #include<stdio.h> #include<math.h> #include<string.h> Almerico Murli- a.a. 2003/2004 9 stdio.h int scanf( const char *format,.) Lettura da tastiera; int fscanf(file *strean, const char *format, ) lettura da file ; int printf(const char *format,.) int fprintf(file *strean, const char *format, ) FILE *fopen ( cont char *filename, cost char *mode) FILE *fclose ( FILE * stream ) Stampa a video; Stampa su file; Apertura file; hiusura file; Almerico Murli- a.a. 2003/2004 10

math.h Gli argomenti x ed y sono di tipo double, n è di tipo int e tutte le funzioni restituiscono un double. double sin( x) seno di x; double cos(x) coseno di x; double tan(x) tangente di x; double exp(x) funzione esponenziale e x ; double log(x) logaritmo naturale ln(x), con x>0; double log10(x) logaritmo in base 10 log(x), con x>0; double pow(x,y) potenza x y ; double sqrt(x) radice quadrata di x, con x>0; Almerico Murli- a.a. 2003/2004 11 : operazioni a basso livello 1. Operazioni dirette sui bit 2. Accesso agli indirizzi delle variabili. Almerico Murli- a.a. 2003/2004 12

Problema Verificare se un numero naturale e PARI o DISPARI PROGRAM PARDIS; VAR N,RESTO : INTEGER; BEGIN WRITELN( inserisci numero ); READLN(N); RESTO:=N-(N DIV 2)*2; IF RESTO = 0 THEN WRITELN( NUMERO PARI ) ELSE WRITELN( NUMERO DISPARI ); END. 1 addizione + 2 molt. #include <stdio.h> main() { int n,resto; printf( inserisci numero\ n ); scanf( %d,&n); resto= n & 1; if(resto==0) { printf( numero pari\n );} else { printf( numero dispari\n );} } 1 confonto bit a bit. Almerico Murli- a.a. 2003/2004 13 Operatore & Regole di composizione dell operatore & & 0 0 0 1 0 ESEMPIO 1 (a & 1) 1 0 1 a=65 10 =1000001 2 a & 1 = 1000001 2 & 1 10 =0000001 2 0000001 2 = 0000001 2 a & 1 = 1 ESEMPIO 2 (a & b) a=40 10 =101000 2 a & b = 101000 2 & b=34 10 =011000 2 011000 2 = 001000 2 a & b = 001000 Almerico Murli- a.a. 2003/2004 2 =8 10 14

Qual è il vantaggio di eseguire un operazione bit a bit? Almerico Murli- a.a. 2003/2004 15 La somma di due numeri con mantissa costituita da n bit richiede: 2n confronti Se T confronto = µ e il tempo necessario per un confronto, allora: T addizione 2n µ Il tempo per eseguire un prodotto e sicuramente maggiore di quello per un addizione T prodotto T addizione T addizione +2 T prodotto > nt confronto =n µ T addizione +2 T prodotto > nt confronto =n µ Almerico Murli- a.a. 2003/2004 16

In particolare Nell esempio,n & 1 equivale al resto della divisione di N per 2 R:=N-(N/2)*2; Il resto della divisione per 2 e il bit meno significativo 0 se il numero e pari 1 se e dispari Es. n=12 10 =1100 2 r = n & 1 = 1100 2 & 0001 2 = 0000 2 Es. n=13 10 =1101 2 r = n & 1 = 1101 2 & 0001 2 = 0001 2 r = n & 1 ; & AND bit a bit Almerico Murli- a.a. 2003/2004 17 ALTRE OPERAZIONI bit a bit Divisione di un numero intero N per 2 N := N/2; dividere per due significa spostare di un posto verso destra la rappresentazione binaria Es. n=13 10 =1101 2 n/2=6 10 = 0110 2 n>>1 ; >> SHIFT verso destra Moltiplicazione di un numero intero N per 2 R := N * 2; Moltiplicare per 2 significa spostare di 1 posto verso sinistra la rappresentazione binaria Es. n=13 10 =1101 2 n * 2= 1101 2 * 0010 2 =11010 2 =26 10 inv << 1; << SHIFT verso sinistra Almerico Murli- a.a. 2003/2004 18

: Operatori sui bit & >> << ^ ~ and shift a destra shift a sinistra or inclusivo or esclusivo complemento a 1 si utilizzano solo con operandi di tipo intero e carattere Almerico Murli- a.a. 2003/2004 19 OSSERVAZIONE RESTO:= N- (N DIV 2) * 2 RESTO:= N- (N DIV 2) * 2 Bisogna utilizzare l operatore DIV per effettuare la divisione tra interi l operatore / si utilizza per effettuare la divisione reali /* Inizializzazione di a, b, */ /* Inizializzazione di a, b, */ l operatore / si utilizza per effettuare la divisione di variabili di QUALSIASI tipo Almerico Murli- a.a. 2003/2004 20

( Operatori sui bit ) ( Puntatori ) Almerico Murli- a.a. 2003/2004 21 Memorizzazione di un dato di tipo intero Indirizzi 1 000 1 0 0 1 1 0 1 0 In Memoria 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 y = 2 x = 3 t = 7 1 1 1 1 Almerico Murli- a.a. 2003/2004 22

Memorizzazione di un dato di tipo reale ESEMPIO z = (.1172x10 2 ) 2= (.1011110 x 2 100 ) 2 0 1 0 1 1 1 1 0 0 1 0 0 Segno della mantissa Segno dell esponente Indirizzi In Memoria 1 000 0 1 00 10 10 10 10 0 0 0 1 1 1 0 x = 0 3 1 001 1 1 10 00 10 10 10 0 1 0 1 0 1 1 t = 17 1 010 z =.1172x10 2 h = -.6625x10 1 1 111 0 0 0 0 1 0 0 0 0 0 0 0 q =.8x10 1 Almerico Murli- a.a. 2003/2004 23 I PUNTATORI DEFINIZIONE Il Il puntatore e e una variabile che contiene l indirizzodi di un altra variabile Indirizzi 1 000 1 001 1 010 In Memoria 0 1 00 10 10 10 100 00 1 1 1 0x = 0 3 z =.1172x10 2 1 1 10 00 10 10 100 10 1 0 1 1t = 17 h = -.6625x10 1 1 111 0 0 0 0 0 0 0 0 1 0 0 0 p = 8 Almerico Murli- a.a. 2003/2004 24

ESEMPI x = 3 variabile di tipo intero x = 3 variabile di tipo intero x 0 0 0 0 0 0 1 1 Indirizzo 1 0 1 0 Px contiene l indirizzo di x Px contiene l indirizzo di x Px 0 0 0 0 1 0 1 0 z variabile di tipo floating-point z variabile di tipo floating-point z 0 1 0 1 1 1 1 0 1 0 0 Indirizzo 1 1 1 1 Pz contiene l indirizzo di z Pz contiene l indirizzo di z Pz 0 0 0 0 1 1 1 1 Almerico Murli- a.a. 2003/2004 25 OME SI DIHIARA UN PUNTATORE? type pointer =^integer; var p : pointer; p e e un puntatore ad una variabile intera. type pointer =^real; var p : pointer; p e e un puntatore ad una variabile reale. int *p p e e un puntatore ad una variabile intera. float *p p e e un puntatore ad una variabile float. Almerico Murli- a.a. 2003/2004 26

In Pascal e e possibile accedere alle variabili attraverso il il loro indirizzo. In e e possibile accedere alle variabili attraverso il il loro indirizzo e conoscere l indirizzo stesso. Almerico Murli- a.a. 2003/2004 27 OME SI DEFINISE UN PUNTATORE in? L istruzione: p = &x; assegna l indirizzo di x alla variabile puntatore P (P punta a x) In memoria: 001 0 0 0 0 1 1 0 0 1 1 X 004 0 0 1 P Almerico Murli- a.a. 2003/2004 28

In particolare. Esempio... int x,*p; p=&x; /*Assegnazione dell indirizzo di x a p */ *p=3; /* L istruzione assegna il valore 3 alla variabile x puntata da p */... p x 100 3 010 Indirizzi di Memoria 100 (P punta a x) Almerico Murli- a.a. 2003/2004 29 Operatori sui bit Puntatori Allocazione dinamica Almerico Murli- a.a. 2003/2004 30

Utilizzo degli array PROGRAM XXXX; BEGIN type vet = array[1..n] of integer; puntvet = ^vet; var a : puntvet; var n,x,i : integer; READLN(N); READLN(x); new(a); for i:=1 to n do a(i)= x *i;... despose(a) END. #include <stdio.h> main() { int *a,n,x,i; scanf( %d,&n); scanf( %d,&x); a=(int*)malloc(n*sizeof(int)); for (i=0; i<n; i++) { a[i]= x * i; }... free(a); } Se n = 4 Utilizzo solo solo della memoria necessaria le le dimensioni di di un un arraysono stabilite in in runtime Almerico (ALLOAZIONE Murli- a.a. 2003/2004DINAMIA) 31 In ed in in è possibile allocare dinamicamentela la memoria Almerico Murli- a.a. 2003/2004 32

Allocazione dinamica in (cont.) type vet = array[1..n] of integer; puntvet = ^vet; var a : puntvet; readln(n); new(a); Numero delle locazioni di memoria da allocare n 00100 a Puntatore all area di memoria Almerico Murli- a.a. 2003/2004 33 Allocazione dinamica in (cont.) int *a; a = (int *) malloc (n * sizeof(int)); Lunghezza in byte di ciascuna locazione Numero delle locazioni di memoria da allocare n sizeof(int) 00100 a Puntatore all area di memoria Almerico Murli- a.a. 2003/2004 34

Per deallocare un puntatore dispose(p); La memoria puntata da p e e libera. free(p) La memoria puntata da p e e libera. Almerico Murli- a.a. 2003/2004 35 FINE LEZIONE Almerico Murli- a.a. 2003/2004 36

Problema Dati 2 array di ordine N scambiare il loro contenuto F77 PROGRAM SAMBIO INTEGER A(50),B(50),TMP... DO 10 i=1,50 TMP=A(i) A(i)=B(i) B(i)=TMP 10 ONTINUE... N SAMBI!! #include <stdio.h> main() { int a[50],b[50],*tmp,*pa,*pb;... /* pa e pb contengono indirizzo del primo elemento di a di b */ pa=&a[0]; pb=&b[0]; /* scambio di indirizzi */ tmp=a; a=b; b=tmp;... 1 SAMBIO } Almerico Murli- a.a. 2003/2004 37 In memoria. pa = &a[0] pa 000001 000001 110010 a[0] a[1] a[49] pb = &b[0] pb 110011 110011 110100 b[0] b[1] b[49] Almerico Murli- a.a. 2003/2004 38

Lo scambio. pa 110001 000001 110010 a[0] a[1] a[49] pb 00001 110011 110100 b[0] b[1] b[49] Dopo lo lo scambio :: pb pb contiene l indirizzo di di a[0] pa pa contiene l indirizzo di di b[0] Almerico Murli- a.a. 2003/2004 39 aratteristiche principali del Linguaggio Operatori sui bit I Puntatori Allocazione dinamica Ricorsione Almerico Murli- a.a. 2003/2004 40

La Ricorsione Una funzione si si dice ricorsiva se, assegnato un un valore iniziale, il il proprio valore in in ogni un un punto, si si definisce a partire dal valore precendete a oo se se n=0 a n n =f(a n-1 n-1 ) se se n 0 Almerico Murli- a.a. 2003/2004 41 F77 INTEGER FUNTION FATT(N) INTEGER N FATT==1 5 DO 10 i=2,n FATT=FATT*I 5 ONTINUE RETURN Non e possibile implementare moduli che richiamano se stessi; la ricorsione viene simulata con l iterazion RESTRIZIONI ALL USO DELLA RIORSIONE Problema: alcolo del fattoriale (N!) Factorial(n) int n; { if( n==1) return 1; return n*factorial(n-1); } E possibile che una function richiami se stessa direttamente o indirettamte. IMPLEMENTAZIONE NATURALE DELLA RIORSIONE Almerico Murli- a.a. 2003/2004 42

La Ricorsione Factorial (n) n * Factorial (n-1) Factorial (n-2) Factorial (n-3) altrimenti Almerico Murli- a.a. 2003/2004 43 In è possibileavere informazioni sull indirizzo delle variabili in memoria. In è possibile lavorare a basso livello attraverso i puntatori Almerico Murli- a.a. 2003/2004 44

In memoria In memoria a[0] a[1] a[2] 001 002 003 x = *pa y = *(pa + 1) x 5 007 y 10 008 Almerico Murli- a.a. 2003/2004 45 F 77 PROGRAM SOMMA REAL A(10), B(10),(100) INTEGER n,x,i N=5 X=10 DO 5 I=1,N A(I) =X*I B(I)=X+I 5 ONTINUE DO 10 I=1,N (I)=A(I)+B(I) WRITE(*,*), (I) 10 ONTINUE STOP END Problema: somma di due vettori #include <stdio.h> main() { float a[10];b[10],c[10]; int i,n,x; n=5; x=10; for(i=0; i<n; i++) { a[i]=x*i; b[i]=x+i; } for(i=0; i<n; i++) { c[i]=a[i]+b[i]; printf( %f \n,c[i]); } STESSO UTILIZZO DELLA MEMORIA PER GLI ARRAY (ALLOAZIONE STATIA) } Almerico Murli- a.a. 2003/2004 46

Allocazione statica degli array F77 REAL A(10), B(10),(100) A(1) A(10) gli indici iniziano per default da 1 float a[10],b[10],c[10]; a[0] a[9] gli indici iniziano per default da 0 Almerico Murli- a.a. 2003/2004 47 OME SI DEFINISE UN PUNTATORE IN? L istruzione in fase dichiarativa: P^ = x; assegna l indirizzo di x alla variabile puntatore P In memoria: (P punta a x) 001 0 0 0 0 1 1 0 0 1 1 X 004 0 0 1 P Almerico Murli- a.a. 2003/2004 48

PROGRAM XXXX; Type vet=array[1..100] of integer; VAR n,x: INTEGER; Var a : vet; Begin READLN(n); READLN(x); for i:=1 to n A(i)= x *i end Sprecodi di 96 96 locazioni di di memoria!!!!!! Utilizzo degli array Se n = 4 #include <stdio.h> main() { int *a,n,x,i; scanf( %d,&n); scanf( %d,&x); a=(int*)malloc(n*sizeof(int)); for (i=0; i<n; i++) { a[i]= x * i; }... } Utilizzo solo solo della memoria necessaria le le dimensioni di di un un arraysono stabilite in in runtime (ALLOAZIONE DINAMIA) Almerico Murli- a.a. 2003/2004 49 Array e puntatori Il nome di un array e l indirizzo della prima componente Il nome di un array e l indirizzo della prima componente int a[50]; int *pa; pa = & a[0]; /* Definizione di pa */... 000001 pa 000001 110010 a[0] a[1] a[49] pa contiene l indirizzo del primo elemento di a Almerico Murli- a.a. 2003/2004 50