Codice dei programmi nella directory:
///File: VerificaFebbraio-da-completare.c
/*** verifica Febbraio C: soluzioni di tutti gli esercizi (Fila A e B)
NB: gli esercizi 1A e 1B sono risolti direttamente nel main(), per gli altri otto,
sono state codificate otto funzioni e poi sono state richiamate dal main
***/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10 /// dimensione dei vettori
// Random(X) ritorna un numero fra 1 e X
int Random(int N)
{
static int primavolta = 1; // BOOLEANO
if (primavolta)
{
srand(time(NULL)); /* inizializzo il seme */
primavolta = 0;
}
return (rand() % N) + 1;
}
/// visualizza un vettore in verticale
void visualizza(int v[], int nelem)
{
int i;
for(i=0; i < nelem; i++)
{
printf("v[%d]=%d\n",i,v[i]);
}
}
/// Funzione utilissima per molti esercizi proposti
int ce(int v[], int elem, int dim)
/// verifica se in un vettore di dimensione dim, c'e' l'elemento elem
{
int i;
for(i=0; i < dim; i++)
if(v[i]==elem) return 1; // vero, elem e' nel vettore
return 0; /// falso, elem non c'e' nel vettore
}
void es2A(int v1[], int v2[])
{
/**Scrivi un programma che, acquisiti due vettori di 10 elementi interi,
vet1 e vet2, crei e stampi un terzo vettore che contenga gli elementi
che sono presenti in entrambi gli array. [punti 2] **/
int k=0;
int v3[MAX];
int i;
/// Se v1[i] c'e' in v2 ...
/// Se v1[i] NON c'e' in v3[3] ....
/// lo aggiungo in v3
printf("\nEs2A) Elementi comuni ai due vettori:\n");
visualizza(v3,k); /// k mi dice quanti sono i valori di v3
}
void es2B(int v1[], int v2[])
{
/*** Scrivi un programma che, acquisiti due vettori di 10 elementi interi,
vet1 e vet2, crei e stampi un terzo vettore che contenga gli
elementi che NON sono presenti in entrambi gli array. [punti 2] ***/
int k=0;
int v3[MAX];
int i;
int el; /// elementi cercati
/// metto in v3 gli elementi comuni di v1 e v2
/// ora in v3 ci sono i K elementi comuni ai due vettori
printf("\nES2B) Elementi che ci sono solo nel primo o solo nel secondo vettore:\n");
for(i=0; i < MAX; i++) /// cerco in v1 e poi in v2
{
/// se el non e' nei comuni lo stampo
}
}
void es3A()
{
/** Realizzare un programma che, inserita in un array una sequenza di 1 e 0, crei un altro array (l’array
sequenza) che contenga la lunghezza delle sequenze di zeri e uni presenti nel primo array. [punti 2.25]
int bin[]={1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0} →
sequenza=[3,2,4,3,2,4] **/
int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0};
int sequenza[sizeof(bin)/sizeof(int)]; /// cosi puoi cambiare a piacere il vettore sopra
int elem; /// elemento che sto esaminando
int ELEM=sizeof(bin)/sizeof(int); /// dimensione del vettore bin
int i=0,j=0,seq;
do
{
elem=bin[i];
seq=1; /// lunghezza della attuale sequenza
i++;
}
while(i < ELEM);
printf("\nEs3A) Ecco le sequenza di bin[]:\n");
visualizza(sequenza,j);
}
void es3B()
{
/*** Esercizio 3B
Dato un numero di 6 cifre generato casualmente, realizza un programma che generi un array con le singole
cifre del numero in ordine inverso [punti 2]
Es.
348597 -> [7, 9, 5, 8, 4, 3] **/
int num;
int v[6];
int i;
num=100000; /// numero minimo di 6 cifre
num+=Random(900000)-1; /// genero fra 0 e 899999
printf("\nEs3B) Numero generato=%d\n",num);
for(i=0; i <6; i++) /// le cifre sono sempre 6
{
}
printf("Ecco le cifre nel vettore:\n");
visualizza(v,6);
}
void es4A()
{
/*** Scrivi un programma in C che, dato un numero intero positivo di 6 cifre generato casualmente, trovi le sue
cifre pari e le salvi, rovesciate, in un array. Se non ci sono cifre pari, l'array dovrà contenere tutti 0. [punti 2]
Es.
347268
risulta
[8, 6, 2, 4] ***/
int num;
int v[6]= {0}; /// vettore azzerato
int i,j;
int cifra;
num=100000; /// numero minimo di 6 cifre
num+=Random(900000)-1; /// genero fra 0 e 899999
printf("\nEs 4A) Numero generato=%d\n",num);
for(i=0; i <6; i++) /// le cifre sono sempre 6
{
}
printf("Ecco le %d cifre pari nel vettore:\n",j);
visualizza(v,j);
}
int massimo(int v[], int nelem) /// ritona il massimo di un vettore
{
int i;
int max=v[0];
for(i=1; i < nelem; i++)
if (v[i]> max) max=v[i];
return max;
}
void es4B() /// Si puo' fare una variante della soluzione qui sotto: usare un solo vettore per le sequenze
/// numerando le sequenze di 1 con valori positivi e quelle di 0 con valori negativi.
{
/*** Esercizio 4
Realizzare un programma in linguaggio C che, inserita in un array una sequenza di 0 e 1, determini la
lunghezza massima della sequenza di zeri consecutivi e la lunghezza massima della sequenza di uni
consecutivi presenti nell’array. [punti 2.25]
int bin[]={1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0}
max 1 = 4
max 0 = 5
***/
int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0};
int ELEM=sizeof(bin)/sizeof(int);
int elem; /// elemento che sto esaminando
int i=0,j0, j1, s0, s1;
int seq1[ELEM/2]; /// sequenze di 1
int seq0[ELEM/2]; /// sequenze di 0
j0=j1=0; /// indici dei 2 vettori seq0 e seq1
s0=s1=0; /// s0==lunghezza sequenze di 0, s1 == lunghezza di seq. di 1
do
{
elem=bin[i]; /// prendo il prox elemento;
i++;
}
while(i < ELEM);
printf("\nEs4B)\n");
printf("bin[]={1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0};\n");
printf("Sequenze di 0:\n");
visualizza(seq0,j0);
printf("Sequenze di 1:\n");
visualizza(seq1,j1);
printf("La lunghezza massima di zeri e' %d\n",massimo(seq0,j0));
printf("La lunghezza massima di uni e' %d\n",massimo(seq1,j1));
}
void es5A()
{
/*** Dato un array di 10 elementi interi, realizzare un programma che effettui lo shift di una posizione a destra
dei valori dell'array. L'ultimo elemento si shifta col primo.
Al termine si dovrà stampare l'array modificato. [punti 2.25]
Es.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
diventa
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
***/
int v[] = {2,4,6,8,10,12,14,16,18,20};
int dep,i;
int elem=sizeof(v)/sizeof(int); /// cosi puoi allungare a piacere il vettore
visualizza(v,elem); /// visualizzo il vettore
}
void es5B()
{
/*** Dato un array di 10 elementi interi, realizzare un programma che effettui lo shift di una posizione a sinistra
dei valori dell'array. Il primo elemento si shifta con l’ultimo. [punti 2.25]
Al termine si dovrà stampare l'array modificato.
Es.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
diventa
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
***/
int v[] = {2,4,6,8,10,12,14,16,18,20};
int dep,i;
int elem=sizeof(v)/sizeof(int); /// cosi puoi allungare a piacere il vettore
printf("\nEs5B) shift a sinistra:\n");
visualizza(v,elem); /// visualizzo il vettore
}
int main()
{
int v1[MAX], v2[MAX];
int i;
int somma=0;
for(i=0; i < MAX; i++ ) /// riempio 2 vettori
{
v1[i]=Random(20);
v2[i]=Random(20);
}
visualizza(v1,MAX);
printf("----------------------------\n");
visualizza(v2,MAX);
/***Scrivere un programma in C che calcola il prodotto scalare di due vettori di 7 numeri
ciascuno generati casualmente tra 1-10.]
(“Per ottenere il prodotto scalare si moltiplicano gli elementi che stanno nella stessa
posizione nei due array e poi si sommano tutti i prodotti ottenuti.”) [punti 1.5] ***/
for(i=0; i < MAX; i++)
somma+= v1[i]*v2[i]; /// ***
printf("Prodotto scalare FILA A= %d\n",somma);
/**
Scrivere un programma in C che calcoli la somma dei prodotti incrociati
di due vettori di 7 numeri ciascuno generati casualmente tra 1-10.
Il prodotto incrociato si calcola moltiplicando il primo
elemento del primo vettore con l'ultimo elemento del secondo vettore,
il secondo con il penultimo, e così via.
Il programma deve stampare i due vettori e il risultato finale. [punti 1.5] **/
somma=0;
for(i=0; i < MAX; i++)
somma+= v1[i]*v2[MAX-1-i]; /// ***
printf("Prodotto scalare FILA B= %d\n",somma);
es2A(v1,v2);
es2B(v1,v2);
es3A();
es3B();
es4A();
es4B();
es5A();
es5B();
return 0;
}
///(Fine file: VerificaFebbraio-da-completare.c)
///File: VerificaFebbraioBuonocoreDiGangiTalunkdar.c
/*** verifica Febbraio C: soluzioni di tutti gli esercizi (Fila A e B)
NB: gli esercizi 1A e 1B sono risolti direttamente nel main(), per gli altri otto,
sono state codificate otto funzioni e poi sono state richiamate dal main
***/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 5 /// dimensione dei vettori
// Random(X) ritorna un numero fra 1 e X
int Random(int N)
{
static int primavolta = 1; // BOOLEANO
if (primavolta)
{
srand(time(NULL)); /* inizializzo il seme */
primavolta = 0;
}
return (rand() % N) + 1;
}
/// visualizza un vettore in verticale
void visualizza(int v[], int nelem)
{
int i;
for(i=0; i < nelem; i++)
{
printf("v[%d]=%d\n",i,v[i]);
}
}
/// Funzione utilissima per molti esercizi proposti
int ce(int v[], int elem, int dim)
/// verifica se in un vettore di dimensione dim, c'e' l'elemento elem
{
int i;
for(i=0; i < dim; i++)
if(v[i]==elem) return 1; // vero, elem e' nel vettore
return 0; /// falso, elem non c'e' nel vettore
}
void es2A(int v1[], int v2[]) //Buonocore
{
/**Scrivi un programma che, acquisiti due vettori di 10 elementi interi,
vet1 e vet2, crei e stampi un terzo vettore che contenga gli elementi
che sono presenti in entrambi gli array. [punti 2] **/
int k = 0;
int v3[MAX];
int i;
printf("\n----------\n");
printf(" Es2A Buonocore\n");
printf("----------\n");
for(i = 0; i < MAX; i++)
if(ce(v2, v1[i], MAX))
if(!ce(v3, v1[i], k+1))
v3[k] = v1[i], k++;
printf("Elementi comuni ai due vettori:\n");
visualizza(v3,k); /// k mi dice quanti sono i valori di v3
}
void es2B(int v1[], int v2[]) //Buonocore
{
/*** Scrivi un programma che, acquisiti due vettori di 10 elementi interi,
vet1 e vet2, crei e stampi un terzo vettore che contenga gli
elementi che NON sono presenti in entrambi gli array. [punti 2] ***/
printf("\n----------\n");
printf(" Es2B Buonocore\n");
printf("----------\n");
int k=0;
int v3[MAX];
int i;
int el; /// elementi cercati
/// ora in v3 ci sono i K elementi comuni ai due vettori
printf("Elementi che ci sono solo nel primo o solo nel secondo vettore:\n");
for(i=0; i < MAX; i++) /// cerco in v1 e poi in v2
if(!ce(v2, v1[i], MAX))
if(!ce(v3, v1[i], k+1))
v3[k] = v1[i], k++;
for(i=0; i < MAX; i++) /// cerco in v1 e poi in v2
if(!ce(v1, v2[i], MAX))
if(!ce(v3, v2[i], k+1))
v3[k] = v2[i], k++;
visualizza(v3, k);
}
void es3A() /// buonocore
{
/** Realizzare un programma che, inserita in un array una sequenza di 1 e 0, crei un altro array (l’array
sequenza) che contenga la lunghezza delle sequenze di zeri e uni presenti nel primo array. [punti 2.25]
int bin[]={1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0} →
sequenza=[3,2,4,3,2,4] **/
int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0};
int sequenza[sizeof(bin)/sizeof(int)]; /// cosi puoi cambiare a piacere il vettore sopra
int elem; /// elemento che sto esaminando
int ELEM=sizeof(bin)/sizeof(int); /// dimensione del vettore bin
int i = 1,j = 1,seq = 0;
do
{
if(bin[i-1] == bin[i])
j++;
else
sequenza[seq] = j, seq++, j = 1;
i++;
}
while(i <= ELEM);
sequenza[seq] = j;
printf("\n3A) (Buonocore) Ecco le sequenza di bin[]:\n");
printf("bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0};\n");
visualizza(sequenza,seq);
}
void es3B() /// Buonocore
{
/*** Esercizio 3B
Dato un numero di 6 cifre generato casualmente, realizza un programma che generi un array con le singole
cifre del numero in ordine inverso [punti 2]
Es.
348597 -> [7, 9, 5, 8, 4, 3] **/
int num;
int v[6];
int i;
num=100000; /// numero minimo di 6 cifre
num+=Random(900000)-1; /// genero fra 0 e 899999
printf("\n3B) (Buonocore) Numero generato=%d\n",num);
for(i = 0; i < 6; i++) /// le cifre sono sempre 6
v[i] = num % 10, num /= 10;
printf("Ecco le cifre nel vettore:\n");
visualizza(v,6);
}
/*****/
void es4A() //// Di Gangi
{
/*** Scrivi un programma in C che, dato un numero intero positivo di 6 cifre generato casualmente, trovi le sue
cifre pari e le salvi, rovesciate, in un array. Se non ci sono cifre pari, l'array dovrà contenere tutti 0. [punti 2]
Es.
347268
risulta
[8, 6, 2, 4] ***/
int num;
int v[6]= {0}; /// vettore azzerato
int i,j;
int cifra;
num=100000; /// numero minimo di 6 cifre
num+=Random(900000)-1; /// genero fra 0 e 899999
printf("\nEs 4A) (Di Gangi) Numero generato=%d\n",num);
for(i = 0; i < 6; i++)
{
cifra = num % 10;
if(cifra % 2 == 0)
{
v[j] = cifra;
j++;
}
num /= 10;
}
if(j == 0)
{
for(i = 0; i < 6; i++) v[i] = 0;
j = 6;
}
printf("Ecco le %d cifre pari nel vettore:\n",j);
visualizza(v,j);
}
int massimo(int v[], int nelem) /// ritorna il massimo di un vettore
{
int i;
int max=v[0];
for(i=1; i < nelem; i++)
if (v[i]> max) max=v[i];
return max;
}
void es4B() /// Si puo' fare una variante della soluzione qui sotto: usare un solo vettore per le sequenze
/// numerando le sequenze di 1 con valori positivi e quelle di 0 con valori negativi.
{
/*** Esercizio 4
Realizzare un programma in linguaggio C che, inserita in un array una sequenza di 0 e 1, determini la
lunghezza massima della sequenza di zeri consecutivi e la lunghezza massima della sequenza di uni
consecutivi presenti nell'array. [punti 2.25]
int bin[]={1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0}
max 1 = 4
max 0 = 5
***/
int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0};
int ELEM=sizeof(bin)/sizeof(int);
int elem; /// elemento che sto esaminando
int i=0,j0, j1, s0, s1;
int seq1[ELEM/2]; /// sequenze di 1
int seq0[ELEM/2]; /// sequenze di 0
j0=j1=0; /// indici dei 2 vettori seq0 e seq1
s0=s1=0; /// s0==lunghezza sequenze di 0, s1 == lunghezza di seq. di 1
do
{
elem=bin[i]; /// prendo il prox elemento;
if(elem == 0)
{
s0++; // aumento la lunghezza della sequenza di 0
if(s1 > 0) // se prima stavo contando 1
{
seq1[j1++] = s1; // salvo la sequenza di 1
s1 = 0; // resetto il contatore di 1
}
}
else // elem == 1
{
s1++; // aumento la lunghezza della sequenza di 1
if(s0 > 0) // se prima stavo contando 0
{
seq0[j0++] = s0; // salvo la sequenza di 0
s0 = 0; // resetto il contatore di 0
}
}
i++;
}
while(i<ELEM);
if(s0 > 0)
seq0[j0++] = s0;
if(s1 > 0)
seq1[j1++] = s1;
while(i < ELEM);
printf("\nEs4B)\n");
printf("int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0};\n");
printf("Sequenze di 0:\n");
visualizza(seq0,j0);
printf("Sequenze di 1:\n");
visualizza(seq1,j1);
printf("La lunghezza massima di zeri e' %d\n",massimo(seq0,j0));
printf("La lunghezza massima di uni e' %d\n",massimo(seq1,j1));
}
void es5A() //// Talunkdar
{
/*** Dato un array di 10 elementi interi, realizzare un programma
che effettui lo shift di una posizione a destra
dei valori dell'array. L'ultimo elemento si shifta col primo.
Al termine si dovrà stampare l'array modificato. [punti 2.25]
Es.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
***/
int v[] = {2,4,6,8,10,12,14,16,18,20};
int dep,i;
int elem = sizeof(v)/sizeof(int);
dep = v[elem-1];
for(i = elem-1; i > 0; i--)
{
v[i] = v[i-1];
}
v[0] = dep;
printf("\nShift a destra (Talunkdar):\n");
visualizza(v,elem);
}
void es5B() /// Di Gangi
{
/*** Dato un array di 10 elementi interi, realizzare un programma che effettui lo shift di una posizione a sinistra
dei valori dell'array. Il primo elemento si shifta con l’ultimo. [punti 2.25]
Al termine si dovrà stampare l'array modificato.
Es.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
diventa
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
***/
int v[] = {2,4,6,8,10,12,14,16,18,20};
int dep,i;
int elem=sizeof(v)/sizeof(int);
printf("\nEs5B) shift a sinistra(Di Gangi):\n");
printf("Array originale: \n");
visualizza(v, elem);
int temp = v[0];
for(int i = 0; i < elem-1; i++) {
v[i] = v[i+1];
}
v[elem-1] = temp;
printf("\nEs5B) shift a sinistra:\n");
visualizza(v,elem);
}
int main()
{
int v1[MAX], v2[MAX];
int i;
int somma=0;
for(i=0; i < MAX; i++ ) /// riempio 2 vettori
{
v1[i]=Random(20);
v2[i]=Random(20);
}
visualizza(v1,MAX);
printf("----------------------------\n");
visualizza(v2,MAX);
/***Scrivere un programma in C che calcola il prodotto scalare di due vettori di 7 numeri
ciascuno generati casualmente tra 1-10.]
(“Per ottenere il prodotto scalare si moltiplicano gli elementi che stanno nella stessa
posizione nei due array e poi si sommano tutti i prodotti ottenuti.”) [punti 1.5] ***/
for(i=0; i < MAX; i++)
somma+= v1[i]*v2[i]; /// ***
printf("Prodotto scalare FILA A= %d\n",somma);
/**
Scrivere un programma in C che calcoli la somma dei prodotti incrociati
di due vettori di 7 numeri ciascuno generati casualmente tra 1-10.
Il prodotto incrociato si calcola moltiplicando il primo
elemento del primo vettore con l'ultimo elemento del secondo vettore,
il secondo con il penultimo, e cosi' via.
Il programma deve stampare i due vettori e il risultato finale. [punti 1.5] **/
somma=0;
for(i=0; i < MAX; i++)
somma+= v1[i]*v2[MAX-1-i]; /// ***
printf("Prodotto scalare FILA B= %d\n",somma);
es2A(v1,v2);
es2B(v1,v2);
es3A();
es3B();
es4A();
es4B();
es5A();
es5B();
return 0;
}
///(Fine file: VerificaFebbraioBuonocoreDiGangiTalunkdar.c)
///File: VerificaFebbraioPossibileSoluzione.c
/*** verifica Febbraio C: soluzioni di tutti gli esercizi (Fila A e B)
NB: gli esercizi 1A e 1B sono risolti direttamente nel main(), per gli altri otto,
sono state codificate otto funzioni e poi sono state richiamate dal main
***/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10 /// dimensione dei vettori
// Random(X) ritorna un numero fra 1 e X
int Random(int N)
{
static int primavolta = 1; // BOOLEANO
if (primavolta)
{
srand(time(NULL)); /* inizializzo il seme */
primavolta = 0;
}
return (rand() % N) + 1;
}
/// visualizza un vettore in verticale
void visualizza(int v[], int nelem)
{
int i;
for(i=0; i < nelem; i++)
{
printf("v[%d]=%d\n",i,v[i]);
}
}
/// Funzione utilissima per molti esercizi proposti
int ce(int v[], int elem, int dim)
/// verifica se in un vettore di dimensione dim, c'e' l'elemento elem
{
int i;
for(i=0; i < dim; i++)
if(v[i]==elem) return 1; // vero, elem e' nel vettore
return 0; /// falso, elem non c'e' nel vettore
}
void es2A(int v1[], int v2[])
{
/**Scrivi un programma che, acquisiti due vettori di 10 elementi interi,
vet1 e vet2, crei e stampi un terzo vettore che contenga gli elementi
che sono presenti in entrambi gli array. [punti 2] **/
int k=0;
int v3[MAX];
int i;
for(i=0; i < MAX; i++)
if(ce(v2,v1[i],MAX)) /// Se v1[i] c'e' in v2 ...
if(!ce(v3,v1[i],k)) /// Se v1[i] NON c'e' in v3[3] ....
v3[k++]=v1[i]; /// lo aggiungo in v3
printf("\nEs2A) Elementi comuni ai due vettori:\n");
visualizza(v3,k); /// k mi dice quanti sono i valori di v3
}
void es2B(int v1[], int v2[])
{
/*** Scrivi un programma che, acquisiti due vettori di 10 elementi interi,
vet1 e vet2, crei e stampi un terzo vettore che contenga gli
elementi che NON sono presenti in entrambi gli array. [punti 2] ***/
int k=0;
int v3[MAX];
int i;
int el; /// elementi cercati
for(i=0; i < MAX; i++) /// metto in v3 gli elementi comuni di v1 e v2
if(ce(v2,v1[i],MAX))
if(!ce(v3,v1[i],k)) /// lo metto in v3 SOLO se non c'e' gia'
v3[k++]=v1[i];
/// ora in v3 ci sono i K elementi comuni ai due vettori
printf("\nES2B) Elementi che ci sono solo nel primo o solo nel secondo vettore:\n");
for(i=0; i < MAX; i++) /// cerco in v1 e poi in v2
{
el=v1[i];
if (!ce(v3,el,k)) printf("E' solo in v1[]: %d\n",el); /// se el non e' nei comuni lo stampo
el=v2[i];
if (!ce(v3,el,k)) printf("E' solo in v2[]: %d\n",el); /// se el non e' nei comuni lo stampo
}
}
void es3A()
{
/** Realizzare un programma che, inserita in un array una sequenza di 1 e 0, crei un altro array (l’array
sequenza) che contenga la lunghezza delle sequenze di zeri e uni presenti nel primo array. [punti 2.25]
int bin[]={1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0} →
sequenza=[3,2,4,3,2,4] **/
int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0};
int sequenza[sizeof(bin)/sizeof(int)]; /// cosi puoi cambiare a piacere il vettore sopra
int elem; /// elemento che sto esaminando
int ELEM=sizeof(bin)/sizeof(int); /// dimensione del vettore bin
int i=0,j=0,seq;
do
{
elem=bin[i];
seq=1; /// lunghezza della attuale sequenza
while(bin[i]==bin[i+1] && i < ELEM-1)
i++,seq++;
sequenza[j]=seq;
j++;
i++;
}
while(i < ELEM);
printf("\nEs3A) Ecco le sequenza di bin[]:\n");
visualizza(sequenza,j);
}
void es3B()
{
/*** Esercizio 3B
Dato un numero di 6 cifre generato casualmente, realizza un programma che generi un array con le singole
cifre del numero in ordine inverso [punti 2]
Es.
348597 -> [7, 9, 5, 8, 4, 3] **/
int num;
int v[6];
int i;
num=100000; /// numero minimo di 6 cifre
num+=Random(900000)-1; /// genero fra 0 e 899999
printf("\nEs3B) Numero generato=%d\n",num);
for(i=0; i <6; i++) /// le cifre sono sempre 6
{
v[i]=num % 10;
num/=10;
}
printf("Ecco le cifre nel vettore:\n");
visualizza(v,6);
}
void es4A()
{
/*** Scrivi un programma in C che, dato un numero intero positivo di 6 cifre generato casualmente, trovi le sue
cifre pari e le salvi, rovesciate, in un array. Se non ci sono cifre pari, l'array dovrà contenere tutti 0. [punti 2]
Es.
347268
risulta
[8, 6, 2, 4] ***/
int num;
int v[6]= {0}; /// vettore azzerato
int i,j;
int cifra;
num=100000; /// numero minimo di 6 cifre
num+=Random(900000)-1; /// genero fra 0 e 899999
printf("\nEs 4A) Numero generato=%d\n",num);
for(i=0; i <6; i++) /// le cifre sono sempre 6
{
cifra=num % 10;
if (cifra%2==0) /// se la cifra e' pari
v[j++]=cifra; /// la metto nel vettore
num/=10;
}
printf("Ecco le %d cifre pari nel vettore:\n",j);
visualizza(v,j);
}
int massimo(int v[], int nelem) /// ritona il massimo di un vettore
{
int i;
int max=v[0];
for(i=1; i < nelem; i++)
if (v[i]> max) max=v[i];
return max;
}
void es4B() /// Si puo' fare una variante della soluzione qui sotto: usare un solo vettore per le sequenze
/// numerando le sequenze di 1 con valori positivi e quelle di 0 con valori negativi.
{
/*** Esercizio 4
Realizzare un programma in linguaggio C che, inserita in un array una sequenza di 0 e 1, determini la
lunghezza massima della sequenza di zeri consecutivi e la lunghezza massima della sequenza di uni
consecutivi presenti nell’array. [punti 2.25]
int bin[]={1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0}
max 1 = 4
max 0 = 5
***/
int bin[]= {1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0};
int ELEM=sizeof(bin)/sizeof(int);
int elem; /// elemento che sto esaminando
int i=0,j0, j1, s0, s1;
int seq1[ELEM/2]; /// sequenze di 1
int seq0[ELEM/2]; /// sequenze di 0
j0=j1=0; /// indici dei 2 vettori seq0 e seq1
s0=s1=0; /// s0==lunghezza sequenze di 0, s1 == lunghezza di seq. di 1
do
{
elem=bin[i]; /// prendo il prox elemento;
if (elem == 1) s1=1; /// lunghezza della attuale sequenza di 1
else s0=1; /// lunghezza della attuale sequenza di 0
while(elem==1 && bin[i]==bin[i+1] && i < ELEM-1) /// vedo se e' una sequenza di 1
i++,s1++;
while(elem==0 && bin[i]==bin[i+1] && i < ELEM-1) /// o vedo se e' una sequenza di 0
i++,s0++;
if (elem==1) seq1[j1++]=s1; /// metto opportunamente la lunghezza della sequenza nel suo vettore
else seq0[j0++]=s0;
i++;
}
while(i < ELEM);
printf("\nEs4B)\n");
printf("bin[]={1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0};\n");
printf("Sequenze di 0:\n");
visualizza(seq0,j0);
printf("Sequenze di 1:\n");
visualizza(seq1,j1);
printf("La lunghezza massima di zeri e' %d\n",massimo(seq0,j0));
printf("La lunghezza massima di uni e' %d\n",massimo(seq1,j1));
}
void es5A()
{
/*** Dato un array di 10 elementi interi, realizzare un programma che effettui lo shift di una posizione a destra
dei valori dell'array. L'ultimo elemento si shifta col primo.
Al termine si dovrà stampare l'array modificato. [punti 2.25]
Es.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
diventa
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
***/
int v[] = {2,4,6,8,10,12,14,16,18,20};
int dep,i;
int elem=sizeof(v)/sizeof(int); /// cosi puoi allungare a piacere il vettore
dep=v[0]; //// metto in dep il primo elemento del vettore
for(i=0; i < elem-1; i++)
v[i]=v[i+1];
v[elem-1]=dep;
printf("\nEs5A) shift a destra :\n");
visualizza(v,elem); /// visualizzo il vettore
}
void es5B()
{
/*** Dato un array di 10 elementi interi, realizzare un programma che effettui lo shift di una posizione a sinistra
dei valori dell'array. Il primo elemento si shifta con l’ultimo. [punti 2.25]
Al termine si dovrà stampare l'array modificato.
Es.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
diventa
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
***/
int v[] = {2,4,6,8,10,12,14,16,18,20};
int dep,i;
int elem=sizeof(v)/sizeof(int); /// cosi puoi allungare a piacere il vettore
dep=v[elem-1]; //// metto in dep l'ultimo elemento del vettore
for(i=elem-1; i >0; i--)
v[i]=v[i-1];
v[0]=dep;
printf("\nEs5B) shift a sinistra:\n");
visualizza(v,elem); /// visualizzo il vettore
}
int main()
{
int v1[MAX], v2[MAX];
int i;
int somma=0;
for(i=0; i < MAX; i++ ) /// riempio 2 vettori
{
v1[i]=Random(20);
v2[i]=Random(20);
}
visualizza(v1,MAX);
printf("----------------------------\n");
visualizza(v2,MAX);
/***Scrivere un programma in C che calcola il prodotto scalare di due vettori di 7 numeri
ciascuno generati casualmente tra 1-10.]
(“Per ottenere il prodotto scalare si moltiplicano gli elementi che stanno nella stessa
posizione nei due array e poi si sommano tutti i prodotti ottenuti.”) [punti 1.5] ***/
for(i=0; i < MAX; i++)
somma+= v1[i]*v2[i]; /// ***
printf("Prodotto scalare FILA A= %d\n",somma);
/**
Scrivere un programma in C che calcoli la somma dei prodotti incrociati
di due vettori di 7 numeri ciascuno generati casualmente tra 1-10.
Il prodotto incrociato si calcola moltiplicando il primo
elemento del primo vettore con l'ultimo elemento del secondo vettore,
il secondo con il penultimo, e così via.
Il programma deve stampare i due vettori e il risultato finale. [punti 1.5] **/
somma=0;
for(i=0; i < MAX; i++)
somma+= v1[i]*v2[MAX-1-i]; /// ***
printf("Prodotto scalare FILA B= %d\n",somma);
es2A(v1,v2);
es2B(v1,v2);
es3A();
es3B();
es4A();
es4B();
es5A();
es5B();
return 0;
}
///(Fine file: VerificaFebbraioPossibileSoluzione.c)