Matrice-Vettore in c++

Messaggioda Hoiya85 » 27/02/2015, 02:26

Ciao a tutti, sto scrivendo un programma in c++ però mi sono un po' intoppato su una cosa. Il mio programma crea una matrice i cui elementi hanno un valore tra 0 e 2, inseriti dall'utente. per certi valori in corrispondenza di un certo indice della matrice questi vengono copiati in un vettore. Successivamente, con ordine dell'utente si modificano i valori per certi indici della matrice e io vorrei che, se il valore è riferito allo stesso indice il cui valore era stato copiato nel vettore precedentemente, venga modificato anche il valore nel vettore. Non so se ho reso l'idea, è una cosa un po' contorta.
Faccio un esempio. Io ho una matrice 10x10, con dei valori tra 0 e 2 inseriti dall'utente. Il programma chiede di inserire numero di riga e di colonna per i valori che vogliono essere modificati, ad esempio 5,4 e copia il valore in un vettore di una certa lunghezza; poi il programma chiede all'utente di inserire nuovamente riga e colonna di un valore qualsiasi che si vuole modificare nella matrice, se inserisco di nuovo 5,4 e modifico il valore vorrei che il valore venisse modificato anche nel vettore. Le due operazioni (modifica e copia nel vettore, nuova modifica) vengono fatte da due funzioni diverse. Io ho provato con i puntatori però mi viene un casino, quando compilo mi viene un errore strano dove mi si dice di usare cast ma non ho idea di come si faccia e mi sa di qualcosa che mi incasina il programma. Qualcuno potrebbe aiutarmi? Magari mi sono incasinato la vita da solo, però non riesco ad uscirne
Hoiya85
Starting Member
Starting Member
 
Messaggio: 1 di 12
Iscritto il: 27/02/2015, 02:03

Re: Matrice-Vettore in c++

Messaggioda apatriarca » 27/02/2015, 10:22

Quello che puoi fare è memorizzare da qualche parte a quali indici corrispondono i valori nel vettore e copiare nuovamente tali valori dalla matrice al vettore una volta finita la modifica della matrice.
apatriarca
Moderatore
Moderatore
 
Messaggio: 3724 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Matrice-Vettore in c++

Messaggioda Super Squirrel » 27/02/2015, 12:57

Per poterti essere più d'aiuto dovresti postare la traccia, se si tratta di un esercizio, o cmq spiegare qual è lo scopo del programma. In questo modo possiamo farci un'idea più chiara di quello che il programma deve fare e, nel caso sia possibile, consigliarti un procedimento più semplice.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 47 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Matrice-Vettore in c++

Messaggioda Hoiya85 » 27/02/2015, 16:35

l'obiettivo del programma è il classico gioco della battaglia navale, so che ci sono molti programmi già fatti in rete però preferisco farne uno da me. il programma in teoria funzionerebbe però non mi fa finire la partita. comunque posto le due funzioni così forse capite meglio quello che ho fatto.

Codice:
void inserisci (int m[max_size][max_size],int r,int c,int k,int cg[max_size],int n) {
   m[r][c] = k;
   cg[n] = m[r][c];
}


questa è la funzione della prima modifica e copia nel vettore (r è la riga,c è la colonna,m è la matrice cioè la griglia, k è il valore dell'elemento di matrice cioè 0 se la casella è vuota 1 per le navi del primo giocatore o 2 per quelle del secondo giocatore, cg è il vettore che include le navi e n è l'indice del vettore)

Codice:
void turno (int m[max_size][max_size],int k,int cg[max_size],int csg,int ctg,int cig,int cpg,int totg,int r,int c) {
   if (m[r][c] == k) {
   cout << " Nave Colpita! ";
   m[r][c] = 0;
   }
   else
   cout << " Colpo in Mare ";
   for (int i = 1;i<=4;i++) {
   if (cg[i] == 0) {
   while (csg != 0)
   csg = csg - 1;
   }
   }
   for (int i = 5;i<=10;i++) {
   if (cg[i] == 0) {
   while (ctg != 0)
   ctg = ctg - 1;
   }
   }
   for (int i = 11;i<=16;i++) {
   if (cg[i] == 0) {
   while (cig != 0)
   cig = cig - 1;
   }
   }
   for (int i = 17;i<=20;i++) {
   if (cg[i] == 0) {
   while (cpg != 0)
   cpg = cpg - 1;
   }
   }
   totg = csg+ctg+cig+cpg;
}


questa è la funzione che implementa i turni di giocho (csg,ctg,cig,cpg sono i contatori delle navi e tot è il numero totale delle navi)

nel main i turni di gioco sono implementati come segue:

Codice:
while (tot1 || tot2 == 0) {
   cout << " Turno del giocatore " << player1 << endl;
   cout << " Inserisci le coordinate della casella da colpire " << endl;
   cout << "Inserisci la riga " << endl;
   cin >> r;
   cout << "Inserisci la colonna " << endl;
   cin >> c;
   turno (griglia2,2,c2,cs2,ct2,ci2,cp2,tot2,r,c);
   cout << " Turno del giocatore " << player2 << endl;
   cout << " Inserisci le coordinate della casella da colpire " << endl;
   cout << "Inserisci la riga " << endl;
   cin >> r;
   cout << "Inserisci la colonna " << endl;
   cin >> c;
   turno (griglia1,1,c1,cs1,ct1,ci1,cp1,tot1,r,c);
}
Hoiya85
Starting Member
Starting Member
 
Messaggio: 2 di 12
Iscritto il: 27/02/2015, 02:03

Re: Matrice-Vettore in c++

Messaggioda Super Squirrel » 28/02/2015, 13:51

Da una lettura veloce ho capito poco e niente del codice che hai postato ed inoltre il programma mi sembra troppo complesso e contorto per i suoi fini.

Quindi senza perdere tempo a trovare gli eventuali errori nel codice (per esempio mi è subito saltato all'occhio che nella funzione inserisci, max_size, non è dichiarato) ti consiglio di analizzare prima il problema da un punto di vista logico e poi tradurlo in codice.
Giusto per capire, cosa deve fare di preciso il programma? la partita è giocatore 1 vs giocatore 2 o giocatore vs pc?
le griglie che dimensioni hanno e quali sono i pezzi da inserire? i pezzi vanno inseriti manualmente o random dal pc?
la partita termina dopo un tot di errori o semplicemente quando sono affondate tutte le navi?come vuoi che funzioni l'interfaccia grafica del giochino ?

Fissati i vari punti, ti possiamo aiutare a trovare il modo più semplice di impostare il programma e infine aiutarti a tradurre il tutto in codice.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 48 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Matrice-Vettore in c++

Messaggioda Hoiya85 » 28/02/2015, 14:28

perché ho scritto solo il codice delle funzioni che mi creano problemi. la partita è giocatore 1 vs. giocatore 2. max_size è dichiarato come const globale fuori dal main. Le griglie hanno una dimensione che viene chiesta all'utente all'inizio del programma. i pezzi da inserire sono 4 sommergibili di dimensione 1,3 torpedinieri di dimensione 2, 2 incrociatori di dimensione 3 e una portaerei di dimensione 4. Le posizioni sono inserite dall'utente il quale fornisce riga e colonna della posizione desiderata, per le navi con dimensione maggiore di 1 il programma chiede se inserirle in orizzontale e verticale e occupa le altre caselle di conseguenza. il programma termina quando la variabile tot che è un contatore del numero delle navi è uguale a zero alla fine del turno di gioco, quindi ho previsto il caso che sia zero per solo il giocatore 1 o 2 oppure per entrambi i giocatori e quindi la partita termina in parità. il mio problema è che anche quando le navi finiscono il gioco non termina e anzi continua all'infinito. Non mi serve un interfaccia grafica specifica.
Il testo del programma da svolgere è il seguente:

Sviluppare un programma per giocare a battaglia navale
Per due giocatori. Ogni giocatore ha una flotta di un certo numero di navi. Ogni nave occupa un certo numero di caselle su una “scacchiera “. Ogni casella della scacchiera e’ individuata da 2 numeri interi.
All’inizio della partita i due giocatori dispongono le loro flotte sulla scacchiera in segreto.
In ogni turno, entrambi i giocatori scelgono una casella in cui sparare ed il computer verifica se il colpo e’ finito in mare oppure ha colpito una nave dell’avversario.
Una nave e’ affondata quando tutte le caselle che occupa sono state colpite.
Vince il giocatore che per primo affonda tutte le navi dell’avversario.
Hoiya85
Starting Member
Starting Member
 
Messaggio: 3 di 12
Iscritto il: 27/02/2015, 02:03

Re: Matrice-Vettore in c++

Messaggioda Hoiya85 » 28/02/2015, 14:40

questo è il programma completo che ho scritto.
File intestazione

Codice:
#ifndef BATTLESHIP_H
#define BATTLESHIP_H

const int max_size = 25;
void scacchiere (int [][max_size],int);
void vedigriglia (int [][max_size],int);
void inserisci (int[][max_size],int,int,int,int [max_size],int);
void orienta(int [][max_size],bool,int, int ,int [max_size] ,int,int,int);
void turno (int [][max_size],int ,int [max_size],int ,int ,int ,int ,int ,int ,int );
void poscorr(int,int,int [][max_size],int);
void poscorrd(int,int,int [][max_size],bool,int,int);

#endif


file cpp (dove ci sono le funzioni)

Codice:
#include "Battleship.h"
#include <iostream>
#include <cstdlib>
using namespace std;



void scacchiere (int m[max_size][max_size],int d) {
   for (int i = 1;i<=d;i++) {
      for (int j = 1;j<=d;j++)
         m[i][j] = 0;
   }
}

void vedigriglia (int m[max_size][max_size],int d) {
   for (int i = 1;i<=d;i++) {
      for (int j = 1;j<=d;j++)
         cout << m[i][j] << " ";
      cout << endl;
   }
}

void inserisci (int m[max_size][max_size],int r,int c,int k,int cg[max_size],int n) {
   m[r][c] = k;
   cg[n] = m[r][c];
}

void orienta (int m[max_size][max_size],bool ris,int dim,int n,int cg[max_size],int r,int c,int k){
   if ( ris == 0) {
      for (int i = 1;i<dim;i++) {
         m[r][c+i] = k;
         cg[n+i] = m[r][c+i];
      }
   }
   else {
      for (int i = 1;i<dim;i++) {
         m[r+i][c] = k;
         cg[n+i] = m[r+i][c];
      }
   }
}


void turno (int m[max_size][max_size],int k,int cg[max_size],int csg,int ctg,int cig,int cpg,int totg,int r,int c) {
   if (m[r][c] == k) {
      cout << " Nave Colpita! ";
      m[r][c] = 0;   
   }
   else
      cout << " Colpo in Mare ";
   for (int i = 1;i<=4;i++) {
      if (cg[i] == 0) {
         while (csg != 0)
            csg = csg - 1;
      }
   }
   for (int i = 5;i<=10;i++) {
      if (cg[i] == 0) {
         while (ctg != 0)
            ctg = ctg - 1;
      }
   }
   for (int i = 11;i<=16;i++) {
      if (cg[i] == 0) {
         while (cig != 0)
            cig = cig - 1;
      }
   }
   for (int i = 17;i<=20;i++) {
      if (cg[i] == 0) {
         while (cpg != 0)
            cpg = cpg - 1;
      }
   }
   totg = csg+ctg+cig+cpg;
}

void poscorr(int r,int c,int m[max_size][max_size],int d)
{
   while (r  == 0 || r > d) {
      cout << " Le coordinate inserite sono errate" << endl;
      cout << " Inserisci le nuove coordinate per la nave " << endl;
      cout << "Inserisci la riga occupata dalla nave " << endl;
      cin >> r;
      cout << "Inserisci la colonna occupata dalla nave "<< endl;
      cin >> c;
   }
   while (m[r][c] != 0) {
      cout << " Posizione occupata " << endl;
      cout << "Inserisci la riga occupata dalla nave " << endl;
      cin >> r;
      cout << "Inserisci la colonna occupata dalla nave " << endl;
      cin >> c;
   }
}

void poscorrd(int r,int c,int m[max_size][max_size],bool ris,int dim,int d)
{
   if (ris == 0) {
      for (int i = 1;i < dim;i++) {
         while (r  == 0 || r > d) {
            cout << " Le coordinate inserite sono errate" << endl;
            cout << " Inserisci le nuove coordinate per la nave " << endl;
            cout << "Inserisci la riga occupata dalla nave " << endl;
            cin >> r;
            cout << "Inserisci la colonna occupata dalla nave "<< endl;
            cin >> c;
         }
         while (m[r][c+i] != 0) {
            cout << " Posizione occupata " << endl;
            cout << "Inserisci la riga occupata dalla nave " << endl;
            cin >> r;
            cout << "Inserisci la colonna occupata dalla nave " << endl;
            cin >> c;
         }
      }
   }
   if (ris == 1) {
      for (int i = 1;i < dim;i++) {
         while (r  == 0 || r > d) {
            cout << " Le coordinate inserite sono errate" << endl;
            cout << " Inserisci le nuove coordinate per la nave " << endl;
            cout << "Inserisci la riga occupata dalla nave " << endl;
            cin >> r;
            cout << "Inserisci la colonna occupata dalla nave "<< endl;
            cin >> c;
         }
         while (m[r+i][c] != 0) {
            cout << " Posizione occupata " << endl;
            cout << "Inserisci la riga occupata dalla nave " << endl;
            cin >> r;
            cout << "Inserisci la colonna occupata dalla nave " << endl;
            cin >> c;
         }
      }
   }
}
Hoiya85
Starting Member
Starting Member
 
Messaggio: 4 di 12
Iscritto il: 27/02/2015, 02:03

Re: Matrice-Vettore in c++

Messaggioda Hoiya85 » 28/02/2015, 14:50

e qui c'è il main

Codice:
//Programma che simula una partita
//di battaglia navale tra due giocatori

#include <iostream>
#include <cstdlib>
#include "Battleship.h"
using namespace std;


int main()
{
   int dim;
   int r;
   int c;
   int navi1=10;
   int navi2=10;
   int griglia1[max_size][max_size];
   int griglia2[max_size][max_size];
   char player1[max_size];
   char player2[max_size];
   int c1[max_size];
   int c2[max_size];
   int cs1 = 4;
   int cs2 = 4;
   int ct1 = 3;
   int ct2 = 3;
   int ci1 = 2;
   int ci2 = 2;
   int cp1 = 1;
   int cp2 = 1;
   int tot1 = 0;
   int tot2 = 0;
   bool ris;
   int dimt = 2;
   int dimi = 3;
   int dimp = 4;

   cout << "Inserisci la dimensione delle scacchiere" << endl;
   cin >> dim;
   scacchiere(griglia1,dim);
   scacchiere(griglia2,dim);

   cout << " Griglia 1 " << endl;
   vedigriglia(griglia1,dim);
   cout << " Griglia 2 " << endl;
   vedigriglia(griglia2,dim);

   cout << "Inserire le seguenti navi : " << endl;
   cout << " 4 sommergibili di lunghezza 1 " << endl;
   cout << " 3 torpedinieri di lunghezza 2 " << endl;
   cout << " 2 incrociatori di lunghezza 3 " << endl;
   cout << " 1 portaerei di lunghezza 4 " << endl;

   cout << " Inserisci il nome del giocatore 1 " << endl;
   cin >> player1;
   cout << "Inserisci le coordinate del sommergibile 1" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,1);
   cout << endl;
   
   cout << "Inserisci le coordinate del sommergibile 2" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,2);
   cout << endl;

   cout << "Inserisci le coordinate del sommergibile 3" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,3);
   cout << endl;

   cout << "Inserisci le coordinate del sommergibile 4" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,4);
   cout << endl;

   cout << "Inserisci le coordinate del torpediniere 1" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,5);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia1,ris,dimt,dim);
   orienta (griglia1,ris,dimt,5,c1,r,c,1);
   

   cout << "Inserisci le coordinate del torpediniere 2" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,7);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia1,ris,dimt,dim);
   orienta (griglia1,ris,dimt,7,c1,r,c,1);

   cout << "Inserisci le coordinate del torpediniere 3" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,9);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia1,ris,dimt,dim);
   orienta (griglia1,ris,dimt,9,c1,r,c,1);

   cout << "Inserisci le coordinate di incrociatore 1" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,11);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia1,ris,dimi,dim);
   orienta (griglia1,ris,dimi,11,c1,r,c,1);

   cout << "Inserisci le coordinate di incrociatore 2" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,14);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia1,ris,dimi,dim);
   orienta (griglia1,ris,dimi,14,c1,r,c,1);

   cout << "Inserisci le coordinate della portaerei" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia1,dim);
   inserisci(griglia1,r,c,1,c1,17);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia1,ris,dimp,dim);
   orienta (griglia1,ris,dimp,17,c1,r,c,1);

   cout << " Passa la tastiera al giocatore 2 " << endl;

   cout << " Inserisci il nome del giocatore 2 " << endl;
   cin >> player2;
   cout << "Inserisci le coordinate del sommergibile 1" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,1);
   
   cout << "Inserisci le coordinate del sommergibile 2" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,2);

   cout << "Inserisci le coordinate del sommergibile 3" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,3);

   cout << "Inserisci le coordinate del sommergibile 4" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,4);

   cout << "Inserisci le coordinate del torpediniere 1" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,5);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia2,ris,dimt,dim);
   orienta (griglia2,ris,dimt,5,c2,r,c,2);

   cout << "Inserisci le coordinate del torpediniere 2" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,7);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia2,ris,dimt,dim);
   orienta (griglia2,ris,dimt,7,c2,r,c,2);

   cout << "Inserisci le coordinate del torpediniere 3" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,9);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia2,ris,dimt,dim);
   orienta (griglia2,ris,dimt,9,c2,r,c,2);

   cout << "Inserisci le coordinate di incrociatore 1" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,11);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia2,ris,dimi,dim);
   orienta (griglia2,ris,dimi,11,c2,r,c,2);

   cout << "Inserisci le coordinate di incrociatore 2" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,14);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia2,ris,dimi,dim);
   orienta (griglia2,ris,dimi,14,c2,r,c,2);

   cout << "Inserisci le coordinate della portaerei" << endl;
   cout << "Inserisci la riga occupata dalla nave " << endl;
   cin >> r;
   cout << "Inserisci la colonna occupata dalla nave " << endl;
   cin >> c;
   poscorr(r,c,griglia2,dim);
   inserisci(griglia2,r,c,2,c2,17);
   cout << " Come si vuole disporre la nave? " << endl;
   cout << " Digitare 0 se in orizzontale o 1 se in verticale " << endl;
   cin >> ris;
   poscorrd(r,c,griglia2,ris,dimp,dim);
   orienta (griglia2,ris,dimp,17,c2,r,c,2);

   while (tot1 || tot2 == 0) {
      cout << " Turno del giocatore " << player1 << endl;
      cout << " Inserisci le coordinate della casella da colpire " << endl;
      cout << "Inserisci la riga " << endl;
      cin >> r;
      cout << "Inserisci la colonna " << endl;
      cin >> c;
      turno (griglia2,2,c2,cs2,ct2,ci2,cp2,tot2,r,c);
      cout << " Turno del giocatore " << player2 << endl;
      cout << " Inserisci le coordinate della casella da colpire " << endl;
      cout << "Inserisci la riga " << endl;
      cin >> r;
      cout << "Inserisci la colonna " << endl;
      cin >> c;
      turno (griglia1,1,c1,cs1,ct1,ci1,cp1,tot1,r,c);
   }
   
   if (tot1 && tot2 == 0)
      cout << " La partita e' terminata in pareggio " << endl;
   if (tot2 == 0)
      cout << " Complimenti! " << player1 << " , Hai Vinto! " << endl;
   if (tot1 == 0)
      cout << " Complimenti! " << player2 << " , Hai Vinto! " << endl;

   return 0;
}
Hoiya85
Starting Member
Starting Member
 
Messaggio: 5 di 12
Iscritto il: 27/02/2015, 02:03

Re: Matrice-Vettore in c++

Messaggioda Hoiya85 » 28/02/2015, 16:02

sono riuscito a risolvere il problema dei puntatori, però purtroppo non era quello il problema :(
Hoiya85
Starting Member
Starting Member
 
Messaggio: 6 di 12
Iscritto il: 27/02/2015, 02:03

Re: Matrice-Vettore in c++

Messaggioda Super Squirrel » 01/03/2015, 09:37

Scusa ma ci vorrebbe troppo tempo per comprendere bene tutto il codice.
Non posso quindi aiutarti a trovare il problema, ma se vuoi ti posso dare una mano a semplificare il programma.

Si potrebbe per esempio procedere nel seguente modo:
- creare una funzione per inserire un pezzo:
Codice:
void inserire_pezzo(int v[10][10], int dimensione)

-creare una funzione per inizializzare la griglia:
Codice:
void inizializza_griglia(int v[10][10])
{
inserire_pezzo(v,1);
inserire_pezzo(v,1);
inserire_pezzo(v,1);
inserire_pezzo(v,1);
inserire_pezzo(v,2);
inserire_pezzo(v,2);
inserire_pezzo(v,2);
inserire_pezzo(v,3);
inserire_pezzo(v,3);
inserire_pezzo(v,4);
}

-creare una funzione turno che faccia scegliere le coordinate e controlli se è stato colpito qualcosa, se ciò avviene la variabile affondato inizializzata a 0 aumenta di 1 e si continua con un nuovo inserimento di coordinate finchè non viene colpita nessuna nave o quando affondato == 20 (essendo 1*4+2*3+3*2+4*1=20)
Codice:
void turno(int v[10][10], int &affondato)

-creare poi nel main un ciclo del tipo:
Codice:
while(affondato1 != 20 && affondato2 != 20)
{
turno(v1, affondato1);
if(affondato1 != 20)
{
turno(v2, affondato2);
}
else
{
break;
}
}
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 49 di 1486
Iscritto il: 16/05/2013, 22:05


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite