Entradas con la etiqueta ‘programacion’

Cuadro Magico en Ruby

Lunes, 8 de Marzo de 2010

cuadro magico puraslineas
Hola un saludo a todos los chavos y chavas que se dedican a la programación por hobbie o por pasar una materia más como sea y por algun azar del destino caíste en la WeBlog de quien sabe que cosa, posiblemente buscando como hacer el cubo, cuadrado, cuadro o rectangulo (de que lo hay los hay) magico en lenguaje de programación Ruby, si es aquel donde al sumar los lados la suma final tanto horizontal, vertical y diagonal es la misma, el más conocido es el cuadro de 3*3 pero hoy haremos la solución para todos los cuadros impares o al menos la gran mayoria.

 

#creamos un programa que contendrá nuestro metodos
#el cual se llamara magic_square
class OddMagicSquare
  attr_reader :square

  def initialize(n)
    @square = Array.new(n) #creamos nuestro arreglo
    @square.each_index {|i| @square[i] = Array.new(n)}
    middle = n/2 #obtenemos la mitad
    @square[0][middle] = 1
    @pos = [0,middle]
    @len = n
  end

  def printing_magic_square #es toda la parte visual para que se vea bonito
    v_border = '+' + '-' * (6 * @len - 1) + '+'
    @square.each do |row|
      puts v_border
      row.each do |r|
        if r then
          print format('|' + "%4d" + ' ', r)
        else
          print '| nil '
        end
      end
      print "|\n"
    end
    puts v_border
  end

  def iterate_square
    value = 2
    last_value = @len ** 2
    while true do
      move
      fill value
      break if value == last_value
      value = value + 1
    end
  end

  private

  def fill(value) #introducimos el valor correspondiente
    @square[@pos[0]][@pos[1]] = value
  end

  def move
    move_down if not move_diagonal_up
  end

  def move_diagonal_up
    # obtener posicion siguiente
    future_pos = Array.new(2)
    @pos[0] == 0 ? future_pos[0] = @len - 1 : future_pos[0] = @pos[0] - 1
    @pos[1] == @len - 1 ? future_pos[1] = 0 : future_pos[1] = @pos[1] + 1
    #checar si esta vacio o no
    if @square[future_pos[0]][future_pos[1]] then
      return false
    else
      @pos = future_pos
    end
    return true
  end

  def move_down
    @pos[0] == @len - 1 ? @pos[0] = 0 : @pos[0] = @pos[0] + 1
  end

end
#este es otro archivo
require 'magic_square' #llamamos al programa anterior

#n = ARGV[0].to_i

puts "Da el número de lados del cuadrado: "
STDOUT.flush
n1=gets.chomp
n=n1.to_i

raise 'el numero debe de ser impar y mayor a 2' if n % 2 == 0 or n < 3

odd_magic_square = OddMagicSquare.new(n)
odd_magic_square.iterate_square
odd_magic_square.printing_magic_square

Bueno espero el código te haya sido de gran ayuda saludos cordiales deja tus comentarios por favor que para mi son muy importante, hasta pronto y salud!!!!!!!.

English:

magic square in programation language Ruby, only odd magic square.

Fuente de inspiración: Ruby Quiz

Torres de Hanoi en Ruby (recursividad)

Martes, 2 de Marzo de 2010

Hola amig@s programadores, el día de hoy les dejo un buen programa hecho en Ruby, en donde vemos recursividad, las famosisimas torres de Hanoi, y elevar a alguna potencia en el lenguaje de programación Ruby, un excelente lenguaje muy actual y muy sencillo bueno en parte jajaja, sale amig@s espero les agrade y les sea de gran ayuda a continuacion el codigo fuente:

 

class Hanoi#definimos nuestra clase
def tower(n,desde,hacia,temp)#entra numero de discos
   if n==1 #si se ha llegado al ultimo disco
      puts "mover disco del poste"
      puts (desde)
      puts "hacia el poste"
      puts (hacia)
      puts "\n"
   else #en caso contrario
     tower(n-1,desde,temp,hacia)#llamar al metodo
     tower(1,desde,hacia,temp)#volver a llamar al metodo
     tower(n-1,temp,hacia,desde)#y volverlo a llamar pro tercera ocasión
   end
 end#fin del metodo tower

def nmovi(x)#para calcular numero de movimientos
   move=(2**x)-1#formula de las torres de hanoi
   puts "El numero de movimientos a efectuar es de:"
   puts (move)
   puts("\n")
end

end

#interfaz
torre=Hanoi.new#llamamos y creamos a partir de nuestra clase
   puts "Da el numero de discos a mover: "
   STDOUT.flush
   disco=gets.chomp
   discos=disco.to_i#convertimos el numero de discos a entero
   torre.nmovi(discos)#llamamos al numero de movimientos
   torre.tower(discos,1,3,2)
#llamamos al metodo de las torres de hanoi y entran inicialmente
#numero de dicos,desde el poste inicial, hasta el poste final
#y el poste temporal

Recuerda dejar tu comentario saludos cordiales y hasta pronto.
English:

Tower of Hanoi in programming language Ruby, use recursion, source!!!.

Hacemos tu programa

Jueves, 22 de Octubre de 2009

Hola que tal amig@s lectores de PuRaSLiNeAs punto com la WeBlog de quien sabe que cosa, en esta ocasión quiero hablarles bueno escribirles sobre un proyecto que se comenzó hace algunos días en conjunto con el buen Hermes (Xtreme key), iniciamos un proyecto con dos metas principales, una el poder aportar y ayudar a la comunidad estudiantil principalmente nivel preparatoria, universidad y claro a toda aquella persona que desee aprender un poco más de programación, nosotros el dinero recaudado lo emplearemos para dos buenas causas una es para seguir manteniendo nuestros estudios y poder pagar nuestros pasajes y la otra es para emprender un nuevo macro proyecto, claro nosotros estamos a sus órdenes para ayudarles, ya sea dándoles tutorías, asesorías o clases  o lo mejor haciéndoles sus programas, nosotros manejamos los programas de:

C++, Java, HTML, CSS, visual basic, y por supuesto pseudocódigo.

 Nosotros te podemos ayudar, pues tenemos las ganas y queremos aprender más y que mejor si podemos ayudarte de alguna manera.

Contáctanos para algún servicio a los correos y celulares:

Hermes: hcm.@hotmail.com

Luigi: brosnake@hotmail.com

Contactanos nosotros somos tu solución.

PD: Cualquier consulta sobre programación causara honorarios.

PD2: Dejen sus comentarios al respecto y si deseas algún programa urgente nosotros lo hacemos.