Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    10

    Problema con sottoprogramma

    Ciao a tutti!Sarò breve...
    Perké il programma scritto qui sotto mi funziona perfettamente, mentre il secondo, la cui unica differenza è la ri-kiamata di un sottoprogramma (l'unica differenza è evidenziata in rosso) non funziona?
    Aiutatemi!

    PROGRAMMA FUNZIONANTE

    #include <iostream>
    #include <stdio.h>

    using namespace std;
    int NumeroLettere(int Max, int Conto);
    int main(){
    bool Controllo=false;//Variabile di controllo (per evitare spazi doppi)
    int NumeroSpazi, Conto, Max, Indice;
    char Ch;
    char Frase[1024];
    Max = NumeroSpazi = Conto = Indice = 0;
    cout<<"Scrivi una frase e premi invio: ";
    while((Ch = getchar()) != '\n' && Indice<1024){
    Frase[Indice++] = Ch;
    if(Ch == ' ') {
    if(!Controllo)//Imposto il controllo per vedere se non ci sono spazi doppi
    NumeroSpazi++;
    Controllo=true;
    NumeroLettere(Max,Conto);
    Conto = -1;
    }
    else Controllo=false;//Resetto il controllo
    Conto++;
    if (Max < Conto) Max = Conto; }
    cout<<"La frase che hai inserito e':"<<Frase<<endl;
    cout<<"In questa frase ci sono " <<NumeroSpazi+1<<" parole"<<endl;
    cout<<"La parola piu' lunga che hai immesso e' di lunghezza pari a: "<<Max<<endl;
    system ("PAUSE");
    return 0;
    }
    int NumeroLettere(int Max, int Conto){
    if(Max < Conto) Max = Conto;}


    PROGRAMMA NON FUNZIONANTE

    using namespace std;
    int NumeroLettere(int Max, int Conto);
    int main(){
    bool Controllo=false;//Variabile di controllo (per evitare spazi doppi)
    int NumeroSpazi, Conto, Max, Indice;
    char Ch;
    char Frase[1024];
    Max = NumeroSpazi = Conto = Indice = 0;
    cout<<"Scrivi una frase e premi invio: ";
    while((Ch = getchar()) != '\n' && Indice<1024){
    Frase[Indice++] = Ch;
    if(Ch == ' ') {
    if(!Controllo)//Imposto il controllo per vedere se non ci sono spazi doppi
    NumeroSpazi++;
    Controllo=true;
    NumeroLettere(Max,Conto);
    Conto = -1;
    }
    else Controllo=false;//Resetto il controllo
    Conto++;
    NumeroLettere(Max,Conto) }
    cout<<"La frase che hai inserito e':"<<Frase<<endl;
    cout<<"In questa frase ci sono " <<NumeroSpazi+1<<" parole"<<endl;
    cout<<"La parola piu' lunga che hai immesso e' di lunghezza pari a: "<<Max<<endl;
    system ("PAUSE");
    return 0;
    }
    int NumeroLettere(int Max, int Conto){
    if(Max < Conto) Max = Conto;}

  2. #2
    Se non indenti il codice e non lo inserisci tra i tag [CODE] ... [/CODE] non si capisce niente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    A parte il fatto che sono d'accordo con MItaly (come non si potrebbe ... ) sulla leggibilità del codice ...

    ... il problema mi sembra che sia sul fatto che richiamando quella funzione, NON modifichi il valore della variabile Max del main ... (e poi la funzione restituisce un int e non mi pare che ci sia il return ...) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    10
    PROGRAMMA FUNZIONANTE
    codice:
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    int NumeroLettere(int Max, int Conto);
    int main(){
    bool Controllo=false;//Variabile di controllo (per evitare spazi doppi)
    int NumeroSpazi, Conto, Max, Indice;
    char Ch;
    char Frase[1024];
    Max = NumeroSpazi = Conto = Indice = 0;
    cout<<"Scrivi una frase e premi invio: ";
    while((Ch = getchar()) != '\n' && Indice<1024){
    Frase[Indice++] = Ch;
    if(Ch == ' ') {
    if(!Controllo)
    NumeroSpazi++;
    Controllo=true;
    NumeroLettere(Max,Conto);
    Conto = -1;
    if (Max < Conto) Max = Conto; 
    }
    else Controllo=false;
    Conto++;
    cout<<"La frase che hai inserito e':"<<Frase<<endl;
    cout<<"In questa frase ci sono " <<NumeroSpazi+1<<" parole"<<endl;
    cout<<"La parola piu' lunga che hai immesso e' di lunghezza pari a: "<<Max<<endl;
    system ("PAUSE");
    return 0;
    }
    
    
    int NumeroLettere(int Max, int Conto){
    if(Max < Conto) Max = Conto;}
    PROGRAMMA NON FUNZIONANTE
    codice:
    using namespace std;
    int NumeroLettere(int Max, int Conto);
    int main(){
    bool Controllo=false;//Variabile di controllo (per evitare spazi doppi)
    int NumeroSpazi, Conto, Max, Indice;
    char Ch;
    char Frase[1024];
    Max = NumeroSpazi = Conto = Indice = 0;
    cout<<"Scrivi una frase e premi invio: ";
    while((Ch = getchar()) != '\n' && Indice<1024){
    Frase[Indice++] = Ch;
    if(Ch == ' ') {
    if(!Controllo)
    NumeroSpazi++;
    Controllo=true;
    NumeroLettere(Max,Conto);
    Conto = -1;
    }
    else Controllo=false;
    Conto++;
    NumeroLettere(Max,Conto)  }
    cout<<"La frase che hai inserito e':"<<Frase<<endl;
    cout<<"In questa frase ci sono " <<NumeroSpazi+1<<" parole"<<endl;
    cout<<"La parola piu' lunga che hai immesso e' di lunghezza pari a: "<<Max<<endl;
    system ("PAUSE");
    return 0;
    }
    
    
    int NumeroLettere(int Max, int Conto){
    if(Max < Conto) Max = Conto;}
    E' meglio così?
    Ps.Come posso cambiare il valore nel main?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No ... non hai indentato il codice e quindi è ancora confuso ...

    Comunque, la funzione deve essere

    codice:
    int NumeroLettere(int Max, int Conto)
    {
       if(Max < Conto) 
         return Conto;
       else
         return Max;
    }
    e nel main

    codice:
    Max = NumeroLettere(Max,Conto)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Altrimenti devi passare Max per riferimento (con un puntatore o il & dietro a Max nel prototipo di funzione)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da XWolverineX
    Altrimenti devi passare Max per riferimento (con un puntatore o il & dietro a Max nel prototipo di funzione)
    Non complicargli la situazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    gne gne gne
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.