Esercizio istruzione assistita computer

di il
3 risposte

Esercizio istruzione assistita computer

Ciao a tutti. Avrei bisogno di aiuto per il mio programma, vi spiego in breve quale dovrebbe essere il suo funzionamento...
in sostanza dovrebbe effettuare domande sulle moltiplicazioni ad uno studente delle elementari ponendo ogni volta una nuova domanda mediante un apposita funzione se la risposta è esatta,oppure continuare a leggere la risposta finchè essa non sia esatta , e stampare commenti se la risposta è esatta o sbagliata. Il programma funziona abbastanza bene, tuttavia c'è un bug che non riesco a risolvere, quando la condizione che soddisfa il ciclo while diventa falsa lui stampa una domanda in più rispetto a quelle definite all'interno della condizione.

Vi lascio il codice qui sotto, spero che qualcuno riesca ad aiutarmi...

#include<stdio.h>
#include<stdlib.h>
#define N 10 /*numeri da estrarre*/
#define L 3 /*numero di domande*/
#define COMM 4 /*numero di commenti*/
#define P 75 /*percentuale*/

int domanda(); /*funzione che effettua domande allo studente*/
int controllo(int p);/*funzione che controlla la risposta dello studente*/
void commenti();/*funzione che genera i commenti per le risposte esatte*/
void commentierr();/*funzione che genera i commenti per le risposte errate*/
void percentuale(int rv);/*funzione per il calcolo della percentuale delle risposte esatte*/


int main(){
	int ris,prod;/*variabili intere della risposta e del prodotto*/
	int rispesa;/*variabile delle risposte esatte*/
	
	while(1){
    prod=domanda(); /*chiamata di funzione che genera la domanda*/
    rispesa=controllo(prod);/*chiamata di funzione per controllare la risposta dello studente*/
    percentuale(rispesa);/*calcolo della percentuale*/
	printf("\n\nPremere invio per riprovare!");
	getchar();
	getchar();
	system("cls");/*reinizializzazione del programma per un nuovo studente*/
			 }
			 
		return 0;
			  }
			

int domanda(){
	int n,m,p;
	srand(time(NULL));/*funzione rand*/
	n=rand()%N;/*generazione primo numero da 0 a 9*/
    m=rand()%N;/*generazione secondo numero da 0 a 9*/
    p=n*m;     /*calcolo del prodotto tra i due numeri generati*/
	printf("Quanto fa %d x %d ? ",n,m);/*prompt*/
	return p; /*restituzione del prodotto*/
	                }
	
int controllo(int p){
	int r;
	int i=0;/*contatore che si incrementerà ogni volta che lo studente darà una risposta*/
	int err=0;/*contatore delle risposte errate*/
	int rispe=0;/*contatore risposte esatte*/
	
	
	while(i<L){/*ciclo while che itererà le istruzioni per 10 volte*/
	scanf("%d",&r);/*lettura della risposta dello studente*/
    i+=1;/*incremento del contatore delle risposte*/  
	
	if(r!=p){	/*controllo che la risposta dello studente sia errata*/
    commentierr();/*chiamata funzione dei commenti per le risposte errate*/
    err+=1;/*incremento del contatore delle risposte errate*/
    	}
 	
    if(r==p){/*controllo che la risposta dello studente sia esatta*/
    commenti();/*chiamata della funzione dei commenti per le risposte esatte*/
    p=domanda();/*effettuiamo una nuova domanda attraverso la funzione domanda*/
    rispe+=1;/*incremento del contatore se la risposta è esatta*/
      }
      
			 }
     printf("\nBene hai terminato l'esercitazione:\nHai risposto correttamente a %d domande...\nHai commesso %d errori...",rispe,err);
    return rispe;/*restituzione del valore delle risposte esatte*/
           }
		   
void commenti(){
	int n;
	srand(time(NULL));
	n=rand()%COMM;/*generazione di commenti attraverso la funzione rand()*/
	if(n==0)
	printf("Molto bene !\n\n");
	if(n==1)
	printf("Eccellente!\n\n");
	if(n==2)
	printf("Bel lavoro!\n\n");
	if(n==3)
	printf("Ottimo lavoro!\n\n");
	return;
	                    }

void commentierr(){
	int n;
	srand(time(NULL));
	n=rand()%COMM;/*generazione di commenti attraverso la funzione rand()*/
	if(n==0)
	printf("No. Per favore riprova!\n\n");
	if(n==1)
	printf("Sbagliato riprova ancora!\n\n");
	if(n==2)
	printf("Non mollare!\n\n");
	if(n==3)
	printf("No! Continua a provare!\n\n");
	return;
                         }

void percentuale(int rv){
 double perc=0.0;/*inizializzazione percentuale*/
 perc=100*rv/L;/*calcolo della percentuale*/
	if(perc>=P){/*controllo se è inferiore al 75%*/
	printf("\nBene sei pronto per il livello successivo !");
       	}
	else
	printf("\nNon ci siamo! Parla con il tuo professore per effettuare un corso di recupero...");
	return;                    
						 }

3 Risposte

  • Re: Esercizio istruzione assistita computer

    Ciao,
    1. il codice va sempre formattato con la funzione code, pulsante "</>" dell'editor.
    2. okkio che hai scritto "dovrebbe imparare"
  • Re: Esercizio istruzione assistita computer

    Ci sarebbero parecchie cosette da sistemare ma lo farai in seguito ... per ora devi correggere
    
    		if (r == p) {
    			commenti();
    			rispe++; 
    			if (i < L)  p = domanda();
    		}
    
  • Re: Esercizio istruzione assistita computer

    oregon ha scritto:


    Ci sarebbero parecchie cosette da sistemare ma lo farai in seguito ... per ora devi correggere
    
    		if (r == p) {
    			commenti();
    			rispe++; 
    			if (i < L)  p = domanda();
    		}
    
    Grazie mille !
Devi accedere o registrarti per scrivere nel forum
3 risposte