Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    mischiare carte [C]

    Ragazzi Ho sviluppato il programma e me lo compila pure soltanto che quando lo eseguo, quando mi chiede di mischiare le carte si blocca,sapreste trovarmi l'errore???

    secondo la traccia:
    Sviluppare un algoritmo per la simulazione del gioco delle coppie di carte tra due
    giocatori identificati dai loro nomi. Inizialmente “mischiare” un mazzo di carte
    napoletane. L’algoritmo per mischiare le carte si basa sull’idea di scambiare
    effettivamente a coppie le carte del mazzo; una variabile in input permette di indicare
    quante volte si devono effettuare gli scambi. Viene scelto casualmente quale dei due giocatori deve iniziare il gioco. Vengono “scoperte” due carte la quale posizione è indicata dal primo giocatore. Se le due carte
    hanno lo stesso valore il giocatore si aggiudica un punto e le due carte vengono scoperte.
    Il giocatore continua finchè non sbaglia (non trova due carte uguali) e il turno passa
    all’altro giocatore. Ad ogni turno il giocatore ha a disposizione l’elenco delle carte coperte e quelle scoperte. Il gioco termina quando si scoprono tutte le carte. Il giocatore che ha
    totalizzato più punti vince la partita. Implementare il programma ed effettuare almeno 3 test.
    Usare la function rand(), il cui prototipo è in <stdlib.h>, per generare a ogni
    passo gli indici delle due carte da scambiare. Nei test, partire sempre dal mazzo
    “ordinato” e poi visualizzare il mazzo “mischiato”.Si ricorda che, se numero_casuale è dichiarata di tipo int, allora la chiamata numero_casuale=rand()%(n+1); genera un numero casuale intero
    (distribuzione uniforme) nell’insieme (0,1,2,..n).


    codice:
    #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
    
        typedef enum
        {
           denari,
           bastoni,
           spade,
           coppe
        }Semi_nap;
    
        struct carta
        {
           int valore;
           Semi_nap seme;
        };
    
        typedef carta Carta;
    
        void mischia_carte(Carta mazzo[],int n_carte,int qvmix);
        void scambiare_carte(Carta mazzo[],int i, int j);
    
        int main()
        {
           int iniz,i,j,puntiprimogiocatore=0,puntisecondogiocatore=0,k=0,puntitotali,qvmix,n_carte=40;
           char giocatoreuno[20], giocatoredue[20];
           Carta mazzo[40]={
              {1,denari},{2,denari},{3,denari},{4,denari},{5,denari},{6,denari},{7,denari},{8,denari},{9,denari},{10,denari},
              {1,bastoni},{2,bastoni},{3,bastoni},{4,bastoni},{5,bastoni},{6,bastoni},{7,bastoni},{8,bastoni},{9,bastoni},{10,bastoni},
              {1,spade},{2,spade},{3,spade},{4,spade},{5,spade},{6,spade},{7,spade},{8,spade},{9,spade},{10,spade},
              {1,coppe},{2,coppe},{3,coppe},{4,coppe},{5,coppe},{6,coppe},{7,coppe},{8,coppe},{9,coppe},{10,coppe}};
    
           printf("Inserire il nome del primo giocatore/n");
           gets(giocatoreuno);
           printf("Inserire il nome del secondo giocatore/n");
           gets(giocatoredue);
    
           iniz = rand()%2;
           if(iniz==0)
           {
              printf("Il primo a giocare sarà %s/n",giocatoreuno);
           }
           else
           {
              printf("Il primo giocatore sarà %s/n",giocatoredue);
           }
           printf("Quante volte vuoi mischiare il mazzo?");
           scanf("%d",&qvmix);
           mischia_carte(mazzo,n_carte,qvmix);
    
           do
           {
              printf("le posizioni delle carte ancora coperte");
              for(k=0;k<=39;k++)
              {
                 if(mazzo[k].valore==0)
                 {
                    continue;
                 }
                 else
                 {
                    printf("%d",k);
                 }
              }
              if(iniz==0)
              {
                 printf("%s scegli la posizione della prima carta/n",giocatoreuno);
                 scanf("%d",&i);
                 if(mazzo[i].valore==0)
                 {
                    printf("la carta è gia stata scelta/n");
                                                                                             
                 }
                 else
                 {
                    printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme);
                 }
                 printf("%s scegli la posizione dell seconda carta/n",giocatoreuno);
                 scanf("%d",&j);
                 if(mazzo[j].valore==0)
                 {
                    printf("la carta è gia stata scelta/n");
                    continue;
                 }
                 else
                 {
                    printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme);
                 }
              }
              else
              {
                 printf("%s scegli la posizione della prima carta/n",giocatoredue);
                 scanf("%d",&i);
                 if(mazzo[i].valore==0)
                 {
                    printf("la carta è gia stata scelta/n");
                    continue;
                 }
                 else
                 {
                    printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme);
                 }
                 printf("%s scegli la posizione seconda carta/n",giocatoredue);
                 scanf("%d",&j);
                 if(mazzo[j].valore==0)
                 {
                    printf("la carta è gia stata scelta/n");
                    continue;
                 }
                 else
                 {
                    printf("La carta scelta è %d, %s/n",mazzo[j].valore,mazzo[j].seme);
                 }
                 if(mazzo[i].valore==mazzo[j].valore)
                 {
                    printf("Giusto le due carte sono uguali! ricevi un punto/n");
                    if(iniz==0)
                    {
                       puntiprimogiocatore++;
                    }
                    else
                    {
                       puntisecondogiocatore++;
                       mazzo[i].valore=0;
                       mazzo[j].valore=0;
                    }
                 }
                 else
                 {
                    printf("Le due carte non sono uguali! Il tuo turno è finito.");
                 }
                 if(iniz==0)
                 {
                    iniz=1;
                 }
                 else
                 {
                    iniz=0;
                 }
              }
              puntitotali=puntiprimogiocatore+puntisecondogiocatore;
           }while(puntitotali<20);
    
           system("PAUSE");   
           return 0;
        }
        void mischia_carte(Carta mazzo[],int n_carte,int qvmix)
        {
             int i,j,k;
             for(k=1;k<=qvmix*n_carte;k++)
             {
                                          i=rand()%n_carte;
                                          j=rand()%n_carte;
                                          scambiare_carte(mazzo,i,j);
                                          }
                                          }
                                         
                                         
                                         
                                         
                                         
        void scambiare_carte(Carta mazzo[],int i,int j)
        {
             
            Carta temp;
             temp=mazzo[i];
             mazzo[i]=mazzo[j];
             mazzo[j]=mazzo[i];
             }

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

    Moderazione

    Originariamente inviato da alex91ander
    Ragazzi Ho sviluppato il programma e me lo compila pure soltanto che quando lo eseguo, quando mi chiede di mischiare le carte si blocca,sapreste trovarmi l'errore???
    Cosa intendi per "si blocca"? Spiega almeno l'errore o il problema che riscontri in modo più dettagliato, così che sia possibile fornire informazioni anche senza necessariamente dover compilare il codice.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3

    Re: Moderazione

    Originariamente inviato da alka
    Cosa intendi per "si blocca"? Spiega almeno l'errore o il problema che riscontri in modo più dettagliato, così che sia possibile fornire informazioni anche senza necessariamente dover compilare il codice.
    Mentre sto eseguo il programma, quando mi chiede "quante volte vuoi mischiare le carte?" nel momento in cui scrivo qualcosa mi si apre un finestra di tipo :
    sda.exe
    Si è verificato un errore in sda.exe. L'applicazione verrà chiusa.

    Potrebbe essersi verificata la perdita dei dati su cui si stava lavorando.

    Segnalazione del problema a Microsoft
    ecc..

    fare clic qui
    Debug Invia segnalazione errori Non inviare

    Magari se provi a compilarlo anche tu lo vedrai..spero tu riesca ad aiutarmi

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    codice:
      void scambiare_carte(Carta mazzo[],int i,int j)     {                   Carta temp;          temp=mazzo[i];          mazzo[i]=mazzo[j];          mazzo[j]=temp;          }
    prova a fare scambiare così...
    codice:
    code

  5. #5
    si ho provato cosi e me le mischia,soltanto che dopo appare lo stesso errore!

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ci sono vari errori.
    Intanto non usare gets: è deprecata dall'intero multiverso C.
    Usa fgets invece.
    codice:
           puts("Inserire il nome del primo giocatore:");
           fgets(giocatoreuno,20,stdin);
           puts("Inserire il nome del secondo giocatore:");
           fgets(giocatoredue,20,stdin);
    Poi usi rand() ma non inizializzi il seme con srand()
    codice:
     
           srand(time(0)); // manca questa.
           iniz = rand( )%2;
    Infine chiami printf() con i parametri sbagliati:
    codice:
    // sbagliata. seme è una enum, non una stringa C
    // printf("La carta scelta è %d, %s/n",mazzo[i].valore,mazzo[i].seme); 
    
    // corretta.
    printf("La carta scelta è %d, %d\n",mazzo[i].valore,mazzo[i].seme);
    Ricorda che il newline è: \n non /n
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Si, ho sostituito come mi hai detto, mi da l' errore nella typedef!?!
    come deve fare?!?!

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Così hai la rappresentazione dei semi anche in formato ASCIIZ string.

    codice:
        const char* Semi_nap_string[] = { "denari","bastoni","spade","coppe"};
    
        typedef enum
        {
           denari,
           bastoni,
           spade,
           coppe
        }Semi_nap;
    ...
    /* printf a caso */
    
    printf("La carta scelta è %d, %s/n",mazzo[i].valore, Semi_nap_string[ mazzo[i].seme] );
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    si, ho modificato come mi hai suggerito tu, ma il problema è sempre lo stesso!

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se dicessi anche di che errore si tratta, sarebbe meglio. Riporta il codice, con le modifiche.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.