ALCUNE LIBRERIE DEL C CHE SI UTILIZZANO . BREVI CARATTERISTICHE
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)
libreria di Unix che contiene funzioni di chiamate di sistema basilari del sistema operativo
compatibile con C . NECESSARIA PER LA FUNZIONE GETPIP
unistd.h
dos.h
graphics.h
contiene la definizione delle costanti e le dichiarazioni necessarie per
chiamate specifiche al DOS
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
Equazione di 2 grado grezza
Non molto intuitivo nell’esecuzione
#include <math.h>
#include <stdio.h>
#include <iostream>
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 {
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");
if (de>0) {
}
else
{
}
system("pause");
}
}
}
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");
#include <math.h>
#include <stdio.h>
#include<conio.h>
#include <iostream>
Equazione di 2 grado elaborata
L’aspetto del programma in esecuzione è più capibile dall’esecutore
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
{
}
printf(" \n ");
system("pause");
}
}
}
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");
// GENERAZIONE DI NUMERI CASUALI MEDIANTE IL CICLO FOR //
#include <stdio.h>
#include <stdlib.h>
Prova a generare 3 numeri casuali e annota il risultato
Prova a stampare 4 numeri casuali e annota il risultato
Prova a stampare 5 numeri casuali e annota il risultato
main()
{
int k,n;
numeri 41
numeri 41
numeri 41
18467
18467
18467
6334
6334
6334
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;
}
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.
26500
26500 19169
// GENERAZIONE DI NUMERI CASUALI CON SRAND SU UNA COLONNA
#include <stdio.h>
#include <stdlib.h>
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());
}
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 .
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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
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.
// NUMERI CASUALI CON TIME (NULL) CON VALORE MASSIMO PRIMA VERSIONE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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
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' );
}
Ciclo controllo
immissione corretta di
un numero
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));
Inserimento di seme mediante
Ciclo controllo
immissione corretta di
un numero
time(null) in srand
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 generazione di
numeri casuali con il limite del
valore massimo dei numeri da
inserire
// INTERVALLO NUMERI CASUALI FUNZIONE TIME (NULL) E INTERVALLO
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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;
}
Scarica

3 presentazione