Compito in classe del giorno 11-12-2000

Risoluzione

Scrivere una function che confronta tra loro due stringhe in base al numero di lettere maiuscole.

Obiettivo: Confronto tra stringhe

Risultato: Un intero:

negativo: prima stringa ha un numero di lettere maiuscole inferiore alla seconda
uguale a zero: prima stringa ha un numero di lettere maiuscole uguale alla seconda
positivo: prima stringa ha un numero di lettere maiuscole isuperiore alla seconda

Dati: Due stringhe

Algoritmo:

restituisce numeroMaiuscole(prima stringa) - numeroMaiuscole(seconda stringa)

Codifica:

int numeroMaiuscole( char s[] ) {
int i=0, conta=0;
while( s[i] != '\0' ){
if( s[i]>='A' && s[i]<='Z' ) conta++;
i++;
}
return conta;
}
int confronto( char s1[], char s2[] ) {
return numeroMaiuscole(s1) - numeroMaiuscole(s2);
}

Scrivere una function che elimina da una stringa tutti i caratteri minuscoli.

Obiettivo: Copiare in una stringa tutti i caratteri che non sono minuscoli

Risultato: Una stringa

Dati: Una stringa

Algoritmo:

Percorro, carattere per carattere, la stringa in input copiando nella stringa di ouput tutti i caratteri che vanno bene

Codifica:

int copia( char in[], char out[] ) {
int i=0, k=0;
while( in[i] != '\0' ){
if( !(in[i]>='a' && in[i]<='z') ) out[k++] = in[i];
i++;
}
out[k] = '\0';
}

Scrivere una function che restituisce il valore massimo di un vettore.

Obiettivo: Determinare il massimo di un vettore di numeri

Risultato: Il massimo

Dati: Un vettore di numeri

Algoritmo:

Percorro, numero per numero, il vettore in input copiando in una variabile (massimo) il numero esaminato ogniqualvolta risulta maggiore del massimo precedente

Codifica:

float ricercaMassimo( float in[], int n ) {
int i=0;
float massimo;
massimo = in[0];
for(i=0; i<n; i++)
if( in[i] > massimo ) massimo = in[i];
}
return massimo
}

Scrivere una function che estrae da una stringa tutti i numeri, copiandoli in un'altra stringa

Obiettivo: Copiare in una stringa tutti i caratteri numerici, consecutivamente.

Risultato: Una stringa

Dati: Una stringa

Algoritmo:

Percorro, carattere per carattere, la stringa in input copiando nella stringa di ouput tutti i caratteri che vanno bene

Codifica:

int copia( char in[], char out[] ) {
int i=0, k=0;
while( in[i] != '\0' ){
if( (in[i]>='0' && in[i]<='9') ) out[k++] = in[i];
i++;
}
out[k] = '\0';
}

Scrivere una function che, avuto in ingresso una stringa, restituisce il numero di caratteri di punteggiatura.

Obiettivo: Contare i simboli di punteggiatura.

Risultato: Un numero

Dati: Una stringa

Algoritmo:

Percorro, carattere per carattere, la stringa in input conteggiando tutti i caratteri che vanno bene

Codifica:

int numeroPunteggiatura( char s[] ) {
int i=0, conta=0;
while( s[i] != '\0' ){
if( punteggiatura( s[i] ) conta++;
i++;
}
return conta;
}

punteggiatura è una function che restituisce 1 se il carattere in input è un simbolo di punteggiatura, 0 altrimenti

int punteggiatura(char);

Scrivere una function che, avuto in input un vettore di numeri ed un valore x, restituisce la posizione dell'ultima occorrenza di x nel vettore.

Obiettivo: Ultima posizione di x nel vettore.

Risultato: Un numero, -1 per non trovato

Dati: Un vettore ed un numero x

Algoritmo:

Percorro, numero per numero, il vettore in input memorizzando la posizione ogniqualvolta il numero x è uguale al valore contenuto nella cella del vettore.

Codifica:

int posizione( float s[], int n, float x ) {
int i=0, p=-1;
for(i=0; i<n; i++)
if( s[i] == x ) p = i;
}
return p;
}

Scrivere una function che, avuto in input un vettore di numeri, restituisce in un altro vettore la somma degli elementi, a due a due.

Obiettivo: Somma a due a due dei numeri contenuti in un vettore

Risultato: Un vettore

Dati: Un vettore

Algoritmo:

Percorro, due a due, il vettore in input memorizzando la somma nel vettore di output

Codifica:

int somma2a2( float in[], int n, float out[] ) { // somma2a2 restituisce il numero di elementi di out
int i=0, k=0;
for(i=0, k=0; i<(n-1); i+=2, k++)
out[k] = in[i] + in[i+1]
}
return k;
}
int data[3];
un vettore contenente una data.

Scrivere una function che avuto in ingresso due date le confronta.
con

int data[3];

Obiettivo: Confrontare due date

Risultato:Un numero:

negativo: prima data precede la seconda
uguale a zero: prima data uguale alla seconda
positivo: prima data segue la seconda

Dati: due vettori contenenti le due date, memorizzate come gg,mm, aaaa

Algoritmo:

Se primo anno = secondo anno
Se primo mese = secondo mese
restituisci giorno1 - giorno2
altrimenti restituisci mese1 - mese2
altrimenti restituisci anno1 - anno2

Codifica:

int datacmp( int d1[], int d2[] ) {
if( d1[2] == d2[2] ){
if( d1[1] == d2[1] ){
return d1[0] - d2[0];
} else return d1[1] - d2[1];
} else return d1[2] - d2[2];
}