Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] esercizio liste matrici

    Ciao a tutti, ho un problema con questo esercizio, a mio avviso è già finito ma qualcosa non và... gradirei molto un chiarimento su dove sbaglio e magari la correzione dell'esercizio..
    grazie in anticipo a tutti..

    codice:
    /*Esercizio 1 [20] 
    Si scriva un programma lotto.c. In esso si simuli la giocata di un terno
    creando un vettore di 3 elementi interi giocate i cui valori (interi da 1 a 90) vengano inseriti
    da tastiera dall'utente. Si simuli l'estrazione di 5 numeri su 8 ruote riempiendo la matrice
    8x5 estrazioni con numeri casuali tra 1 e 90. Se si è in grado, si faccia in modo che non
    siano mai uguali tra loro sulla stessa riga, altrimenti procedere oltre.
    Si visualizzi la matrice in standard output.
    Si calcolino le vincite mediante una funzione vincite che, data in ingresso la matrice,
    restituisca una lista concatenata contenente le vincite ottenute, i cui elementi contengano
    un intero (l'indice della riga, cioè la ruota di estrazione) e una stringa (la vincita) che può
    essere “singolo”, “ambo”, “terno” se la riga contiene al massimo 1, 2, o 3 numeri contenuti
    nel vettore giocate. Esempio: giocate = (2,34,56)
    
    2 14 44 55 72
    4 13 22 43 55
    11 23 43 44 78
    1 43 67 78 90
    3 33 34 56 67
    7 17 34 45 89
    22 24 28 67 90
    12 39 51 82 84
    
    output: (0, singolo)->(4,ambo)->(5,singolo)->NULL
    
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #define R 8
    #define C 5
    
    int giocata [3];
    int estrazioni [R][C];
    
    struct lista {
           int riga;
           const char vinc[8];
           struct lista *next;
           };
    typedef struct lista Lista;
    
    Lista *vincite (Lista *);
    
    main()
    {
          Lista *inizio=NULL;
          srand(time(NULL));
          int giocata [3];
          int estrazioni [R][C];
          int i,j;
          
          for (i=0;i<3;i++)
          {
              do
              {
              printf("\nInserisci il %d numero della tua giocata: ",i+1);
              scanf("%d",&giocata[i]);
              }   while (giocata[i]<1||giocata[i]>90);
          }
          
          printf("\n\nEstrazioni\n\n");
          
          for (i=0;i<R;i++)
          {
              for (j=0;j<C;j++)
              {
                  estrazioni[i][j]=1+rand()%90;
                  printf("%4d",estrazioni[i][j]);
              }
              printf("\n\n");
          }
          
          vincite(inizio);
          
          fflush(stdin);
          getchar();
    }
    
    Lista *vincite (Lista *inizio)
    {
          int x,conta=0,i,j;
          Lista *p;
          
          for (i=0;i<R;i++)
          {
              
              for (j=0;j<C;j++)
              {
                  for (x=0;x<3;x++)
                  {
                   if (estrazioni[i][j]==giocata[x]) conta++;   
                  }
              }
              switch (conta)
              {
              case 0:
                   continue;
              case 1:
                   p=(Lista*)malloc(sizeof(Lista));
                   p->riga=i;
                   strcpy("Singolo",p->vinc);  
                   p->next=inizio;
                   inizio=p;
                   continue;
              case 2:
                   p=(Lista*)malloc(sizeof(Lista));
                   p->riga=i;
                   strcpy("Ambo",p->vinc);
                   p->next=inizio;
                   inizio=p;
                   continue;
              case 3:
                   p=(Lista*)malloc(sizeof(Lista));
                   p->riga=i;
                   strcpy("Terno",p->vinc);
                   p->next=inizio;
                   inizio=p;
                   continue;
              default:
                   printf("\n\nERRORE!");
                   continue;                    
              }
              conta=0;
          }    
          
          printf("\n\n\nElenco Vincite\n\nInizio --> ");
          while (inizio)
          {
                printf("Ruota %d,%s --> ",p->riga,p->vinc);
          }
          printf("FINE");
            
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Originariamente inviato da robynho86
    ho un problema con questo esercizio, a mio avviso è già finito ma qualcosa non và...
    Spiega che cosa non va, senza costringere gli utenti a prendere il codice, a scoprirlo da soli, a correggerlo e a riconsegnartelo infiocchettato risolvendo l'esercizio al tuo posto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    si scusa credo ci sia un problema all'interno delle for dove c'è lo switch case... in pratica se compilo il programma risulta sempre che "conta" sia diverso da "0", "1","2" o "3", non capisco perchè.. spero sia in grado di darmi una mano, grazie in anticipo...

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    provato nella default del case a stampare quanto è la variabile conta? perche essendo aumentata in un doppio for 5*3 può andare da 0 a 15..

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 © 2024 vBulletin Solutions, Inc. All rights reserved.