• Non ci sono risultati.

Evoluzione del C

N/A
N/A
Protected

Academic year: 2021

Condividi "Evoluzione del C"

Copied!
10
0
0

Testo completo

(1)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica

16 – IL LINGUAGGIO C

Marco Lapegna

Dipartimento di Matematica e Applicazioni Universita’ degli Studi di Napoli Federico II wpage.unina.it/lapegna

Marco Lapegna –

Laboratorio di Programmazione

16. Introduzione al C

Evoluzione del C

il C e’ un linguaggio di programmazione ad alto livello sviluppato agli inizi degli anni ‘70 del XX

sec. presso i BELL Laboratories

E’ estremamente potente (i sistemi operativi Unix e Linux sono scritti in C) e versatile (e’

possibile sviluppare applicazioni in molti campi:

industriale, scientifico, telecomunicazioni,…)

L’ ANSI C (1990) e’ la principale versione standard del C, e garantisce una ampia

portabilita’ dei codici

Dal C sono derivati numerosi linguaggi di nuova generazione come C++, Java

Il principale manuale del linguaggio C

(2)

Marco Lapegna –

Laboratorio di Programmazione

16. Introduzione al C

Passi per risolvere un problema con il calcolatore

1. Formulazione del problema

2. Formulazione del modello matematico 3. Formulazione del modello discreto 4. Sviluppo dell’algoritmo

5. sviluppo del programma, cioe’ traduzione dell’algoritmo in un linguaggio di

programmazione ad alto livello

• Di nostra competenza i passi 4 e 5

• Molto lavoro per il passo 4

• Passo 5 semplice ed automatico !!

• Importante solo rispettare la sintassi

passi per la risoluzione di un problema scientifico con il calcolatore

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Inizio e fine in Pascal-like

Equivalente C

Inizio e fine programma

• Ogni programma C e’ compreso le parentesi graffe { } che seguono l’istruzione main

• main e’ sempre il nome del programma

• Ogni istruzione del programma termina con ;

• Analogo di begin ed end per il Pascal Like

(3)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Dichiarazione variabili in Pascal-like

Equivalente C

Dichiarazione delle variabili

• 5 tipi di dati fondamentali

• Il C e’ Case Sensitive (fa differenza tra maiuscole e minuscole)

• Obbligatorio dichiarare le variabili

• Altri tipi meno usati: unsigned, long ,…

• L’utilizzo del tipo logico ( bool ) richiede

#include<stdbool.h>

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Lettura, scrittura e assegnazione in P-L

Equivalente C

Lettura, definizione e stampa delle variabili

• scanf(… ) definisce una o piu’ variabili mediante l’unita’ di input (es. la tastiera)

• printf( … ) stampa il contenuto di una variabile sull’unita’ di output (es. il monitor)

• scanf e printf sono funzioni intrinseche del C che vanno dichiarate. La dichiarazione e’

presente nel file stdio.h che va “incluso” nel programma con l’istruzione #include<…>

• l’operatore % specifica il tipo di variabile da leggere/stampare:

d : interi f : reali e d.p. c : carateri

• gli operatori & nell’istruzione scanf saranno chiari piu’ avanti …..

• L’operatore = indica una operazione di assegnazione di un valore ad una variabile

(4)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Commenti in P-L

Equivalente C

commenti

I commenti sono linee di testo inserite nel codice che non vengono tradotte dal compilatore

Hanno lo scopo di migliorare la leggibilita’ dei programmi, descrivendo le sezioni del programma o anche gruppi di istruzioni

E’ buona norma inserire numerose linee di commento (anche fino al 50% delle linee dl programma)

In C le linee di commento iniziano con //

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

If-then-else in pascal-like

Equivalente in C

Struttura di selezione

• Esatta corrispondenza con il Pascal Like

• le istruzioni che compongono i rami della struttura sono racchiusi tra parentesi graffe

• { … }

• Disponibile anche senza il ramo ELSE

(5)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Esempi di operatori logici e relazionali in P-L

Equivalente C

Operatori logici e relazionali

• Vengono eseguiti prima gli operatori relazionali

> < == != >= <=

• Poi quelli logici

! && ||

• ! (not)

• && (and)

• || (or)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

For-endfor in Pascal-like

Equivalente C

Struttura di iterazione for

• Tre campi sempre obbligatori

• Inizializzazione dell’indice

• Condizione di validita’ dell’indice !!

• Incremento dell’indice

• Istruzioni da ripetere racchiuse da parentesi graffe {… }

• Piu’ strutture innestate richiedono indici distinti

• nel caso di incremento di 1 si puo’ usare l’operatore i++ , equivalente a i=i+1

• (es. for ( i=1; i < N; i++) )

(6)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

While-endwhile in pascal-like

Equivalente C

Struttura di iterazione while

• Ripete piu’ volte le istruzioni tra while e endwhile

• Quanto la condizione risulta verala struttura di iterazione continua

• traduzione diretta del pascal-like

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Repeat-until in Pascal-like

Equivalente C

Struttura di iterazione repeat

• Ripete piu’ volte le istruzioni tra repeat e until

• Quanto la condizione risulta verala struttura di iterazione termina

• Non esiste una traduzione “diretta”

• Realizzato mediante do-while

• poiche’ il while continua l’esecuzione quando la condizione e’ vera, in questo caso e’ necessario negare la condizione di uscita

(7)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Dichiarazione e lettura di un array in P-L

Equivalente C

Gli array

• in fase di dichiarazione e’ necessario specificare la dimensione

• successivamente non e’ possibile modificare la dimensione

• e’ possibile fare riferimento a ciascuna componente tramite un indice

• La prima componente ha indice 0 (zero)

• in memoria le componenti di un array occupano locazioni di memoria consecutive

• gli array 2-dimensionali sono memorizzati per righe in locazioni consecutive

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Chiamata di una procedura in Pascal-like

Equivalente C

Sottoprogrammi FUNCTION

• Unico tipo di procedura disponibile in C

• Invocata attraverso il nome, puo’ ritornare direttamente un valore al programma chiamante attraverso il nome

• la function deve essere dichiarata con un tipo, che coincide con il tipo ritornato dalla function (se non ritorna niente il tipo e’ void). Nella dichiarazione della funzione si dichiara anche il tipo dei dati di input

• Gli argomenti della function sono tutti argomenti di input

• L’esecuzione del programma chiamante riprende dopo il termine della subroutine

(8)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Procedura in Pascal-like

Equivalente C

Sottoprogrammi FUNCTION

• il passaggio delle informazioni e’ per valore (della variabile)

• la function opera su una copia delle locazioni di memoria delle variabili del programma

chiamante

• L’istruzione return, ritorna il valore di output al programma chiamante (opzionale se la funzione e’ void)

• E’ possibile utilizzare nomi diversi nelle function e nel programma chiamante

• Osservazione. Le function ritornano sempre un solo valore(oppure nessuno se la funzione e’

void)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Programma chiamante

Function per lo scambio

Function con piu’ valori di ritorno

Come fare se si vuole una function che ritorna 2 o piu’ valori?

• IDEA: utilizzare lo stesso meccanismo del Fortran e passare l’indirizzo delle variabili. In tal modo le function operano direttamente sulle stesse locazioni di memoria

• Nel main, per passare l’indirizzo delle variabili X e Y si usa l’operatore &

• Nella function, A e B contengono l’indirizzo delle variabili X e Y del main. Per accedere ad esse si usa l’operatore *

• Esempio: function per lo scambio di due variabili A e B

• Input: indirizzi delle variabili A e B

• Output: niente (funzione void)

• Ora dovrebbe essere chiara la presenza di &

nelle istruzioni scanf..

(9)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Passaggio di un array ad un function in C

Function C che stampa un array

Passaggio di un array ad una function

Il nome di un array e’ un indirizzo Quindi

attraverso il nome, viene passato l’indirizzo della prima componente

(analogo del Fortran)

- Allocazione di array in locazioni consecutive - Passaggio per indirizzo (la function opera sulle

stesse locazioni di memoria)

Da queste informazioni la function e’ in grado di

“ricostruire” tutto l’array

Nella function e’ possibile evitare di dichiarare gli array specificando una dimensione fissata

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Esempio di chiamata di funzione con array 2-d

Funzione C che stampa un array 2-d

Array 2-d e function

• Gli array 2-d sono memorizzati per righe

• E’ necessario specificare la leading dimension (numero massimo di colonne)

• Nella dichiarazione della funzione nel programma chiamante e’ possibile indicare con il carattere * la presenza della leading dimension

• La leading dimension viene specificata nella chiamata della function

• Nella function si usa la leading dimension per specificare il numero di colonne dell’array

• La leading dimension deve precedere il nome dell’array nella lista degli argomenti

(10)

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

Il C dispone di una libreria di function intrinsiche per le piu’ comuni funzioni

matematiche e/o di utilita

Y = SQRT(X)

Y = ABS(X)

Y = TAN(X)

Y = SIN(X)

Y = COS(x)

Y = LOG(X)

Y = LOG10(X)

Y = EXP(X)

E tante altre…

Necessario includere <math.h>

Compilare con opzione -lm Semplice programma per il calcolo di 11 valori di sin(x) nell’intervallo [0,3.14]

Funzioni intrinsiche

Marco Lapegna –

Laboratorio di Programmazione 16. Introduzione al C

T.J. Berners-Lee (courtesy Computer History Museum)

Alcuni servizi basati sul protocollo http

Un po’ di storia (16)

Timothy John Berners-Lee (1955)

• Inglese, laureato in Fisica a Oxford nel 1976, dopo alcuni anni di lavoro in aziende di telecomunicazioni, nel 1980 si trasferisce al CERN

• Il 6 agosto 1991 mette in linea un sistema chiamato World Wide Web, una rete di nodi internet (siti web) collegati tra loro tramite collegamenti logici (link) per la condivisione globale di testi e/o contenuti

multimediale

• Il sistema e’ basato su un meccanismo di identificazione di risorse (URL), un protocollo di comunicazione (http), un linguaggio per i documenti (html), un programma server (httpd), e un

programma per la visualizzazione (browser).

• L’efficienza, la facilita’ e l’economicita’ del sistema permettono a tutti di diventare editori di contenuti visibili in tutto il mondo.

• Per il suo lavoro riceve numerosi premi ed onoreficenze.

Riferimenti

Documenti correlati

• Nella dichiarazione della funzione nel programma chiamante e’ possibile indicare con (*)[] la presenza di un puntatore ad un array 2-d. • Nella testata della function si usa

The hypothesis is that the crisis has strengthened the establishment of the Anti-/Pro- European dimension of contestation and the EU issue voting has increasingly determined

Integrated Reporting results in a periodic, concise inte- grated report about how an organization’s strategy, gover- nance, performance, and prospects—in the context of its

The definition of basis makes perfect sense if we take the subspace V = R n (thought of as either row or column vectors), and there are infintely many bases to choose from.. But

This gives us a way of finding a basis of any subspace generated by a set of vectors, better than.

Ev de dim finie, exemples, extraction de base d’une famille généra- trice, Th de la base incomplète, dim(E), une famille libre/géné de n éléments est une base, dimension de E × F

Elle peut contenir le « thème » de cette transformation, elle peut être déterminée par une situation de classe ; mais, dans l’œuvre, cette « matière », dépouillée de

The “No Nurses No Future” is a national campaign developed by the nurses of the Italian Nurses Association to fight for the rights of the profession to sustain not only the practice