Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Xandrete

#211
Aunque ya a estas horas no puedo ayudarte mucho, porque tengo pendientes algunas tareas, si puedo decirte algunas cosillas...

Código (cpp) [Seleccionar]
#include <iostream>
#include <vector> /*Tal vez quieras incluir esta libreria y usar vectores en lugar de arrays... son mas comodos para muchas tareas, pero bueno, tampoco hacen falta*/
/*#include <conio.h> Si, comenta esta linea y tambien la del getch()... Usa otra cosa de la libreria estandar. No entiendo porque los profes prefieren que sus alumnos usen conio, pero no vector -.- */
using namespace std;

int main() {
     cout << "Utiliza el \"cuadrao\" dedicado a los codigos, no a las citas" << endl;
}


Aparte de eso, mezclas los punteros con los valores que referencian, cosa mala... Ejemplo:
Código (cpp) [Seleccionar]
(...)if(arreglo>arreglo[i+1])(...)

Ten en cuenta que un array es, en el fondo, un puntero al primer elemento: arreglo es un puntero a int, mientras que arreglo[i+1] es un int!!

Además, el mismo array que rellenas en el main, al pasarselo a la función ordenar lo machacas por otro nuevo!! (La función ordenar tiene como parámetro arreglo, y dentro declaras otra vez arreglo).

Ya se ha criticado suficiente el SYSTEM("PAUSE")... dentro de las cosas malas no es lo peor y además, no hay nada nuevo que pueda decir yo.

La función ordenar aplica una especie de Bubblesort mal implementado... míratelo bien.

Ya habrá alguién que tenga más tiempo de ayudar que yo (o yo mismo, mañana por la noche (peninsular  :D)).

¡Saludos, jefe!

P.S. Tal vez me haya equivocado en alguna de mis correcciones, me lo he mirado demasiado rápido.
#212
¿Hacer que piensen como nosotros? ¿Eres de la opinión de que una máquina lo suficientemente elaborada puede ser completamente indistinguible de un ser humano? O dicho de otra forma, ¿que nosotros somos máquinas también, sólo que de carbono en lugar de silicio...?

Dejando filosofadas a un lado. Por lo que dices, parece que quieres hacer algo que rompa esquemas. Por casualidad, ¿te impresionarían más las redes neuronales? Es una técnica bastante potente, tal vez quieras pillar un libro o algo (te pongo aquí el enlace de la wiki, para que le eches un vistazo y veas más o menos de que va) http://es.wikipedia.org/wiki/Red_neuronal_artificial

Por otro lado, diría que para un proyecto de IA desde 0 quizás convendría saber un poquito de probabilidad y estadística (tampoco a nivel de tesis), llegar a comprender algunas distribuciones importantes... En informática, algunas de las más interesantes tal vez sean la uniforme, la binomial, la de Poisson (aunque esta se utiliza sobre todo en teoría de colas, para servidores y cosas así, quizás se le pueda encontrar aplicación también en un bot) y la normal o gaussiana (esta última es MUY importante en muchos ámbitos, sobre todo por el Teorema Central del Límite). No quiero asustarte tampoco con esto, de momento no me he embarcado en ningún proyecto de esta índole así que no sé exactamente qué habría que saber en esta área, pero sí que es cierto que se utiliza la estadística (de una forma u otra) en bots.

Las limitaciones que propones no están tampoco estrictamente relacionadas con IA estrictamente, sino con temas de programación, bases de datos y tal. Es decir, con medios tecnológicos. Se pueden estudiar técnicas y teoría de inteligencia artificial sin enfocarla a ningún lenguaje de programación ni medio tecnológico concreto, de la misma manera que, en teoría, se puede aprender algoritmia sin tocar ningún lenguaje de programación ni máquina. Por ejemplo, se considera que Ada Lovelace fue la primera "programadora" (algoritmadora sería más exacto, en mi opinión, pero como esa palabra es más cacofónica que el carajo y no existe en el diccionario...)... ¡en una época en la que no existían ordenadores!

Respecto a lo de pensar un método para guardar información... te aconsejaría que no reinventaras la rueda. Ya existen muchos sistemas de base de datos, deberías elegir alguno y aprender a manejarlo. Podrías usar un fichero de texto plano como dices más arriba para guardar info, claro... pero a la larga deberías crear funciones y funciones para poder manejarlo correctamente, y acabarías creando un sistema base de datos nuevo (que, créeme y no es por desanimarte, no será ni tan eficiente ni tan eficaz como otras bases de datos ya existentes y en las que han trabajado decenas, si no cientos de personas, y cuyo desarrollo se ha prolongado y se prolonga a lo largo de los años). También es cierto que no sé cuan considerable puede llegar a ser la información necesaria para un bot, pero en cualquier caso pienso que es mejor asegurarse el tiro y tener dominio sobre alguna herramienta potente.

Bueno, bueno, sin más... seguro que alguién mucho más experto que yo puede ayudarte más, sólo digo generalidades que posiblemente sepas ya al haber buscado por ahí.

Bueno, jefe, perdón por irme por las ramas. Es que me he pasado unos cuantos días casi sin hablar con nadie y siento el poderoso deseo de escribir a saco...

De nuevo, suerte con el proyecto!
#213
¡Hola!

Este es el primer tema que abro, y querría hacerlo proponiendo algunos juegos o problemas en la misma línea de los que he visto por aquí ^^



¿Qué es mejor para el consumidor que va a comprar determinado producto en cierto establecimiento: que lo tengan con un 23.53% de descuento respecto a la competencia o que la competencia lo tenga un 30.77% más caro que allí?



Si tenemos una lotería de 1435 números, ¿qué probabilidad hay de que, participando 1435 veces (en cada ocasión sólo compramos un boleto), nos toque el premio gordo al menos una vez (es decir, 1 o más veces)?



El problema 2 en versión hardcore... ¿qué probabilidad hay de que nos toque exactamente k veces? Habría que dejarlo en función de k :-)

Para este habría que tener alguna noción de probabilidad (o reinventar la rueda). El anterior usa probabilidad de andar por casa (con lo cual no quiero decir que sean tontos si no lo sacan >.<)



Margarito Mondaníspolas tiene los mismos padres que yo, pero él dice que no es mi hermano. ¿Qué es Margarito Mondaníspolas? EDITADO A PARTIR DE LA RESPUESTA DE crominum. Aclaración: yo no soy Margarito.



Bien sabido es que muchas ciudades y estados de los EEUU tienen nombres oficiales en español, como San Antonio, San Francisco, Florida. ¿Sabrían decir si la capital de los EEUU es (oficialmente) Nueva York o New York?



Un hombre trajeado va corriendo por un pasillo muy largo con un maletín lleno de papeles. Llegado a cierto punto, se apagan todas las luces que iluminan el susodicho pasillo para encenderse tras unas pocas fracciones de segundo. El hombre se para en seco, suelta el maletín y se lleva las manos a la cabeza exclamando "¡Ya es demasiado tarde!" ¿Qué es lo que se proponía ese hombre y qué salió mal?





Bueno, conocen la mecánica mejor que yo... respuestas por privado y ya iré colgando los nombres de los que vayan acertando cada pregunta (no hace falta que las respondan todas). Si hay éxito, cuando haya un número razonable de intentos publicaré la respuesta (de los 3 primeros, haré una justificación matemática más o menos rigurosa). Los 3 primeros me los he inventado yo y no sirve de nada buscar en Google (bueno, a lo mejor los hay parecidos, pero serán mera coincidencia). Los demás seguramente sí están, pero no tiene gracia buscarlos, ¿no  ;)? (Además, probablemente ya hayan oído alguno)

¡Bueno, saludos!




Personas que han resuelto los problemas (por orden de lelgada):

1

chrominum

2



3

chrominum

4



5

chrominum

6

platonak
#214
Dudas Generales / Re: Calculo Porcentaje
12 Enero 2012, 20:01 PM
Cita de: $Edu$ en 11 Enero 2012, 22:35 PM
Si buscas gente inferior a 80 de IQ, estas en el lugar equivocado, aca somos de 210 para arriba jajaja

¿Como éste de aquí, no?  ;D ;D ;D

[youtube=425,350]http://www.youtube.com/watch?v=bZad4CMrKak[/youtube]

Por cierto, si no quieres ser tan formal y plantear la regla de 3, y ya que dices que no tienes buena memoria. Imaginate el % como un /100. El z% de x será simplemente z/100 * x. O sea, para saber el 75%, el 15% o el 23947% de un valor, múltiplica ese valor por 0.75, por 0.15 o por 239.47 respectivamente
#215
¿Qué es lo que pretendes? ¿Hacer tus propias tarjetas para entrar en el metro sin pagar? ¿Colarte en el edificio del FBI?  ;D
#216
Oh, no!

No me he expresado con claridad en lo que se refiere a hacer algo básico >.< . No me refería a hacer otra cosa más básica que un bot conversacional. Hablaba de hacer un bot conversacional que fuera sencillito (e ir complicándolo a medida que fueras cogiendo soltura).

Bueno, suerte con el prooyecto!
#217
Mmmm... ¿Y si lo haces en Word u Open Office, lo exportas a PDF y lo subes? Sugiero, vamos.

Además, sube bastante la moral tener una carpetita donde guardes tus manuales, tus guiones, o en general, cualquier cosa que tenga tu nombre y tus apellidos (o tu apódo) en la cabecera  ;D. Además, organizado es a más no poder.

¡Saludetes!
#218
¡Hola, $Edu$!

Una inquietud comprensible, el mundo de la inteligencia artificial es fascinante  :-). Pero... ¿no sería mejor que comenzaras primero con uno no muy ambicioso para pillar la mecánica e ir progresando, poco a poco?

Citar(...) me interesaria crear uno que sea muy complejo (...)

En cualquier caso, te paso un link que tal vez te sirva: http://upcommons.upc.edu/pfc/bitstream/2099.1/13801/1/76688.pdf

Es el PFC (Proyecto de Final de Carrera) de un alumno de la Universitat Politècnica de Catalunya (el proyecto está en castellano, don't worry). El título es Andrea: Un robot conversacional emotivo. Lo cierto es que no he podido sino echarle un vistazo por encima, no he hecho una lectura detallada para ver si cumple con todas tus espectativas (si no me equivoco, creo que la capacidad más importante que buscas, la de aprender, la tiene).

Aquí tienes una lista de muchos PFC de la facultad de Informática de la UPC: http://upcommons.upc.edu/pfc/handle/2099.1/1450 (puedes mirarlos sin sentimiento de culpabilidad: son perfectamente públicos, pero eso sí, si utilizas alguna de sus ideas, cita fuentes ;D), a lo mejor hay algún proyecto de IA más (mejor dicho: seguro que hay más proyectos de IA). Eso sí, no todos están en castellano: los hay también en catalán y en inglés. También puedes buscar entre los PFC de otras universidades, siempre que los hagan públicos como en esta (por lo menos, en la facultad de Informática). Los PFC son muy interesantes: no suelen salir al hacer búsquedas en Google, y están llenos de ideas muy chulas y originales de las que puedes aprender mucho más que en el primer resultado que sale en el buscador.

¡Saludos, jefe!
#219
¡Hola!

El problema que cita soyloqbuskas, que en realidad no es exactamente como lo describe, es un poco más grave, pero aún así no es tan enrevesado a la hora de solucionarlo. Digo que no es exactamente como lo describe porque, por ejemplo, al hacer el cambio de 27 a hexadecimal (sí, sé que no es capicúa en hexadecimal), mediante el bucle que usas no obtendrías N = 111 (es decir, 1 11 junto, que correspondería a 1B), sino que te daría 21 (0+ 11 + 10*1). Doy unas ideas para solucionarlo (no pongo código porque ahora mismo no tengo tiempo, mañana lo detallo un poco más, si puedo):

Lo que puedes hacer es, al realizar la conversión de un número decimal a otra base, guardar cada dígito en una nueva posición de un vector (previo "include <vector>") o array, en lugar de guardarlo como int. Así, en el ejemplo de 700858 (AB1BA), al hacer el cambio a base 16 tendrías un vector así: [10,11,1,11,10] y aquí es donde comparas la primera posición con la última, la segunda con la penúltima, y así sucesivamente (la forma de hacerlo puede ser distinta en función de si usas vector o array... mi consejo: usa vector, te facilita bastante la vida). Evidentemente, para esta solución tienes que cambiar la rutina que realiza el cambio de base y también la rutina que comprueba si un número es capicúa. Bueno, no usas rutinas aparte del main... es una de las cosas que quería comentarte (lo haré más adelante)... Otra solución, más conservadora con lo que tienes, es hacer lo siguiente: si la base es superior a 10, tu variable P (o la variale coef del programa soyloqbuskas) la multiplicas por 100 en vez de por 10, y la comprobación de si es capicúa o no la haces comparando dígitos dos a dos (el primer par con el último par, el segundo par con el penúltimo par y así), y si la base es menor o igual a 10, lo haces tal y como lo haces ahora (digo más conservadora porque seguirías usando un int).

Me suscribo a lo que dice soyloqbuskas. Usa nombre de variables significativos. Lo de la falta de comentarios no lo encuentro tan grave, porque por lo que veo, el problema es uno de estos típicos de los jueces automáticos, a los que les mandas el código, te lo compila, le aplican juegos de prueba y te dicen si el programa cumple con las espectativas o no (vamos, como el de la Universidad de Valladolid, http://uva.onlinejudge.org/, o el de la Universitat Politècnica de Catalunya, https://www.jutge.org/ - te los pongo por si quieres echarles un vistazo también, van muy bien para prácticar y ganar flexibilidad a la hora de programar). O sea, que en realidad no se los mira nadie, ¿no? Y lo que sí ha hecho soyloqbuskas en su código pero no te ha sugerido explicitamente es... usar funciones. ¡Usa funciones! No pongas un pastuño de código en el main. Si usas funciones, puedes probar partes de tu programa individualmente, ir poco a poco. Ya sabes... divide y vencerás.

Bueno, ¡saludos!
Espero haberte ayudado también.

EI: juntando mensajes.

Bueno, tal como prometí que intentaría, vengo con algo de código para intentar ayudar:

Código (cpp) [Seleccionar]
#include <iostream>
#define NUMMAXOFDIGITS 17
using namespace std;

bool isPalindrome(int* vector) {

int size = vector[0];
++vector;

bool isPal = true;
int n = 0;
while (n < size/2 and isPal) {
isPal = vector[n] == vector[size-n-1];
++n;
}

return isPal;

}

void dec2basB(int dec, int B, int* result) {

int n = 1;
while (dec > 0) {
result[n] = dec%B;
dec/=B;
++n;
}

result[0] = n - 1;

}


int main() {

/*
...
*/

}


Como ves, sólo he programado las funciones críticas que se utilizan en el programa. No he hecho el main, lo dejo para ti (es sencillo).

Vamos por partes:


  • Utilizo arrays. Eso me lleva a utilizar un "formato" o estructura especial para conocer el tamaño "útil" del array (es decir, el número de posiciones con información realmente útil). Lo que he hecho es emplear la primera posición (la 0) para indicar el número de elementos útiles que le siguen.
  • Las posiciones de menos peso de los arrays (excepto la 0, que es la que indica el tamaño) la ocupan los dígitos de menos peso de un número. Así, el número 3432, de la forma que lo he montado, se representaría mediante un array así: [4,2,3,4,3]
  • Teniendo en cuenta los dos puntos anteriores, no creo que tengas ningún problema en entender las funciones isPalindrome y dec2Bas2. Lo que sí, ten en cuenta, que el array donde guarda dec2Bas el resultado se lo tienes que pasar como parámetro y debe tener como mínimo NUMMAXOFDIGITS (en este caso es 17 porque el número máximo de dígitos sería el del mayor número que puede haber a la entrada en la base menor, o sea, 50000 y 2 respectivamente). Si no es así, ya dirás algo

Por supuesto, ¡esto es sólo una manera de hacerlo! Otra forma sería usar vector, en cuyo caso no necesitarías almacenar el número de elementos al principio de la secuencia ya que el tipo vector ya realiza un seguimiento de los números presentes en la secuencia. O listas. O usar un int de la forma que sugerí en el post anterior (aunque esto último es un poco más farragoso, es factible también).

Bueno, eso es todo. Si tienes dudas, postea.
¡Saludos!

P.S. Ya he probado la función (las 2). El resultado es correcto. De hecho, sirve también para entradas más grandes de 50000.
#220
Desafíos - Wargames / Re: Problemas lógicos
11 Enero 2012, 22:43 PM
Solución enviada :-)