Esercizi Svolti Il 13 Dicembre 2019
Esercizi Svolti Il 13 Dicembre 2019
Esercizi Svolti Il 13 Dicembre 2019
ESERCIZIO D)
Date due stringhe S1 e S2 (solo caratteri minuscoli), viene richiesto di
Esempi
L’ultimo carattere di una stringa non vuota S1 è quello in posizione LunghezzaS1 – 1, cioè il carattere
S1[LunghezzaS1 – 1].
Dichiarazioni variabili
char ULTIMO;
int I;
char S1[]="Prova";
if (I>0)
ULTIMO=S1[I-1];
printf("ultimo %c\n", ULTIMO);
Oppure:
ULTIMO='#';
for (I=0; S1[I]!='\0';I++)
if (S1[I+1]=='\0') /* l’ultimo carattere ha come successivo S1[I+1] il carattere terminatore*/
ULTIMO=S1[I];
printf("ultimo %c\n", ULTIMO);
Oppure:
ULTIMO='#';
for (I=0; S1[I]!='\0';I++)
ULTIMO=S1[I]; /* ad ogni ciclo il carattere S[I] è l’ultimo*/
printf("ultimo %c\n", ULTIMO);
Oppure, usando la funzione strlen (libreria string.h) per il calcolo della lunghezza:
ULTIMO='#';
if (strlen(S1)>0)
ULTIMO=S1[strlen(S1)-1];
printf("ultimo %c\n", ULTIMO);
Oppure:
if (strlen(S1)>0)
ULTIMO=S1[strlen(S1)-1];
else
ULTIMO='#';
printf("ultimo %c\n", ULTIMO);
1
Esercizio 2) Stabilire se tale carattere ULTIMO di S1 è nella stringa S2, senza considerare il primo e l’ultimo
carattere di S2
Si risolve con la ricerca lineare di ULTIMO in S2, escludendo dal confronto il primo e l’ultimo carattere di
S2
TROVATO=0;
for(I=0; S2[I]!= '\0'; I++)
if (I > 0 && S2[I+1] != '\0' ) /* per escludere primo e ultimo carattere di S2 */
if (S2[I]==ULTIMO )
TROVATO=1;
if (TROVATO)
printf("OK in S2\n");
else
printf("NO in S2\n");
TROVATO=0;
for(I=0; S2[I]!= '\0'; I++)
if (I > 0 && S2[I+1] != '\0' && S2[I]==ULTIMO )
TROVATO=1;
if (TROVATO)
printf("OK in S2\n");
else
printf("NO in S2\n");
2
ESERCIZIO E)
Date due stringhe S1 e S2 (caratteri minuscoli e maiuscoli), viene richiesto di
Esempi
SOLUZIONE
1) individuare e stampare l’ultimo carattere maiuscolo ULTIMOMAIUSCOLO di S1; se S1 è vuota oppure
non ha caratteri maiuscoli, stampare '#';
In questo caso è necessario scandire tutta la stringa ed ogni volta che si incontra un carattere maiuscolo
questo diventa l’ultimo.
ULTIMOMAIUSCOLO viene inizializzato con il carattere da restituire in caso in cui non vi siano caratteri
maiuscoli (ovviamente una stringa vuota non contiene caratteri maiuscoli)
ULTIMOMAIUSCOLO ='#';
for (I=0; S1[I]!='\0'; I++ )
if (S1[I]>='A' && S1[I]<='Z')
ULTIMOMAIUSCOLO = S1[I];
2) stabilire se tale carattere ULTIMOMAIUSCOLO di S1 è nella stringa S2, senza considerare il primo e
l’ultimo carattere di S2 e senza distinguere tra maiuscoli e minuscoli.
/* RICERCA */
TROVATO=0;
for (I=0; S2[I]!='\0'; I++ )
if (I>0 && S2[I+1]!='\0') /* senza considerare il primo e l'ultimo carattere di S2 */
if ( (ULTIMOMAIUSCOLO == S2[I] ||
ULTIMOMAIUSCOLO == S2[I]-('a'-'A') )) /*senza distinguere tra maiuscoli e minuscoli*/
TROVATO=1;
if (TROVATO)
printf("OK in S2\n");
else
printf("NO in S2\n");
3
[es. 12 - punti 5] Data una stringa S scrivere un programma per
1) Stampare la stringa S carattere per carattere secondo la seguente modalità:
Se il carattere è una consonante stampare il carattere (vocale o consonante) immediatamente precedente
Se il carattere è una vocale stampare il carattere (vocale o consonante) immediatamente successivo
Il primo e l’ultimo carattere della stringa non devono essere stampati
Esempi:
“FONDAMENTI” → “NONMANEN”
“INFORMATICA” → “INRORTACI”
2) Data un’altra stringa S2, stampare a video la minima consonante di S (quella più piccola in ordine
alfabetico) che compare anche in S2; se tale consonante non esiste stampare ‘@’
Esempi:
S2 = “ESAME”
S = “FONDAMENTI” → ‘M’
S = “INFORMATICA” → ‘M’
S = “ORALE” → ‘@’
Note: In S e S2 si suppongono esclusivamente caratteri alfabetici maiuscoli (solo vocali e consonanti: quindi se un
carattere non è una vocale allora è una consonante)
SOLUZIONE
Per controllare che sia una consonante quindi si può usare la condizione
!(S[i] == 'A' || S[i] == 'E' || S[i] == 'I' || S[i] == 'O' || S[i] == 'U')
Primo punto:
char S[]="FONDAMENTI";
int i, j;
Secondo punto:
char S[]="FONDAMENTI" , S2[]="ESAME";
int i, j;
int trovato; /* per effettuare la ricerca lineare */
char min_con; /* consonante minima */
min_con='@';
/* se S[i] è stato trovato in S2, allora si considera nel calcolo del minimo */
if (trovato)
/* la prima volta si individua tramite min_con=='@' */
if (min_con=='@' || S[i]<min_con)
min_con=S[i];
}
4
[es. 11 - punti 4] Date le stringhe SA e SB, scrivere un programma che stampi le consonanti di SA ed il numero di
volte che tale vocale compare nella stringa SB, senza considerare il primo e l’ultimo carattere di tale stringa SB.
Note: In SA e SB si suppongono esclusivamente caratteri alfabetici maiuscoli (solo vocali e consonanti: quindi se
un carattere non è una vocale allora è una consonante)
Esempio
char SA[]= "RAP"; /* caratteri distinti */
char SB[]= "RELIPPO"; /* può avere caratteri ripetuti*/
Si deve ottenere
Facoltativo: Tra le consonanti stampate individuare e stampare quella che compare più volte in SB;
Nell’esempio precedente si deve stampare 'P'
SOLUZIONE:
Si riporta il programma completo
#include <stdio.h>
main() {
int i, j;
int conta;
Il calcolo di queste variabili viene effettuato subito dopo aver calcolato conta.
conta_max viene inizializzata a zero (valore minimo)
Nel compito scritto è sufficiente riportare le variazioni rispetto all’esercizio principale già svolto, cioè:
int conta, conta_max=0;
char max_cons;
main() {
int i, j;
int conta, conta_max=0;
char max_cons;
if (conta>conta_max){
conta_max=conta;
max_cons = SA[i];
}
Questo programma funziona nel caso in questione, però nel caso è generale è incompleto in quanto stampa solo una
delle consonanti con il maggior numero di occorrenze; se cambiamo SB mettendoci due R
Per ottenerle tutte, il modo più semplice è il seguente: dopo aver calcolato conta_max si effettua di nuovo il calcolo di
conta per ogni consonante: se conta è uguale a conta_max allora si stampa la consonante
Nel compito scritto è sufficiente riportare le variazioni rispetto all’esercizio principale già svolto, cioè:
if (conta==conta_max)
printf(" %c \n",SA[i]);
6
Il programma completo è il seguente:
#include <stdio.h>
main() {
int i, j;
int conta, conta_max=0;
char max_cons;
conta_max=conta;