Ciao, non riesco a fare funzionare questo programma:
Esercizio 1. Si scriva un programma completo in C++ OPPORTUNAMENTE MODULARIZZATO IN FUNZIONI che legga da standard
input un testo (cioè una sequenza di caratteri, sia essa A), quindi crei una seconda sequenza (sia essa B), e infine stampi “OK” se è
verificata una certa condizione, e “NO” se questa condizione non è verificata. Le istruzioni per la creazione della sequenza B e per
verificare la condizione sono riportate qui di seguito.
• Il testo nella sequenza A è composto da parole e frasi; le parole sono separate tra loro da trattini (cioè, il carattere ‘-’), e le frasi
sono separate tra loro da punti (cioè, il carattere ‘.’). La sequenza A è terminata da una coppia di punti (cioè la coppia di caratteri
“..”).
• La sequenza B deve contenere un numero intero per ciascuna delle frasi contenute nella sequenza A; questo numero è pari al
numero di parole contenuto nella frase.
• La condizione da verificare sulla sequenza B è la seguente: nessuno dei numeri presenti nella sequenza può comparirvi solo una
volta; ogni numero deve essere presente due o più volte.
NOTE: si può supporre che la sequenza A non sia composta da più di 100 frasi, e che nessuna delle frasi sia vuota.
ESEMPIO: data la sequenza
A=Il-concerto-degli-U2-è-stato-grandioso.Le-nuvole-sono-bianche.La-pizza-più-venduta-è-la-margherita.La-rosa-
profuma.Il-cielo-è-azzurro.Le-nuvole-oggi-sono-nere.Il-gabbiano-vola-nel-cielo.Io-amo-la-pioggia.Viva-la-vita..
Si possono contare 9 frasi prima della coppia di punti che termina il testo. Pertanto la sequenza B conterrà 9 elementi, ciascuno dei ciascuno dei
quali corrispondente ad una delle frasi presenti nella sequenza A, in ordine; e ciascun numero conta il numero di parole della frase
corrispondente.
B=747345543
Infatti la prima frase (“Il-concerto-degli-U2-è-stato-grandioso”) contiene 7 parole; la seconda frase (“Le-nuvole-sono-bianche”)
contiene 4 parole; e così via. Una volta creata la sequenza B, il programma in questo caso dovrà stampare su standard output “OK”:
infatti ciascuno dei numeri presenti nella sequenza B è presente almeno due volte (il 7 è presente due volte, il 4 è presente tre volte, il 3
è presente due volte, e il 5 è presente due volte).
ecco il codice da me scritto:
codice:
# include <iostream>
using namespace std;
const int n=100;
const int k=100;
void stampaB (char [], int );
void dimensioneB (char [], char , int , int ,int);
void inserisci (char [],char , int );
void inserisceB (char [], char [], int , int ) ;
int main ()
{
int conTra=0; // conta i trattini
int conFrasi=0; // conta le frasi
int dimensione=0;
int dimensioneBB=0;
char frasi={0};
char A[n];
char B[k];
inserisci (A,frasi, dimensione);
cout<<endl;
dimensioneB(A,frasi,n,conFrasi,dimensioneBB);
cout<<endl;
inserisceB ( A,B, dimensioneBB, conTra) ;
stampaB ( B, dimensioneBB);
return 0;
}
void inserisci (char A[],char frasi,int dimensione)
{
for (int i=0; i<n && frasi!='Z' ;i++)
{
cin>>frasi;
A[i]=frasi;
dimensione=i;
}
}// chiude funzione inserisci
void dimensioneB (char A[], char frasi , int n, int conFrasi, int dimensioneBB)
{
for (int i=0; i<n; i++)
{
if (A[i]=='.')
conFrasi++;
dimensioneBB=conFrasi;// cosi ottengo la dimensione del vettore B[]
}
cout<<dimensioneBB;
}
void inserisceB (char A[], char B[], int dimensioneBB, int conTra)
{
for (int i=0; i<dimensioneBB; i++)
while (A[i]!='.')
{
if (A[i]=='-')
conTra++;
B[i]=conTra;
}
}// chiude la funzione
void stampaB (char B[], int dimensioneBB)
{
for (int i=0;i<dimensioneBB;i++)
{
cout<<B[i];
cout<<endl;
}
}
GRAZIE