jueves, 26 de abril de 2012

Dividir sin / o % en Python, Pascal y C

En la clase de Programación estructurada y dinámica, cátedra del Profesor Matías E. García, estamos dando nuestros primeros pasos en el lenguaje de programación C. A continuación presento un ejercicio resuelto del trabajo práctico 2 que funciona para la consigna:

«Ejercicio 24: Escribe un programa que calcule la división entera entre dos números a y b enteros positivos dados por el usuario, sin usar el operador /.» (García, 2012)

Para resolver el ejercicio seguí los siguientes pasos:

  1. Pedirle al usuario que ingrese un número entero positivo mayor que el número uno.
  2. Generar dos contadores anidadosdivisor y dividendo que cuenten desde el número hasta el número que haya ingresado el usuario.
  3. Multiplicar divisores por dividendos y si el resultado es igual al número ingresado por el usuario, mostrarlo por pantalla.

Empezaré por Python que, con la guía de Javier Castrillo, fue el primer que aprendí de los tres lenguajes que utilizo para resolver el problema planteado. Luego presento la solución en Pascal, materia que vi el año pasado en la cátedra de la Profesora Patricia Güidi, y por último la resolución en C, que es el programa que actualmente estoy apropiándome.

division.py


# -*- coding: utf-8 -*-
print 'Ingrese un numero entero positivo y le diré todos sus divisores'
numero = input('Número: ')
divisores = ''

for divisor in range(1, numero + 1):
   for dividendo in range(1, numero + 1):
      if (dividendo * divisor) == numero:
         print dividendo,'x',divisor,'=',dividendo*divisor
         divisores += str(divisor) + ' '

print 'Los divisores de', numero,'son', divisores
 

division.pas


program divisores;
uses crt;
var
numero : integer;
divisor : integer;
dividendo : integer;

BEGIN
write('Ingresa un número entero mayor a 2 y te dire los divisores: ');
read(numero);

for divisor := 1 to numero do
   for dividendo := 1 to numero do
      if (dividendo * divisor = numero) then
         writeln(divisor,' es divisor de ',numero)
END.

division.c


# include < stdio.h >

void main(void)
{
   int numero, divisor, dividendo;
   printf("Ingresa un número entero positivo mayor a 1:");
   scanf("%d", &numero);
   for (divisor = 1 ; divisor <= numero; divisor++)
   {
      for (dividendo = 1; dividendo <= numero; dividendo++)
      {
         if (divisor * dividendo == numero)
         {
            printf("%d x %d = %d", divisor, dividendo, numero);
         }
      }
   }
}
 

1 comentario:

nnss dijo...

Perl One Liner:

perl -e 'my ($num,$divisor,$dividiendo) = (1,1,1);print "ingrese numero positivo\n";$num = ;for $divisor (1..$num){for $dividiendo (1..$num){if (($divisor * $dividiendo) == $num){print "I got $divisor * $dividiendo == $num\n";}}}'

Ruby One Liner:

ruby -e 'puts "Ingrese numero positivo";num=STDIN.gets;num = num.to_i;num.times{|dv| num.times{|ds| puts "#{ds} es divisor de #{num}" if((ds*dv) == num);}}'