Easy
Esercizio 1 easy
Se non sai cos’è una struct vai qui
fai una struct che rappresenti un punto
ovviamente come sappiamo un punto è fatto da una coordinata x e una y. ricordatevi di mettere il ; alla fine della graffa dopo la struct
nel main dichiara due punti: (1,2) e (1,7)
Continua questo esercizio qui.
Esercizio 2 Easy
La vostra prima funzione con le struct: Ovviamente le regole per fare una funzione sono sempre le stesse: Chiedetevi cosa dovete prendere in input e che cosa volete come output. In questo caso è una funzione che stampa qualcosa, prendendo in input un punto…
Fai una funzione che prende in input un punto, ad esempio p2 e lo stampa così: "(1,7)"
Come definisco la funzione?
Siccome è una funzione che stampa qualcosa, non dovrà ritornare nulla! Quindi è una funzione void.
Tra le parentesi cosa metto???
Tra le parentesia ci va l’input. Il nostro input è un punto perchè la nostra funzione prende in input un punto e stsampa il contenuto.
Soluzione
Continua questo esercizio qui
Esercizio 3 easy
Allocare dinamicamente una struct: può succedere di voler allocare dinamicamente una struct. Per esempio:
usando malloc alloca dinamicamente un punto
Se non sai dove mettere le mani puoi studiare questa roba:
Usa la malloc: questo è solo un hint, non c'è soluzione
Andiamo a capire: noi stiamo allocando una regione di memoria grande come la struttura punto. Per dire questo dobbiamo dire a malloc di allocare “sizeof(struct Punto)”, cioè “alloca una regione di memoria grande quanto al struttura punto”. Una volta fatto ciò la malloca restituisce un puntatore, si ma un puntatore a cosa? Un puntatore ad un punto! Quindi dobbiamo definire un puntatore ad un punto “struct Punto * puntatore_a_un_punto” e quel puntatore deve contenere il valore di ritorno della malloc
Usa la malloc: la malloc vuole sapere quanto allocare e restituisce un puntatore...
Continua l’esercizio qui
Esercizio 4 easy
Stringhe! Okay, come avete visto a lezione con rossi le stringhe si dichiarano come un array di caratteri.
Dichiara una stringa che contiene la parola "python", si può fare in due modi. Falli entrambi
Se non sai di cosa sto parlando e vuoi ripassare studia questo.
Soluzione
In questa soluzione definisco due stringhe cioè due array di char di size 6. Il metodo di assegnamento è diverso (nel primo assegno un carattere per volta nel secondo tutto insieme) ma il risultato è lo stesso.
Per continuare gli esercizi con le stringhe vai Esercizio 4 medium
Medium
Esercizio 1 medium
Fai una funzione che presi due punti calcola il punto medio dati due punti
Questa funzione a dirla tutta ha un difetto, sapresti dire quale, sapresti renderla migiore??
rendi migliore la funzione data come soluzione alla domanda prima
Continua l’esercizio qui
Esercizio 2 medium
Fai una funzione che prende due punti e restituisce la distanza tra due punti
Per chi non si ricordasse la formula per calcolare la distanza fra due punti è:
Per fare la radice quadrata e la potenza dovete usare la funzione “sqrt” e “pow” che sono incluse nella libreria <math.h>, esempio:
come definisco la funzione?
La funzione prende in input due punti, e restituisce una distanza, quindi un numero.
Soluzione
Esercizio 3 medium
Questo esercizio è il continuo di questo eserecizio: Esercizio 3 easy. Fai prima quello se ancora non l’hai fatto.
Adesso abbiamo allocato dinamicamente un punto. Fico, ma il punto è vuoto. Voglio assegnare al punto dei valori, facciamo P(1,3) E vorrei stampare questi valori per essere sicuro che il punto li abbia effettivamente.
A questo punto dovreste avere il seguente main:
assegna al punto i valori (3,4)
Per assegnare i valori 3 e 4 dobbiamo accedere alla struttura tramite il puntatore. Se non hai idea di come si faccia: leggi qui Accedere ad una struttura allocata dinamicamente
soluzione
Esercizio 4 medium
Ora che abbiamo allocato due stringhe vorrei una funzione che prese due stringhe le concatena una all’altra.
Purtroppo questo esercizio l’ha già fatto rossi oggi.
Quindi vi tocca un esercizio più difficile: Fai una funzione che prende in input 3 stringhe, e restituisce una stringa che è la concatenazione di queste tre stringhe dat questo main:
Soluzione guidata passo per passo
innanzitutto dobbiamo andare a capire il main.
In questo main definisco tre stringhe, e vado a stampare la loro concatenazione. Per fare questo devo definire la funzione “concatena”.
La funzione concatena prende in innput tre stringhe (quindi tre puntatori a caratteri) e restituisce una stringa (quindi un puntatore a char)
Adesso andiamo a vedere che cosa deve fare questa funzione. Per prima cosa deve.
Questo è lo scheletro della funzione. Andiamo a vedere come farlo
Definire una nuova stringa
La nuova stringa di output può essere definita staticamente? Tipo:
NOPE. Perchè non conosciamo a priori quanto deve essere lunga. Quindi prima devo capire quanto devo farla lunga, e poi, una volta capito, devo allocare dinamicamente la stringa.
Okay, quindi quello che ho fatto è stato trovarmi la lunghezza totale sommando la lunghezza di ogni singola stringa. Per farlo ho chiamato la funzione strlen() che è una funzione della libreria <string.h> (ricordatevi di includerla)
Inserire i caratteri nella stringa di output
Per fare questo basta iterare su ogni singolo carattere di ogni stringa ed aggiungerlo alla stringa di output. Lo facciamo con un ciclo for
Quindi alla posizione 0 di “stringa concatenata” farò corrispondere il carattere all posizione 0 di str1.
Ora che ho finito di copiare la prima lista devo copiare anche la seconda. Però adesso non va più bene usare i per indicizzare la stringa concatenata. Cioè se facessimo così:
si andrebbe a copiare sulla stringa concatenata si, i valori di stringa 2, ma si andrebbero a sovrascrivere quelli scritti in precedenza, quindi serve un iteratore a parte per la stringa concatenata che non venga resettato a zero ogni volta che il ciclo for finisce
A questo punto basta farlo anche per l’ultima stringa e poi non scordatevi di aggiungere alla fine il carattere di fine stringa ‘\0’
Per migliorare ancora questa soluzione si può, prima di fare tutte queste operazioni, controllare che l’allocazione di memoria della stringa concatenata sia andata a buon fine, ad esempio con un if
Finito! Qui sotto trovate la soluzione completa da copiare ed incollare.
soluzione
Esercizio 1 hard
Fai la funzione di concatenazione con un numero arbitrario di stringhe! Ci sono diversi modi per farlo, quello che consiglio è di passare un array di stringhe!! Pensa bene come potresti definire questo array di stringhe e come all’interno della funzione separare ogni singola stringa e fare le operazioni che abbiamo fatto nell’esercizio precedente.
un hint che posso darvi è il main. Così capite cosa andrà passato alla funzione. Guardatelo.
Come vedete alla funzione concatena passo un array di stringhe e il numero di stringhe che sto passando, nel mio caso gli passo tre stringhe. Per passare un array di stringhe devo passare un puntatore ad un puntatore di char, cioè un puntatore a stringhe, cioè un array di stringhe fondamentalmente.