Practica

Clasificado en Otras materias

Escrito el en español con un tamaño de 13,85 KB

1) Evalúe las siguientes expresiones en el entorno y anote los resultados, entendiendo en cada caso su funcionamiento.

a) 5+6 11 "devuelve el resultado de la suma de los objetos 5 y 6"

b) 20 factorial 2432902008176640000 "devuelve el resultado de factorial de 20"

c) 'Esto es una prueba' size 18 "la sentencia size cuenta la cantidad de caracteres que se encuentran
entre las comillas simples incluyendo los espacios en blanco."

d) #(1 3 5 7) at:2 3 "el comando at devuelve lo que se encuentra en la posición que le fue
enviada como parámetro"

e) 'Paradigmas' isArray false "Pregunta si el string que se le pasa es un arreglo"

f) 5*7 35 "Realiza el producto de ambos objetos"

g) 5//2 2 "Realiza la división entera y devuelve el cociente."

h) 4\\3 1 "Realiza la división y devuelve el resto"

i) 2 / 6 1/3 "división"

j) 1.5 +6.3e2 631.5 "Realiza la suma de un numero decimal y otro exponencial"

k) Array new () "Instancia un nuevo objeto de la clase Array"

l) Date today Aug 29, 2008 "Devuelve la fecha actual del sistema"

m) Time now 09:30:30 "devuelve la hora del sistema"
2) Evalúe los siguientes mensajes unarios.

a) #('arreglo' 'de' 'strings') size 3"size aplicado a un arreglo devuelve la cantidad de elementos que hay en el mismo"

b) 'Hoy es Jueves' asUpperCase 'HOY ES JUEVES' "Convierte el string a mayúsculas"

c) 'hola aquí estoy' reversed 'yotse iuqa aloh' "Invierte los lugares de los elementos que integran al string"

d) #(4 'cinco' 6 7) reversed (7 6 'cinco' 4) "Invierte los lugares de los elementos que integran al arreglo"

e) $A asciiValue 65 "Convierte el carácter A a sus respectivo valor en ascci"

f) 65 asCharacter $A "Convierte el valor 65 en ascci a su valor en carácter"

g) 'cual es la longitud de esta oración?' size 36 "Cuenta todos los elementos del string"

3) Evalúe los siguientes Mensajes Binarios

a) 'hola', ' aquí estoy' 'hola aquí estoy' "Concatena los objetos"

b) #(1 2 3), #( 4 5 6) (1 2 3 4 5 6) "Concatena los elementos de cada arreglo y forma uno solo"

c) 4 = 5 false "Evalúa la igualdad de los objetos"

d) #(1 2 $a), #($b 'cd') (1 2 $a $b 'cd') "Concatena los elementos de cada arreglo y forma uno solo"
4) Evalúe los siguientes Mensajes de palabras Clave

a) 'Esto es una prueba' at: 3 $t "Muestra lo que se encuentra en posición 3"

b) 'Hola' includes:$o true "El comando includes consulta si el parámetro que pasa se encuentra en el objeto."

c) 'Hola' at: 1 put: $H $H "Cambia lo que se encuentra en la posición que pasa at con lo que tiene put"

d) 'Paradigmas de Programación' copyFrom: 4 to: 9 'adigma' "Copia desde la posición a 9"

e)#( 9 8 7 6 5) at:3 7 "Devuelve lo que hay en la posición 3"

f) #(1 ( 2 3 ) 4 5 ) includes: #( 2 3) true "El comando includes consulta si el parámetro que pasa se encuentra en el objeto, devolviendo verdadero o falso"

g) #( 9 8 7 6 5) copyFrom: 1 to:2 (9 8) "Copia los elementos 1 y 2 del arreglo"

h) Array new : 10 (nil nil nil nil nil nil nil nil nil nil) "Instancia un nuevo arreglo de 10 posiciones"

5) Mensajes anidados. Evaluarlos y de ser necesario, colocar paréntesis para mostrar de que manera ST evalúa las expresiones

a) 'Hola' size + 4 8 "Primero evalúa el tamaño del string 'hola' y luego lo suma al objeto 4, devolviendo como resultado 8"

b) 'ahora' size + #( 1 2 3 4) size 9 "primero evalúa el tamaño de:" 'ahora' size 5" luego" #( 1 2 3 4) size 4"y por ultimo los suma"

c) #(1 12 24 36) includes: 4 factorial true "El comando includes consulta si el factorial de 4 se encuentra en el arreglo."

d) 3 + 4 * 2 14 "Resuelve 3+4=7, después 7*2= 14"

e) 3 + (4 * 2) 11 "Primero resuelve lo que se encuentra entre paréntesis y después la suma"

f) 4 factorial between: 3 + 4 and: 'hola' size * 7 true "Pregunta si el factorial de 4 se encuentra entre 7 y 28 "

g) 'hola' at:(#( 5 3 1) at:2) $l "cuando hay paréntesis evalúa desde adentro hacia afuera, entonces primero,devuelve lo que hay en la posición 2 del arreglo

que se encuentra dentro, o sea el objeto 3;luego devuelve lo que se encuentra en la posicione 3 del string 'hola' "

h) (6+9) asString '15' "Realiza la suma y lo convierte a string"

i) Array with: 1 with: 'hola' with: (1/3) (1 'hola' 1/3) "Instancia un nuevo arreglo con los elementos que son pasados a través de with"

6) Variables Globales, siempre empiezan con mayúscula. Evaluarlas una a una verificando
los resultados.

a) Display a screen

b) Transcript a MDITranscript

c) Debug nil

d) Disk a Directory on: 'C:\STEXPRES\'

e) Distancia nil

f) Distancia:=15 15

7) Comparando Objetos, evaluar cada uno, verificar resultados y en caso de error indicar la expresión correcta.

a) 3<4 true "Compara si el objeto 3 es menor que el objeto 4."

b) #( 1 2 3 4) = #( 1 2 3 4 ) true "Compara si los elementos del arreglos son iguales."

c) 'hola' <= 'adiós' false "Compara carácter a carácter de cada string y evalúa la igualdad del primero respecto del segundo."

d) 5=2+3 "De esta forma no se puede evaluar, por que compara dos valores y luego intenta sumarlo."

e) 5= (2+3) true "De esta forma, primero suma y luego evalúa la igualdad de ambos miembros"


8. Bloques de código. (Recordar que un bloque puede tener argumentos)

a) [$a isVowel] value true "Comprueba que el carácter a es una vocal."

b) [$b isVowel] value false "Comprueba que el carácter b es una vocal."

c)[ 3 + 4 . 'hola' asUpperCase] value 'HOLA' "Realiza la suma de los objetos 3 y 4 y luego Cambia la cadena 'hola' a mayúsculas"

d) |bloque|
bloque:= [ 'hola ', 'como estas ?'].
^bloque value 'hola como estas ?' "Primero se define la variable loca bloque, luego le asigna un arreglo, y con ^ evalúa lo que tiene la variable bloque."

e) [:c| c isVowel] value: $a true  "Define una variable local dentro de un bloque, dada la condición de que sea vocal y después la evalúa."

f) [:c| c isVowel] value:$b false "Define una variable local dentro de un bloque, dada la condición de que sea vocal y después la evalúa."

g) | bloque resp |
bloque:= [ :a :b| a, b].
resp:= bloque value: 'Hola ' value: 'como estas?'.
^resp 'Hola como estas?' "Define dos variables locales: bloque y resp, luego se asignan valores a bloque y a resp se le asigna en función de bloque, después evalúa resp."

9) Expresiones Booleanas

a) 5 < 2 or: [$a isVowel] true "Compara si 5 es menor que 2 o si el carácter a es una vocal, como es una disyunción cualquiera de las respuestas sea verdadera devolverá true."

b) 5 < 2 false "Compara si 5 es menor que 2."

c) (5 < 2)not "Compara si 5 es menor que 2 y lo niega lo que devuelve una respuesta true."

d) 5 < 2 and: [ $a isVowel] false  "Compara si 5 es menor que 2 y si el carácter a es una vocal, como es una conjunción si una es falsa devolverá false."

e) (5 < 2) not and: [$a isVowel] true "Compara si 5 es menor que 2 y lo niega y compara también que el carácter a sea una vocal lo que devuelve una respuesta true."

f) (5 < 2) not or: [hola size < 2 and: [$a isVowel]] true "Compara si 5 es menor que 2 o que la cadena 'hola' sea menor que 2 y a la vez a sea una vocal."

10) Cómo sabemos a que clase pertenece cada objeto? Evalúa las expresiones:

a) #(Francesca Jackie Marisa Bree) class Array

b) 'Rakesh Vijay Charles Daniel Tyler' class  String

c) 5 class SmallInteger

d) (1/2) class Fraction

e) 5.2 class Float


11) Mensajes en cascada, llamamos así al conjunto de mensajes que enviamos a un mismo objeto. Verifica estas dos expresiones y explica la diferencia

a) 3 factorial; factorial; factorial 6  "Saca el factorial del primer objeto."

b) 3 factorial factorial factorial (un numero muy grande) "Saca el factorial del primer objeto y luego a ese resultado le saca factorial y así."


12) ST tiene una ventana llamada Inspector que permite ver y cambiar las variables de instancia de un objeto. evalúa este codigo y di que observas.

a) | a |
a := #( 1 2 Sam 'Joe' ( 4 5 ) ).
a at: 2 put: 3 / 4.
a inspect (1 3/4 sam 'joe' (4 5))


13) Condicionales. Verifica estas expresiones.

a) 3 < 4 ifTrue: [el bloque verdadero']
IfFalse: [el bloque falso'] ' el bloque verdadero' "Si la condición se cumple escribe lo que esta dentro de un bloque o si la condición es falsa escribe lo que esta en otro bloque."

b) (5 > 2) ifTrue: [^'5 es MAYOR que 2']
ifFalse: [el bloque falso'] '5 es MAYOR que 2'

c) $b isVowel ifTrue: [ ^' es una vocal']
ifFalse: [^'es una consonante'] 'es una consonante'


2) Realizar las operaciones f/g y f*g. Utilizando sumas y restas sucesivas.
(Usamos Transcript para listar: Transcript nextPutAll:'[ ]; cr. cr, cuando esta despues de un punto y coma funciona como un msj en cascada)
Para abrir un cuadro de dialogo:|a|a:= Prompter promp:'ingrese...' default: '0'. Para abrir un cuadro de conversacion MessageBox message:' '.
El nextPutAll se usa solo para Strings Para peguntar si algo es nil, uso isNil.

| f g cociente |
cociente:=0.
f:= (Prompter prompt: 'Ingrese un valor' default: '0') asInteger.
g:= (Prompter prompt: 'Ingrese un valor' default: '0') asInteger.
cociente:= f/g.
MessageBox message:' El cociente es: ', cociente asString.
Transcript nextPutAll:' El cociente es: ', cociente asString; cr.

|f g producto |
producto:=0.
f:= (Prompter prompt: 'Ingrese un valor' default: '0') asInteger.
g:= (Prompter prompt: 'Ingrese un valor' default: '0') asInteger.
[ g>0] whileTrue: [ producto:= producto + f. g:= g- 1 ].
MessageBox message:' El producto es: ', producto asString.
Transcript nextPutAll:' El producto es: ', producto asString; cr. false
3) Realizar x ^ y

| x y z potencia|
x:= (Prompter prompt: 'Ingrese un valor' default: '0') asInteger.
y:= (Prompter prompt: 'Ingrese un valor' default: '0') asInteger.
z:=y.
potencia:= 1.
[y>0 ] whileTrue: [ potencia:= potencia*x. y:= y - 1].
MessageBox message:' La Potencia de ', x asString, '^', z asString,' es: ',potencia asString.
4) solicitar al usuario que ingrese los coeficientes de una ecuacion cuadratica.

"Ej.: de ecuación cuadrática: 1x2+3x+2, con ceros x1=-1 y x2=-2"

|a b c x1 x2 menosb bcuad cuatroac raiz dosa|
a := (Prompter prompt: 'Ingrese el primer coheficiente' default: '0') asInteger.
b := (Prompter prompt: 'Ingrese el segundo coheficiente' default: '0') asInteger.
c := (Prompter prompt: 'Ingrese el tercer coheficiente' default: '0') asInteger.
menosb := (-1)*b.
bcuad := b raisedTo: 2.
cuatroac := 4*a*c.
raiz := bcuad - cuatroac.
raiz := raiz raisedTo: 1/2.
dosa := 2*a.
x1 := (menosb + raiz)/dosa.
x2 := (menosb - raiz)/dosa.
MessageBox message: 'El primer cero es: x1=', x1 asString.
MessageBox message: 'El segundo cero es: x2=', x2 asString

5)Solicitar el ingreso de un numero y verificar si es primo.
| b cont primo|
b := (Prompter prompt: 'Ingrese el segundo numero' default: '0') asInteger.
cont:=0.
primo:= b.
b timesRepeat: [ (primo\\b =0 )ifTrue: [ cont:=cont +1].
b:= b - 1].
(cont>2) ifFalse: [ MessageBox message: ' El numero es primo '].

6)Solicitar el ingreso de un numero y decir si es par o impar.

| a |
a := (Prompter prompt: 'Ingrese un numero' default: '0') asInteger.
(a\\2)=0 ifTrue:['el numero es par']
ifFalse:['el numero es impar']

8)Escribir un programa que ingrese un listado de números e informe la cantidad de multiplos de 2,3,5 y 7.
|x y d t c s|
Array new: 4.
y:='si'.
d:=0.
t:=0.
s:=0.
c:=0.
[y='si'] whileTrue: [ x:=(Prompter prompt: 'Ingrese un numero' default:'0')asInteger.
((x\\2) = 0) ifTrue: [d:= d + 1].
((x\\3) = 0) ifTrue: [t:= t + 1].
((x\\5) = 0) ifTrue: [c:= c + 1].
((x\\7) = 0) ifTrue: [s:= s + 1].
y:=(Prompter prompt: 'desea continuar?' default:'0')asString].
Array with:d with:t with:c with:s.

9)Un numero entero positivo se dice perfecto si es igual a la suma de todos sus divisores, excepto el mismo.
Escriba un metodo booleano que permita diferenciar si un numero (unico parametro) es perfecto.
| x z perf w |
x:= (Prompter prompt: 'Ingrese numero' default: '0') asInteger.
z:= x - 1.

perf:= 0.
1 to: z do: [ :i | w:= x \\ i.
(w = 0) ifTrue: [ perf:= perf + i.]
].
(x = perf) ifTrue: [ MessageBox message: ' El numero ', x asString, ' es perfecto']
ifFalse: [ MessageBox message: ' El numero ', x asString,' NO es perfecto'] .

10)Dada una cadena de entrada,devolver otra en la que los caracteres en mayusculas hayan sido cambiados por
caracteres en minúsculas y viceversa.

| frase result t1 t2 pal lt |
frase:= (Prompter prompt: 'ingrese una frase' default: 'hola').
(frase isNil) ifTrue: [^nil].
frase:= frase asArrayOfSubstrings.
t1:= frase size.
result:= ' '.
1 to: t1 do: [:i| pal:= frase at: i.
t2:=pal size.
1 to: t2 do: [:j| lt:=pal at: j.
(lt isLowerCase) ifTrue: [lt:=lt asUpperCase]
ifFalse: [lt:= lt asLowerCase].
pal at: j put: lt.
].
result:=result, ' ', pal.
].
^result.

Entradas relacionadas: