Conio.h contiene la dichiarazione di funzioni usate per richiamare alcune routine DOS di gestione del video e della tastiera. NECESSARIA PER system(‘’cls’’)

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Programmazione concorrente
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Numeri casuali.
Algoritmi e Programmazione
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA Strutture iterative
Programmazione Procedurale in Linguaggio C++
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Iterazione enumerativa (for)
Funzioni definite dall’utente
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Algoritmi Politecnico di Milano
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
Introduzione agli stream e alle classi
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
I File.
Il Linguaggio C.
Le funzioni.
Espressioni condizionali
Equazione di secondo grado.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Radice quadrata di un numero
BIOINFO3 - Lezione 221 Listruzione IF-ELSE prevede un secondo blocco di istruzioni da eseguire in alternativa al primo nel caso la condizione sia falsa.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
Complessità di un algoritmo
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Algoritmi e basi del C Struttura di un programma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 15 e 16 Programmazione strutturata A) progettazione del.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Cicli. Ci sono almeno tre modi diversi per costruire un ciclo in C e occorre utilizzare quello che meglio si adatta alle esigenze del problema che si.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

conio.h contiene la dichiarazione di funzioni usate per richiamare alcune routine DOS di gestione del video e della tastiera. NECESSARIA PER system(‘’cls’’) time.h fornisce un accesso standardizzato alle funzioni di acquisizione e manipolazione del tempo. NECESSARIA PER LA FUNZIONE TIME(NULL) unistd.h libreria di Unix che contiene funzioni di chiamate di sistema basilari del sistema operativo compatibile con C. NECESSARIA PER LA FUNZIONE GETPIP dos.h contiene la definizione delle costanti e le dichiarazioni necessarie per chiamate specifiche al DOS graphics.h contiene la dichiarazione delle routine grafiche iostream.h contiene la dichiarazione delle classi che operano sui canali fondamentali di I/O math.h contiene la dichiarazione delle principali funzioni matematiche stdio.h contiene le routine di I/O previste dal C standard stdlib.h contiene la dichiarazione di routine di uso comune string.h contiene la dichiarazione delle routine di manipolazione delle stringhe ALCUNE LIBRERIE DEL C CHE SI UTILIZZANO. BREVI CARATTERISTICHE

#include main() { int a,b,c,i; float x1,x2,de; for (i=1;i<=3;i++){ printf(" \n"); printf("Scrivi il valore di a: "); scanf("%d", &a); printf("Scrivi il valore di b: "); scanf("%d", &b); printf("Scrivi il valore di c: "); scanf("%d", &c); de= b*b -4*a*c; printf("il delta risulta essere %f \n \n", de); if (de<0){ printf("\n L'equazione non ammette soluzioni reali \n \n \n"); system("pause"); } else { if (de>0) { x1=(-b+sqrt(de))/(2*a); x2=(-b-sqrt(de))/(2*a); printf(" 1 soluzione X1 = %f \n \n ",x1); printf(" 2 soluzione X2 = %f \n \n ",x2); printf(" \n"); } else { x1=(-b+de)/(2*a); x2=(-b-de)/(2*a); printf("\n L'equazione ha soluzioni reali e coincidenti \n"); printf("\n le soluzioni coincidenti sono %f \n",x1); printf(" \n"); } system("pause"); } Equazione di 2 grado grezza Non molto intuitivo nell’esecuzione

#include main() { int a,b,c,i; float x1,x2,de; for (i=1;i<=3;i++) { system("cls"); printf(" \n \n \n"); printf(" Equazione n° %d \n \n",i); printf("Un'equazione di secondo grado si scrive secondo la seguente forma: \n"); printf(" ax^2+bx+c = 0 \n"); printf(" \n"); printf("Scrivi il valore di a: "); scanf("%d", &a); printf("Scrivi il valore di b: "); scanf("%d", &b); printf("Scrivi il valore di c: "); scanf("%d", &c); de= b*b -4*a*c; printf(" \n"); printf("il delta risulta essere %f \n \n", de); if (de<0) { printf("\nL'equazione non ha soluzioni reali\n \n \n"); system("pause"); } else { if (de>0) { x1=(-b+sqrt(de))/(2*a); x2=(-b-sqrt(de))/(2*a); printf(" 1 soluzione X1 = %f \t ",x1); printf(" 2 soluzione X2 = %f \t ",x2); printf(" \n"); } else { x1=(-b+de)/(2*a); x2=(-b-de)/(2*a); printf("\n L'equazione ha soluzioni reali e coincidenti \n"); printf("\n le soluzioni coincidenti sono %f \n",x1); printf(" \n"); } printf(" \n "); system("pause"); } Equazione di 2 grado elaborata L’aspetto del programma in esecuzione è più capibile dall’esecutore

// GENERAZIONE DI NUMERI CASUALI MEDIANTE IL CICLO FOR // #include main() { int k,n; printf("%s \n %s \n %s", "Verranno stampati un certo numero di valori interi", "estratti in maniera casuale.", "Quanti ne vuoi vedere? "); scanf("%d", &n); for(k=0; k<n; k++) { printf("%7d", rand()); } printf("\n\n"); system("PAUSE"); return 0; } Prova a generare 3 numeri casuali e annota il risultato numeri Prova a stampare 4 numeri casuali e annota il risultato numeri Prova a stampare 5 numeri casuali e annota il risultato numeri In pratica questo programma restituisce un certo numero di numeri casuali, compresi ta 0 e RAND_MAX. In realtà ogni volta che si manda in esecuzione il programma, qualunque sia il numero di numeri casuali che si vuole inserire esso restituisce sempre lo stesso set di numeri casuali. Questo accade perché la funzione rand() non è inizializzata, in quanto la sua definizione prevede che essa generi la stessa sequenza di numeri casuali. Quindi tali valori generati possono essere definiti PSEUDOCASUALI.

Per ovviare alla generazione dei numeri pseduocasuali si utilizza la funzione srand, che serve proprio per inizializzare e creare quindi numeri effettivamente casuali a partire da un valore che si può assegnare inserendolo nel suo argomento srand(3) Tale numero, 3, viene chiamato seme Se si assegna il valore 1 si ottiene la rand. Il programma parte dal numero inserito nell’argomento della srand a generare numeri casuali, ma se man mano non si cambia l’argomento, il programma restituisce gli stessi valori. Quindi bisognerebbe intervenire tutte le volte sul seme e cambiarlo prima e poi eseguire il programma, ma ovviamente non sarebbe un processo automatico. // GENERAZIONE DI NUMERI CASUALI CON SRAND SU UNA COLONNA #include main() { int k,n; printf("\n Dimmi quanti numeri casuali devo stampare:"); while(scanf("%d", &n)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf("\n Il valore inserito e' %d \n", n); srand(1); for(k=0; k<n; k++) { printf("\n%d",rand()); } printf("\n \n"); system("PAUSE"); return 0; } L’istruzione while (getchar() != ‘\n’ ) composta da while con all’interno una getchar ha il compito di assorbire tutte le lettere che sono eventualmente presenti dopo il numero inserito e controlla che l’inserimento da tastiera sia un numero. Questa istruzione svuota il buffer ( la memoria di transito cioè la zona di memoria usata temporaneamente per memorizzare i dati )

// GENERAZIONE DI NUMERI CASUALI CON GETPID SU UNA COLONNA #include main() { int k,n; //pid = getpid(); printf("\n Dimmi quanti numeri casuali devo stampare:"); while(scanf("%d", &n)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf("\n Il valore inserito e' %d \n", n); srand(getpid()); for(k=0; k<n; k++) { printf("\n%d",rand()); } printf("\n \n"); system("PAUSE"); return 0; } Per ovviare al problema della srand() ed essere certi di generare numeri realmente casuali si può usare la funzione getpid. La funzione getip() ( il suo argomento deve essere nullo ) assegna alla variabile pid il numero di ID, ossia il suo numero di identificatore di processo. Il computer infatti assegna, in maniera del tutto casuale, un numero al programma che si sta eseguendo, e tale numero dipende anche dagli altri processi che il computer sta eseguendo in contemporanea. Il numero assegnato serve da indicatore al pc per riconoscere un ben preciso programma che si vuol eseguire, ossia ad ogni processo è assegnato un numero diverso da quello attribuito ad altri processi, in modo da facilitarne il ritrovamento da parte della memoria e l’esecuzione. Proprio per l’estrema casualità con cui il processore assegna questo indirizzo, tale funzione getpid è un ottimo punto di partenza da cui far generare numeri casuali. Dunque, tramite getpid si assegna alla variabile pid il valore generato casualmente ed essa diviene a sua volta l’argomento della srand, che ora inizializza la rand() in maniera del tutto casuale, evitando in tal modo di immettere ogni volta un valore diverso nel suo argomento per avere nuovi numeri random. La printf dopo l’assegnazione alla variabile pid serve proprio per evidenziare il numero di pid che il pc ha assegnato a tale processo e da cui inizierà a generare i numeri casuali. Affinchè tale funzione possa essere eseguita, è necessario inserire la libreria unistd.h, che è una libreria propria di Unix, ma che è compatibile anche con altri compilatori, come quello del c.

Per ottenere numeri casuali si può utilizzare la funzione time(null). Tale funzione prende l’orario dell’orologio del pc e genera numeri casuali a partire da tale valore // NUMERI CASUALI CON TIME (NULL) CON VALORE MASSIMO PRIMA VERSIONE #include main() { int k,n,q,l,h; int i=1; printf("\n Dimmi quanti numeri casuali devo stampare:"); while(scanf("%d", &n)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf("\n Il valore inserito e' %d \n", n); printf ("\n Dimmi il valore massimo dei numeri casuali da inserire:"); while(scanf("%d", &q)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf("\n Il valore max per i numeri casuali inserito e' %d \n", q); printf(" \n Il time e': %d \n", time (NULL)); srand(time(NULL)); for(k=0; k<n; k++) { if (k%1==0) putchar('\n'); l=i++; if (l<10) printf(" %d",l); if (l>=10) printf(" %d",l); printf(" %d", h=rand()*q/RAND_MAX); } printf("\n \n"); system("PAUSE"); return 0; } Ciclo controllo immissione corretta di un numero Inserimento di seme mediante time(null) in srand Ciclo controllo generazione di numeri casuali con il limite del valore massimo dei numeri da inserire

// INTERVALLO NUMERI CASUALI FUNZIONE TIME (NULL) E INTERVALLO #include main() { int x,k,n,a,b; printf("\n Dimmi quanti numeri casuali devo stampare:"); while(scanf("%d", &n)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf("\n Il valore inserito e' %d \n", n); printf ("\n Dimmi l'estremo inferiore dell'intervallo:"); while(scanf("%d", &a)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf("\n Il valore minimo per i numeri casuali inserito e' %d \n", a); printf("\n Dimmi l'estremo superiore dell'intervallo:"); while(scanf("%d", &b)==0) { printf("\n Hai inserito un valore non valido!"); printf("\n Inserisci un nuovo valore numerico:"); while ( getchar() != '\n' ); } printf ("\n Il valore massimo per i numeri casuali inserito e' %d \n",b); printf(" \n Il time e': %d \n", time(NULL)); srand(time(NULL)); for(k=0; k<n; k++) { x= rand()*(b-a)/RAND_MAX+a; printf("\n%3d %d ",k+1,x); } printf("\n \n"); system("PAUSE"); return 0; }