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

    [C] Problema in una for..

    Ciao a tutti.. ho un problema con un esercizio, dovrebbe essere una cosa stupida ma non riesco a correggerlo.
    il programma deve simulare un'estrazione del lotto e poi, mettiamo in caso di aver azzeccato 2 numeri nella 3° riga della matrice e uno nella 6° dovrebbe creare una lista così: INIZIO--> 3,ambo --> 6 -->singolo --> FINE
    Ora.. il problema è che nella for dove scorro la matrice per vedere se ho azzeccato alcuni numeri mi da sempre come se li ho azzeccati anche se poi andando a controllare non è vero.. è da ieri che sto provando a modificare qualcosa ma non riesco a risolvere... aiutatemi se potete, grazie a tutti in anticipo..
    PS: metto tutto l'esercizio...

    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;
           char *vinc;
           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++)
          {   
              conta=0;
              for (j=0;j<C;j++)
              {   
                  if (giocata[0]==estrazioni[i][j]) conta++;
                     else if (giocata[1]==estrazioni[i][j]) conta++;
                        else if (giocata[2]==estrazioni[i][j]) conta++;
              }
              switch (conta)
              {
              case 0:
                   printf("\ncase %d",conta);
                   break;
              case 1:
                   printf("\ncase %d",conta);
                   p=(Lista*)malloc(sizeof(Lista));
                   p->riga=i;
                   p->vinc="Singolo";   /*strcpy("Singolo",p->vinc); */ 
                   p->next=inizio;
                   inizio=p;
                   break;
              case 2:
                   printf("\ncase %d",conta);
                   p=(Lista*)malloc(sizeof(Lista));
                   p->riga=i;
                   p->vinc="Ambo";  /*strcpy("Ambo",p->vinc);*/
                   p->next=inizio;
                   inizio=p;
                   break;
                   printf("\ncase %d",conta);
              case 3:
                   p=(Lista*)malloc(sizeof(Lista));
                   p->riga=i;
                   p->vinc="Terno";   /*strcpy("Terno",p->vinc);*/
                   p->next=inizio;
                   inizio=p;
                   break;
              default:
                   printf("\n\nERRORE!");
                   printf("\nCONTA == %d",conta);
                   break;
              }
              conta=0;
          }    
          
          printf("\n\n\nElenco Vincite\n\nInizio --> ");
          while (inizio)
          {
                printf("Ruota %d,%s --> ",inizio->riga,inizio->vinc);
                inizio=inizio->next;
          }
          printf("FINE");
            
    }

  2. #2

    Re: [C] Problema in una for..


    int giocata [3];
    int estrazioni [R][C];
    ...
    Lista *vincite (Lista *inizio)
    {
    ...
    for (j=0;j<C;j++)
    {
    if (giocata[0]==estrazioni[i][j]) conta++;
    else if (giocata[1]==estrazioni[i][j]) conta++;
    else if (giocata[2]==estrazioni[i][j]) conta++;
    }
    Nella funzione "vincite" stai confrontanto il contenuto della "giocata" e delle "estrazioni" che sono due variabili globali il cui contenuto è zero. quindi fai sempre 5.

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