settima esercitazione

SETTIMA ESERCITAZIONE AUTOGUIDATA

Obiettivi dell'esercitazione:

esercitarsi su vettori di puntatori e manipolazione di stringhe

ESERCIZIO 1

Scrivere un programma che utilizzi la generazione di numeri casuali per creare delle frasi.

(soluzione nel file frase.c)

Il programma

  • dovrà utilizzare quattro vettori di puntatori a char chiamati article, noun, verb e preposition;
  • dovrà creare una frase selezionando una parola a caso da ognuno dei vettori nel seguente ordine:
    article noun verb preposition article noun;
  • man mano che selezionate le singole parole queste dovranno essere concatenate a quelle precedenti, in un vettore che sia sufficientemente grande per contenere la frase intera;
  • le parole dovranno essere separate da spazi;
  • quando la frase finale sarà inviata in output, questa dovrà incominciare con una lettera maiuscola e terminare con un punto;
  • il programma dovrà generare 20 frasi.

    I vettori dovranno essere riempiti come segue:
    • article dovrà contenere gli articoli the, a, one, some, any
    • noun dovrà contenere i nomi boy, girl, dog, town, car
    • verb dovrà contenere i verbi drove, jumped, ran, walked, skipped
    • preposition dovrà contenere le preposizioni to, from, over, under, on.

    Per realizzare l'esercizio ci si potrà avvalere delle funzioni di libreria

    • per la manipolazione di caratteri e stringhe e
    • per la generazione di numeri casuali.

    Segue un elenco di prototipi di funzioni che potrebbero tornare utili per risolvere l'esercizio con una breve descrizione delle operazioni che eseguono:

    int toupper(int c) <ctype.h> restituisce la lettera maiuscola corrispondente a c
    int puts(const char *s) <stdio.h> visualizza la stringa seguita da un carattere di newline
    char *strcpy(char *s1, const char *s2) <string.h> copia la stringa s2 nel vettore s1 e restituisce la stringa s1
    char *strcat(char *s1, const char *s2) <string.h> accoda la stringa s2 al vettore s1 e restituisce la stringa s1
    size_t strlen(const char *s1) <string.h> restituisce il numero di caratteri della stringa s1 escluso il carattere di ternminazione
    int rand(void) <stdlib.h> restituisce un intero pseudocasuale compreso tra 0 e RAND_MAX
    void srand(unsigned int seed) <stdlib.h> imposta il seed per il generatore pseudocasuale


    Algoritmo

    • inizializza i quattro vettori
    • per 20 volte
      1. genera frase
        • randomizza il generatore pseudocasuale di numeri
        • scegli casualmente un elemento da article, converti la prima lettera in maiuscolo, mettilo nel vettore frase e aggiungi uno spazio
        • scegli casualmente un elemento da noun, accodalo al vettore frase e aggiungi uno spazio
        • scegli casualmente un elemento da verb, accodalo al vettore frase e aggiungi uno spazio
        • scegli casualmente un elemento da preposition, accodala al vettore frase e aggiungi uno spazio
        • scegli casualmente un elemento da article, accodalo al vettore frase e aggiungi uno spazio
        • scegli casualmente un elemento da noun, accodalo al vettore frase e aggiungi un punto
      2. stampa frase

ESERCIZIO 2

Modificare il programma precedente in modo che generi delle frasi casuali in lingua italiana.

(soluzione nel file fraseit.c)

Utilizzando termini in lingua italiana si pone il problema di distinguere tra articoli e nomi di genere maschile o femminile.
Una soluzione possibile è la seguente:
  • utilizzare array bidimensionali di puntatori a char per articolo e nome, costituiti da due righe,
    la prima riga contiene parole di genere femminile e la seconda riga parole di genere maschile;
  • estrarre a caso il genere [ 0 per femminile, 1 per maschile] prima dell'estrazione dell'articolo
  • poi estrarre a caso un termine per articolo e nome dalla riga dell'array bidimensionale corrispondente al valore di genere precedentemente estratto

Il programma

  • dovrà creare una frase selezionando una parola a caso da ognuno delle matrici nel seguente ordine:
    articolo nome verbo articolo nome;
  • man mano che selezionate le singole parole queste dovranno essere concatenate a quelle precedenti, in un vettore che sia sufficientemente grande per contenere la frase intera;
  • le parole dovranno essere separate da spazi;
  • quando la frase finale sarà inviata in output, questa dovrà incominciare con una lettera maiuscola e terminare con un punto;
  • il programma dovrà generare 20 frasi.

    Le matrici dovranno essere riempite come segue:

    • articolo dovrà contenere gli articoli
      1. il, un, qualche, ogni
      2. la, una, nessuna, quella
    • nome dovrà contenere i nomi
      1. ragazzo, topo, gatto, piatto
      2. ragazza, zebra, tazza, mucca
    • verbo dovrà contenere i verbi
      1. guardò, mangiò, prese, spinse