Duda acerca de matriz en c++

Iniciado por laura_55, 19 Mayo 2014, 04:23 AM

0 Miembros y 1 Visitante están viendo este tema.

laura_55

Hola a todos mi nombre es Laura y soy nueva por aquí, espero que todos estén bien. Mi duda es la siguiente yo quiero crear una matriz con ciertos elementos. Luego de llenarla quiero poder un elemento de mi matriz posición por posición según lo que ingrese el usuario, sea norte, sur, este, oeste, para así ir acumulando un puntaje. Yo cree el siguiente código pero no me funciona y no se que estoy haciendo mal. Disculpen la molestias y entiendan que soy principiante por lo que debo de tener los errores mas estúpidos, solo les muestro el norte porque mi código esta hecho un desastre y es muy largo, y como siempre se repite lo mismo quiero saber que tengo mal y así poder arreglarlo en los demás. Gracias de antemano, y sean un poco pacientes todavía soy principiante.

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
char matriz[20][20];
using namespace std;
//----------------------------------------------------------------------
float Puntaje(int x, int y){
float Pts;
if (matriz[x][y]=='$'){
Pts=1.0;
}else if (matriz[x][y]=='%'){
Pts=1.5;
}else if (matriz[x][y]=='&'){
Pts=2.0;
}
return Pts;
}
//----------------------------------------------------------------------
void Mover_posicion( int fil, int col, char matriz[][20]){
bool estado=false;
int i,j,c,pasos,x,y,l,m,Ac;
string mov;
do{
for( i=0;i<fil;i++){
for( j=0;j<col;j++){
if(matriz[i][j]=='I'){
x=i;
y=j;
}
if(matriz[i][j]=='F'){
l=i;
m=j;
}
}
    }
    cin>>mov>>pasos;
   
    for(c=0;c<pasos;c++){
if(mov=="N"){

    if((x-pasos) < 0){
Ac=Ac + Puntaje(x,y);
    if(matriz[x][y]==matriz[l][m]){
  for (i = 0; i < fil; i++){
        for ( j = 0; j < col; j++)
           cout << matriz[i][j] << " ";
        cout << endl; 
    }
}else{ 
         matriz[x][y] = matriz[x][y];
            matriz[x][y] = '#';
           
             if(matriz[i][j]=='I'  && matriz[x][y]!='|'  ){

for (x = 0; x < fil; x++){
        for ( y = 0; y < col; y++)
           cout << matriz[x][y] << " ";
           cout << endl;
       
         }
         }else if(matriz[x--][y]!='|'){

for (i = 0; i < fil; i++)
    {
        for ( j = 0; j < col; j++)
           cout << matriz[i][j] << " ";
        cout << endl; 
    }
    }
}
}
x--;

}
if(matriz[x][y]==matriz[l][m]){
estado=true;
}

   
    }while(estado!=true);
    cout<<"Ha llegado"<<"su acumulado es:"<<Ac<<endl;
}
//----------------------------------------------------------------------
int main(){
int fil,col,i,j;

cout<<"Ingrese filas y columnas"<<endl;
cin>>fil>>col;

for( i=0;i<fil;i++){
for( j=0;j<col;j++){         
do{
        cin >> matriz[i][j];
         
}while(matriz[i][j]!='I' && matriz[i][j]!='F' && matriz[i][j]!='$' && matriz[i][j]!='&' && matriz[i][j]!='|' && matriz[i][j]!='%');
}
}   
Mover_posicion( fil, col, matriz);
}

Blaster

Cita de: laura_55 en 19 Mayo 2014, 04:23 AM
Mi duda es la siguiente yo quiero crear una matriz con ciertos elementos. Luego de llenarla quiero poder un elemento de mi matriz posición por posición según lo que ingrese el usuario, sea norte, sur, este, oeste, para así ir acumulando un puntaje.

Podrias explicar de forma mas clara que es lo que quieres hacer exactamente; la función Mover_posicion carece totalmente de consistencia que intentas hacer con ella

Saludos 

laura_55

lo siento si no se entiende, estoy comenzando. Lo que yo intente hacer fue que según la coordenada que ingrese es el usuario (norte, sur, este, oeste) se mueva el carácter
I tantas veces como lo indico el usuario. Ej si el usuario ingresa N 2, el carácter debería moverse nos espacios al norte y en su camino ir colocando el #. Yo trate de colocar el x-- para que fuera de posición en posición y así poder ir acumulando los puntos que hace la acción puntaje. Cambien le coloque un do while para que se saliera cuando la posición de I fuera igual  a F, se saliera y me escribiera el mensaje de ha llegado y de cuanto es mi acumulado. Lo siento si mi código es un desastre solo que parece que las matrices y yo no nos llevamos. No se, si estoy responde a tu pregunta

vangodp

#3
http://foro.elhacker.net/programacion_cc/ayuda_con_programa_urgente-t404470.0.html
Voy a echar un ojo y después pongo algo que valga, aquí te dejo este enlace para que veas unos ejemplos muy buenos, porque así con prisa me ha salido to mal.  :-(


Blaster

#4
Cita de: laura_55 en 19 Mayo 2014, 05:53 AM
Lo que yo intente hacer fue que según la coordenada que ingrese es el usuario (norte, sur, este, oeste) se mueva el carácter I tantas veces como lo indico el usuario. Ej si el usuario ingresa N 2, el carácter debería moverse nos espacios al norte y en su camino ir colocando el #.

Te dejo un sencillo codigo que hace exactamente lo que pides, que es mover un elemento de la matriz hacia arriba la cantidad de posiciones que el usuario indique y rellenar el hueco dejado con '#'

Código (cpp) [Seleccionar]
if (mov == 'N' && x-pasos >= 0){
  matriz[x-pasos][y] = matriz[x][y];
 for (i = 0;  i < pasos; i++ )
     matriz[x-i][y] = '#';
  }


Cita de: laura_55 en 19 Mayo 2014, 05:53 AM
Yo trate de colocar el x-- para que fuera de posición en posición y así poder ir acumulando los puntos que hace la acción puntaje. Cambien le coloque un do while para que se saliera cuando la posición de I fuera igual  a F, se saliera y me escribiera el mensaje de ha llegado y de cuanto es mi acumulado.

Que quieres hacer con estos caracteres I F  $  &  | % y con la condición de do while no entiendo a que quieres llegar

Saludos

laura_55

Bueno con el do while del int main lo que quiero es que el usuario llene la matriz solo con los caracteres  I F  $  &  | % . Y el do while de la acción mover posición lo que hace es que cuanto la posición donde esta el carácter I es igual a F mi variable estado se vuelve verdad por lo que se sale y me imprime el mensaje ha llegado con el acumulado de los puntos de las posiciones por donde paso el carácter I. No se, si eso responde a tu pregunta, pero eso es lo que intento hacer y gracias por tratar de ayudarme a todos.

eferion

Cita de: laura_55 en 20 Mayo 2014, 02:10 AM
... lo que hace es que cuanto la posición donde esta el carácter I es igual a F mi variable estado se vuelve verdad ...

Posición del carácter I igual a F ????

¿¿¿???

Perdón por el comentario, pero te explicas como un libro cerrado

laura_55

si, lo siento de verdad trata de explicar lo mejor que puedo pero las palabras no salen como debería. Lo que trato de decir es que a medida que mi carácter va subiendo y en el numero de pasos que indico llega al caracter F, es decir,  la posición  del carácter I pasa a ser la misma que el F. El se sale y no pide mas paso, para eso es el do while. Espero que me entienda, ya se que no debo ser profesora explico pésimo.

eferion

A ver si me entero.

* Tienes una matriz con valores determinados, entre ellos al menos una I y una F.

* Se elige una I y se le van pidiendo al usuario una serie de pasos. Cada paso desplaza I por la matriz.

* Si en uno de los pasos resulta que I va a estar ubicada en la posición donde se encuentra una F el programa deja de pedir más pasos

¿Es así?

Si estoy en lo cierto, tengo algunas dudas:

* Solo hay una I y una F o puede haber varias de cada una??

* Si se desplaza I por la matriz... que valor se pone en el espacio que queda vacío? Si I está en (1,0) y se mueve a (2,0), qué valor se pone en (1,0)??

Si no estoy en lo cierto, deberías replantearte un pequeño esfuerzo adicional para que se entienda el problema.

Un saludo.

laura_55

 En cuanto a tus preguntas:
*El usuario solo va a ingresar una I y una F.
*Cuando se mueve se le coloca a la posición anterior el carácter #.
Y de verdad discúlpenme si no se entiende lo que trato de explicar.