elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Reto Universidad [C++].
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 [4] 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: Reto Universidad [C++].  (Leído 47,412 veces)
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #30 en: 5 Agosto 2011, 21:29 pm »

No podes usar memoria dinámica para ese ultimo?

Me parece que seria mucho mas fácil y limpio si podes buscar las cosas una vez que tenes todos los números.

No, ese ejercicio pertenece al tema 2 y solo se había visto tipos de datos simples, estructuras de selección, procedimientos y funciones y recursividad.


En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #31 en: 8 Agosto 2011, 13:58 pm »

Citar
9.- Una matriz tiene un punto silla en una de sus componentes, si ese componente es el mayor valor de su columna y el menor de su fila. Diseña un algoritmo que recogiendo de teclado los componentes de una matriz cuadrada de enteros de hasta un máximo de 10x10, muestre en la pantalla las coordenadas de todos sus puntos silla.

Tengo una duda con este ejercicio, no especifica que pasa si el mayor de la columna y/o el menor de la fila están repetidos. ¿Debería considerarlos también como posibles puntos sillas o solo puede haber como máximo uno por fila/columna?


En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
PiroskY

Desconectado Desconectado

Mensajes: 76


пирожки


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #32 en: 8 Agosto 2011, 18:44 pm »

Yo hice hace un tiempo algo similar, y lo que hice fue pensar que no había números repetidos.

Pero creo que tampoco hay que modificar muchas cosas si ya tenes el código hecho.

Vos podes elegir:

Que haya punto si solo hay un único máximo y mínimo.
Que sean posibles puntos todos los max/min repetidos(si cumplen con la condición)
En línea

bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #33 en: 8 Agosto 2011, 22:51 pm »

Muchas gracias por la respuesta, creo que lo voy a hacer sin numeros repetidos, es decir, si el mayor o el menor esta repetido, no puede haber punto silla, me parece más lógico que lo otro   :)

EDIT: Al final lo he resuelto para numeros repetidos. A la hora de hacerlo me ha parecido más logico el que pudiese tener varios puntos sillas en una misma fila que no escoger ninguno de los menores repetidos (y lo mismo para las columnas).
Aqui dejo el codigo, escucho sugerencias para simplificarlo/hacerlo más eficiente xD
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const unsigned M = 10;
  5. typedef int TDatos[M][M];
  6. struct TMatriz{
  7. TDatos matriz;
  8. unsigned f;
  9. unsigned c;
  10. };
  11.  
  12. void introDatos(TMatriz& m);
  13. void puntosSilla(const TMatriz& m, bool& notiene);
  14. int menorFila(const TMatriz& m, unsigned i);
  15. int mayorCol(const TMatriz& m, unsigned j);
  16.  
  17. int main() {
  18. TMatriz m;
  19. bool notiene = true;
  20.  
  21. introDatos(m);
  22. puntosSilla(m,notiene);
  23.  
  24. if(notiene){
  25. cout << "La matriz no tiene ningun punto silla." << endl;
  26. }
  27.  
  28. return 0;
  29. }
  30.  
  31. void introDatos(TMatriz& m){
  32. cout << "Introduzca numero de filas: ";
  33. do{
  34. cin >> m.f;
  35. }while((m.f<=0)||(m.f>10));
  36. cout << "Introduzca numero de columnas: ";
  37. do{
  38. cin >> m.c;
  39. }while((m.c<=0)||(m.c>10));
  40. cout << "Introduzca numeros en la matriz " << m.f << "x" << m.c << ": ";
  41. for(unsigned i=0;i<m.f;i++){
  42. for(unsigned j=0;j<m.c;j++){
  43. cout << "m(" << i+1 << "," << j+1 << "): ";
  44. cin >> m.matriz[i][j];
  45. }
  46. }
  47. }
  48.  
  49. void puntosSilla(const TMatriz& m, bool& notiene){
  50. int menor;
  51. unsigned i,j;
  52.  
  53. for(i=0;i<m.f;i++){
  54. menor = menorFila(m,i);
  55. for(j=0;j<m.c;j++){
  56. if((m.matriz[i][j]==menor)&&(menor==mayorCol(m,j))){
  57. cout << "Punto Silla: (" << i+1 << "," << j+1 << ")" << endl;
  58. notiene = false;
  59. }
  60. }
  61. }
  62. }
  63.  
  64. int menorFila(const TMatriz& m, unsigned i){
  65. int menor = m.matriz[i][0];
  66.  
  67. for(unsigned j=1;j<m.c;j++){
  68. if(m.matriz[i][j]<menor){
  69. menor = m.matriz[i][j];
  70. }
  71. }
  72. return menor;
  73. }
  74.  
  75. int mayorCol(const TMatriz& m, unsigned j){
  76. int mayor = m.matriz[0][j];
  77.  
  78. for(unsigned i=1;i<m.f;i++){
  79. if(m.matriz[i][j]>mayor){
  80. mayor = m.matriz[i][j];
  81. }
  82. }
  83. return mayor;
  84. }
« Última modificación: 10 Agosto 2011, 13:06 pm por bigfu » En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
PiroskY

Desconectado Desconectado

Mensajes: 76


пирожки


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #34 en: 9 Agosto 2011, 21:30 pm »

Acá te dejo el código que había hecho yo, debe estar bastante feo, lo hice hace bastante.

Cargar por teclado una matriz de números enteros (el rango lo debe determinar el usuario) e informar si posee o no punto de ensilladura.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    int X,I;
  7.    cout << "Ingrese la catidad de filas" << endl;
  8.    cin >> X;
  9.    cout << "Ingrese la catidad de columnas" << endl;
  10.    cin >> I;
  11.    int mat[X][I],i,x,max,min,col2,fila2,col1,fila1,ensilladura=0;
  12.    for (x=0;x<X;x++)
  13.    {
  14.        cout << "Fila numero " << x+1 << endl;
  15.        for (i=0;i<I;i++)
  16.            cin >> mat[x][i];
  17.    }
  18.    for (x=0;x<X;x++)
  19.    {
  20.        for (i=0;i<I;i++)
  21.        {
  22.            if (i==0)
  23.            {
  24.                min = mat[x][i];
  25.                fila1 = i;
  26.                col1 = x;
  27.            }
  28.            else
  29.                if (mat[x][i] < min)
  30.                {
  31.                    min = mat[x][i];
  32.                    fila1 = i;
  33.                    col1 = x;
  34.                }
  35.        }
  36.        i = fila1;
  37.        for (x=0;x<X;x++)
  38.        {
  39.            if (x==0)
  40.            {
  41.                max = mat[x][i];
  42.                fila2 = i;
  43.                col2 = x;
  44.            }
  45.            else
  46.                if (mat[x][i] > max)
  47.                {
  48.                    max = mat[x][i];
  49.                    fila2 = i;
  50.                    col2 = x;
  51.                }
  52.        }
  53.        if (fila1==fila2 && col1==col2)
  54.        {
  55.            ensilladura = 1;
  56.        }
  57.    }
  58.    if (ensilladura == 1)
  59.    {
  60.        cout << "Hay punto de ensilladura";
  61.    }
  62.    else
  63.    {
  64.        cout << "No hay punto de ensilladura";
  65.    }
  66. return 0;
  67. }
En línea

Kherom

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #35 en: 11 Agosto 2011, 13:40 pm »

Ya que estoy aprendiendo a programar me he puesto a hacerlos, pero tengo una pregunta, ¿Seguro que el código del primer ejercicio está bien?

Código:
#include <iostream>
using namespace std;
 
int main() {
char c;
int comas, numChar;
 
numChar = 0;
comas = 0;
 
cout << "Introduzca texto terminado en '.': ";
do{
cin.get(c);
numChar++;
if(c==','){
comas++;
}
}while(c!='.');
 
cout << "Numero de comas: " << comas << endl;
cout << "Numero de caracteres: " << numChar << endl;
return 0;
}

Yo lo he hecho así:

Código:
#include <iostream>
using namespace std;

int main ()
{
char texto[200];
bool salir = 0;
bool punto = 0;
int coma = 0;
int n = 0;
char temp = 'n';
while (salir == 0)
{
cout << "Comience a intoducir el texto: ";
cin >> texto;
for ( n = 0 , punto = 0 , coma = 0 ; punto == 0 ; n++ )
{
if (texto[n] == ',' )
coma++;
else if (texto[n] == '.' )
punto =1;
}
cout << "El numero de comas es: " << coma << endl;
cout << "El numero de caracteres leidos es: " << n << endl;
cout << "Introduzca 'S' para salir, cualquier otro caracter para continuar:" << endl;
cin >> temp;
if (temp == 'S' )
salir = 1;
}
return 0;
}

Y más o menos me funciona, excepto si meto acentos o textos muy largos o sin punto.
« Última modificación: 11 Agosto 2011, 14:02 pm por Kherom » En línea

Kherom

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #36 en: 11 Agosto 2011, 14:00 pm »

Repe
En línea

bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #37 en: 11 Agosto 2011, 14:21 pm »

Ya que estoy aprendiendo a programar me he puesto a hacerlos, pero tengo una pregunta, ¿Seguro que el código del primer ejercicio está bien?

Código:
#include <iostream>
using namespace std;
 
int main() {
char c;
int comas, numChar;
 
numChar = 0;
comas = 0;
 
cout << "Introduzca texto terminado en '.': ";
do{
cin.get(c);
numChar++;
if(c==','){
comas++;
}
}while(c!='.');
 
cout << "Numero de comas: " << comas << endl;
cout << "Numero de caracteres: " << numChar << endl;
return 0;
}

Yo lo he hecho así:

Código:
#include <iostream>
using namespace std;

int main ()
{
char texto[200];
bool salir = 0;
bool punto = 0;
int coma = 0;
int n = 0;
char temp = 'n';
while (salir == 0)
{
cout << "Comience a intoducir el texto: ";
cin >> texto;
for ( n = 0 , punto = 0 , coma = 0 ; punto == 0 ; n++ )
{
if (texto[n] == ',' )
coma++;
else if (texto[n] == '.' )
punto =1;
}
cout << "El numero de comas es: " << coma << endl;
cout << "El numero de caracteres leidos es: " << n << endl;
cout << "Introduzca 'S' para salir, cualquier otro caracter para continuar:" << endl;
cin >> temp;
if (temp == 'S' )
salir = 1;
}
return 0;
}

Y más o menos me funciona, excepto si meto acentos o textos muy largos o sin punto.

El código está bien, de esa forma puedes escribir todo lo que quieras sin el problema que te ocurre a ti de los textos muy largos (ya que tu tienes definida una cadena de caracteres de tamaño 200, si te pasas de los 200 te va a dar error).
El tema de las tildes es debido a que C++ toma los caracteres de la tabla ASCII (o eso tengo entendido yo), al igual que con la 'ñ', que tampoco está en la tabla ASCII.
En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
Kherom

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #38 en: 11 Agosto 2011, 16:02 pm »

El código está bien, de esa forma puedes escribir todo lo que quieras sin el problema que te ocurre a ti de los textos muy largos (ya que tu tienes definida una cadena de caracteres de tamaño 200, si te pasas de los 200 te va a dar error).
El tema de las tildes es debido a que C++ toma los caracteres de la tabla ASCII (o eso tengo entendido yo), al igual que con la 'ñ', que tampoco está en la tabla ASCII.

Eso es lo que me ha parecido al leer tu código, lo que pasa es que no conocía esa función, de todas formas he preguntado por que al compilar tu código y ejecutarlo meto texto y cuando pulso intro se cierra.

Lo de las tildes creo que se puede arreglar convirtiendo las cadenas a unicode con una L o algo así pero no se como iba, lo vi en unos tutoriales de OpenGL.
En línea

bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #39 en: 11 Agosto 2011, 17:20 pm »

Eso es lo que me ha parecido al leer tu código, lo que pasa es que no conocía esa función, de todas formas he preguntado por que al compilar tu código y ejecutarlo meto texto y cuando pulso intro se cierra.

Lo de las tildes creo que se puede arreglar convirtiendo las cadenas a unicode con una L o algo así pero no se como iba, lo vi en unos tutoriales de OpenGL.

¿qué IDE estás usando? Yo lo acabo de comprobar y va bien.
Si al ejecutarlo te sale una ventana tipo MS-DOS, lo que seguramente pase es que se ejecute bien pero se cierra justo al terminar de hacerlo, sin dar tiempo a mostrar el resultado, de ahi que parezca que se cierra de forma inesperada.
En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
Páginas: 1 2 3 [4] 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Desafios de la universidad
Desafíos - Wargames
carlos.soriano 2 8,561 Último mensaje 9 Diciembre 2014, 00:34 am
por Samg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines