Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Algoritmo scacchi
Forum - C/C++ - Algoritmo scacchi

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 16:30
Lunedì, 01/01/2007
1.    Algoritmo legato al gioco degli scacchi. L’algoritmo considera una scacchiera regolamentare (8x8 caselle bianche e nere, casella nera in basso a sinistra), dispone a caso (usando la function rand) 8 Pedoni bianchi (per semplicità, possono stare in una qualunque casella non occupata da un altro pezzo) e poi dispone a caso (usando la function rand) una Regina e da una Torre neri (possono stare in una qualunque casella non occupata da un altro pezzo). L’algoritmo deve visualizzare la scacchiera, mostrando una ‘b’ e una ‘n’ per le caselle bianche e nere non occupate, mostrando una ‘P’ nelle caselle occupate dai Pedoni, una ‘R’ per la casella occupata dalla regina e una ‘T’ per la casella occupata dalla Torre. L’algoritmo determina, in base alla posizione di tutti i pezzi sulla scacchiera, quali sono i Pedoni che possono essere catturati da uno qualunque dei possibili movimenti della Regina e della Torre. Fare attenzione al fatto che un Pedone potrebbe essere “protetto” da un altro Pedone o da un altro pezzo e che i Pedoni “protetti” non possono essere catturati. Infine l’algoritmo visualizza l’elenco dei Pedoni catturabili, precisando anche da quale pezzo sono catturabili e utilizzando la notazione usuale delle posizioni nel gioco degli scacchi, ovvero scrivendo, per esempio: Pedone in a3 catturabile da Regina in b4, Pedone in d6 catturabile da Torre in e6,….. Ricordare che nella notazione usuale degli scacchi le righe della scacchiera sono indicate mediante numeri interi (da 1 ad  8, dal basso verso l’alto), mentre le colonne sono indicate mediante lettere dell’alfabeto (da ‘a’ ad ‘h’ da sinistra a destra) e che la notazione prevede di indicare prima la lettera (colonna) e poi il numero (riga).



2.    Algoritmo per il calcolo dell’array 2D delle medie di un array 2D. L’algoritmo riceve in input un array 2D quadrato A, mxn, e genera in output un array 2D quadrato A_diffuso, dello stesso size di A.  L’elemento i,j di A_diffuso è la media dei quattro elementi vicini dell’elemento i,j di A (ovvero quello sopra, quello sotto, quello a sinistra e quello a destra). Fare attenzione al caso in cui l’elemento i,j si trova sul bordo dell’array (in tal caso gli elementi vicini sono tre oppure due). Nei test (almeno 4) usare array 2D di size  8x8, 10x10, 15x15, 20x20. Il main genera a caso gli elementi dell’array di input, che devono essere numeri float  nell’intervallo [-100,100]): si ricorda che, se x_casuale è dichiarata di tipo float, allora l’istruzione
x_casuale=-100.0F+200.0F*(float)rand()/(float)MAX_RAND;
genera un numero casuale di tipo float (distribuzione uniforme) nell’intervallo [-100,100].

AIUTATEMIIIIIIIIIIIIIIIIIIIIIIII
mandatemi una mail a clikkami85@hotmail.it
GRAZIE MILLE

Ultima modifica effettuata da pierotofy il 01/01/2007 alle 19:39
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:40
Lunedì, 01/01/2007
Ed esattamente dov'è che ti blocchi? Qual'è il problema nell'implementare questi algoritmi?

Nel caso avessi frainteso lo scopo di questo forum, qui non facciamo programmi su richiesta.


Il mio blog: https://piero.dev
PM Quote
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 21:08
Lunedì, 01/01/2007
Innanzitutto scusatemi se ho messo due topic uguali in sezioni diverse...nn avevo letto il regolamento, cmq dovrei inviarti l'algoritmo ke ho implementato io...dove posso inviartelo
ciao risp

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:37
Lunedì, 01/01/2007
Qui sul forum, ovviamente :)

Usa i tag [ code] e [/ code] per inserirlo formattato correttamente.


Il mio blog: https://piero.dev
PM Quote
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 0:01
Martedì, 02/01/2007
#include <stdio.h>
#include <stdlib.h>

void main ()
{
    int i,j,nx,ny,nx1,ny1;
    char scacchiera[][8]=
    {{'b','n','b','n','b','n','b','n'},
         {'n','b','n','b','n','b','n','b'},
         {'b','n','b','n','b','n','b','n'},
         {'n','b','n','b','n','b','n','b'},
         {'b','n','b','n','b','n','b','n'},
         {'n','b','n','b','n','b','n','b'},
         {'b','n','b','n','b','n','b','n'},
         {'n','b','n','b','n','b','n','b'}};
        
    
    for (i=1;i<=9;i++)
    {
        nx=rand()%8;
        ny=rand()%8;
        scacchiera[nx][ny]='P';
                  nx1=rand()%1;
                  ny1=rand()%1;
                  scacchiera[nx1][ny1]='R';
    }
    for (i=0;i<8;i++)
    {
        for (j=0;j<8;j++)
        printf(" %c",scacchiera[i ][j]);
        printf("\n");
    }
         printf(" a b c d e f g h\n");
}


QUESTO E' TUTTO QUELLO KE SN RIUSCITO A FARE...

Ultima modifica effettuata da pierotofy il 02/01/2007 alle 15:57
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:13
Martedì, 02/01/2007
Un sacco di lavoro rimasto da fare insomma :)

Procediamo passo per passo: dispone a caso (usando la function rand) 8 Pedoni bianchi (per semplicità, possono stare in una qualunque casella non occupata da un altro pezzo) e poi dispone a caso (usando la function rand) una Regina e da una Torre neri (possono stare in una qualunque casella non occupata da un altro pezzo)

Codice sorgente - presumibilmente C/C++

  1. for (i=1;i<=9;i++)
  2. {
  3. nx=rand()%8;
  4. ny=rand()%8;
  5. scacchiera[nx][ny]='P';
  6. nx1=rand()%1;
  7. ny1=rand()%1;
  8. scacchiera[nx1][ny1]='R';
  9. }



Qui vedo alcuni errori. Intanto il ciclo esegue 9 iterazioni anziche' 8. Inoltre il codice non tiene considerazione del fatto che le coordinate nx e ny alla seconda iterazione potrebbero essere gia' occupate da un pezzo. Oltre a questo la regina in questo modo viene impostata per 8 volte nella posizione 0,0 o 0,1 o 1,0 o 1,1.

Una soluzione (non troppo elegante e non ottimizzata ma funzionante) potrebbe essere:

Codice sorgente - presumibilmente C++

  1. int i = 0;
  2. while(i < 8){
  3. nx=rand()%8;
  4. ny=rand()%8;
  5. if (scacchiera[nx][ny] != 'P'){
  6.  scacchiera[nx][ny]='P';
  7.  i++;
  8. }
  9. }
  10.  
  11. i = 0;
  12. while(i < 2){
  13. nx=rand()%8;
  14. ny=rand()%8;
  15. if (scacchiera[nx][ny] != 'P' && scacchiera[nx][ny] != 'R'){
  16.  if (i==0) scacchiera[nx][ny]='R'; //Regina
  17.  else scacchiera[nx][ny]='T'; //Torre
  18.  i++;
  19. }
  20. }




L’algoritmo deve visualizzare la scacchiera, mostrando una ‘b’ e una ‘n’ per le caselle bianche e nere non occupate, mostrando una ‘P’ nelle caselle occupate dai Pedoni, una ‘R’ per la casella occupata dalla regina e una ‘T’ per la casella occupata dalla Torre


Questo mi pare che l'hai gia' implementato (anche se con un'imperfezione, hai messo il printf all'interno del secondo ciclo anziche' all'interno del primo):

Codice sorgente - presumibilmente C/C++

  1. for (i=0;i<8;i++)
  2. {
  3. for (j=0;j<8;j++)
  4. printf(" %c",scacchiera[i ][j]);
  5. }
  6. printf("\n");
  7. }




L’algoritmo determina, in base alla posizione di tutti i pezzi sulla scacchiera, quali sono i Pedoni che possono essere catturati da uno qualunque dei possibili movimenti della Regina e della Torre


Qui dov'e' che non riesci a capire come implementare l'algoritmo?


Il mio blog: https://piero.dev
PM Quote
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 1:04
Mercoledì, 03/01/2007
Ti ringrazio per avermi fatto capire molte altre cose ke mi facevano bloccare...
cmq nn ho neanke iniziato l'implementazione delle altre cose...
appena lo farò ti scriverò il programma sul forum e come hai fatto gentilmente oggi, se potrai farlo nuovamente, me lo correggerai!!!
GRAZIE MILLE

PM Quote
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 16:37
Mercoledì, 03/01/2007
#include <stdio.h>
#include <stdlib.h>

void main ()
{
    int i=0,j,nx,ny;
    char scacchiera[][8]=
    {{'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'},
    {'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'},
    {'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'},
    {'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'}};
    
    printf("   A  B  C  D  E  F  G  H\n\n");
    while(i<8)
    {
         nx=rand()%8;
        ny=rand()%8;
        if(scacchiera[nx][ny] != 'P')
        {
            scacchiera[nx][ny]='P'; /* Pedone */
        i++;
        }
    }
    
    i=0;
    while(i<2)
    {
        nx=rand()%8;
        ny=rand()%8;
        if(scacchiera[nx][ny] != 'P' && scacchiera [nx][ny] !='R')
        {
            if(i==0)
                scacchiera[nx][ny]='R'; /* Regina */
            else
                scacchiera[nx][ny]='T'; /* Torre */
            i++;
        }
    }
    for (i=0;i<8;i++)
    {
        printf("%d",8-i);
        for (j=0;j<8;j++)
            printf("  %c",scacchiera[j]);
        printf("\n");
    }

    printf("\n\n\n\n\n\n\n");
}
QUESTO E' IL PROGRAMMA MODIFICATO SECONDO LE TUE INFORMAZIONI...
ORA IO NN RIESCO A CAPIRE COME DEVO FARE PER INDICARE LE POSIZIONI DELLA TORRE E DELLA REGINA!!!
SE SN MESSE IN MODO CASUALE COME DEVO FARE PER IMPLEMENTARLE? scacchiera[nx][ny]=scacchiera [j]?
dove i è l'i-simo elemento di cosa?
e j è il j-simo elemento di cosa?
sto proprio andando in confusione,vero?

Ultima modifica effettuata da clikkami il 03/01/2007 alle 16:38
PM Quote
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 16:45
Mercoledì, 03/01/2007
come faccio a determinare la posizione dei pedoni?
se un PEDONE sta in B7 come fa a capirlo il programma, se è stato messo casualmente?
La 'P' non può stare nè in linea orizzontale nè in linea verticale alla 'T'...mentre alla 'R' non può stare neanke in linea obliqua. poi se una 'P' è coperta da un'altra 'P' non può essere mangiata... Nn so proprio come iniziare!!!

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo