• Lunes 29 de Abril de 2024, 02:10

Mostrar Mensajes

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


Mensajes - Homer

Páginas: [1]
1
Pascal / Re: procedure recursivo para obtener division y resto entero
« en: Jueves 25 de Noviembre de 2010, 01:24 »
Buenas,
he visto un par de cosas que a lo mejor te pueden ayudar...

Lo primero es prácticamente todo estético aunque tambien tiene cierta funcionalidad:
Citar
Tu código

    type
        tnum=smallint;

    var

       a:tnum;
       b:tnum;
       s:tnum;
Yo lo simplificaría en un:
Código: Pascal
  1. Var
  2.      Dividendo, Divisor, Resto: integer;
  3.  
Si has estado haciendo pruebas, está muy bien lo de declarar el tipo "tnum" porque con cambiar ahí, es suficiente, pero para un programa pequeño, yo lo haría más fácil a la vista. De todas formas, para mi lo más importante es darle nombres "útiles" a las variables porque si en este programa, que ya es pequeño, cuesta saber qué variable corresponde a cada cosa, en uno grande... imagínate... te dejas los ojos. (He usado integer por usar uno, puedes elegir el que mejor te vaya). Fíjate que al final del programa en el procedimiento "mostrar" igualas estás variables a otras simplemente para ponerles otro nombre... si esto lo haces al principio, ya no te perderás a lo largo del programa y tampoco tendrás que hacer eso al final.

Citar
Tu código
procedure ingresar(var a:tnum;var b:tnum;var s:tnum);


begin
     writeln('ingrese numero');
     read(a);
     writeln('ingrese numero');
     read(b);
     s:=0
end;

Yo pondría:
Código: Pascal
  1. Procedure Ingresar (var a, b, c: tnum); {en el siguiente procedimiento lo haces así}
  2.       Begin
  3.             Write ("Ingrese el Dividendo y pulse enter: "); {Yo no pondría WriteLn, así el número que introduzca lo hace justo después de los ":"}
  4.             ReadLn (a); {Aquí si pondría el ReadLn, ya que así salta a la siguiente línea. En tu código, al no ponerlo, te pondrá la siguiente petición justo después de este número.}
  5.             {Lo mismo para el divisor}
  6.  

Ahora a al tema:
Comento sobre tu código.
Citar
Código: Pascal
  1. procedure div_resto(a,b,s:tnum); {Si dentro de los paréntesis no pones "var" cuando hagas la llamada recursiva, estarás pasando los mismos valores (esto no lo sé con seguridad, pero si lo pones, te curas en salud, ya que si pasas los mismo valores tendrías un bucle infinito.}
  2. begin
  3.      if a>=b
  4.         then
  5.             begin
  6.                  a:=a-b;
  7.                  inc(s) {Esto no sé que es, supongo que quieres incrementar "s" --> s:= s + 1;}
  8.             end
  9.      else  {Si a < b no tengo muy claro este punto, ya que "a" que posteriormente dices que es el resto no se sabe si será cero o no, ya que es sería una división con decimales pero cuyo resto no conocemos, con lo cual... habría que mirar bien qué pasaría en este caso}
  10.         begin
  11.              a:=0;
  12.              s:=0
  13.         end;
  14.     div_resto(a-b,b,s+1) {Si no me equivoco (no tengo el compilador instalado) sería algo del estilo --> Procedure div_resto (...);}{Por otro lado, las variables, las estás modificando de nuevo antes de volver a usarlas. Ejemplo a= 100, b = 5. Entra el procedimiento a - b = 95 = a y s = 0 + 1. Llegas al final y le estás enviando los datos de nuevo pero envías Procedure div_resto (95-5, 5, 1+1). Cuando vuelvas a usar los datos, te habrás saltado un paso}{Sería Procedure div_resto (a, b, s);}
  15. end;
  16.  

Y para finalizar, tu procedimiento "mostrar", yo lo eliminaría por completo ya que con substituirlo por un par de WriteLn del estilo:
Código: Pascal
  1. WriteLn ("La solución es: ", s);
  2. WriteLn ("El resto es: ", a);
  3. {Fíjate bien sobre todo en cómo muestras las cosas por pantalla, ya que como tu lo pones sería algo del estilo "solucion20resto0". Bajo mi punto de vista es importante que tanto la petición como la devolución de datos sean lo más amenas posible, ya que es lo único que el usuario ve. De igual forma cuanto más organices el código, aunque el usuario no lo vea, te será mucho más simple a ti, mejorarlo, encontrar fallos...}
  4.  

No estoy seguro si es lo que buscabas y tampoco si funciona pero espero que te sirva para algo.

Un saludo.

2
C# / Re: Click automático
« en: Sábado 20 de Noviembre de 2010, 12:52 »
Desde ya, muchísimas gracias.

Todavía no lo he probado, pero veo que es mucho más complejo de lo que me esperaba.

La verdad es que tambien había intentado hacer algo con mouse_event, pero ahora mismo acabo de comprobar que estaba a años luz de algo decente.

Lo más probable es que lo pruebe el lunes a la mañana, ya que así lo podré mirar con más detenimiento, y ya te diré como va, no obstante, como ya te he dicho, muchas gracias por tu esfuerzo.

Un saludo.

3
Pascal / Re: contar pepes (o cualquier otra palabra)
« en: Sábado 20 de Noviembre de 2010, 12:39 »
Buenas,

tengo mi Pascal algo oxidado, pero intentaré aportar algo.

Te explicaré el fallo que veo con un ejemplo:
Frase de ejemplo: "Mi amigo pepe es genial."

Con el bucle for empiezas en la letra M y le estás diciendo que:

frase (=frase[1]='M') = 'pepe' aumente cont en 1... es decir, estás comparando un único caractater 'M', 'i', ' ', 'a', 'm'... con una cadena entera 'pepe', con lo cual, te dará error o no te dará el resultado ideal.

Una posible solución algo "chabacana", es decir, que se podría refinar bastante más, podría ser:

Código: Pascal
  1. for i:= 1 to length (frase) do
  2.       if (frase[i]= 'p') and (frase[i+1]= 'e') and (frase[i+2]= 'p') and (frase[i+3]= 'e') then
  3.              cont:= cont + 1
  4.  

De esta forma, lo compruebas carácter a carácter, pero las cuatro letras a la vez.

Como ya te he dicho, es una posible solución ya que si por ejemplo te mandaran buscar siete u ocho palabras en un texto, lo tendrías que refinar bastante más (o dejarte los dedos y los ojos poniendo 'and').

Ah, y contador lo debes de inicializar a 0 (cont:= 0) ya que en tu código, si te ponen la frase "Hola", te diría que hay un "pepe".

Espero haberte ayudado.

Un saludo.

4
C# / Click automático
« en: Viernes 19 de Noviembre de 2010, 19:07 »
Buenas,
soy un principiante de C#. He estado revisando varios foros en busca de ayuda pero no he encontrado nada relacionado con lo que ahora mismo me ocupa y aunque en este tampoco lo he encontrado, me ha parecido el más completo y... aquí estoy.

Ahora mismo intento crear... "algo"... una especie de utilidad, la cual, entre otras cosas, debe de poder hacer click de forma automática en un punto determinado de la pantalla, es decir, donde se le pase por parámetros, pero no en ningún botón ni text box ni nada similiar, simplemente en un punto de la pantalla, dando igual lo que se encuentre ahí.

El caso, es que como ya he dicho, estoy un pocomuchobastante pez y si bien he conseguido, no sin sudor, que el cursor se sitúe en dicho punto de la pantalla, no soy capaz de coseguir el click del ratón.

He estado mirando la ayuda de Microsoft... y algunas que otras soluciones a temas similares en foros pero no he conseguido hacer que lo mío funcione... me pierdo bastante con los mouseeventargs, mouseeventhandler, onmouseclic, onclick... la verdad es que he probado bastante variantes.

Supongo que al final será una chorrada de tres líneas como mucho, si es que no hay ya un evento que lo haga solo, que tambien podría ser y no haberlo visto, pero mis conocimientos son bastante limitados (aunque los intento ampliar), de modo que cualquier tipo de ayuda o indicación del camino a seguir sería bien recibida.

Un saludo y gracias de antemano.

Páginas: [1]