Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 1
Esempio
Analisi e Specifica
Definizione del problema: Inserire i valori di tutti gli elementi di un array monodimensionale di interi, composto da 50 elementi, visualizzare il contenuto dello array così ottenuto, e dopo calcolare la sommatoria degli elementi di indice dispari (l’indice 0 è considerato pari) e la produttoria degli elementi con valore pari.
Definizione dei dati del problema:
I: il valore di ciascun elemento dello array di numeri interi
Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array
U: lo array ‘riempito’ con i valori di tutti gli elementi, la sommatoria degli elementi di indice dispari, la produttoria degli elementi con valore pari Pu: lo array non può essere ‘vuoto’; la produttoria deve essere un numero pari
Esempio
Nome variabile Descrizione Tipo
VET(I) elemento dell’array INT
Nome variabile Descrizione Tipo
VET array di interi con i valori immessi INT SommaIndicidispari sommatoria elementi indice dispari INT ProduttoriaPari produttoria elementi con valore pari INT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
I Indice array INT Tabella delle variabili di algoritmo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 3
Esempio Progettazione
Descrizione del metodo di elaborazione:
Con un ciclo ripetitivo, si effettua la lettura del valore di ciascun elemento dell’array.
Si visualizza, sempre usando un ciclo ripetitivo, il contenuto dello array, stampando ad ogni passo del ciclo il valore di ciascun elemento dello array Si Inizializza a zero il valore della sommatoria dei valori nelle posizioni di indice dispari, ed a uno la produttoria degli elementi con valore pari.
Con un ciclo ripetitivo che parte dalla posizione di indice 1 e con step di incremento pari a due si calcola la sommatoria dei valori nelle posizioni di indice dispari. Si stampa il risultato ottenuto.
Con un ciclo ripetitivo che parte dalla posizione di indice 0 e con step di incremento pari a 1 si visitano gli elementi dello array si verifica se il valore dell’elemento è pari ed in tal caso lo si moltiplica al valore corrente della produttoria. . Si stampa il risultato ottenuto.
#include< stdio. h>
main()
{const int CARD=50;//costante con nome con valore 50 int Vett[CARD], i, SommaIndicidispari,
ProduttoriaPari;
// Legge in input i valori di tutti gli elementi dello array
for (i= 0; i<CARD; i++) {
printf(“Valore di Vett(%d)\ n", i);
scanf("%d", &Vett[ i]);
Esempio - il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 5
// calcola la sommatoria degli elementi di indice dispari
SommaIndicidispari=0;
for (i= 1; i<CARD; i=i+2)
SommaIndicidispari= SommaIndicidispari + Vett[i];
printf(“Sommatoria valori elementi in posti di indice dispari=% d\n", SommaIndicidispari);
Esempio - il programma C
// calcola la produttoria degli elementi con valore pari
Produttoriapari = 1;
for (i= 0; i<CARD; i++) { if (Vett[i]%2 == 0)
Produttoriapari= Produttoriapari * Vett[i];
}
printf(“Produttoria elementi con valore pari = %d\n”, Produttoriapari);
} // fine programma
Esempio - il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 7
// calcola la sommatoria degli elementi di indice dispari // un altro modo ma meno efficiente
Sommadispari=0;
for (i= 0; i< CARD; i++)
{if ((i%2)!=0) // verifica se il valore di è // un numero dispari
Sommadispari= Sommadispari+Vett[i];
}
printf(“Sommatoria valori elementi in posti di indice dispari=% d\ n", Sommadispari);
Esempio - il programma C
Esempio
Analisi e Specifica
Definizione del problema: ....
.... Calcolare la produttoria degli elementi con valore multiplo di 5.
Definizione dei dati del problema:
I: il valore di ciascun elemento dello array di numeri interi Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 9
…
float Produttoria_5;
…
// calcola la produttoria degli elementi di valore multiplo 5
Produttoria_5 = 1;
for (i= 1; i< CARD; i++) {if (Vett[i] % 5 == 0)
Produttoria_5 = Produttoria_5 * Vett[i];
}
printf(“Produttoria valori multipli di 5 = %f\ n", Produttoria_5);
} // fine programma
Esempio - il programma C
Esempio
Definizione del problema: Trovare il valore minimo e quello massimo tra gli elementi di un array di interi, con cardinalità 50, ed indicarne la posizione (se vi sono più elementi con lo stesso valore minimo/massimo va indicata la posizione solo del primo elemento ‘minimo’/’massimo’). Lo array può essere
‘riempito’ parzialmente.
Definizione dei dati del problema:
I: il riempimento; il valore di ciascun elemento
Pi: il riempimento non può essere maggiore della cardinalità dell’array U: il valore minimo nello array; la posizione dell’elemento con valore minimo, il valore massimo nello array; la posizione dell’elemento con valore massimo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 11
Esempio
Nome variabile Descrizione Tipo riemp riempimento INT VET(I) elemento dell’array INT
Nome variabile Descrizione Tipo MIN Elemento con il valore minimo INT POSMIN Posizione dove è contenuto MIN INT MAX Elemento con il valore massimi INT POSMAX Posizione dove è contenuto MAX INT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
I Indice array INT
Tabella delle variabili di algoritmo
Esempio
Descrizione del metodo di elaborazione:
è immesso il numero di quanti elementi si vogliono inserire (riempimento): tale numero deve essere minore della cardinalità dello array.
Usando un ciclo si ‘riempe’ lo array leggendo il valore di ciascun elemento da immettere.
Si pone il minimo pari al primo elemento dell’array e la sua posizione pari all’indice zero.
Si pone il massimo pari al primo elemento dell’array e la sua posizione pari all’indice zero.
Usando un ciclo, si ‘visita’ lo array verificando:
se ciascun elemento dell’array è inferiore al minimo fissato, in tal caso si aggiorna il valore del minimo e della posizione in cui esso si trova nell’array
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 13
Esempio - il programma C
#include<stdio.h>
main()
{const int cardinalita=50; //costante con nome con valore 50 int VET[cardinalita], I, riemp,MIN, MAX, POSMIN, POSMAX;
do
{ printf (“quanti elementi vuoi inserire?\n”);
scanf (“%d”, &riemp);
}
while ( riemp>cardinalita);
// Legge in input gli elementi del vettore for (I= 0; I< riemp; I++)
{ printf(" dammi elemento di posto %d\n", I);
scanf("% d", &VET[I]);
}
// Cerca il valore minimo e massimo nello array MIN = VET[0]; POSMIN=0;
MAX = VET[0]; POSMAX=0;
for (I=1; I< riemp; I++) { if (VET[I]<MIN) { MIN=VET[I];
POSMIN=I;
} else
if (VET[I]>MAX) { MAX=VET[I];
POSMAX=I;
} }
printf(“il valore minimo = %d si trova nella posizione di indice %d\n” , MIN, POSMIN);
printf(“il valore massimo = %d si trova nella posizione di indice %d|n” , MAX, POSMAX);
Esempio - il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 15
Esempio - il programma C
Modificare il programma per trovare il minimo e massimo valore in un array monodimensionale, strutturandolo con dei sottoprogrammi per:
• Leggere da tastiera i valori da inserire nello array, riempito parzialmente
• Stampare i valori inseriti nello array
• Trovare i valori massimo e minimo e rispettive posizioni nello array
#include<stdio.h>
void leggivett(int Vet1[], int card1, int *riemp1);
void trovaMax_Min(int Vet1[], int *F_MAX, int *F_MIN,
int *PS_MAX, int *PS_MIN, int riemp1);
void stampavet(int Vet1[ ],int riemp1);
main()
{ const int cardinalita=50;
int VET[cardinalita], I, riemp, MIN, POSMIN, MAX, POSMAX;
leggivett (VET, cardinalita, &riemp);
stampavet (VET, riemp);
Esempio - il programma C Con sottoprogrammi
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 17
void leggivett(int Vet1[], int card1, int *riemp1) {int I;
do
{ printf("immetti riemp\n");
scanf("%d",&(*riemp1));
}
while(*riemp1>card1);
for (I=0;(I<*riemp1); I++)
{ printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);
} }
Esempio - il programma C con sottoprogrammi
void stampavet(int Vet1[ ],int riemp1)
{ int I; ; for (I=0;I<riemp1; I++)
printf("Vet1[ %d ]= %d \n", I, Vet1[I] );
}
void trovaMax_Min(int Vet1[], int *F_MAX, int *F_MIN,
int *PS_MAX, int *PS_MIN, int riemp1) {int I;
*F_MIN = Vet1[0]; *PS_MIN=0;
*F_MAX = Vet1[0]; *PS_MAX=0;
for (I= 1; I< riemp1; I++) { if (Vet1[I]<*F_MIN) { *F_MIN=Vet1[I];
*PS_MIN=I;
} else
if (Vet1[I]>*F_MAX) { *F_MAX=Vet1[I];
*PS_MAX=I;
} }
Esempio - il programma C Con sottoprogrammi
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 19
Esempio
Definizione del problema:
Verificare se in un array monodimensionale di interi, composto da 50 elementi, esiste un determinato valore dato in input.
Se questo valore esiste indicare la posizione del primo elemento che lo contiene, e terminare la ricerca. Lo array può essere ‘riempito’ parzialmente.
Definizione dei dati :
I: il valore di ciascun elemento; il valore da cercare; riempimento Pi: riempimento non può essere maggiore della cardinalità dello array U: la posizione del primo elemento dello array con valore uguale a quello cercato
Pu: la posizione del primo elemento dello array con valore uguale a quello cercato non maggiore del riempimento
Esempio
Nome variabile Descrizione Tipo riemp riempimento INT VET(I) elemento dell’array INT
VAL valore da cercare nell’array INT
Nome variabile Descrizione Tipo TROVATO Indica se esiste un elemento pari a VAL BOOL POS Posizione dove è contenuto VAL INT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 21
Esempio
Descrizione del metodo di elaborazione:
è immesso il numero di quanti elementi si vogliono inserire: se immesso un valore maggiore della cardinalità dello array deve essere richiesta
l’iimmissione di un valore valido
Con un ciclo ripetitivo, si legge il valore di ciascun elemento da immettere.
Si immette il valore che si vuole cercare nello array.
Con un ciclo iterativo, si verifica se tale valore esiste nello array: se esiste viene visualizzata la posizione del primo elemento che lo contiene ed il ciclo termina appena lo si trova;
se non esiste viene visualizzata la scritta ‘il valore indicato non esiste nello array’.
#include<stdio.h>
main()
{const int cardinalita=50;
int VET[cardinalita], I, riemp,VAL, POS;
int trovato;
do
{ printf (“quanti elementi vuoi inserire?\n”);
scanf (“%d”, & riemp); } while ( riemp>cardinalita);
// Legge in input gli elementi del vettore for (I= 0; I< riemp; I++)
{ printf(" dammi elemento di posto %d\n", I);
scanf("% d", &VET[I]);
}
// Immissione valore da cercare
printf (“immetti valore da cercare\n”);
scanf (“%d”, &VAL);
Esempio - il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 23
… usando un sottoprogramma per riempire lo array …
#include<stdio.h>
void leggivett(int Vet1[], int card1, int *riemp1);
/* per il codice di leggivett vedere la procedure dell’
esercizio svolto per trovare I valori MAX e Min in un array */
main()
{const int cardinalita=50;
int VET[cardinalita], I, riemp,VAL, POS;
int trovato;
leggivett(VET, cardinalita, &riemp);
// Immissione valore da cercare
printf (“immetti valore da cercare\n”);
scanf (“%d”, &VAL);
Esempio - il programma C
//Cerca se il valore immesso esiste in array (ricerca lineare)
POS=0; trovato=0; // trovato = falso I=0;
do
{ if (VET[I] == VAL)
{trovato = 1; // valore trovato in array POS=I;}
I++;
}
while ( (trovato != 1) && ( I < riemp) );
if (trovato == 1)
printf (“valore immesso %d in posizione %d\n’,
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 25
// Cerca se valore immesso esiste in array (ricerca lineare)
POS=0; trovato=0; // trovato = falso I=0;
while ((VET[I] != VAL) && ( I < riemp)) I++;
if (I < riemp) {trovato = 1;
POS=I; } if (trovato == 1)
printf (“valore immesso %d in posizione %d\n”, VAL, POS);
else
printf(“il valore indicato %d non esiste nello array\n”, VAL);
}
… un’altra soluzione …
// Cerca se valore immesso esiste in array (ricerca lineare)
trovato=0;
I=0;
while ((trovato==0) && (I < riemp))
{trovato=(VET[I]==VAL); //assegna a trovato il risultato //del confronto (0 se falso)
I++;
}
if (trovato != 0)
printf(‘il valore immesso %d in posizione %d\n”, VAL, (I-1));
else
printf(“il valore indicato %d non esiste nello array\n”, VAL);
}
… ancora un’altra soluzione …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 27
Esempio
Definizione del problema: In un array monodimensionale di interi, composto da 50 elementi e riempito con valori in input da tastiera, contare il numero delle occorrenze di un determinato valore dato in input. Indicare anche le posizioni degli elementi dello array uguali al valore cercato. Lo array può essere ‘riempito’ parzialmente.
Definizione dei dati :
I: il valore di ciascun elemento; il valore da cercare; (eventuale) riempimento
Pi: se usato un riempimento questo non può essere maggiore della cardinalità dello array
U: Numero di occorrenze del valore cercato, gli indici degli elementi dello array con valore uguale a quello cercato
Pu: Numero di occorrenze non negativo, gli indici degli elementi dello array con valore uguale a quello cercato non maggiori del riempimento
Esempio
Nome variabile Descrizione Tipo riemp riempimento INT VET(I) elemento dell’array INT
VAL valore da cercare nell’array INT
Nome variabile Descrizione Tipo NumOccorrenze Numero occorrenze pari a VAL INT
I Indice posizione elemento uguale a VAL INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 29
Esempio
Descrizione del metodo di elaborazione:
è indicato il numero di quanti elementi si vogliono inserire: tale numero deve essere non maggiore della cardinalità dell’array;
Con un ciclo ripetitivo, si legge il valore di ciascun elemento da immettere;
Si immette il valore di VAL da cercare nell’array;
Si inizializza a zero il valore di NumOccorrenze;
Con un ciclo ripetitivo:
si verifica se ciascun elemento dello array ha il valore uguale a VAL ed in tal caso si incrementa di 1 il valore di NomOccorrenze e si stampa l’indice dell’elemento verificante la condizione di uguaglianza;
Alla fine del ciclo si stampa il valore di NumOccorrenze.
#include<stdio.h>
main()
{const int cardinalita=50;
int VET[cardinalita], I,riemp,VAL,NumOccorrenze=0;
do
{printf (“quanti elementi vuoi inserire?\n”);
scanf (“%d”, & riemp); } while ( riemp>cardinalita);
// Legge in input gli elementi del vettore
for (I= 0; I< riemp; I++)
{printf(" dammi elemento di posto %d\n", I);
scanf("% d", &VET[I]);
}
// Immissione valore da cercare
printf (“immetti valore da cercare\n”);
scanf (“%d”, &VAL);
Esempio - il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 31
// Conta le occorrenze di VAL (ricerca lineare)
for (I= 0; I< riemp; I++) { if (VET[I] == VAL)
{NumOccorrenze++;
printf(“Valore %d in posizione %d\n”, VAL, I);
} }
printf(“valore %d trovato %d volte\n”, VAL,
NumOccorrenze);
}
... Una differente soluzione
// Conta le occorrenze di VAL (ricerca lineare) // usando un array in cui memorizzare le posizioni
int posizione[cardinalita];
… …
for (I= 0; I< riemp; I++) { if (VET[I] == VAL)
{posizione[NumOccorrenze]=I;
NumOccorrenze++;
} }
printf (“valore %d trovato %d volte\n”, VAL,
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 33
VAL = 23
5 28 23 47 25
VET
0 1 2 3 4 5
…...
49 6
23
riemp = 6
NumOccorrenze = 2
valore 23 trovato 2 volte nelle posizioni:
posizione = 2 posizione = 5
posizione
0 1 2 3 4 5
…...
49 6
2 5
Visita totale: vengono analizzati tutti gli elementi Si usa un ciclo a conteggio
E’ il caso degli esempi della ricerca del minimo e dell’ordinamento
Visita finalizzata: la visita termina quando un elemento dell’array verifica una certa condizione
Si usa un ciclo iterativo due condizioni di uscita:
una sull’indice di scansione (visitati tutti gli elementi si esce comunque dal ciclo) e
l’altra che dipende dal problema specifico ...
… in ogni caso si termina se si sono visitati tutti gli elementi dell’array senza trovare l’elemento dato
Visita degli elementi di un array
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 35
Ordinamento di un array monodimensionale Definizione del problema: Ordinare in senso crescente gli elementi di un array monodimensionale di interi e visualizzare l’array risultante.
Definizione dei dati:
I: riempimento; il valore di ciascun elemento dello array Pi: il numero degli elementi da inserire (riempimento) non può essere maggiore della cardinalità dell’array
U: l’array monodimensionale con gli elementi ordinati in senso crescente
Pu:
T[i] T[i+1] " i=1..n dove T è lo array da ordinareTabella delle variabili di ingresso
Nome variabile Descrizione Tipo
VET Array ordinato INT
Tabella delle variabili di uscita
Ordinamento di array: per selezione
Nome variabile Descrizione Tipo riemp riempimento INT VET(I) elemento dell’array INT
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 37
Ordinamento di array: per selezione
Descrizione del metodo di elaborazione:
Ordinamento per selezione (detto anche per minimi successivi).
Detto T lo array mono-dimensionale di cardinalità n, per ottenere l’ordinamento desiderato deve verificarsi che sia
T[i] T[i+1] " i=1..n.
• Si trova, allora, il valore minimo T[p] dell’intero array e si scambia il valore di T[p] con quello in prima posizione (T[0]);
• poi, si trova il nuovo minimo T[p] tra tutti gli elementi tra la seconda e l’ultima posizione (T[1] e T[n]) e si scambia il valore di T[p] con quello in seconda posizione (T[1]);
• ... si ha una parte ordinata e una NON ancora ordinata
• si continua in tal modo con tutti gli altri elementi dell’array nella parte NON ancora ordinata, scambiando di posto il primo elemento della parte NON ancora ordinata con il minimo della parte NON ordinata con.
• Alla fine sono visualizzati gli elementi dell’array risultante.
9 5 8 2 4
22 5 8 9 4
222 444 8 9 5
222 444 8 9 5 222
444 555 9 8
222 444 555 9 8
222 444 555 888 999
Ordinamento di array: per selezione
In blu parte già ordinata In rosso minimo della parte NON ancora ordinata
9 5 8 2 4
222
5
8
9
4
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 39
Tabella delle variabili di ingresso
Nome variabile Descrizione Tipo
VET Array ordinato INT
Tabella delle variabili di uscita
Ordinamento di array: per selezione
Nome variabile Descrizione Tipo riemp riempimento INT VET(I) elemento dell’array INT
Nome variabile Descrizione Tipo
I,J indice array INT
temp variabile appoggio per swap INT POS Posizione minimo INT MIN Minimo in parte non ordinata dell’array INT
Tabella delle variabili di algoritmo
Il programma in C
Ordinamento di array:
per selezione
#include<stdio.h>
main()
{ const int cardinalita=50;
int VET[cardinalita], I, riemp, J, POS, temp, MIN;
do
{ printf (“quanti elementi vuoi inserire? (Max=%d)\n”, cardinalita);
scanf (“%d”, & riemp); } while ( riemp>cardinalita);
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 41
Ordinamento di array: per selezione
Descrizione del metodo di elaborazione:
...
• Usando un ciclo si visita completamente lo array T[] e ad ogni passo del ciclo:
• Si trova il valore minimo T[p] della parte NON ancora ordinata dello array e si scambia il valore di T[p] con quello in prima posizione di tale parte NON ancora ordinata (inizialmente la parte non ancora ordinata coincide con l’intero array)
• Alla fine sono visualizzati gli elementi dell’array ordinato risultante.
// trova minimo parte non ordinata e scambia for (I=0;I<(riemp-1);I++)
{MIN= VET[I];
POS=I;
for (J=(I+1);J<riemp;J++) { if (VET[J]<MIN) { MIN=VET[J];
POS=J;
} }
temp= VET[I];
VET[I]= VET[POS]; // ovvero VET[I]=MIN VET[POS]=temp;
}
// Stampa array ordinato
for (I= 0; I< riemp; I++) printf("% d\ n", VET[ I]);
Il programma in C
Ordinamento di array:
per selezione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 43
... swapping ...
temp= VET[I];
VET[I]= VET[POS];
VET[POS]=temp;
Ordinamento di array:
per selezione Lo swapping
9 5 8 2 4 9
temp
2 5 8 9 4
temp
9
2 5 8 9 4
... I=0 ; POS=3; ...
9 5 8 2 4
temp= VET[0];
temp
2 5 8 2 4 9
VET[0]= VET[3];
VET[3]=temp;
... swapping ...
ATTENZIONE A NON FARE:
VET[I]= VET[POS];
VET[POS]=VET[I];
E’ ERRATO !!!
Ordinamento di array:
per selezione Lo swapping
2
... I=0 ; POS=3; ...
5
9
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 45
#include <stdio.h>
void leggivet_riemp(int Vet1[],int card1, int *riemp1);
void stampavet(int Vet1[ ], int riemp1);
void swap(int *a, int *b);
void ordina_vet_selezione(int Vet1[],int riemp1);
Il programma in C strutturato con sottoprogrammi
Ordinamento di array: per selezione
main()
{const int card=20;
int vet[card], i, j,riemp, temp, min, pos;
leggivet_riemp(vet, card, &riemp);
printf("Array immesso:\n");
stampavet(vet, riemp);
ordina_vet_selezione(vet, riemp);
printf("\n \n Array Ordinato:\n");
stampavet(vet, riemp);
}
void leggivet_riemp(int Vet1[],int card1, int *riemp1) {int I;
do
{printf("quanti elementi vuoi inserire (MAX %d)?\n", card1);
scanf("%d",&(*riemp1));
}
while(*riemp1>card1);
for (I=0;(I<*riemp1); I++)
{ printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);
} }
void stampavet(int Vet1[], int riemp1)
{ int I; ; for (I=0;I<riemp1; I++)
printf("Vet1[ %d ]= %d \n", I, Vet1[I] );
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 47
void swap(int *a, int *b) {int temp;
temp=*a;
*a=*b;
*b=temp;
}
void ordina_vet_selezione(int Vet1[],int riemp1) {int i, j, min, pos, temp;
min=Vet1[0];pos=0;
for (i=0; i<riemp1-1; i++) {min=Vet1[i]; pos=i;
for (j=i+1; j<riemp1; j++) { if (Vet1[j]<min) { min=Vet1[j];
pos=j;
} }
swap(&Vet1[i], &Vet1[pos]);
}
Ordinamento di array
… una variante …
... si confronta (nella parte non ancora ordinata) un elemento dello array con tutti i successivi e si effettua lo swap se questo è minore dell’elemento in esame ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 49
Ordinamento di array
9 5 8 2 4
I = 0
5 9 8 2 4
J = 1
5 9 8 2 4
J = 2
2 9 8 5 4
J = 3
2 9 8 5 4
J = 4 I = 1
2 9 8 5 4
J = 2
2 8 9 5 4
2 5 9 8 4
J = 3
2 4 9 8 5
J = 4
2 4 9 8 5
I=2
2 4 8 9 5
J = 3
2 4 5 9 8
J = 4
2 4 5 9 8
I = 3
2 4 5 8 9
J = 4
2 4 5 8 9
… una variante …
... si confronta un elemento dello array con tutti i successivi e si effettua lo swap se questo è minore dell’elemento in esame ...
for (I=0; I<(riemp-1); I++) { for (J=(I+1); J<riemp; J++) { if (VET[J]< VET[I]) { temp = VET[I];
VET[I] = VET[J];
VET[J] = temp;
} } }
// Stampa array ordinato
for (I= 0; I< riemp; I++) printf("% d\ n", VET[ I]);
}
Il programma in C
Ordinamento di array
... si confronta un elemento dello array con tutti i successivi e si effettua lo swap se questo è minore dell’elemento in esame ...
… una variante …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 51
void ordina_vet(int Vet1[],int riemp1) {int I, J, temp;
for (I=0; I<(riemp1-1); I++) { for (J=(I+1); J<riemp1; J++) { if (Vet1[J]< Vet1[I])
swap(&Vet1[J], &Vet1[I]);
} }
}
… una variante …
... il sottoprogramma per l’ordinamento con scambi successivi...
Algoritmo
In un ciclo iterativo:
Si confrontano coppie di elementi consecutivi dello array e si scambiano di posizione se essi non sono nel giusto ordine (ossia, caso ordinamento crescente, se il secondo elemento è minore del primo).
Dopo la prima iterazione il valore massimo si troverà nella ultima posizione (quella sua definitiva); dopo la seconda iterazione il secondo massimo si troverà in penultima posizione e così via.
Ad ogni iterazione almeno un elemento va a collocarsi nella sua giusta posizione definitiva.
Il ciclo iterativo termina quando non sono più effettuati scambi.
… bubble sort…
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 53
9 5 8 2 4
5 9 8 2 4
5 8 9 2 4
5 8 2 9 4
5 8 2 4 9
5 8 2 4 9
5 8 2 4 9
5 2 8 4 9
5 2 4 8 9
5 2 4 8 9
2 5 4 8 9
2 4 5 8 9
2 4 5 8 9
2 4 5 8 9
bubble sort Scambio ? Si
Scambio ? Si
Scambio ? Si
Scambio ? NO
Iterazione 1 Iterazione 2
Iterazione 3 Iterazione 4
void bubblesort(int vet1[ ], int riemp1) {int i, scambio = 1;
while (scambio == 1) { scambio = 0;
for(i=0; i < riemp1 - 1; i++) { if (vet1[i] > vet1[i+1])
{ swap(&vet1[i], &vet1[i+1]);
scambio = 1;
} }
riemp1--;
} }
… bubble sort…
... il sottoprogramma per l’ordinamento ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 55
Definizione del problema: Si vuole verificare se in un array i cui valori sono ordinati in senso crescente esiste un elemento con un dato valore e se esso esiste si vuole conoscere la sua posizione. Si vuole usare un algoritmo di ricerca binaria.
Ricerca di un elemento in un array ordinato
Definizione dei dati:
I: lo array monodimensionale ordinato; il valore dell’elemento che si vuole cercare
Pi: lo array è ordinato in senso crescente
U: la posizione dell’elemento con valore pari a quello cercato se esso esiste nello array
Pu: il contenuto dello array resta immutato
Descrizione del metodo di elaborazione:
Viene letto il valore da cercare;
viene considerato l’elemento dello array (ordinato in senso crescente) in posizione centrale (rispetto al riempimento);
se il dato da cercare è uguale a quello centrale la ricerca è terminata altrimenti:
• se il dato da cercare è minore di quello centrale viene applicato lo stesso algoritmo alla prima parte dello array (quella tra il primo elemento e quello in posizione centrale), se questa ha almeno un elemento, altrimenti
Ricerca di un elemento in un array ordinato
Ricerca binaria
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 57
93
Posizione elemento centrale:
P=(Sup+Inf)/2=5
3 10 28 31 33 40 57 93 98
Riemp = 9 Card = 12
Inf = 1 Sup = 9
3 10 28 31 33 3 10 28 31 33
3 10 28 31 33 40 57 93 98
Inf = 6 Sup = 9
Posizione elemento centrale:
P=(Sup+Inf)/2=8
93
3 10 28 31 33 3 10 28 31 33
3 10 28 31 33 40 57 40 57 40 57 93 98
Inf = 8 Sup = 9
93
Posizione elemento centrale:
P=(Sup+Inf)/2=7
=?
=?
=?
Deve sempre essere Inf <= Sup
Se Inf >=Sup l’elemento non esiste nello array
#include<stdio.h>
#include <..… /leggivet.h>
#include <….. /stampavet.h>
#include <….. /ordinavet.h>
main ()
{ const card=50;
int Vet[card], I, riemp, elem, trovato, centro, inf, sup;
leggivet(Vet, card, &riemp);
stampavet (Vet, riemp);
ordinavet(Vet, riemp);
// immissione valore da ricercare printf("immetti valore da cercare \n”);
scanf(“%d”, &elem);
trovato=0;
Ricerca di un elemento in un array ordinato
Il programma C strutturato in sottoprogrammi
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 59
// ricerca binaria
while ((inf <= sup) && (trovato = = 0)) {
centro = (inf + sup) / 2; // posizione centrale if (Vet[centro] == elem)
trovato = 1; // permette di uscire dal ciclo else if(Vet[centro] > elem)
sup = centro -1; // la ricerca continua nella prima metà else inf = centro+1; // la ricerca continua nella seconda metà }
if(trovato)
printf(“elemento trovato in posizione: %d \n”, centro);
else printf(“elemento non trovato \n”);
}
#include <stdio.h>
void leggivet(int Vet1[],int card1, int *riemp1) { int I;
do
{printf("immetti riemp\n");
scanf("%d",&(*riemp1));
}
while(*riemp1>card1);
for (I=0;(I<*riemp1); I++)
{printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);
} }
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 61
Esempio
Definizione del problema:
Trovare il valore massimo ed il valore minimo tra gli elementi di un array bidimensionale, di 5 righe e 7 colonne, ed indicarne la posizione (riga e colonna). Riempire lo array con valori generati in modo random (se i valori massimo e minimo sono presenti più volte nello array, indicare solo le posizioni della prima volta che essi sono trovati).
Definizione della specifica del programma:
I: l’array bidimensionale di numeri interi; il valore di ciascun elemento Pi: nessuna
U: il valore e la posizione dell’elemento con valore massimo e con valore minimo
Pu: nessuna
Esempio
Nome variabile Descrizione Tipo MAT array bidimensionale di interi INT MAT(I,J) elemento dell’array INT
Tabella delle variabili di ingresso
Nome variabile Descrizione Tipo MAX Elemento con il valore del massimo INT RIGAMAX Riga dove è contenuto MAX INT COLMAX Colonna dove è contenuto MAX INT MIN Elemento con il valore del minimo INT RIGAMIN Riga dove è contenuto MIN INT COLMIN Colonna dove è contenuto MIN INT Tabella delle variabili di uscita
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 63
Esempio
Descrizione del metodo di elaborazione:
Si genera in modo random il valore di ciascun elemento della matrice.
Si pone il massimo/minimo pari al primo elemento dell’array (elemento posto nella prima riga e prima colonna).
Si effettua una visita completa (scandendola per riga e colonne) della matrice:
si verifica se ciascun altro elemento dell’array è superiore al
massimo/(inferiore al minimo) fissato, in tal caso si aggiorna il valore del massimo/minimo e della posizione in cui esso si trova nella matrice
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
main ()
{ // Trova Max_e Min in_array_bidimensionale;
const cardriga=5, cardcol=7;
int MAT[cardriga] [cardcol], I, J, MAX, MIN, RIGAMAX, COLMAX, RIGAMIN, COLMIN;
// Riempimento array in modo random
Esempio - il programma
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 65
// Stampa array
for (I=0; I<cardriga; I++) for (J=0; J<cardcol; J++)
printf("MAT[%d, %d] = %d \n", I, J, MAT[I][J]);
Esempio - il programma
// Cerca il valore massimo e minimo nello array bidimensionale RIGAMAX=0; COLMAX=0; MAX = MAT[0][0];
RIGAMIN=0; COLMIN=0; MIN = MAT[0][0];
for (I=0; I<cardriga; I++) for (J=0; J<cardcol; J++) { if (MAT[I][J]>MAX) { MAX=MAT[I][J];
RIGAMAX=I; COLMAX=J;
} else
if (MAT[I][J]<MIN) { MIN=MAT[I][J];
RIGAMIN=I; COLMIN=J;
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 67
// Stampa il risultato
printf (“massimo = %d in riga %d e colonna %d \n", MAX, RIGAMAX, COLMAX);
printf (“il minimo= %d in riga %d e colonna %d \n", MIN, RIGAMIN, COLMIN);
}
Array e sottoprogrammi in C
• In C, nell’attivazione di un sottoprogramma lo scambio di parametri (effettivi – formali) di tipo array è sempre effettuato per riferimento
• Nel caso di array monodimensionali per il parametro formale non va indicata la cardinalità dello array
• Nel caso di array bidimensionali va indicata per il paramentro formale la cardinalità della seconda dimensione dello array
• Nel caso di array multi-dimensionali vanno indicate per il paramentro formale tutte le cardinalità eccetto quella della prima dimensione dello
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 69
Array e sottoprogrammi in C
Es.
void leggivet(int Vet1[],int card1);
main ()
{ const card=10;
int Vet[card],I;
leggivet(Vet,card); }
Es.
void leggimat(int Mat1[][4],int cardr, int cardc) main ()
{ const cardr=2; const cardc=4;
int Mat[cardr][cardc],I,J;
leggimat(Mat,cardr,cardc);}
Array monodimensionale: non è necessario indicare la cardinalità nel parametro formale
Array bi-dimensionale:
deve essere indicata la cardinalità della seconda dimensione nel relativo parametro formale
Array e sottoprogrammi in C
Es.
void leggimat(int Mat1[][4],int cardr, int cardc) main ()
{ const cardr=2; const cardc=4;
int Mat[cardr][cardc],I,J;
leggimat(Mat,cardr,cardc);}
… quando il numero di colonne è diverso da quello indicato (nell’esempio è 4), il sottoprogramma deve essere modificato e ricompilato … !!
… qualche considerazione …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 71
Array e sottoprogrammi in C
#include <stdio.h>
#define COL 5 // crea un nome (un simbolo) associato al valore costante // indicato. Nel programma le occorrenze del simbolo sono // automaticamente sostituite dal valore ad esso associato void leggimat (int Mat1[ ][COL],int cardr, int cardc);
void stampamat (int Mat1[ ][COL],int cardr, int cardc);
main ()
{ const cardc=COL; const cardr=7;
int Mat[cardr][cardc];
leggimat (Mat,cardr,cardc);
stampamat (Mat,cardr,cardc);
printf("\n");
}
… una possibile soluzione
Array e sottoprogrammi in C
void leggimat (int Mat1[][COL],int cardr, int cardc) {int I, J;
for (I=0;(I< cardr); I++) for (J=0;J<cardc;J++)
{ printf("immetti Mat[ %d ] [%d]= \n", I, J) ; scanf("%d", &Mat1[I][J]);
} }
… una possibile soluzione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 73
Array e sottoprogrammi in C
void stampamat (int Mat1[][COL],int cardr, int cardc) { int I,J;
for (I=0; I<cardr; I++) { printf("\n");
for (J=0; J<cardc; J++)
printf("Mat1[%d][%d]= %d - ", I,J, Mat1[I][J]);
} }
… una possibile soluzione
Esempio
Definizione del problema: Verificare se in un array bidimensionale di interi positivi, composto da 5 righe e 7 colonne, esiste un determinato valore dato in input da tastiera. Se questo valore esiste indicare la posizione, riga e colonna, dell’elemento che lo contiene. L’elaborazione termina appena l’elemento è trovato. Usare sottoprogrammi per il riempimento e la stampa dello array.
Definizione dei dati del problema:
I: il valore di ciascun elemento; il valore da cercare
Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array; il valore di ciascun elemento dello array deve essere > 0
U: la posizione, indici di riga e colonna, dell’elemento con valore pari a quello cercato
Pu: se il valore è stato trovato gli indici della sua posizione non
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 75
Esempio
Nome variabile Descrizione Tipo MAT array bidimensionale di interi INT MAT(I,J) elemento dell’array INT
VAL valore da cercare nell’array INT
Tabella delle variabili di ingresso
Nome variabile Descrizione Tipo TROVATO Indica se esiste un elemento pari a VAL LOGICAL I, J Posizione dove è contenuto VAL INT Tabella delle variabili di uscita
Esempio
Descrizione del metodo di elaborazione:
Con due cicli ripetitivi innestati, si legge, in ordine di riga, il valore da assegnare a ciascun elemento dello array, controllando che il valore sia maggiore di zero e ripetendo l’immissione se ciò non è verificato.
Si stampa il contenuto dello array così riempito
Si immette il valore da cercare nell’array bidimensionale.
Si verifica se tale valore esiste nello array:
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 77
#include <stdio.h>
#define col 7
void leggimat(int Mat1[][col],int cardr, int cardc);
void stampamat(int Mat1[][col],int cardr, int cardc);
main ()
{int const cardr=5;
int const cardc=col;
int MAT[cardR] [cardC], i,j, VAL, trovato;
leggimat(Mat,cardr,cardc);
stampamat(Mat,cardr,cardc);
// Immissione valore da cercare
printf(“Immetti il valore da cercare\n”);
scanf("%d", &VAL);
Esempio - il programma C
// Cerca se il valore immesso esiste nello array (ricerca lineare)
trovato=0; i=0;
while ((trovato==0) && ( i<cardR)) { j=0;
while ((trovato==0) && ( j<cardC)) {trovato=(MAT[i][j]==VAL);
j++;}
i++;
}
if (trovato != 0)
printf(“valore immesso %d in posizione %d, %d\n”, VAL, i-1, j-1);
else
printf(“il valore indicato %d non esiste nello array\n”, VAL);
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 79
void leggimat(int Mat1[][col],int cardr, int cardc) {int I, J;
for (I=0;(I< cardr); I++) for (J=0;J<cardc;J++) { do
{printf("immetti Mat[ %d ] [%d]= \n",I,J) ; scanf("%d", &Mat1[I][J]);
}
while (Mat1[I][J] <= 0);
} }
void stampamat(int Mat1[][col],int cardr, int cardc) {int I,J;
for (I=0;I<cardr; I++) for (J=0;J<cardc;J++)
printf("Mat1[%d][%d]= %d \n", I,J, Mat1[I][J]);
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 81
Esempio
Definizione del problema: Calcolare la trasposta di una matrice quadrata di interi
Definizione dei dati del problema:
I: lo array bidimensionale; il valore di ciascun elemento dello array
Pi: il numero delle righe deve essere uguale a quello delle colonne
U: l’array bidimensionale pari al trasposto di quello in ingresso Pu: nessuna
0 1 2 3 4
0 1 2 3 4
23 47 63 96 8
27 66 23 44 567
...
...
84 15 ...
32 ...
... MAT
0 1 2 3 4
0 1 2 3 4
23 27 84 15 32
47 66 23 44 63
96 ...
8 567
MATTR ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 83
Esempio
Nome variabile Descrizione Tipo MAT prima matrice di interi INT MAT(I,J) elemento della prima matrice INT
Nome variabile Descrizione Tipo MATTR Matricetrasposta di MAT INT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Esempio
Descrizione del metodo di elaborazione:
Si legge, in ordine di riga, il valore di ciascun elemento dello array.
Si calcola il valore di ciascun elemento della matrice trasposta ponendo: MATTR(I,J)=MAT(J,I).
Si stampa la matrice trasposta risultante.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 85
Esempio - il programma
#include<stdio.h>
#define col 5
void stampamat(int Mat1[][col],int cardr, int cardc);
main()
{// Trasposta di una matrice quadrata const card=5;
int MAT[card] [card], i,j,MATTR [card] [card];
// Legge in input tutti gli elementi della matrice MAT for (i= 0; i< card; i++)
for (j= 0; j< card; j++) {
printf(" dammi el. (%d , %d) di MAT\n", i,j);
scanf("%d", &MAT[i][j]);
}
// Visualizzazione valori elementi matrice MAT printf(“\n\n *** MATRICE MAT ***\n\n”);
stampamat( MAT, card, card);
// Calcola matrice trasposta for (i= 0; i< card; i++) for (j= 0; j< card; j++) MATTR [i][j]=MAT[j][i];
// Visualizzazione valori elementi matrice trasposta
printf(“\n\n ***MATRICE TRASPOSTA MATTR ***\n\n”);
stampamat(MATTR, card, card);
system("Pause");
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 87
void stampamat(int Mat1[][col],int cardr, int cardc) {int I,J;
for (I=0;I<cardr; I++) { for (J=0;J<cardc;J++)
printf(" %d - ", Mat1[I][J]);
printf("\n");
} }
Esempio
Definizione del problema: Calcolare la trasposta di una matrice di interi (anche se non quadrata)
Definizione dei dati del problema:
I: lo array bidimensionale; il valore di ciascun elemento dello array Pi: nessuna
U: l’array bidimensionale pari al trasposto di quello in ingresso Pu: Il numero di righe della matrice trasposta è pari al numero di colonne della matrice in input ed il numero di colonne della matrice trasposta è pari al numero di righe della matrice in input
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 89
23 27 44 55 32
66 88 54 23 11
98 78 46 32 66
23 66 98
27 88 78
44 54 46
55 23 32
32 11 66
MAT
MATTR Esempio
Esempio - il programma
#include<stdio.h>
main()
{// Calcola la trasposta di una matrice const cardR=4, cardC=3;
int MAT[cardR][cardC], i,j;
int MATTR[cardC][cardR]; // la trasposta ha le cardinalità invertite // Legge in input tutti gli elementi della matrice
for (i=0; i< cardR; i++) for (j= 0; j< cardC; j++)
{ printf(" dammi el. (%d , %d) di MAT\n", i,j);
scanf("%d", &MAT[i][j]);
}
// Visualizzazione valori elementi matrice MAT for(i=0;i<cardR;i++)
{printf("\n");
for(j=0;j<cardC;j++)
printf("MAT(%d, %d) = %d - ", i,j,MAT[i] [j]);
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 91
Esempio - il programma
// Calcola matrice trasposta
for (i= 0; i< cardC; i++) // gli estremi dei due cicli sono ‘invertiti’ rispetto
for (j= 0; j< cardR; j++) // a prima per essere consistenti con le // cardinalità della trasposta
MATTR [i][j]=MAT[j][i];
// Visualizzazione valori elementi matrice trasposta printf("\n\n MATRICE TRASPOSTA:\n");
for(i=0;i<cardC;i++) {printf("\n");
for(j=0;j<cardR;j++)
printf("MATTR(%d, %d) = %d - ", i,j,MATTR[i][j]);
} }
Definizione del problema:
Scrivere, producendo la necessaria documentazione, un programma in linguaggio C che, data una stringa di 130 caratteri:
• consente di riempire la stringa leggendone il valore da tastiera;
• cancella tutti i caratteri che sono cifre compattando, ad ogni
cancellazione, la stringa (lo array che la contiene) e stampa la stringa risultante.
Esempio
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 93
Cancellazione di un elemento in un array e compattazione
a S P 3 k B 8 E V \0
riemp = 9
for (j= pos; j<riemp-1; j++) VET[j]=VET[j+1];
riemp--;
a S P k B 8 E V \0
riemp = 8
a S P k B E V \0
riemp = 7 pos = 4
pos = 6
Esempio
Definizione dei dati del problema:
LO STUDENTE DEFINISCA I DATI, IL DIZIONARIO DATI E L’ALGORITMO E QUINDI SCRIVA IL PROGRAMMA
STRUTTURANDOLO CON SOTTOPROGRAMMI I: ....
Pi: ...
U: ...
Pu: ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 95
Descrizione del metodo di elaborazione:
.... LO STUDENTE DEFINISCA L’ALGORITMO DA USARE ...
Descrizione del metodo di elaborazione:
Cancellare tutte le cifre compattando, ad ogni cancellazione, la stringa (lo array che la contiene) e stampa la stringa risultante:
Trovata una cifra, si traslano tutti gli elementi successivi a questa di una posizione verso la testa dello array.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 97
Cancellazione di un elemento in un array e compattazione
a S P 3 k B 8 E V \0
riemp = 9
for (j= pos; j<riemp-1; j++) VET[j]=VET[j+1];
riemp--;
a S P k B 8 E V \0
riemp = 8
a S P k B E V \0
riemp = 7 pos = 4
pos = 6
Esempio
#include<stdio.h>
/*Legge una linea in input */
void LeggiLinea(char ln[], int max, int *riemp) {int i = 0; char c;
while( ((c=getchar())!='\n') && (i < max)) { ln[i] = c;
i++;
}
ln[i] = '\0';
*riemp=i;
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 99
main ( )
{int const card = 131;
char VET[card], c;
int i, j, riemp;
printf("Immetti una stringa \n");
LeggiLinea(VET, card, &riemp);
i=0;
printf("Lunghezza della stringa: %d\n\n", riemp);
printf("\nStringa Immessa:\n");
while (VET[i]!='\0') { printf("%c", VET[i]);
i++;
}
printf("\n\n");
// Si cercano le cifre in VET e le si cancellano // compattando lo array
i=0;
while (VET[i]!='\0')
{if ((VET[i]>='0') && (VET[i]<= '9')) { for (j=i; j<riemp-1; j++) VET[j]=VET[j+1];
riemp--;
// Aggiorna posizione fine stringa
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 101
//Stampa stringa compattata senza le cifre
printf("\n Stringa compattata senza le cifre: \n");
if(riemp>0) {i=0;
while(VET[i]!= '\0')
{printf ("%c",VET[i]);
i++;}
}
else printf("stringa vuota\n");
system("Pause");
}
…… modo alternativo per la stampa …
//Stampa stringa compattata senza le cifre
printf("\n Stringa compattata senza le cifre: \n");
if(riemp>0) puts(VET);
else
printf("stringa vuota\n");
system("Pause");
}