mi date una mano per fare esercizi

Stato
Discussione chiusa ad ulteriori risposte.
U

Utente cancellato 377603

Ospite
Esercizio – conta ripetizioni parole (da “prova scritta del 2/9/2014”)
1) Sia Elem il tipo di una struttura dati (struct) costituita da due campi: nome di tipo stringa
(lungh. max. 100) e cont di tipo intero.

(a) Realizzare una funzione void di nome aggiorna che, presi come suoi parametri un array A di elementi di tipo Elem, il numero m di elementi in A, e una stringa s, controlla se A contiene già un elemento il cui campo nome coincide con s; in caso affermativo, incrementa di 1 il campo cont dell'elemento trovato; altrimenti aggiunge, dopo l’ultimo elemento inserito in A, un nuovo elemento con nome uguale a s e cont uguale a 1. La funzione restituisce in m il numero (eventualmente) aggiornato di elementi di A.
Ad es., dati A={{“alfa”,2},{“beta”,1}}, m=2, con aggiorna(A,m,”beta”) si ottiene A={{“alfa”,2},{“beta”,2}}, m=2, mentre con aggiorna(A,m,”gamma”) si ottiene A={{“alfa”,2},{“beta”,2},{“gamma”,1}}, m=3.
N.B. La funzione deve essere dichiarata obbligatoriamente di tipo void. Utilizzare soltanto stringhe “tipo C”.

(b) Scrivere un programma principale di prova che legge una sequenza di stringhe (max. 1000), separate tra loro da esattamente uno spazio, e crea un array parole di elementi di tipo Elem, utilizzando obbligatoriamente la funzione aggiorna applicata a ciascuna stringa letta. La lettura termina non appena si trova un “a capo” o si raggiunge il numero massimo di stringhe. Al termine della lettura il programma provvede a stampare l'array parole su std output, un elemento per ogni riga di stampa.

Prova esecuzione (input sottolineato)
Inserisci il testo, terminato da a capo (max. 100 parole): il gatto e il cane e il topo
Numero di occorrenze di ciascuna parola nel testo:
il 3
gatto 1
e 2
cane 1
topo 1
C++:
#include <iostream>
#include <cstring>

using namespace std;

struct Elem;

const int DIM = 100 ;
const int dim_MAX = 1000;

{ char name[DIM];
    int cont;
};

void aggiorna(Elem f[], int n, char s[]);
{ 
    for(int i=0 ; i<=n ; i++)
    {
        if (strcmp(f,name,s)==0)
            f.count++;
        else
        {
            n++;
            strcmpy(a[n],nome,s);
            a[n].cont=i;
        }
    }
}

void stampare (Elem f[], int n)
{
    for (int i=0 ; i<=n ; i++){
        cout<<f, name <<" "<< f, cout<<endl;
    }
}

int main()
{
    Elem parole[dim_MAX];
    int n=0;
    char s[DIM];
    cout<<"inserisci testo"<<endl;

    do{
        cin.getline(s,DIM,'\b');
        aggiorna(parole,n,s);
    }
    while ()
    return 0;
}
 
Ultima modifica da un moderatore:

Andretti60

Utente Èlite
3,773
2,542
Hardware Utente
Ciao Marina e benvenuta nel gruppo.
Per favori leggi le regole di sezione nelle discussioni in rilievo. Non aspettarti che ti scriviamo la soluzione di molti esercizi in una sola discussione. Proponi un esercizio alla volta, mostra quello che hai scritto e descrivi quali sono i punti che non ti sono chiari e hai bisogno di aiuto. C’è molta gente qui disposta ad aiutare.
 
  • Mi piace
Reactions: Mursey

Marcus Aseth

Utente Attivo
386
127
Hardware Utente
Sistema Operativo
Windows 10
non capisco, il codice sopra è il tuo tentativo? Perchè se così, non dovrebbe neanche compilare per diverse ragioni, lo struct ha un forward declare ma non è definito, la funzione aggiorna è dichiarata ma non definita, variabile "name" dentro stampare non è visibile all'interno della funzione, variabile "parole" cerca di usare un tipo non definito e la sintassi del "do-while" loop è sbagliata.
Hai testato quel codice per assicurarti compilasse prima di mostrarlo?
Non so cosa usi, ma ci sono IDE come Visual Studio che ti aiutano indicandoti tutte queste cose.
Lascia perdere qualsiasi software che ti ha permesso di compilare quel codice senza problemi.
 
Ultima modifica:
  • Mi piace
Reactions: Mursey
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando