-
[9] Scrivere un programma tabellaASCII.c che legga due interi
n e m e poi stampi la tabella di
conversione ASCII per i caratteri compresi tra n e m.
Nota: a seconda del sistema i codici ASCII significativi
possono andare da 0 a 255, oppure da -128 a +127. Per scoprirlo potete
provare ad includere il file <limits.h> e stampare i valori
delle costanti CHAR_MIN e
CHAR_MAX.
Soluzione:
tabella
-
[10] Scrivere un programma maiuscole.c che legga una stringa di
lunghezza inferiore a
100 e visualizza la stringa
ottenuta sostituendo le lettere minuscole dell'alfabeto con lettere maiuscole.
Suggerimento: per trasformare in carattere da minuscolo in maiuscolo operate direttamente sulla codifica ASCII.
Soluzione:
maiuscole
-
[11]
Scrivere la funzione void dollarize(char* str)
che ricevuta la stringa str, la modifichi in modo che
ogni vocale venga sostituita dal simbolo '$' .
Soluzione:
dollarize.c
-
[12] Scrivere un programma merge.c che legga due stringhe di
lunghezza inferiore a 100 e costruisca una nuova stringa formata dai
caratteri alternati delle due stringhe lette.
Nota: Se una stringa ha lunghezza maggiore dell'altra,
alternare i caratteri finché possibile e poi copiare quello che
rimane della stringa più lunga.
Soluzione:
merge
-
[13] Scrivere un programma che legga N interi e ne determini minimo e
massimo sfruttando opportune funzioni ausiliarie min e max che prendono due interi e
restituiscono il minimo / massimo tra i due.
Soluzione:
testMinMax
-
[14] Scrivere un programma esponente.c che legga due interi positivi
n e m e poi calcoli il valore nm sfruttando una
funzione ausiliaria definita dall'utente, SENZA ricorrere a librerie
matematiche.
Soluzione iterativa:
esponente
Soluzione ricorsiva:
esponenteRic
-
[15] Un array di interi è un pianoro se è formato da tre parti in sequenza, di
cui la prima strettamente crescente, la seconda "pianeggiante" (cioè
composta da elementi tutti uguali), e la terza strettamente decrescente.
Ognuna di queste parti puņ essere vuota.
Ad esempio, sono pianori i seguenti array:
-
[ -2, 3, 5, 5, 5, 4, 2] , dove la prima parte č [ -2, 3, 5] , la seconda è
[ 5, 5, 5] , e la terza è [ 5, 4, 2] ;
-
[ 5, 5, 5, 4, 2] , in cui la prima parte è vuota e le altre due sono ovvie;
-
[ 1, 2, 3] , in cui la prima parte è ovvia, e le altre due sono vuote. Si
noti che con la definizione data qualunque array di lunghezza minore o
uguale a 2 è un pianoro. Un esempio di array che non è un pianoro è [2, 1, 3] .
Si scriva la funzione:
int pianoro(int arr[], int size)
dove size è la lunghezza di arr . La funzione pianoro deve restituire 1
(true ) se e solo se l'array arr passato per argomento è un pianoro.
Per testare la funzione, scrivere un main che senza chiedere alcun dato in
input all'utente mostra il risultato dell'invocazione del metodo pianoro
su diversi array, tra cui almeno gli esempi mostrati sopra e l'array vuoto
(cioè con size 0 ).
Per ognuno di questi array stampare prima il contenuto e poi il risultato
dell'invocazione di pianoro con un opportuno commento.
Soluzione:
pianoro.c
-
[16] In Russia i biglietti degli autobus sono numerati con numeri a 6 cifre. Si
dice che un russo possa augurarsi una buona giornata se quando sale sul
bus la mattina possiede un biglietto in cui somma delle prima 3 cifre e la
stessa delle ultime 3.
Sviluppare un programma che calcoli la probabilità di avere una buona
giornata.
Definire una funzione fortunato che verifica se un biglietto a 6 cifre è
fortunato o meno.
Contare il numero di biglietti fortunati totali e calcolare la probabilità
(biglietti fortunati / biglietti totali).
Calcolare la probabilità per biglietti da 2; 4; 6; 8; 10 cifre e
concludere quindi quale sia il numero migliore di cifre perché i russi siano si sentano
più fortunati.
Soluzione:
buonaGiornata.c
-
[17] Definire un nuovo tipo di dato, tramite il costrutto struct, capace di
rappresentare una data come tre numeri (giorno, mese, anno).
Scrivere una funzione che ricevuta una data (per riferimento) la aggiorni
al giorno successivo (ignorando gli anni bisestili).
Soluzione:
date.c
-
[18] Scrivere un programma segmentoMassimo.c che
calcola il segmento di somma massima di un array. Ad esempio,
applicato all'array tmp, dato da
int tmp [6] = {2, -4, 2, -1, 6, -3}
restituisca il seguente segmento, di somma 7
{2, -1, 6} .
Soluzione:
segmentoMassimo
-
[19] Scrivere un programma ordinaStudenti.c che
legge una sequenza di elementi di tipo studente da tastiera,
nel formato
nome cognome numero_matricola
(tre stringhe di caratteri), li memorizza in un array di
strutture opportunamente definito e li stampa in ordine alfabetico.
Soluzione:
ordinaStudenti
|