🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes
Article #69

Solucion en lenguaje SIMPLON. Era->[Re: Muy importante]

#69
From: Ignacio Arenaza
Date: Wed, 28 Jul 1999 00:00
155 lines
5768 bytes
>>>>> "Jose" == Jose Luis Trivino <trivino@lcc.uma.es> writes:

    Jose> 	Supongo que si habeis leido este mensaje hasta aqui ya
    Jose> tendreis algo de curiosidad por saber quien solucion� mejor
    Jose> este problema, pero eso lo guardo para cuando alguien
    Jose> encuentre la soluci�n. Asi podr� crear un poco m�s de
    Jose> polemica. Animo y a demostrar quien es el mejor programador.
	
----[Aviso, mensaje largo y denso, por si quieres deja de leer]---

Bueno, hemos recogido el guante tanto el se�or Javier Cantero como un
servidor, y ayer estuvimos los dos durante una hora mas o menos
"estrujandonos" el coco y llegamos a la siguiente solucion.

Hay que tener en cuenta que usamos una propiedad "no documentada" del
lenguaje propuesto. La construccion 

	REPETIR n VECES
		sentencias
	FIN REPETIR

no indica que ocurre en el caso de que "n" sea negativo. Al igual que
#55, hemos presupuesto que en este caso el bucle se repite 0 (cero)
veces.

El proceso que nos llevo a la solucion fue el siguiente:

1.- Realizar el pseudo-codigo del algoritmo (teniendo en cuenta en la
    medida de lo posible las limitaciones del lenguaje)

	leer dividendo
	leer divisor
	cociente <- 0
	repetir dividendo veces
		si dividendo > divisor entonces
			restar divisor a dividendo
			incrementar cociente
	fin repetir
	resto <- dividendo
	imprimir cociente
	imprimir resto

2.- Buscar las construcciones en el lenguaje propuesto que nos
    permitan realizar las operaciones no triviales:

	a) cociente <- 0

	   Esta es sencilla. Basta con asignar un valor cualquiera a
	   cociente y despues repetir la operacion de asignarle a
	   cociente su valor menos uno, un numero "cociente" de veces.

	   Como vamos a necesitar el valor 0 en la solucion del caso
	   b), nos vamos a crear una variable llamada "cero" que
	   contenga precisamente su valor.

		cero := dividendo		// un valor cualquiera
		repetir cero veces
			cero := cero - 1
		fin repetir
		cociente := cero

	b) si a > b entonces

	   Este caso es un poco mas complicado. La unica forma de
	   ejecutar algo de forma condicional en el lenguaje dado es
	   usar la construccion repetir n veces, haciendo que n sea o
	   bien 1 (TRUE) o bien 0 (FALSE). Por tanto, hay que generar
	   en una variable intermedia un valor 1 si la condicion es
	   cierta o 0 si es falsa y luego usar la construccion repetir
	   con el valor de esa variable.

	   Para obtener un valor 0 o 1 a partir de una condicion del
	   tipo a > b, podemos ver si (a-b) es mayor que 0 o no (que
	   es mas sencilla de realizar)

		// c := a - b
		c := a 
		repetir b veces
			c := c - 1
		fin repetir.
		// ver si c > 0

	   Por tanto, el nuevo problema se reduce a obtener un valor 1
	   si a > 0, o un valor 0 si a < 0.  Usando la premisa
	   mencionada al comienzo sobre los valores negativos en la
	   construccion repetir, obtener 1 si el valor es positivo o 0
	   si es negativo se reduce a:

		condicion := cero
		repetir a veces
			condicion := cero		// Esto es,
			condicion := condicion + 1	// condicion = 1
		fin repetir

	   Por tanto, uniendo todo el conjunto obtenemos:

		c : = a
		repetir b veces
			c := c -1
		fin repetir
		condicion := cero
		repetir c veces
			condicion := cero
			condicion := condicion + 1
		fin repetir
		repetir condicion veces
			sentencias condicionales ....
		fin repetir

	c) restar divisor a dividendo.

	   Este caso es sencillo. Basta con repetir "divisor" veces la
	   operacion de asignar a dividendo el valor dividendo - 1

		repetir divisor veces
			dividendo := dividendo - 1
		fin repetir

3.- Reunir todo el codigo en el programa final:

	leer dividendo
	leer divisor
	cero := dividendo
	repetir cero veces
		cero := cero - 1
	fin repetir
	cociente := cero
	repetir dividendo veces
		temp := dividendo
		repetir divisor veces
			temp := temp -1
		fin repetir
		condicion := cero
		repetir temp veces
			condicion := cero
			condicion := condicion + 1
		fin repetir
		repetir condicion veces
			repetir divisor veces
				dividendo := dividendo - 1
			fin repetir
			cociente := cociente + 1
		fin repetir
	fin repetir
	resto := dividendo
	imprimir cociente
	imprimir resto

Un poco largo, eh?

Saludos de I�aki y Javier.

-- 
  PGP Key available at http://personales.jet.es/inaki.arenaza/pgpkey.html
  Linux Registered User #44369
Technical Details
Message-ID: <87g12865yb.fsf_-_@eb2ebu.ampr.org>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <7midgc$13n@telerad.teleline.es> <7mj1oq$7jb@telerad.teleline.es> <378DCE0C.1433597D@interactivebureau.com> <Pine.LNX.4.10.9907160956530.3269-100000@golum.inforg.uniovi.es> <3792E452.5FC9ABE2@lcc.uma.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 14987f,db0404b60281900f,start
X-Google-Attributes: gid14987f,public
X-Google-Thread: 1116f3,7f2767b4c9fc7a53
X-Google-Attributes: gid1116f3,public
X-Google-Thread: f59de,7f2767b4c9fc7a53
X-Google-Attributes: gidf59de,public
X-Google-Thread: f877f,7f2767b4c9fc7a53
X-Google-Attributes: gidf877f,public
X-Google-Thread: f53ec,7f2767b4c9fc7a53
X-Google-Attributes: gidf53ec,public
X-Google-Thread: 10f58f,7f2767b4c9fc7a53
X-Google-Attributes: gid10f58f,public
X-Google-Thread: 105378,7f2767b4c9fc7a53
X-Google-Attributes: gid105378,public
From: Ignacio Arenaza <inaki.arenaza@jet.es>
Subject: Solucion en lenguaje SIMPLON. Era->[Re: Muy importante]
Date: 1999/07/28
Message-ID: <87g12865yb.fsf_-_@eb2ebu.ampr.org>
X-Deja-AN: 506272992
References: <7midgc$13n@telerad.teleline.es> <7mj1oq$7jb@telerad.teleline.es> <378DCE0C.1433597D@interactivebureau.com> <Pine.LNX.4.10.9907160956530.3269-100000@golum.inforg.uniovi.es> <3792E452.5FC9ABE2@lcc.uma.es>
To: Jose Luis Trivino <trivino@lcc.uma.es>
Organization: Servidor NNTP de eb2ebu.ampr.org
Newsgroups: es.comp.lenguajes,es.comp.lenguajes.c,es.comp.lenguajes.c++,es.comp.lenguajes.java,es.comp.lenguajes.misc,es.comp.lenguajes.tex,es.comp.lenguajes.visual-basicS