Archivo de la categoría ‘Ruby’

Examen Ruby

Martes, 23 de Marzo de 2010

Hola muy buen día amigos y amigas de la programación para aquellos que creyeron que los dejaría solos, por el hecho de que ya dejo de asistir gran mayoria a clases de Ruby,estan equivocados ya que como la mayoría sabe siempre trataré de ayudar (y meterme en problemas), es un gusto para mi poder servirles y si desean algún programa adelante solicitenlo y trataré de hacerlo, en caso de no poder al menos se hizo lo que se podia jajaja.

Bueno y sin más preambulos vamonos con tres ejercicios para examen de ruby un tanto complejos pero a la vez faciles no se creo que hoy me falto alcohol para programar.

Exercise one:

Escriba un programa en ruby que reciba como entrada una serie de 10 números enteros, y que determine e imprima el mayor de los números. Su programa debe de utilizar cuando menos las siguientes tres variables.

a) contador: un contador para contar hasta 10 (es decir, para llevar el registro de cuántos números se han introducido y para determinar cuando se hayan procesado los 10 números).

b) numero: el número más reciente introducido por el usuario.

c) mayor: el número más grande encontrado hasta ahora.

 

contador=1
mayor=0
while contador< =10 #mientras no sean 10 numeros
   puts "Introduce un número: "
   STDOUT.flush
   num=gets.chomp
   numero=num.to_i #pedimos dato y convertimos en entero
   if numero>mayor #comparamos
     mayor=numero #si el numero nuevo es mayor lo asignamos
   else
     mayor=mayor #en caso contrario mayor sigue con su valor
   end
   contador+=1 #contamos cuentos numeros han introducido
 end
 puts 'el numero mayor es: '
 puts (mayor) #imprimimos resultado

Exercise two:

Escriba una aplicación que lea tres valores distintos de cero introducidos por el usuario y que determine e imprima si prodrían representar los lados de un triángulo rectángulo.

 

num=0
   puts "Introduce un número mayor a cero: "
   STDOUT.flush
   num=gets.chomp
   num=num.to_i
   if num==0
     puts "Introduce un número mayor a cero: "
     STDOUT.flush
     num=gets.chomp
     num=num.to_i
   end

   puts "Introduce un número mayor a cero: "
   STDOUT.flush
   num2=gets.chomp
   num2=num2.to_i
   if num2==0
     puts "Introduce un número mayor a cero: "
     STDOUT.flush
     num2=gets.chomp
     num2=num2.to_i
   end

   puts "Introduce un número mayor a cero: "
   STDOUT.flush
   num3=gets.chomp
   num3=num3.to_i
   if num3==0
     puts "Introduce un número mayor a cero: "
     STDOUT.flush
     num3=gets.chomp
     num3=num3.to_i
   end
if (num==num2||num==num3||num2==num3)
#comparamos datos y si alguno lo cumple es rectangulo
   puts "es rectangulo"
else
   puts "no es rectangulo"
  end

Exercise three:

Escriba una aplicación que imprima la siguiente figura de rombo. Puede utilizar instrucciones de salida que impriman un solo asterisco (*), un solo espacio o un solo carácter de nueva línea. Maximice el uso de la repetición (con instrucciones for o while anidadas), y minimice el número de instrucciones de salida.
(Este ejercicio de Ruby fue el más perro pero lo consegui hacer :) )

        *

      ***

    *****

  *******

*********

  *******

    *****

      ***

        *

puts "Introduce el tamaño del rombo: "
STDOUT.flush
num=gets.chomp
num=num.to_i
#pedimos el nivel del rombo a dibujar
a=0
c=num-1
d=1
while a0
    b1=0
 while b1

Sale amigos espero les sea de gran ayuda y por favor recuerden dejar sus comentarios para que me siga motivando y programando gratis para ustedes, saludos cordiales y yo digo que ya nos vayamos a danzar.

PD: Son las 01:15 horas y yo escribiendo estas lineas.


Clic para descargar los 3 ejercicios

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!!!.

Programa Ruby Estudiante

Martes, 23 de Febrero de 2010

Hola programadores y programadoras vaya las clases de Ruby estan pesadas y sin un buen libro a la mano esta mas cabrón pero pro suerte cuentas con la famosisima web de tutoriales llamada “La WeBlog de quien sabe que cosa” y por fin de muchas peticiones viene en su ayuda a subirles los codigos y medio explicarselos pero es que la neta da un chingo de hueva y no tengo alcohol  a la mano para comentarles los tutoriales pero pues ni pex solo ls subo el codigo hay cuando tenga tiemo lo documento bien.

El siguiente programa es en Ruby y son 6 opciones que hay que mostrarlas en un menú para hacerle un poco más facil la vida al usuario.
incluye las opciones de:
“1.- Introducir Alumno al Frente”
“2.- Introducir Alumno al final”
“3.- Borrar primer alumno”
“4.- Borar ultimo alumno”
“5.- Buscar alumno”
“6.- Imprimir lista alumnos”

El metodo más cabron fue el de buscar pero gracias al semeste pasado haber tomado catedra con el Dr. Alberto Chavez aprendi muy bien con él programación.

Este programa su interfaz es muy simple y muy saturada pues la vemos dentro del codigo fuente y presionando F8 pero bueno una interfaz a bajo nivel lo importante es que funcione si encuentras algun bug por favor hazmelo saber para corregirlo.

Saludos cordiales y deja tu comentario que para m ies muy importante.

class Persona
def initialize(nombre,edad,carrera,calificacion)
  @nombre=nombre
  @edad=edad
  @carrera=carrera
  @calif=calificacion
end

attr_writer:edad,:nombre,:carrera,:calif
attr_reader:nombre,:edad,:carrera,:calif
def to_s
  "Persona: #{@nombre} #{@edad} #{@carrera} #{@calif}"
end
end

op=1 #para repetir el programa mientras no pidan salir
Personas=Array.new(0)#definimos nuestro arreglo

while op==1 #mientras sea igual a 1 haz
puts "menú\n"
puts "1.- Introducir Alumno al Frente"
puts "2.- Introducir Alumno al final"
puts "3.- Borrar primer alumno"
puts "4.- Borar ultimo alumno"
puts "5.- Buscar alumno"
puts "6.- Imprimir lista alumnos"
puts "Teclea el numero de la opcion que desees"
STDOUT.flush #limpiamos basura de alguna salida
opci=gets.chomp #optenemos la cadena y eliminamos el salto de linea
opci=opci.to_i #lo convertimos a entero para evaluarlo

if opci==1 #opcion uno
   puts "Da el nombre del alumno: "
   STDOUT.flush
   name=gets.chomp
   puts "Da la edad del alumno: "
   STDOUT.flush
   age=gets.chomp
   puts "Da la carrera que estudia el alumno: "
   STDOUT.flush
   lic=gets.chomp
   puts "Da la calificación alumno: "
   STDOUT.flush
   calif=gets.chomp
    #Iniciamos programa y pedimos dato por dato
   Personas.unshift(Persona.new(name, age,lic,calif))#lo alamcenamos en nuestro arreglo
   puts "Deseas repetir el programa" #opcion de repetir programa
   puts "añadir, eliminar buscar o imprimir algo más???"
   puts "1: SI, 2:NO"
   STDOUT.flush
   opx=gets.chomp
   op=opx.to_i
end

if opci==2 #opcion dos
   puts "Da el nombre del alumno: "
   STDOUT.flush
   name=gets.chomp
   puts "Da la edad del alumno: "
   STDOUT.flush
   age=gets.chomp
   puts "Da la carrera que estudia el alumno: "
   STDOUT.flush
   lic=gets.chomp
   puts "Da la calificación alumno: "
   STDOUT.flush
   calif=gets.chomp
   Personas.push(Persona.new(name, age,lic,calif))
   puts "Deseas repetir el programa"
   puts "añadir, eliminar buscar o imprimir algo más???"
   puts "1: SI, 2:NO"
   STDOUT.flush
   opx=gets.chomp
   op=opx.to_i
 end

if opci==3 #opcion tres
   Personas.shift #eliminamos primer registro
   puts "Deseas repetir el programa"
   puts "añadir, eliminar buscar o imprimir algo más???"
   puts "1: SI, 2:NO"
   STDOUT.flush
   opx=gets.chomp
   op=opx.to_i
 end

if opci==4 #opcion cuatro
   Personas.pop #eliminamos ultimos registro
   puts "Deseas repetir el programa"
   puts "añadir, eliminar buscar o imprimir algo más???"
   puts "1: SI, 2:NO"
   STDOUT.flush
   opx=gets.chomp
   op=opx.to_i
 end

if opci==5 #opcion cinco
   i=0
   z=0
   puts "Da el nombre del alumno: " #pedimos nombre alumno y alamcenamos
   STDOUT.flush
   name=gets.chomp #es como el scanf de C++
   while i