Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SojatDotar en 5 Julio 2015, 22:01 pm



Título: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 5 Julio 2015, 22:01 pm
Buenas, intento hacer una función en c++, en donde me diga dada una matriz 9x9 si hay un número repetido en filas o columnas, lo intente hacer así

Código:
for (int i=0; i<9; i++){
if ( j !=x) {
}
if ( mt[x][j]==x) {
}
return false;


for (int j=0; j<9; j++) {
if (j != x){
}
if (mat [j][x]==x){
}
return false;
}


pero no me verifica como tal cual numero esta repetido en filas o columnas


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: DarK_FirefoX en 6 Julio 2015, 04:29 am
Hola, ¿podrías explicar un poquito mejor que es lo que quieres verificar?

¿Verificar si un número está repetido en una fila/columna especifica?
¿Verificar si el número está repetido en toda la matriz?

Salu2s


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 04:47 am
Sí, dada dos coordenadas (x,y) y un valor, ver si ese valor esta repetido en dichas coordenadas


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 04:49 am
Citar
Sí, dada dos coordenadas (x,y) y un valor, ver si ese valor esta repetido en dichas coordenadas

genial repuesta -.-
te preguntan: "que quieres hacer?"
tu respuesta: "si"

para lo indicado no necesitas un ciclo

Código:
si (matriz[x][y] == valor) entonces:
    imprimir "el valor está repetido en esa coordenada"


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 05:02 am
Así dice el enunciado, dado dos coordenadas y un valor verificar si dicho valor esta repetido en las coordenadas( son coordenadas ingresadas) yo habia pensado hacer como especie de otra matriz
  • [y] y compararla con mi matriz[j]


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 05:06 am
Citar
dado dos coordenadas y un valor verificar si dicho valor esta repetido en las coordenadas


dada 2 coordenadas: es decir recibido un valor X y uno Y
y un valor: llamemoslo "valor"

verificar si dicho valor esta repetido en las coordenadas


como está ahí se intepreta "si te doy un 'x' y un 'y', revisa si el valor que te doy es igual"

es solo en ese valor según dice, no en toda la matriz... es un solo if y listo

en cambio si te dicen "dado un valor, vea si se repite en la matriz" es otra cosa muy distinta


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 05:09 am
Así es o es lo que entiendo por lo menos porque dice "Dado un par de coordenadas y un valor esta función debe validar si este valor es único en una fila,columna y retornar un lógico con dicha respuesta"


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 05:20 am
Esa explicación está mejor, estoy seguro que entiendes a tu profesor mejor que yo ;)

lo recomiendo hacer así, no es necesario elaborar mucho, solo un for y un par de if (si es una matriz del mismo ancho que largo)

Código:
conseguido = falso;
para(i=0;i<ancho_matriz;i++):
    si matriz[x][i]==valor OR matriz[i][y]==valor:
        conseguido = verdadero
        break // romper ciclo
si conseguido==verdadro:
    imprimir "el valor está repetido"


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 05:33 am
Si algo así ?
Código:
int Verificardigito () {
bool validar=true;
int x,y,n;

cout<<"ingrese la coordenada x"<<endl;
cin>>x;
cout<<"ingrese la coordenada y"<<endl;
cin>>y;
cout<<"ingrese el valor"<<endl;
cin>>n;
for (int =0; i<9; i++){
if (mat[x][i]==n or mat[i][y]==n) {
va=true;
break;
if (va==true)
cout<<"valor repetido"<<endl;
return (va);
la matriz es 9x9 y la declare global


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: DarK_FirefoX en 6 Julio 2015, 05:37 am
Bueno, al parecer yo sigo sin "entender" al "profesor"  :silbar:

A ver, lo que entendí es que quieres dado una X y Y (coordenadas) dentro de la matriz, ¿verificar si un valor (valor) se repite en esa fila (X) y/o columna (Y)?

Si es así con lo que dice @engel lex tienes.
Esa explicación está mejor, estoy seguro que entiendes a tu profesor mejor que yo ;)

lo recomiendo hacer así, no es necesario elaborar mucho, solo un for y un par de if (si es una matriz del mismo ancho que largo)

Código:
conseguido = falso;
para(i=0;i<ancho_matriz;i++):
    si matriz[x][i]==valor OR matriz[i][y]==valor:
        conseguido = verdadero
        break // romper ciclo
si conseguido==verdadro:
    imprimir "el valor está repetido"
Salu2s


PD:
genial repuesta -.-
te preguntan: "que quieres hacer?"
tu respuesta: "si"

 :D


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 05:41 am
Sí, asi es dados esos valores verificar que en esas coordenadas no haya número repetido( o sea, el valor es único) otra duda, y si quisiera hacer otra función pero esta vez dada dos coordenadas y un valor, insertar ese valor en esas coordenadas?


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 05:42 am
tienes muchos errores en el código, te los resalto

Código
  1. int Verificardigito () {
  2. bool validar=true;
  3. int x,y,n;
  4.  
  5. cout<<"ingrese la coordenada x"<<endl;
  6. cin>>x;
  7. cout<<"ingrese la coordenada y"<<endl;
  8. cin>>y;
  9. cout<<"ingrese el valor"<<endl;
  10. cin>>n;
  11. for (int =0; i<9; i++){//error int = 0? debe ser i = 0
  12. if (mat[x][i]==n or mat[i][y]==n) {//no es or es ||
  13.  va=true;//quien es va?
  14.  break;
  15.  if (va==true)
  16.  cout<<"valor repetido"<<endl;
  17. return (va);// quien es va? a demás es una funcion tipo int, retornas algo cargado con un booleano

corregida quedaría

Código
  1. bool Verificardigito () {
  2. bool validar=true;
  3. int x,y,n;
  4.  
  5. cout<<"ingrese la coordenada x"<<endl;
  6. cin>>x;
  7. cout<<"ingrese la coordenada y"<<endl;
  8. cin>>y;
  9. cout<<"ingrese el valor"<<endl;
  10. cin>>n;
  11. for (i =0; i<9; i++){
  12. if (mat[x][i]==n || mat[i][y]==n) {
  13.  validar=true;
  14.  break;
  15. }  
  16. if (validar==true){
  17.  cout<<"valor repetido"<<endl;
  18. }
  19.  
  20. return (validar);
  21. }


Citar
Sí, asi es dados esos valores verificar que en esas coordenadas no haya número repetido( o sea, el valor es único) otra duda, y si quisiera hacer otra función pero esta vez dada dos coordenadas y un valor, insertar ese valor en esas coordenadas?

explícate con detalle, deja de tratar de resumir lenguaje, porque no se entiende lo que tratas de expresar, explica largo y con ejemplos


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 05:50 am
Sí, me percate de los errores, pero fue un error al tipearlo aquí, es más o menos así, dado un par de coordenadas y un valor colocar el mismo en la posición dentro del tablero (matriz) es necesario notificar si en el momento de colocar un valor éste se encuentra en la misma fila, columna , en ningún momento se debe impedir colocar dicho valor


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: DarK_FirefoX en 6 Julio 2015, 05:55 am
Tal como dijo @engel lex, estás tratando de escribir poco y pasamos trabajo para entenderte, date cuenta que lo que decías se contradecía sobre lo que querías hacer. Cuando te refieres a coordenadas, es solamente la X y Y de un punto (extrapólate a Geometría Analítica) y tu querías inducir la fila X y la columna Y dadas las coordenadas de un punto. En fin, que no tenía mucho sentido.

Además, ahora cambias sobre lo que quieres hacer, solamente tienes que verificar si el número está repetido en esa fila y/o columna y después ponerlo (ah, eso si, ¿donde lo vas a poner?)

Salu2s


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 06:01 am
Voy a intentar explicar mejor tengo mi matriz 9x9, trato de hacer una Función en donde dado dos coordenadas y un valor me diga si ese valor es único en una fila o columna de mi matriz, y otra Función en donde dados dos coordenadas y un valor, colocar ese mismo valor en las coordenadas introducidas


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 06:11 am
Citar
trato de hacer una Función en donde dado dos coordenadas y un valor me diga si ese valor es único en una fila o columna de mi matriz

ya lo tienes... ese fue...

procura no confunir "corrdenadas" con "filas y columnas"

"coordenada" es un punto exacto, uno solo (3,5) es el punto en la posición X = 3, Y = 5, no hay duda, no se extiende a sus vecinos. tambien se puede extender este concepto a sus componentes "dadas 2 coordenadas" es que darán cada componente de un punto, un X y un Y


fila es todo el espacio horizontal de 1 solo espacio vertical que se extiende en una matriz
ejemplo
Código:
1,2,3,4,5,6

columna es todo el espacio vertical de 1 solo espacio horizontal que se extiende en una matriz
ejemplo
Código:
1
2
3
4
5


Citar
y otra Función en donde dados dos coordenadas y un valor, colocar ese mismo valor en las coordenadas introducidas

por lo que entiendo es tan simple como

Código:
matriz[x][y]=valor


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: DarK_FirefoX en 6 Julio 2015, 06:11 am
Voy a intentar explicar mejor tengo mi matriz 9x9, trato de hacer una Función en donde dado dos coordenadas y un valor me diga si ese valor es único en una fila o columna de mi matriz, y otra Función en donde dados dos coordenadas y un valor, colocar ese mismo valor en las coordenadas introducidas

Un poquito mejor, pero todavía, lo siento, pero de verdad queremos ayudarte:

A ver, voy a dividirlo por partes:

1ra parte común:

Citar
tengo mi matriz 9x9

Hasta ahí, estamos bien:

Citar
una Función en donde dado dos coordenadas y un valor me diga si ese valor es único en una fila o columna de mi matriz

De aquí, se puede deducir que te dan las coordenadas de un punto específico en la matriz, o sea, te dan X (digamos fila) y Y (digamos columna), que apuntan a ese punto en una matriz, o sea a:

Código
  1. matriz[x][y]

Entonces, también dices que tienes un valor, o sea, el valor el cual vas a verificar si es único. El problema recae en que:

¿Son las "coordenadas" que dices las que representan: "una fila o columna de mi matriz"? o ¿no tienen que ver?
mod: pues no tiene sentido, lee lo que escribió @engel lex ^^ alla arriba

Luego, la otra parte es:

Citar
Función en donde dados dos coordenadas y un valor, colocar ese mismo valor en las coordenadas introducidas

Ya esto es sencillo, simplemente basta con asignarle a la matriz en X y Y (coordenadas introducidas del punto) el valor que te dieron

Código
  1. matriz[x][y] = valor;

Espero que entiendas nuestros consejos.

Salu2s


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 06:17 am
Sí, si entiendo lo que dicen, pero así dice el enunciado, lo copiare tal cual como es; Función VerificarDigito: Dado un par de coordenadas y un valor esta función debe validar si este valor es único en una fila,columna o cuadrante y retornar un valor lógico
Función ColocarNumero: dado un par de coordenadas y un valor colocar el mismo en la posición indicada dentro de la matriz, es necesario notificar si en el momento de colocar un valor éste se encuentra en la misma fila,columna (en ningún momento se debe impedir colocar el valor)


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: DarK_FirefoX en 6 Julio 2015, 06:23 am
Sí, si entiendo lo que dicen, pero así dice el enunciado, lo copiare tal cual como es; Función VerificarDigito: Dado un par de coordenadas y un valor esta función debe validar si este valor es único en una fila,columna o cuadrante y retornar un valor lógico
Función ColocarNumero: dado un par de coordenadas y un valor colocar el mismo en la posición indicada dentro de la matriz, es necesario notificar si en el momento de colocar un valor éste se encuentra en la misma fila,columna (en ningún momento se debe impedir colocar el valor)

Bueno, viendo la falta de claridad del primer enunciado (pues sigo sin verle sentido, que crees tu @engel lex?) creo, que deberías hacerlo como te lo habíamos planteado inicialmente, ya que te dan las coordenadas de un punto, verifica si el valor existe en esa fila (X) y/o en esa columna (Y).

¿Entiendes?

Salu2s


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 06:25 am
Sí, si entiendo lo que dicen, pero así dice el enunciado, lo copiare tal cual como es; Función VerificarDigito: Dado un par de coordenadas y un valor esta función debe validar si este valor es único en una fila,columna o cuadrante y retornar un valor lógico
Función ColocarNumero: dado un par de coordenadas y un valor colocar el mismo en la posición indicada dentro de la matriz, es necesario notificar si en el momento de colocar un valor éste se encuentra en la misma fila,columna (en ningún momento se debe impedir colocar el valor)

ufff de la tierra a la luna! XD

tu enunciado inicial
Citar
dada dos coordenadas (x,y) y un valor, ver si ese valor esta repetido en dichas coordenadas

el enunciado real
Citar
ado un par de coordenadas y un valor esta función debe validar si este valor es único en una fila,columna o cuadrante y retornar un valor lógico

unica diferencia
Citar
en una fila,columna o cuadrante y retornar un valor lógico

tu profesor no puso el enunciado mal XD está perfectamente explicado y el código está mal (tiene que revisar "el cuadrante" que no sé como lo definen)...

Citar
dado un par de coordenadas y un valor colocar el mismo en la posición indicada dentro de la matriz, es necesario notificar si en el momento de colocar un valor éste se encuentra en la misma fila,columna (en ningún momento se debe impedir colocar el valor)

básicamente como habíamos dicho y luego llamar a VerificarDigito

listo


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 06:39 am
Código:
#include <iostream>
using namespace std;
int mat[9][9];

bool Verificardigito (int n, int x, int y) {
bool validar=true;

 
 cout<<"ingrese la coordenada x"<<endl;
 cin>>x;
 cout<<"ingrese la coordenada y"<<endl;
 cin>>y;
 cout<<"ingrese el valor"<<endl;
 cin>>n;
 for (int i =0; i<9; i++){
 if (mat[x][i]==n || mat[i][y]==n) {
  validar=true;
  break;
}  
if (validar==true){
  cout<<"valor repetido"<<endl;
}
 
return (validar);
}
}


void ColocarNumero(int n, int x, int y) {

cout<<"ingrese la coordenada 1"<<endl;
 cin>>x;
 cout<<"ingrese la coordenada 2"<<endl;
 cin>>y;
 cout<<"ingrese el valor"<<endl;
 cin>>n;
mat[i][j]=n;


}

int main() {

int n,x,y;
bool Va;

for(int i=0;i<9;i++) {
for(int j=0;j<9;j++) {
  cin>>mat[i][j];

}
}




Va=Verificardigito;

return 0;
}
es lo que llevo del código, de lo que entendí


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: engel lex en 6 Julio 2015, 07:01 am
sinceramente recomiendo importante y encarecidamente que hagas un tutorial de C++, ya que estás bastante perdido en ello
(por cierto, para que tu códigos se vean bien como cuando yo los coloco, usa las etiquetas GeSHi, están ubicadas un poco más a la derecha que la etiqueta de código)

Verificardigito, decídete las variables (n, y ,x) se reciben como parámetros o los ingresa el usuario?
como lo tienes
Código
  1. bool Verificardigito ()

funcionaría perfecto (claro, corrigiendo las variables)

lo mismo con ColocarNumero... solo que quien es i y j? no los veo declarados en la función....

procura no hacer
Código:
for(int...

declara las variables afuera del for


por otro lado más...

Código
  1. Va=Verificardigito;

eso está mal, Verificardigito es una función no es una variable así que debe ser
Código
  1. Va=Verificardigito();

por ultimo...
ColocarNumero nunca fue usado


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: DarK_FirefoX en 6 Julio 2015, 07:25 am
También, ten en cuenta, como buena práctica, el hecho de usar nombres descriptivos para tus variables, por ejemplo:

¿Que significa "Va"?

Salu2s


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 15:17 pm
Decidí pasarlas por parámetros, como las voy a usar en dos funciones, para no estar declarándolas  cada una de la funciones, "Va" sería un diminutivo de "validar" y sería la variable que este recibiendo a la función


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 6 Julio 2015, 23:47 pm
Cuando te refieres a corregir las variable, que quieres decir?


Título: Re: verificar si un numero esta repetido en matriz
Publicado por: SojatDotar en 7 Julio 2015, 00:35 am
Voy a intentar explicar mejor, tengo que hacer una especie de sudoku, en donde me piden hacer cuatros funciones, VerificarTablero,MostrarTablero,verificardigito y colocarNumero, las dos primera las tenia hechas ( o las tengo echas), pero las dos últimas son las que mas se me han complicado
la primera función es validar si un tablero contiene una solución valida ( Qué no haya número repetidos en filas, columna o cuadrante)http://prntscr.com/7pnmrp (http://prntscr.com/7pnmrp) esos serían los diferente cuadrante, esa función la hice así:
Código:
bool VerificarTablero() {

bool ver=true;

int cont=0,c=0;

for(int i=cont+1;i<9;i++) {
for(int j=0;j<9;j++) {
 
if (mat[cont][j]==mat[i][j])
{cout<<"Solucion invalida"<<endl;}

ver=false;}
else
{cout<<"Solucion Valida"<<endl;
ver=true;}
}
}

cont++;








return (ver);
}
Pero ahora cuando lo ejecuto me da solución invalida muchas veces y no una como quisiera, (Ahí no verifique los cuadrante, solo las filas y columna, ya que no sabia como verificar cada cuadrante)
en la otra la hice como acción en donde solo mostre el tablero :
Código:
void MostrarTablero(){



for(int i=0;i<9;i++) {
for(int j=0;j<9;j++) {
  cout<<mat[i][j];

}

cout<<endl;

}
las otras dos fue en la que pedí ayuda, porque no sabia como hacerlas
Funcion VerificarDigitos:
Código:
bool VerificarDigitos () {
bool validar=false;
int x,y,n;
 
 cout<<"ingrese la coordenada x"<<endl;
 cin>>x;
 cout<<"ingrese la coordenada y"<<endl;
 cin>>y;
 cout<<"ingrese el valor"<<endl;
 cin>>n;
 for (int i =0; i<9; i++){
 if (mat[x][i]==n || mat[i][y]==n) {
  validar=true;
  break;
}  
if (validar==true){
  cout<<"valor repetido"<<endl;
}
 
return (validar);
}
}
quisiera saber si me podrían ayudar en la primera función y en la tercera, ya que no me da como quería ni como pensé que me daría, si no es mucha la molestia