Search this site
Embedded Files
Emanuele Giona
  • Home
  • Research and activities
    • Publications
    • Blog
    • Teaching
  • About me
    • Curriculum Vitae
  • 🔗 LinkedIn
  • 🔗 GitHub
  • 🔗 Twitter
  • 🔗 ORCiD
Emanuele Giona
  • Home
  • Research and activities
    • Publications
    • Blog
    • Teaching
  • About me
    • Curriculum Vitae
  • 🔗 LinkedIn
  • 🔗 GitHub
  • 🔗 Twitter
  • 🔗 ORCiD
  • More
    • Home
    • Research and activities
      • Publications
      • Blog
      • Teaching
    • About me
      • Curriculum Vitae
    • 🔗 LinkedIn
    • 🔗 GitHub
    • 🔗 Twitter
    • 🔗 ORCiD

Lezione 3
Torna a Reti Lab A.A. 2022/23

Data: 2023/03/26

Tags: C, esercizi, lezione 3, funzioni libreria string.h, nuovi tipi (struct, union, enum, typedef), allocazione dinamica della memoria

Soluzioni
Esercizio 1
Esercizio 2
Esercizio 3
Esercizio 4

Riassunto

Soluzioni degli esercizi assegnati durante la lezione 3, tenuta il 21 Marzo 2023.

Soluzioni

Esercizio 1

Scrivere una funzione che, sfruttando funzioni della libreria string.h, rimuova tutte le occorrenze di una sottostringa fornita dall’utente. Si assume che tutte le stringhe siano terminate da ‘\0’.
Hint: La funzione non dovrebbe avere valore di ritorno e dovrebbe accettare i seguenti parametri: (a) la stringa originale su cui operare, (b) la sottostringa di cui si desidera la rimozione, (c) un puntatore ad una stringa da fornire in output.
Esempio: (a) “ciao ciao ciao”, (b) “o” → (c) “cia cia cia”

Esercizio 2

Scrivere due funzioni che verifichino che gli indirizzi di memoria di puntatori a membri di una struct siano diversi, mentre gli indirizzi di memoria di puntatori a membri di una union siano uguali.
Hint: la format string per puntatori è “%p”; entrambe le funzioni accettano due argomenti: (a) un puntatore a struct oppure un puntatore a union, rispettivamente, e (b) un puntatore a funzione che implementi l’operazione di confronto (per struct testa ugualianza tra indirizzi, per union testa disuguaglianza); gli indirizzi di memoria devono essere confrontati tramite le funzioni della libreria string.h.

Esercizio 3

Assumendo una single linked list composta da Element (dichiarato come negli esempi), scrivere le funzioni insertAt e removeAt tali che: (1) insertAt → inserisce un elemento in una qualsiasi posizione, fornita dall’utente come indice (analogo ad array); (2) removeAt → rimuove un elemento in una qualsiasi posizione, fornita dall’utente come indice (analogo ad array).
Hint: 1 (head) -> 2 -> 3 -> 4; insertAt(head, 5, 1) → 1 (head) -> 5 -> 2 -> 3 -> 4; removeAt(head, 0) → 5 (head) -> 2 -> 3 -> 4; prestare attenzione ai valori di ritorno delle funzioni e come usarli

Esercizio 4

Implementare una doubly linked list ed annesse funzioni tali che: (1) Supporti elementi int, float, e char[10] – una lista comunque conterrà elementi di tipi omogenei; (2) Supporti le funzioni insertAt e removeAt definite come all’Esercizio 3 ed opportunamente modificate per l’uso in una doubly linked list; (3) Implementi una funzione apply tale che accetti un puntatore a funzione fnPtr ed una direzione (enum Dir{ FRONT, BACK}; ): se FRONT, fnPtr viene applicato a tutti gli elementi scorrendo la lista dall’inizio alla fine, e in ordine inverso se la direzione è invece BACK.

Hint: è necessario effettuare controlli specifici per evitare elementi di tipi diversi all’interno di una lista; il puntatore a funzione fornito ad apply deve aver accesso solo ad un singolo elemento, potenzialmente con la possibilità di modificarlo; può essere utile definire una nuova struct che rappresenti la lista stessa, evitando la gestione diretta di elementi

Reti Lab 2022/23

Google Sites
Report abuse
Google Sites
Report abuse