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í
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
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
Sí, dada dos coordenadas (x,y) y un valor, ver si ese valor esta repetido en dichas coordenadas
CitarSí, 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
si (matriz[x][y] == valor) entonces:
imprimir "el valor está repetido en esa coordenada"
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]
Citardado 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
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"
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)
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"
Si algo así ? 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
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.
Cita de: 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)
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:
Cita de: engel lex en 6 Julio 2015, 04:49 AM
genial repuesta -.-
te preguntan: "que quieres hacer?"
tu respuesta: "si"
:D
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?
tienes muchos errores en el código, te los resalto
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++){//error int = 0? debe ser i = 0
if (mat[x][i]==n or mat[i][y]==n) {//no es or es ||
va=true;//quien es va?
break;
if (va==true)
cout<<"valor repetido"<<endl;
return (va);// quien es va? a demás es una funcion tipo int, retornas algo cargado con un booleano
corregida quedaría
bool 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 (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);
}
CitarSí, 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
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
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
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
Citartrato 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
1,2,3,4,5,6
columna es todo el espacio vertical de 1 solo espacio horizontal que se extiende en una matriz
ejemplo
1
2
3
4
5
Citary 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
matriz[x][y]=valor
Cita de: 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
Un poquito mejor, pero todavía, lo siento, pero de verdad queremos ayudarte:
A ver, voy a dividirlo por partes:
1ra parte común:
Citartengo mi matriz 9x9
Hasta ahí, estamos bien:
Citaruna 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:
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 arribaLuego, la otra parte es:
CitarFunció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
matriz[x][y] = valor;
Espero que entiendas nuestros consejos.
Salu2s
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)
Cita de: 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)
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
Cita de: 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)
ufff de la tierra a la luna! XD
tu enunciado inicial
Citardada dos coordenadas (x,y) y un valor, ver si ese valor esta repetido en dichas coordenadas
el enunciado real
Citarado 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
Citaren 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)...
Citardado 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
#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í
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
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
for(int...
declara las variables afuera del for
por otro lado más...
Va=Verificardigito;
eso está mal, Verificardigito es una función no es una variable así que debe ser
Va=Verificardigito();
por ultimo...
ColocarNumero nunca fue usado
También, ten en cuenta, como buena práctica, el hecho de usar nombres descriptivos para tus variables, por ejemplo:
¿Que significa "Va"?
Salu2s
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
Cuando te refieres a corregir las variable, que quieres decir?
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í: 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 : 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: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