Esercizio con funzioni c++

di il
25 risposte

Esercizio con funzioni c++

Salve ...qualcuno potrebbe darmi una mano con questa traccia:
leggere da tastiera tramite un sottoprogramma un testo di più righe, il cui numero e'
scelto in precedenza dall'utente. Il sottoprogramma determini qual e' la riga più lunga e
un altro sottoprgramma la stampi indicandone il numero,detemini mediante opportuni
sottoprogrammi la riga più corta indicandone il numero ;
quella che contiene la prima lettera maiuscola,
quella che contiene due lettere uguali consecutive,
quella con il maggior numero di coppie di lettere uguali consecutive
cerchi in tutto il testo una parola fornita dall' utente stampando il numero di tutte e sole le righe in cui
essa e' presente e il numero di volte in cui è presente per ogni riga.
Prima del codice in sè per sè...ho dei dubbi sulla traccia: da tastiera si deve inserire un certo testo lungo un certo numero di righe e questo attraverso un sottoprogramma,quindi posso usare un unico array di caratteri e far segliere all' utente quando passare andare a capo oppure ogni riga deve corrispondere ad un array? .. grazie mille

25 Risposte

  • Re: Esercizio con funzioni c++

    Lo farai con array statici o allocati dinamicamente?
  • Re: Esercizio con funzioni c++

    Dovrei utilizzare l' allocazione statica ..grazie
  • Re: Esercizio con funzioni c++

    Dato che dice "l cui numero e' scelto in precedenza dall'utente" sarebbe più adatta l'allocazione dinamica.

    Ma perché parli di array di caratteri e non di string (dato che usi il C++) ?
  • Re: Esercizio con funzioni c++

    Giusto è l'abitudine :S..
    la lunghezza me la leggo così..
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
       string riga;
       cout<<"inserisci testo "<<endl;
       getline(cin,riga);
       cout<<"lunghezza della riga"<<riga.length();
    }
    


    l'allocazione dinamica esplicita (area heap) non ce la fa utilizzare in genere..solo allocazione a stack(dinamica implicita).. chiamata(utilizzo dei puntatori) e ritorno da un sottoprogramma..
  • Re: Esercizio con funzioni c++

    OK, quindi non una string ma un vettore di string
    
       string righe[5];
    
       cout<<"inserisci testo "<<endl;
    
       for(int i=0; i<5; i++)
       {
          cout << "Riga " << i+1 << " : ";
          getline(cin, righe[i]);
          cout << "  (" << righe[i].length() << " car. )" << endl;
       }
    
  • Re: Esercizio con funzioni c++

    Aah okei ..ho fatto così :
    
    #include <iostream>
    #include <string>
    using namespace std;
    void Leggi(int r,string *p);
    int main()
    {
        int righe;
        do
        {
        cout<<"numero di righe "<<endl;
        cin>>righe;
        }
        while(righe<=0);
        string testo [righe];
        string *punt= &testo[0];
        cout<<"inserisci testo"<<endl;
        Leggi(righe,punt);
    }
      void Leggi(int r,string *p)
       {
        for (int i=0;i<r;i++)
        {
        cout<<"riga"<<i+1<<":";
        getline(cin,*(p+i));
        cout<<"("<<*(p+i).length()<<"car)"<<endl;
        }
       }
    
    però anzichè ad es. 4 righe me ne legge 3..la prima la salta
    cioè:
    riga1 riga2
    riga3
    riga4
    e poi col puntatore non mi fa utilizzare length...non è la stessa cosa? grazie millee
  • Re: Esercizio con funzioni c++

    Dato che hai un puntatore, ti basta scrivere

    (p+i)->length()

    Altrimenti devi fare attenzione alle parentesi

    (*(p+i)).length()

    Per quanto riguarda il tipo di allocazione che hai usato (VLA), non è supportato da tutti i compilatori e potresti avere errori di compilazione da alcuni.
  • Re: Esercizio con funzioni c++

    Quindi quest'errore sulla prima riga è per l'allocazione...servirebbe allocazione dinamica per questo tipo di esercizi? :S grazie
  • Re: Esercizio con funzioni c++

    No no ... quel comportamento sulla prima riga non dipende da questo.

    Probabilmente è un bug del compilatore ... quale usi?
  • Re: Esercizio con funzioni c++

    Ho provato sia su code blocks che su dev con lo stesso risultato
    riga1
    <0 car> non mi fa inserire nulla e passa alla riga 2
  • Re: Esercizio con funzioni c++

    La causa è la

    cin >> righe;

    che io non ho usato. Puoi aggiungere, subito dopo la while, una

    cin.ignore();

    per svuotare il buffer di input
  • Re: Esercizio con funzioni c++

    Si ora funziona ho fatto il primo punto la riga più lunga
    
    #include <iostream>
    #include <string>
    using namespace std;
    void Leggi(int r,string *p);
    void Stampa(int &riga,string *p);
    int Maggiore(int &riga,int r,string *p);
    int main()
    {
        int r=0;
        int righe;
        int rig=0;
        do
        {
        cout<<"inserisci un numero di righe pari"<<endl;
        cin>>righe;
        r=righe%2;
        }
        while(righe<=0||r!=0);
        cin.ignore();
        string testo [righe];
        string *punt= &testo[0];
        cout<<"inserisci testo"<<endl;
        Leggi(righe,punt);
        rig = Maggiore(rig,righe,punt);
        cout<<"la riga piu' lunga e' la riga numero  "<<rig+1<<":"<<endl;
        Stampa(rig,punt);
    
    }
    
    
       void Leggi(int r,string *p)
       {
        for (int i=0;i<r;i++)
        {
        cout<<"riga"<<i+1<<":";
        getline(cin,*(p+i));
        cout<<"("<<(p+i)->length()<<"car)"<<endl;
        }
       }
    void Stampa(int &riga,string *p)
    {
        for(int i=riga;i<riga+1;i++)
        cout<<*(p+i);
    }
    
    int Maggiore(int &riga,int r,string *p)
    {
     for(int i=0;i<r;i++)
     {
       if ((p+i)->length()>(p)->length())
       {
           riga=i;
       }
     }
     return riga;
    }
    
    funziona mi sembra sia tutto corretto.. grazie mille
  • Re: Esercizio con funzioni c++

    A cosa ti serve il parametro

    int &riga

    nella funzione Maggiore se il valore viene restituito dalla funzione stessa?
  • Re: Esercizio con funzioni c++

    Hai ragione ho sbagliato non ci vuole proprio..in ogni caso mi sono accorta che è proprio da rifare perchè così non tiene traccia della riga maggiore..ma confronta tutte le righe con la prima e non va bene .... grazie
Devi accedere o registrarti per scrivere nel forum
25 risposte