Progrmma con switch

di Anonimizzato30896 il
13 risposte
Ciao non riesco a capire come fare il controllo rekativo di controllare solo una volta la stringa di panini o altro. E di stampare posizione
Grazie
Allegati:
Programma fatto
Programma fatto

Testo programma
Testo programma

13 Risposte

  • Copia incolla il testo del codice non la foto
  • #include <stdio.h>

    #include <stdlib.h>


    int main(){

    //dichiarazione delle variabili

    int scelta, panino=0, pizza=0, focaccia=0;


    //implememtazione dell'algoritmo

    do{

    do{

    printf("\nInserire la scelta:\n1.Panino\n2.Pizza\n3.Focaccia: ");

    scanf("%d",&scelta);

    if(scelta<0 || scelta>3)

    printf("\nInserimento errato!");

    }while(scelta<0 || scelta>3);



    switch (scelta){

    case 1:

    printf("\n Hai scelto il panino");

    panino++;



    break;

    case 2:

    printf("\n Hai scelto il pizza");

    pizza++;

    break;



    case 3:

    printf("\n Hai scelto il focaccia");

    focaccia++;

    break;

    default: ;

    }









    }while(scelta!=0);



    system("PAUSE");

    return 0;


    }
  • Non così. Seleziona tutto il codice e clicca sul pulsante "</>". Poi spiegati meglio.
  • 
    #include <stdio.h>
    
    #include <stdlib.h>
    
    
    int main(){
    
    	//dichiarazione delle variabili
    
    	int scelta, panino=0, pizza=0, focaccia=0;
    
    
    	//implememtazione dell'algoritmo
    
    	do{
    
    		do{
    
    			printf("\nInserire la scelta:\n1.Panino\n2.Pizza\n3.Focaccia: ");
    
    			scanf("%d",&scelta);
    
    			if(scelta<0 || scelta>3)
    
    				printf("\nInserimento errato!");
    
    		}while(scelta<0 || scelta>3);
    
    	
    
    		switch (scelta){
    
    			case 1:
    
    				printf("\n Hai scelto il panino");
    
    				panino++;
    
    				
    
    				break;
    
    			case 2:
    
    				printf("\n Hai scelto il pizza");
    
    				pizza++;
    
    				break;
    
    				
    
    			case 3:
    
    				printf("\n Hai scelto il focaccia");
    
    				focaccia++;
    
    				break;
    
    			default: ;	
    
    		}
    
    		
    
    	}while(scelta!=0);
    
    
    
    	system("PAUSE");
    
    	return 0;
    
    
    }
    
    
    
    
  • Io so quanti panini o pizze o focacce acquisto
    Devo stampare a video quale e la sequenza piu lunga inserita (se focacce pizze o panini) e in quale posizione si trova inizio sequenza.
    Non dovendolo fare con array mi trovo in difficoltà
  • Puoi usare un enumeratore per i nomi di prodotti, per poi usare l'array, da cui cercherai il massimo.
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef enum {panino, pizza, focaccia} Prodotto;
    int massimo(int v[], int lenght)
    {
        int max = 0;
        for(int i=1;i<lenght;i++)
            if(v[i]>v[i-1])
                max = i;
        return max;
    }
    int main(){
    
    	//dichiarazione delle variabili
    
    	int scelta;
    	int prodotti[] = {0,0,0};
    	Prodotto maggiore;
    
    
    	//implememtazione dell'algoritmo
    
    	do{
    
    		do{
    			printf("\nInserire la scelta:\n1.Panino\n2.Pizza\n3.Focaccia: ");
    			scanf("%d",&scelta);
    			if(scelta<0 || scelta>3)
    				printf("\nInserimento errato!");
    		}while(scelta<0 || scelta>3);
    
    		switch (scelta){
    
    			case 1:
    				printf("\n Hai scelto il panino");
    				prodotti[panino]++;
    				break;
    
    			case 2:
    				printf("\n Hai scelto il pizza");
    				prodotti[pizza]++;
    				break;
    			case 3:
    				printf("\n Hai scelto il focaccia");
    				prodotti[focaccia]++;
    				break;
    			default: ;	
    
    		}
    
    		
    
    	}while(scelta!=0);
    	
    	maggiore=massimo(prodotti, 3);
    	switch(maggiore){
    	    case pizza:
    	        printf("\npizza e' il piu' venduto");
    	        break;
    	    case panino:
    	        printf("\npanino e' il piu' venduto");
    	        break;
    	    case focaccia:
    	        printf("\nfocaccia e' il piu' venduto");
    	        break;
    	    default:
    	    break;
    	}
    
    	system("PAUSE");
    	return 0;
    }
    
    Con gli enumeratori, il compilatore sostituirà dei numeri interi al posto delle etichette (non sono variabili!) "panino", "pizza" e "focaccia", che userai come indici dell'array.

    Oppure puoi farti un array di struct definite in questo modo:
    
    typedef struct _Prodotto{
    char nome[20];
    int quantita;
    } Prodotto;
    
    In cui alla fine cercherai quello con "quantita" maggiore e ne stamperai il nome.
  • Ok, ci sarebbe un alternativa senza array. Perché il professore non vuole che li usiamo

    Grazie e scusami
  • È il massimo fra 3 numeri, bastano un paio di if-else nidificati. Ne confronti due e il vincitore si confronta con terzo. Non posso scriverti la soluzione
  • Quel codice non soddisfa le richieste dell'esercizio che cerca la massima sequenza e la sua posizione.
  • Caspita avevo letto male anche io! Allora non serve portare il conto per ogni prodotto. Puoi usare tre variabili per la sequenza corrente (contatore, numero prodotto e posizione di inizio) e altre tre dove tieni salvata la sequenza più lunga. Ovviamente un contatore totale dei prodotti venduti.
  • 
    
    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    
    int scelta, panino=0, pizza=0,pos=0,posp=0,posz=0,posf=0,focaccia=0,voltez=0,voltef=0,voltep=0;
        do{
    do{
        printf("\n Inserisci la scelta: \n 1.panino \n 2.pizza \n 3.focaccia :");
        scanf("%d",&scelta);
        if (scelta<0 || scelta >3)
        printf("\n inserimento errato!");
    
    
          }while (scelta<0 || scelta>3);
         
          pos++;
          switch (scelta){
         
          case 1: printf("\n hai scelto il panino ");
         
          if (posp==0) {
          posp=pos;
         
          }
         
          if (voltep>0) {
      panino=0;
     
     
     
         
          }
          if (posz>0) {
      voltez=1;
     
     
     
         
          }
          if (posf>0) {
      voltef=1;
     
     
     
         
          }
          panino++;
          break;
         
          case 2: printf("\n hai scelto il pizza");
         
          if (posz==0) {
          posz=pos;
          }
          if (voltez>0) {
      pizza=0;
     
     
     
         
          }
          if (posp>0) {
      voltep=1;
     
     
     
         
          }
          if (posf>0) {
      voltef=1;
     
     
     
         
          }
          pizza++;
          break;
         
          case 3: printf("\n hai scelto il focaccia");
         
          focaccia++;
    
         
          if (posf==0 ){
          posf=pos;
          }
          if (voltef>0) {
      focaccia=0;
     
     
     
         
          }
          if (posp>0) {
      voltep=1;
     
     
     
         
          }
          if (posz>0) {
      voltez=1;
     
     
     
         
          }
         
          break;
         
          default: ;
    }
    
    
    }while (scelta !=0);
    
    
    
    if (pizza>panino && pizza>focaccia){
    printf("%d",pizza);
    printf("pizze");
    printf(" con inizio al " );
    printf("%d",posz);
    printf("acquisto");
    
    
    
    
    }
    else if (panino>pizza && panino>focaccia){
    printf("%d",panino);
    printf("panini ");
    printf(" con inizio al " );
    printf("%d",posp);
    printf(" acquisto");
    
    
    
    
    }
    else if (focaccia>panino && focaccia>pizza){
    printf("%d",focaccia);
    printf("focacce");
    printf(" con inizio al " );
    printf("%d",posf);
    printf(" acquisto");
    }
    system ("PAUSE");
    return 0;
    }
    
    
    
    
    


    Grazie mille risucita
  • Un consiglio, va bene se vuoi abbreviare, ma cerca di dare nomi un po' più esplicativi alle variabili, altrimenti quando leggerai il codice tra una settimana, non ci capirai niente nemmeno tu.
    Comunque, come ho detto, non serviva portare il conto per ogni prodotto (a meno che non lo chieda la traccia, ma non mi sembra) e si poteva fare un po' più semplice.
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
    	//dichiarazione delle variabili
    
    	int scelta;
    	int tot_acquisti = 0;
    	int lung_seq_corrente = 1, prodotto_seq_corrente = 0, pos_seq_corrente = 1;
    	int lung_seq_max = 0, prodotto_seq_max = 0, pos_seq_max = 0;
    
    	//implememtazione dell'algoritmo
    
    	do{
    		do{
    			printf("\nInserire la scelta:\n1.Panino\n2.Pizza\n3.Focaccia: ");
    			scanf("%d",&scelta);
    			if(scelta<0 || scelta>3)
    				printf("\nInserimento errato!");
    		}
    		while(scelta<0 || scelta>3);
    		switch (scelta){
    
    			case 1:
    				printf("\n Hai scelto il panino\n");
    				break;
    				
    			case 2:
    				printf("\n Hai scelto la pizza\n");
    				break;
    				
    			case 3:
    				printf("\n Hai scelto la focaccia\n");
    				break;
    			default: ;	
    		}
    		
    		tot_acquisti++;
    		if(scelta != prodotto_seq_corrente)
    		{
    		    if(lung_seq_corrente >= lung_seq_max)
    		    {
    		        lung_seq_max = lung_seq_corrente;
    		        prodotto_seq_max = prodotto_seq_corrente;
    		        pos_seq_max = pos_seq_corrente;
    		    }
    		    
    		    lung_seq_corrente = 0;
    		    prodotto_seq_corrente = scelta;
    		    pos_seq_corrente = tot_acquisti;
    		}
    		lung_seq_corrente++;
    	}
    	while(scelta!=0);
    	
    	switch(prodotto_seq_max){
    	    case 1:
    	        printf("\n%d panini, con inizio al %d^ acquisto", lung_seq_max, pos_seq_max);
    	        break;
    	    case 2:
    	        printf("\n%d pizze, con inizio al %d^ acquisto", lung_seq_max, pos_seq_max);
    	        break;
    	    case 3:
    	        printf("\n%d focacce, con inizio al %d^ acquisto", lung_seq_max, pos_seq_max);
    	        break;
    	    default:
    	        printf("\nNessun acquisto effettuato");
    	    break;
    	}
    
    	system("PAUSE");
    	return 0;
    }
    
  • Ok grazie
    Ciao
Devi accedere o registrarti per scrivere nel forum
13 risposte