DOMANDA Esercizio C++

Pubblicità
Ciao, che vuol dire: "non riesco a far andare il break" ? sii più specifico sul probema che ti da, così sarà più facile per chi legge aiutarti.
 
Il programma è scritto in C, non in C++;
comunque l'istruzione break in un ciclo, se eseguita, causa la terminazione del ciclo stesso e la prosecuzione del programma a partire dall'istruzione successiva al corpo del ciclo
 
Manca una graffa alla fine
Screenshot (25).webp
Ho provato anche mettendo una graffa alla fine di "Break;" ma l'errore rimane...So che magari per voi è qualcosa di semplice ma sinceramente io non riesco a capire dove sto sbagliando.

Questo è quello che vedete nella foto:

#include <stdio.h>
#define TANTI 10
#define MAX 100
main()
{
int inizio, conta, somma=0;
do
{
printf("Inserisci numero iniziale compreso tra 5 e 20: ");
scanf("%d",&inizio);
}
while ((inizio<5)||(inizio>20));
for (conta=inizio;conta<=inizio+TANTI;conta++)
somma+=conta
printf("\n contatore: %d somma: %d");
if (somma>MAX);
break;
}

Ho provato successivamente così senza risultati sperati...

#include <stdio.h>
#define TANTI 10
#define MAX 100
main()
{
int inizio, conta, somma=0;
do
{
printf("Inserisci numero iniziale compreso tra 5 e 20: ");
scanf("%d",&inizio);
}
{
while ((inizio<5)||(inizio>20));
for (conta=inizio;conta<=inizio+TANTI;conta++)
somma+=conta
printf("\n contatore: %d somma: %d");
if (somma>MAX);
break;
}
}
 

Allegati

  • Screenshot (25).webp
    Screenshot (25).webp
    85.5 KB · Visualizzazioni: 254
#include <stdio.h>
#define TANTI 10
#define MAX 100
main()
{
int inizio, conta, somma=0;
do
{
printf("Inserisci numero iniziale compreso tra 5 e 20: ");
scanf("%d",&inizio);
}
{
while ((inizio<5)||(inizio>20));
for (conta=inizio;conta<=inizio+TANTI;conta++)
somma+=conta
printf("\n contatore: %d somma: %d");
if (somma>MAX);
break;
}
}


inoltre ora ho capito perchè hai fatto inizio + tanti nel for quindi rimangio ciò che ho scritto prima .. in qualsiasi caso prova cosi

C:
int main()

{

int conta=0 , somma=0 , inizio;

do{
printf("Inserisci numero iniziale compreso tra 5 e 20: ");

scanf("%d",&inizio);

}while ((inizio<5)||(inizio>20));


for (conta=inizio;conta<=inizio+TANTI;conta++){
somma+=conta;
printf("\n contatore: %d somma: %d",conta,somma);
  if (somma>MAX){
        printf("\n Break");
  break;
  }
}
}

il main di solito va dichiarato o int o void. Non sono un esperto ma era questo uno dei problemi. Nel printf interno al ciclo non vi era alcun riferimento a variabili da stampare.

Infine aggiungo anche la versione C++ molto rudimentale
C++:
int main()
{
    int inizio;
    do{
    cout << "Inserisci numero iniziale compreso tra 5 e 20: "<< endl;
    cin >>inizio;
    }while ((inizio<5)||(inizio>20));
    int somma=0;
    for (int conta =inizio; conta<=inizio+TANTI; conta++ ){
      somma+=conta;
    cout<<"\n contatore:"<<conta<<" somma:"<<somma<<endl;
    if (somma>MAX){
        cout<<"break"<<endl;
    break;
  }
    }
    return 0;
}

Comunque ti consiglio vivamente di stare attento alle parentesi e alla punteggiatura.. so cosa vuol dire studiare un codice, anche se oggi la memoria non mi aiuta, il consiglio principale e di stare attento ai piccoli dettagli. Per alcuni progetti per una virgola o una parentesi ci puoi perdere molti giorni e soprattutto la testa. Spesso conviene avere errori più evidenti che subito si notano che questi che ti fanno impazzire. Inoltre dato che stai alle prime armi ti consiglio di provare sempre porzioni di codice vedendo pian piano cosa va e cosa non va, insomma non scrivere mai tutto il codice sperando che vada , poiché alzi il rischio di errori. Evito di dirti di fare il debug.. che purtroppo molti non usano. ma è la cosa migliore da fare in casi come questi.
Infine per rassicurarti un po' oggi che stai alla base del tuo percorso so che ti sembra molto difficile, ma ti assicuro che con un po' di esperienza in più errori come quelli presenti in questo esercizio li noti subito non hai neanche bisogno di pensarci e ti verrà spontaneo scrivere codice in maniera corretta e trovare subito gli errori!:ok:
 
Ultima modifica:
Salve ho appena iniziato a studiare il C++ ed abbiamo ricevuto un esercizio da correggere, il problema è che non riesco a far andare il ”Break“.
Visualizza allegato 282778
Se qualcuno potesse aiutarmi scrivendo la soluzione oltre che una spiegazione mi farebbe un gran piacere!



Inviato da iPhone tramite App ufficiale di Tom\'s Hardware Italia Forum

Devi essere ordinato altrimenti non si capisce niente, comunque ripassa le basi praticamente sbagliavi tutto sintatticamente.
@DDog29 è sintatticamente errato scrivere ciò:
C:
// NON PUOI
int conta=0 , somma=0 , inizio;

//PUOI
int conta, somma, inizio;

A questo punto facevi prima a scrivere tutto senza assegnazione visto che in C le variabili globali (le locali no) vengono inizializzate a 0 automaticamente.
Poi il controllo con l'if va fatto prima della prossima operazione altrimenti ti stamperà lo stesso un numero maggiore di MAX.


C:
#include <stdio.h>

#define TANTI 10
#define MAX 100

int main(){
  int inizio;
  int somma;

  do {
    printf("Inserisci numero iniziale compreso tra 5 e 20: ");
    scanf("%d",&inizio);
  } while ((inizio<5)||(inizio>20));

  for(int contatore = inizio; contatore <= inizio + TANTI; contatore++){
    somma += contatore;
 
    if(somma > MAX){
        break;
      }
 
    printf("\n contatore: %d somma: %d", contatore, somma);
  }
return 0;
}
 
@Rand

Fare l'inizializzazione della i nella riga del for è decisamente scorretto in C le variabili vanno dichiarate prima. In C++ si può. In sostanza sfrutto la tua dicitura di prima :

// NON PUOI

for(int i=...

//PUOI
int i;
.
.
.
for(i=....

Dove i punti indicano altre righe di codice.

Inoltre quando si assegna un valore 0 alle variabili ci assicuriamo che il compilatore assegni effettivamente 0 e non un valore != da 0 cosa che in teoria non dovrebbe succedere, ma purtroppo accade ed è l unico motivo per il quale ho fatto quel tipo di inizializzazione un po' strana, e la spiegazione sta nel fatto che il compilatore assegnano a una variabile un determinato indirizzo,questo non sempre contiene uno 0 . Il codice l ho testato e funziona alla perfezione!
 
Ultima modifica:
Fare l'inizializzazione della i nella riga del for è decisamente scorretto in C le variabili vanno dichiarate prima.
Non si poteva con i vecchissimi compilatori C, mentre è possibile dichiarare/inizializzare una nuova variabile ovunque, in particolare nelle condizioni del for, a partire dallo standard C99 (se non da questo sicuramente dall'ultima versione C11, è proprio previsto dallo standard).
 
@Rand

Fare l'inizializzazione della i nella riga del for è decisamente scorretto in C le variabili vanno dichiarate prima. In C++ si può. In sostanza sfrutto la tua dicitura di prima :

// NON PUOI

for(int i=...

//PUOI
int i;
.
.
.
for(i=....

Dove i punti indicano altre righe di codice.

Inoltre quando si assegna un valore 0 alle variabili ci assicuriamo che il compilatore assegni effettivamente 0 e non un valore != da 0 cosa che in teoria non dovrebbe succedere, ma purtroppo accade ed è l unico motivo per il quale ho fatto quel tipo di inizializzazione un po' strana, e la spiegazione sta nel fatto che il compilatore assegnano a una variabile un determinato indirizzo,questo non sempre contiene uno 0 . Il codice l ho testato e funziona alla perfezione!

Questo risale ai tempi di quando si dichiaravano i parametri cosi:

Codice:
int funzione(a,b)
int a;
int b;
{

}

Comunque l'inizializzazione della variabile nel for è consigliata visto che la si fa diventare locale e non globale. Riguardo all'assegnazione del perchè non si può fare quella dichiarazione tua è perchè l'operatore "=" ha una priorità maggiore di ",". Cosi come dice @BAT00cent è stata introdotta questa possibile in C99, perchè se dobbiamo usare lo standard prima del C99 allora le variabili vanno iniziate subito e fare qualcosa di questo genere porta errore
Codice:
int main(){

printf("ciao");
int num;

}
perchè in c prima del C99 le variabili non potevano essere dichiarate dove ti parevano ma per forza all'inizio. Se non per aggiornare vecchi sistemi usare K&R invece dell'Ansi C è da ricovero.
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top