0% encontró este documento útil (0 votos)
33 vistas12 páginas

TP1 - Algoritmos - Generales2021 - C Links

El documento presenta un trabajo práctico sobre herramientas y algoritmos generales de programación básica y métodos numéricos. Incluye ejercicios para familiarizarse con planillas de cálculo y Scilab, como tablas de valores de funciones, gráficos, estructuras de control y funciones matemáticas.

Cargado por

Ivan Ricaldez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
33 vistas12 páginas

TP1 - Algoritmos - Generales2021 - C Links

El documento presenta un trabajo práctico sobre herramientas y algoritmos generales de programación básica y métodos numéricos. Incluye ejercicios para familiarizarse con planillas de cálculo y Scilab, como tablas de valores de funciones, gráficos, estructuras de control y funciones matemáticas.

Cargado por

Ivan Ricaldez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

Programación Básica y Métodos Numéricos

Trabajo Práctico N°1: Herramientas y algoritmos generales

Objetivo: Familiarizarse con la planilla de cálculo y Scilab.


VIDEO: Introducción al TP1 VIDEO: Playlist Planilla de Cálculo
Volumen [litros] 750
1- En la planilla de cálculo, armar una tabla similar a la mostrada en el Altura Diámetro
Tipo
[m] [m]
recuadro. Utilizar fórmulas para completar los diámetros (en metros) de un
1
cierto tanque cilíndrico de un volumen dado (en litros) para distintas 1,5
alturas (en metros). Recuerde que el volumen de un cilindro es: V  hr 2 2
Nota: utilice la función “PI()” para obtener el valor de  2,2
2,4

2- A la planilla del ejercicio anterior, completarle la columna Tipo con el texto “muy esbelto” si
el tanque tiene una relación Altura/Diámetro mayor que 2, y “normal” en caso contrario. (Con los
datos dados, los dos primeros tanques serán normales, y el resto muy esbeltos).
Nota: utilice la función “SI(...)” para determinar el texto que corresponde en cada caso.

3- Calcular el discriminante de la ecuación de segundo grado Ejemplo:


f ( x)  ax 2  bx  c , ingresando las constantes a, b y c en la planilla a: 1
de cálculo, de forma similar al ejemplo indicado en el cuadro. Se b: 2
deberá indicar con un texto el mensaje “reales y distintas” si el c: 3
discriminante es mayor a cero; “raíz doble” si es igual a cero; y Discriminante: -8
“complejas” si es menor a cero. Discriminante: D  b 2  4ac Raíces: complejas

Nota: se pueden anidar las funciones “SI()”. Ej: SI(cond1;algo1;SI(cond2;algo2;algo3))

4- Dadas las siguientes funciones:


a) f ( x)  cos( x)  x / 3
b) f ( x)  sin( 24 x)  sin( 25x)
Utilizar la planilla de cálculo para:
I. Generar una tabla de valores para cada función, en el intervalo [-5; 5] usando solo valores
enteros de x. Graficar.
II. Generar nuevas tablas de valores para la función a) en el mismo intervalo, utilizando puntos
espaciados cada 0.5, cada 0.25, y cada 0.1. Realizar los tres gráficos y comparar. ¿cambian
mucho los gráficos?
III. Para la función b), generar nuevas tablas de valores en el mismo intervalo, utilizando ahora
espaciamientos de 0.5, 0.2, y 0.05. Graficar y comparar. ¿Cambian mucho los gráficos?

5- Dadas la función f ( x)  sin(10 x)  cos(3x) :


a. Graficar utilizando solo números enteros entre -5 y 5 para la x. ¿Es adecuado este gráfico?
b. Generar una nueva tabla de valores en el intervalo de [-5;5], con puntos espaciados cada 0,5.
Graficar. ¿Se aprecia algún cambio? ¿Es adecuado este gráfico?
c. Grafique nuevamente en el mismo intervalo, con un espaciamiento de 0,2. Comparar.
d. Realizar un nuevo gráfico con un espaciamiento de 0,05. Comparar.
e. De los gráficos anteriores elegir uno y copiarlo. En la copia modificar la
escala de las x (sin cambiar la tabla de valores) para poder visualizar las dos
raíces que se encuentran en el intervalo [-2.5; -2]. Dar un valor aproximado
de esas raíces. ¿Qué hubiese pasado si elegía otro de los gráficos?

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 1


Año 2021. Última revisión: 26/08/2021
6- Generar los valores x e y correspondientes a la función de Lissajous y realizar el gráfico (x-y).
Los datos de entrada son los coeficientes A y B, el defasaje D, y el incremento INC a utilizar para
la variación del ángulo ANG (que deberá variar entre 0º y 360º). Estos datos de entrada deben estar
en celdas para poder modificarlos. Las fórmulas son:
Prueba A B D INC
x  100 * sin( A * ANG ) Nº1: 8 4 0 5
y  100 * cos( B * ANG  D) Nº2: 6 6 120 5
Nº3: 6 6 10 5
Probar el gráfico con los juegos de valores dados en el recuadro. Nº4: 6 6 90 5
Nº5: 8 8 0 10
Nota: utilice la función RADIANES(...) para convertir los ángulos Nº6: 5 8 0 10
de grados a radianes (tanto para ANG como para el defasaje D).
Cada prueba es un gráfico distinto

7- Escribir en la consola de Scilab los comandos dados e indicar los resultados obtenidos:
COMANDO RESULTADO + Breve explicación
1.2 + 3.5 Ej: devuelve ans=4.7… Evidentemente hace la suma (answer=respuesta)
1,2 + 3,5 Ej: ans=1 ans=5 ans=5… ¿Será ans=1, luego ans=2+5, luego ans=5?
ema = 0.001
ema = 0,001
disp('2+2= '+(2+2))
disp('2+2= '+string(2+2))
5 < 2
3<=3
%pi=3.14
%pi==3.14
num = 3, 1<num<5
X = 5, x = 2, x*X
sqrt(25)
sin(30)
sin(30 * %pi/180)
lognat=log(10),
expo=exp(lognat)
n=log10(1000), 10^n
Resto1 = modulo(10, 3)
Resto2 = modulo(14, 5)
r1=round(12.67)
r2=round(20.11)
num1=int(12.67)
num2=int(20.11)
f1=floor(12.67)
f2=floor(20.11)
ceil1=ceil(12.67)
ceil2=ceil(20.11)
deff('y=f(x)','y = x^2 + 4')
imagen=f(2)
der=numderivative(f,2)
[d1, d2]= numderivative(f,2)

8- ¿Qué significa el mensaje !—error 144 Operación indefinida para los


operandos dados? (pruebe ingresando en consola la instrucción: (2)+”2” )
z+1
9- ¿Qué hace la función deff? ¿Cómo la usaría para definir la función matemática: f(z)=e ?

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 2


Año 2021. Última revisión: 26/08/2021
VIDEO: Intro Clase 2/3 (Repaso Ej7 y EJ8; Resolución Ej10; Descripción Ejs del 11 al 14; Resolución Ej15)

10- Abrir el editor de Scilab (SciNotes) y copiar el siguiente código que contiene errores.
function []=sumar()
num1 = inmut('Ingrese el primer operando ')
num2 = = input('Ingrese el segundo operando ')
res = num1 + num
disp('La suma de '+string(num1)+ ' y ' + string(num2)+ ' es '+ (res));
endfunction

a) Ejecutarlo y corregir los errores.


b) Una vez corregido, ejecutarlo con los siguientes
valores y explicar los resultados.
Ejecución 1: 2 3.33
Ejecución 2: 5,5 3.33
Ejecución 3: 5,5 7,7
Ejecución 4: 'q' 5
c) En el programa corregido, borre uno de los signos “+” en la línea 5, y ejecútelo. ¿Ahora hay
problemas con los paréntesis? (¡Ojo! Observe que hay errores de sintaxis que el programa
no identifica adecuadamente).

11- En el editor de Scilab escribir el código dado en el recuadro function []=estructura_if()


(puede copiar y pegar). N = input("Ingrese N: ")
if (N>20) then
a) Ejecútelo y trate de explicar qué hace. disp("N es mayor que 20")
b) Identifique en qué casos el programa funciona mal y por qué else (N<10)
(pruebe ingresando un 15) disp("N es menor que 10")
c) Modifique el programa para que funcione bien end
endfunction
d) Explique la diferencia entre else y elseif.

VIDEO if
12- ¿Qué es un DIAGRAMA DE FLUJO? Dibuje los diagramas de flujo de las VIDEO for
tres estructuras de control vistas en teoría (if, for, while). VIDEO while

13- Un ingeniero de mantenimiento tiene el siguiente function diagnostico()


diagrama de flujo, para el diagnóstico y arreglo de averías. disp("Ingrese <y> para responder SI o
Empezó a implementarlo en un programa de Scilab pero se <n> para responder NO")
fue temprano a su casa y le encargó a usted que lo termine. rta=input("La cosa se mueve?","s")
Copie en el Scinotes el código del recuadro (puede copiar y if rta=="y" then
pegar), y modifique los mensajes indicados para dar respuesta rta=input("Deberia moverse?","s")
al problema. if rta=="y"
disp("Que hacemos?")//modificar
elseif rta=="n"
disp("Que hacemos?") //modificar
end
elseif rta=="n"
rta=input("Deberia moverse?","s")
if rta=="y"
disp("Que hacemos?") //modificar
elseif rta=="n"
disp("Que hacemos?") //modificar
end
end
endfunction

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 3


Año 2021. Última revisión: 26/08/2021
function []=sumatoria_1_hasta_N()
14- Dado el código de Scilab del recuadro. N = input("Ingrese N: ")
a) Realice el diagrama de flujo correspondiente. s = 0, suma = 0
for i=1:N
b) Escriba el código en el editor de Scilab y ejecútelo. suma = s + i
VIDEO
Trate de explicar qué hace. disp(suma)
c) Haga el seguimiento del programa en papel para end
comprender su funcionamiento. disp("La sumatoria desde 1 hasta " +
string(N) + " es: " + string(suma))
d) ¿Qué modificaciones deberían hacerse para corregir endfunction
el error?

15- Escriba un programa en Scilab para calcular los diámetros del ejercicio 1.

16- Realice el diagrama de flujo correspondiente al ejercicio 3. Escriba un programa para


resolverlo en Scilab.

17- Para cada uno de los siguientes incisos, realizar el diagrama de flujo y escribir un programa en
Scilab que haga lo solicitado. Para este ejercicio deberá utilizar estructuras condicionales if, y/o
iterativas for, según sea necesario (no debería hacer falta utilizar while).
a) Para un cierto viaje en auto se tienen los datos:
kmi: estado del cuentakilómetros en el punto de partida cuando el tanque está lleno.
kmf: estado del cuentakilómetros en el punto de destino.
comb: cantidad de litros de combustible necesario para completar el tanque al llegar a destino.
Si kmf es mayor que kmi mostrar el rendimiento del auto.
b) Ingresando la duración de una llamada telefónica, calcule el total a pagar teniendo en cuenta lo
siguiente:
I. Toda llamada que dure menos de tres minutos tiene un costo de $5.
II. Cada minuto adicional a partir de los tres primeros minutos cuesta $1,50.
c) Determine el precio de un pasaje ida y vuelta en avión, en función de la distancia total a recorrer.
Como datos de entrada se deben ingresar la distancia hasta la ciudad de destino y la cantidad de días
que se quedará. El precio cada 124km es $50. Si la duración de la estadía es superior a 7 días y la
distancia es menor a 1000km se realiza un descuento del 20%.
d) Calcule la nota de una monografía dependiendo de la cantidad de páginas. Si tiene menos de 5
páginas desaprueba. Si tiene 5 páginas aprueba con 6 de nota. La nota se incrementa en 50
centésimos por cada página adicional, hasta llegar a la nota máxima de 10.
e) Calcule el volumen de un tanque de base circular o rectangular. Al inicio se debe ingresar un 1 para
el circular, un 2 para el rectangular, y si se ingresa una opción distinta el programa debe mostrar un
mensaje y terminar. Para un tanque circular se debe pedir la altura y el diámetro, y para uno
rectangular la altura y los dos lados de la base.
f) Pida como datos la cantidad de lados de un polígono regular y la longitud de uno de sus lados. La
longitud debe ser mayor que cero y la cantidad de lados no puede ser menor a tres. Calcule e informe
el perímetro de la figura.
g) Pida al usuario un número natural n, y calcule la sumatoria de los números naturales pares desde
cero hasta n, y la productoria de los impares desde 1 hasta n. Mostrar ambos resultados.
h) Pida como datos la cantidad de lados de un polígono irregular y la longitud de cada uno de sus lados.
El polígono debe tener al menos tres lados. Calcule e informe el perímetro de la figura.
i) Lea n elementos enteros. Cuente cuántos de ellos son múltiplos de 5 y distintos de 10. Muestre el
resultado al finalizar el programa.
j) Procese los números naturales desde 1 hasta un n ingresado por teclado, de acuerdo a un número de
opción que también se ingresa. Si se ingresa la opción 1 se debe hacer la sumatoria, y si se ingresa un
2, la productoria. Como salida del programa informar la operación realizada y el resultado.
k) Pida al usuario n números positivos. Determine el mayor de todos los valores ingresados y muéstrelo
al finalizar el programa.
Nota: Las variables deben ser ingresadas por el usuario y no fijadas dentro del programa.

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 4


Año 2021. Última revisión: 26/08/2021
18- Escribir un programa en Scilab que permita convertir números complejos en coordenadas
polares ( Z  C e i ) a cartesianos ( Z  A  Bi ) y viceversa. El ingreso de datos dependerá de un
número de opción elegido por el usuario.

19- Dos estudiantes de ingeniería tomaron el diagrama de flujo del ejercicio 13 y elaboraron un
procedimiento más completo. Reescriba el programa de acuerdo al diagrama de flujo dado.

20- Escribir el siguiente programa (que contiene errores) en el editor de Scilab.


function []=consistencia() Ejemplo de ejecución en la consola:
num == input('Ingrese un valor positivo: ') -->consistencia()
Ingrese un valor positivo: -9
while (num >0) El valor debe ser positivo: -8
num = input('El valor debe ser positivo: ') El valor debe ser positivo: -7
El valor debe ser positivo: 5
end
disp("El numero " + string(num) + " es positivo") El numero 5 es positivo
endfunction -->

a) Ejecutarlo y corregir los errores (en este caso hay errores lógicos). El resultado debe ser
como el mostrado en el recuadro
b) Explicar qué se logra con este código (consistencia).

21- Rescribir los programas de los incisos del ejercicio 17 que se indican a continuación,
realizando las consistencias que se piden en cada caso (usando while como en el ejercicio anterior):
a) Verificar que los valores ingresados sean positivos y que kmf sea mayor que kmi.
g) Verificar que n debe ser entero y positivo.
VIDEO Consistencias (Revisión de una entrega opcional de otra cursada, por eso la numeración no coincide)
function [] = bucle_infinito()
n = 10
22- Escriba en el editor de Scilab el código dado en el recuadro. while n>1
a) Ejecútelo y explique qué hace (puede detener el programa yendo n=n+1
al menú Control  Cancelar ) disp(n)
end
b) Modifique el programa para que no se produzca un ciclo infinito. endfunction

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 5


Año 2021. Última revisión: 26/08/2021
23- Escribir un programa que permita ingresar distintos valores de x, hasta que el error relativo
entre un x y el x anterior sea menor a 0.1. Informar la cantidad de elementos ingresados y los
errores relativos. El error relativo es err  ( x  x ANT ) / x

24- Se dispara una bala de cañón con una velocidad inicial V0 m/seg y una elevación desde la
horizontal de  grados. Las fórmulas que determinan la trayectoria son:
x  V0 * cos( ) * t
y  V0 * sin( ) * t  g * t 2 2
a) Genere una tabla de datos en la planilla de cálculo y realice un gráfico de la trayectoria.
Utilice un incremento de tiempo ingresado en una celda.
b) Escriba un programa en Scilab donde se pida un incremento de tiempo y el tiempo final. Se
deberán calcular y mostrar los sucesivos puntos (x,y) de la trayectoria.
c) Escriba un programa similar al anterior, pero que calcule el tiempo final TF  2V0 sin( ) / g .
Además, en vez del incremento de tiempo debe pedirse la cantidad de puntos a calcular, de
modo que el incremento queda definido por el tiempo final dividido la cantidad de puntos.
d) Escriba un nuevo programa en Scilab donde se pida un incremento de tiempo y se calculen
los puntos hasta que el proyectil impacte. Mostrar en pantalla el alcance del disparo.
Suponer que el terreno es plano. No se debe ingresar un tiempo final.
Nota: el argumento de las funciones trigonométricas se debe ingresar siempre en radianes. Si es necesario
convertir grados a radianes utilizar: la función RADIANES(...) en la planilla; y la fórmula angRadianes =
angGrados*%pi/180 en Scilab.

25- Escribir un programa en Scilab que muestre en la consola los valores de una sucesión según
las siguientes reglas (Conjetura de Collatz: siempre se llega a 1):
 El primer número se ingresa.
 Chequear si es par o impar: Ejemplo:
o Si es par se divide por 2. Si se ingresa un 3, la sucesión deberá ser:
o Si es impar se multiplica por 3 y se le suma 1. 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 FIN
 Repetir el proceso hasta llegar al número 1

26- Realizar la factorización de un número N ingresado por el usuario. Para ello,


Ejemplo:
comience con el posible divisor 2. Si se puede efectuar la división entera, muestre el 24 | 2
valor de N y del divisor y luego haga la división; caso contrario incremente en una 12 | 2
6 | 2
unidad el divisor. Repita este proceso mientras N sea mayor que 1. La salida del 3 | 3
programa, deberá quedar algo similar al ejemplo mostrado, en el que N comenzó en 24 1 |
(es probable que el “1 |” final lo tenga que agregar manualmente al terminar el while).
VIDEO Factorización (Revisión de una entrega opcional de otra cursada, por eso la numeración no coincide)

27- Cada archivo generado en el editor de function menu()


op=input("Ingrese el inciso deseado, o q para salir: ", "s")
Scilab puede contener más de un programa. while op<>"q"
Copie los programas del ejercicio 17 en un if op=="a"
mismo archivo. Luego, en el mismo archivo ej17a()
elseif op=="b"
escriba un programa que permita al usuario ej17b() VIDEO
ejecutar los incisos que desee de acuerdo a una elseif …
letra que debe ingresar. Para salir del programa …
end
deberá ingresar la letra “q” y en caso de ingresar op=input("Ingrese el inciso, o q para salir: ", "s")
una letra no válida se debe ignorar y repetir el end
ingreso. endfunction

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 6


Año 2021. Última revisión: 26/08/2021
28- Calcular el factorial de un número ingresado. La fórmula del factorial es la siguiente:
Si n=0: n! 1
n No utilice la función factorial
Si n>0: n!   k que trae implementada el Scilab.
Implemente esta fórmula
k 1

29- La siguiente función usa parámetros de entrada (num1, Para llamar a la función desde
num2) y de salida (res). Ejecútela y compare su funcionamiento consola escribir:
con el del programa del ejercicio 10. -->result=sumaparametros(2,3)
function [res]=sumaparametros(num1, num2) Resultado:
res = num1 + num2 result =
VIDEO endfunction
5.
(guarda el resultado en la variable result)
30- Reescriba el programa del ejercicio 28 usando parámetros.

31- Escriba un programa para determinar cuál es el mayor factorial que puede calcular utilizando
Scilab. Para ello pida un numero natural N al usuario, y calcule el factorial (utilizando la función
del ejercicio 30, y no la función factorial propia de Scilab) de todos los números desde cero hasta N.
Muestre cada número con su factorial en pantalla (ej: disp("El factorial de " + string(i) + " es: " +
string(facto(i))) ). El mayor número al que se le puede calcular el factorial será el anterior al que
produce un resultado de Inf.
VIDEO Factorial (Revisión de
32- ¿Qué significa cuando algún cálculo nos devuelve Inf? ¿Y NaN? una entrega opcional de otra cursada,
por eso la numeración no coincide)

33- La función del recuadro hace una consistencia function [numero]=ingresarNroNatural(mensaje)


para garantizar que el número ingresado sea entero y numero = input(mensaje)
mayor que cero (es decir, un número natural), y al while modulo(numero,1)<>0 | numero<0
usar parámetros se la puede llamar dentro de un numero = input(mensaje)
programa de forma idéntica a la función input. end
Reescriba el programa del inciso j del ejercicio 17, endfunction
utilizando esta función para pedir los datos.
VIDEO Función ingresarNroNatural (Revisión de una entrega opcional de otra cursada, por eso la numeración no coincide)

34- Resuelva nuevamente los siguientes incisos del ejercicio 17, incorporando las modificaciones
solicitadas:
a) Calcular distintos rendimientos hasta que se ingrese una carga de combustible igual a cero.
Calcular el rendimiento promedio. Informar también el valor de la mayor carga de combustible.
b) Se deben procesar llamadas hasta que se ingrese una duración igual a cero. Se debe contar
cuántas llamadas se ingresaron. Si se ingresa una duración negativa se debe volver a pedirla, y
no se la debe contar. Además, la duración debe redondearse para arriba (usar la función ceil).
d) Ingresar monografías hasta que se ingrese una cantidad de páginas negativa. Informar el
porcentaje de desaprobados, y el promedio de las notas de los aprobados (los desaprobados no
se promedian). Si no hay aprobados mostrar un mensaje indicándolo, y no calcular el promedio.
e) El número de opción puede ser solamente 1 (base circular), 2 (rectangular), o cero para salir.
Cualquier otro número debe pedirse de nuevo. Al finalizar el proceso informar la cantidad de
volúmenes calculados y de qué tipo de base se procesaron más.

35- Dado un número de 3 cifras se pueden identificar las unidades, decenas y centenas (por
ejemplo, 765 tiene 7 centenas, 6 decenas y 5 unidades). Escribir un programa que dado un número
de 3 cifras muestre por separado los tres dígitos. Luego el usuario debe ir ingresando números de
una cifra para sumarlo a las centenas (op=3), decenas (op=2) o unidades (op=1) de acuerdo a un
número de opción op ingresado cada vez. El proceso finaliza cuando se supera el valor de mil.
VIDEO Unidades decenas y centenas (Revisión de una entrega opcional de otra cursada, por eso la numeración no coincide)
Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 7
Año 2021. Última revisión: 26/08/2021
36- Implemente la siguiente serie:

1 1 1 1 1 1 1 1 1 1 1

n0 n!
       ...  1  1   
0! 1! 2! 3! 4! 5!

2 6 24 120
 ...

a) En una planilla de cálculo para resolver los primeros 20 términos.


b) Modificando la planilla para que se calcule la serie hasta que converja con un error máximo
admisible (ema) igual a 0.01 (recuerde el error relativo del ej 23). Este valor de ema=0.01
debe ingresarse en una celda aparte, y utilizar el formato condicional para resaltar cuando se
haya alcanzado un error menor al admisible. Comparar con el resultado del inciso anterior.
c) En un programa de Scilab, ingresando la cantidad total N de términos a utilizar.
d) En otro programa, ingresando ahora un error máximo admisible (ema) como criterio de paro.
e) ¿A qué número trascendental converge esta serie?

37- Dada la siguiente serie:


1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
S  1   *  * *  * * *  * * * *  ...
3 3 5 3 5 7 3 5 7 9 3 5 7 9 11
a) Implemente una planilla de cálculo para resolverla.
b) Escriba un programa en Scilab para resolverla con un ema como criterio de paro.
c) ¿A qué converge la serie?

38- Una empresa encargada del suministro de agua potable de una ciudad desea automatizar el
corte y reconexión del suministro en función del nivel de reservas disponibles, expresadsas en
porcentaje de su capacidad total. Para ello, se desea diseñar un programa que considere dos estados
posibles: Normal y Corte. Al inicio del programa, el estado es Normal y el nivel de reservas es del
100%. Se realizan sucesivos ingresos del porcentaje reservas y se verifica lo siguiente:
 Si el estado anterior es Normal y el nivel de reservas es inferior al 10%, se modifica el
estado a Corte, y se muestra un mensaje aclaratorio.
 Si el estado anterior es Corte, y el nivel de reservas es de al menos 60%, se modifica el
estado a Normal, y se muestra un mensaje aclaratorio.
 En cualquier otro caso sólo se muestra un mensaje con el estado actual del sistema y el nivel
de reservas.
El programa finaliza cuando se ingrese un porcentaje inválido.

39- Preguntas de repaso. Es fundamental entender los ejercicios que hacemos…


a) En el ejercicio 5, cuente la cantidad de raíces que se observan en los gráficos de la función del
inciso b), en el intervalo [-4;-2] en los siguientes casos:
ESPACIAMIENTO DE LA TABLA DE DATOS: 1 0.5 0.2 0.05
CANTIDAD DE RAÍCES OBSERVADAS:
b) ¿Cuántos puntos hicieron falta para graficar bien cada función del ejercicio 3? ¿Por qué algunas
funciones requieren más puntos?
c) ¿Qué hace la función modulo en Scilab? ¿Cómo podemos utilizarla para determinar si un
número es múltiplo de otro?
d) ¿Puede un else evaluar una condición? (ver ejercicio 11)
e) ¿Qué inconveniente tenía el prgrama del ejercicio 14 (sumatoria fallida)?
f) ¿Qué significa “hacer consistencia” a los datos de entrada? ¿Cómo se puede hacer? (ver ej. 20)
g) ¿A qué se llama “bucle infinito” o “ciclo infinito”? ¿De qué forma se puede salir de uno sin
cerrar el programa? (ejercicio 22)
h) ¿Qué son los parámetros y para qué sirven? (ver ejercicio 29)

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 8


Año 2021. Última revisión: 26/08/2021
Ejercicios complementarios para afianzar
Ejercicios adicionales: lo aprendido y practicar para el examen

40- Para cada inciso realice el diagrama de flujo e implemente el programa en Scilab que haga lo
solicitado.
a) Leer n elementos enteros (este valor se debe ingresar por parámetro). Cuente cuántos de ellos
son múltiplos de 5 y distintos de 5. Haga el promedio de los elementos que son múltiplos de 3
pero no de 2. Muestre ambos resultados.
b) Ingresar pares de valores (X, Y) hasta que X sea igual a Y. Con los valores ingresados se debe
calcular la productoria de las X que sean distintas de 0 y menores a 10, y la sumatoria de las Y
cuyo valor absoluto sea menor a 10. Al terminar el proceso informar los resultados (la
condición de fin no debe utilizarse en los cálculos).
c) Ingresar ternas de valores enteros positivos (a, b, c) hasta que a y b sean múltiplos de c. Al
finalizar mostrar las sumatorias de las a pares y de las b impares.
d) Leer valores de (x, z) mientras el producto x*z sea mayor que cero. Si ambos números son
negativos mostrar un cartel indicándolo, si x>10 y z>0 entonces mostrar el valor de x, y si
z>10 y x>0 entonces mostrar el valor de z.
e) Escribir un programa en el que se ingresen valores A y B hasta que A sea cero. Con estos
números se debe calcular y mostrar la suma de ambos. El par de valores A y B que produce el
fin del procesamiento no debe sumarse. No debe pedirse el valor de B si el valor de A produjo
el fin del programa.
f) Escribir un programa para calcular la serie dada con un ema ingresado por el 
1
usuario. Informar en pantalla el resultado, la cantidad de iteraciones realizadas y S 
n 1 2
n
el error cometido. (S deberá converger a 1).
g) Ingresar valores de x hasta que 3 consecutivos estén ordenados en forma creciente, es decir,
hasta que xi 2  xi 1  xi . Al terminar, mostrar la cantidad total de valores ingresados.
h) Leer n elementos enteros (n se debe ingresar por parámetro). Cuente cuántos elementos son
múltiplos de 5 y distintos de 5. Haga el promedio de los que son múltiplos de 3 pero no de 2.
Muestre ambos resultados.
i) Ingresar pares de valores (X, Y) hasta que X sea igual a Y. Con los valores ingresados se debe
calcular la productoria de las X que sean distintas de 0 y menores a 10, y la sumatoria de las Y
cuyo valor absoluto sea menor a 10. Al terminar el proceso informar los resultados (la
condición de fin no debe utilizarse en los cálculos).

41- Escriba un programa para calcular perímetros de figuras. Se debe pedir un número de opción.
Si la opción es par el polígono es regular, y si es impar es irregular. Pedir los datos y calcular el
perímetro según corresponda, muestre el resultado y vuelva a procesar hasta que se ingrese un
número de opción igual a cero.

42- La sucesión de Fibonacci viene dada por f n  f n1  f n2 , es decir, cada
número es igual a la suma de los dos anteriores (partiendo de los valores
f 1  1 y f 2  1 ). Queda entonces la sucesión: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
89, ... Implemente un programa que muestre en pantalla la sucesión de
Fibonacci hasta que el cociente  f n f n 1  f n 1 f n 2  /  f n f n 1  sea menor
que un ema ingresado por el usuario.
¿A qué valor converge f n f n1 ? (Rta: “número de oro” o “proporción aurea”).

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 9


Año 2021. Última revisión: 26/08/2021
43- Escribir un programa en Scilab para evaluar las siguientes series (usando un ema como
condición de fin) y comprobar que convergen al valor indicado. Indicar la cantidad de iteraciones.
¿Cuál de estas series es la mejor opción para aproximar el valor de  ?

1 1 1 1 1 2
a) 
n 1 n
2
 1    
4 9 16 25
 ... 
6
(Problema de Basilea)


 2n 2n  2 2 4 4 6 6 8 8 
b)   2n  1 * 2n  1   1 * 3 * 3 * 5 * 5 * 7 * 7 * 9 * ...  2
n 1
(Producto de Wallis)


 1n 1 1 1 
c)  2n  1  1  3  5  7  ...  4
n 0
(Serie de Leibniz)

4 4 4 4 4
44- Implemente la serie: S  3       ...
2 * 3 * 4 4 * 5 * 6 6 * 7 * 8 8 * 9 *10 10 *11*12
a) En la planilla de cálculo, utilizando un ema y el formato condicional para resaltar cuando
se alcanza el criterio de paro.
b) En Scilab, utilizando un ema como criterio de fin.
c) ¿A qué número converge la serie?

45- Escriba un programa para determinar si un número N es primo. Para ello determine la
cantidad de divisores que tiene N (para cada número entero x desde 1 hasta N, verificar si N es
múltiplo de x), y si tiene más de dos divisores entonces N no es un número primo. Realice las
consistencias necesarias para asegurar que el valor de N ingresado sea un número entero positivo
distinto de cero.

46- Dos números amigos son dos números enteros positivos a y b tales que la
suma de los divisores propios de uno es igual al otro número y viceversa, es decir
σ(a)=b y σ(b)=a, donde σ(n) es igual a la suma de los divisores de n, sin incluir
a n. (La unidad se considera divisor propio, pero no lo es el mismo número.)
Un ejemplo es el par de naturales (220, 284), ya que:
o los divisores propios de 284 son: 1, 2, 4, 71 y 142, que suman 220.
o los divisores propios de 220 son: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110, que suman 284.
Escribir un programa en Scilab que permita ingresar pares de números y determine si son números
amigos. Se finaliza el proceso cuando ambos números del par ingresado son iguales.
Sugerencia: implemente una función que calcule σ(n) recibiendo el parámetro n y devolviendo el
resultado como parámetro de salida.
Otros números amigos son los pares: (1184; 1210), (2620; 2924), (5020; 5564), (6232; 6368).

47- Un número perfecto es un número natural que es igual a la suma de sus divisores propios
positivos. Dicho de otra forma, un número perfecto es aquel que es amigo de sí mismo.
Así, 6 es un número perfecto porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3. Los
siguientes números perfectos son: 28, 496 y 8128.
Escriba un programa en Scilab que determine si un número ingresado es un número perfecto. Se
finaliza el proceso cuando se ingresa un número negativo o cero. Sugerencia: puede reutilizar parte
del programa del ejercicio anterior, especialmente si implementó la función σ(n).

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 10


Año 2021. Última revisión: 26/08/2021
48- Escriba un programa que calcule y muestre los volúmenes de distintos recipientes con
base cilíndrica o rectangular. Los datos de entrada son: la altura del tanque, un número de opción
para saber la forma (0 para base circular y 4 para rectangular), y el diámetro para los de base
circular, o dos longitudes de lado para los de base rectangular. El programa debe finalizar cuando se
ingrese una altura negativa o cero. Si algún otro dato no es positivo o el número de opción es
incorrecto no se deben realizar los cálculos y se debe informar al usuario con un mensaje. Al
finalizar el programa informar que tipo de base tiene el tanque de mayor capacidad y su volumen.

49- Una empresa de distribución de energía eléctrica desea automatizar el corte de seguridad y
posterior reconexión del suministro por parte de un transformador de baja tensión (220V), en
función de mediciones de tensión (V) y corriente (I). Para ello, se desea diseñar un programa que
considere dos estados posibles: Operativo (E=1) e Interrumpido (E=0). Al inicio del programa, el
estado es Operativo. Se realizan sucesivos ingresos de mediciones de tensión y corriente y se
verifica lo siguiente:
 Si el estado anterior es Operativo y la tensión se encuentra fuera del rango 220𝑉 ± 20𝑉 o la
corriente es mayor a 200A, se modifica el estado a Interrumpido, y se muestra un mensaje
aclaratorio.
 Si el estado anterior es Operativo, la tensión es menor a 210V y la corriente mayor a 190A,
se modifica el estado a Interrumpido, y se muestra un mensaje aclaratorio
 Si el estado anterior es Interrumpido, y la tensión se encuentra dentro del rango 220𝑉 ± 10𝑉
y la corriente es menor a 190A, se modifica el estado a Operativo y se muestra un mensaje
aclaratorio.
 En cualquier otro caso sólo se muestra un mensaje con el estado actual del sistema.
El programa finaliza cuando se ingrese algún valor negativo de tensión o corriente. Se solicita
además antes de finalizar, indicar cuál fue el mayor nivel de corriente registrado y cuántas veces se
realizó un corte, es decir, se pasó del estado Operativo a Interrumpido.

50- Escriba un programa que reciba como parámetro un número N y lo descomponga en:
unidades, decenas, centenas, miles, etc. (Sugerencia: use la función modulo para dividir por 10,
100, 1000, etc). Probando el programa con N=31416, deberá mostrar por separado: 6, 1, 4, 1, 3.

51- En una práctica de basquet organizaron un juego, en el que tienen que


embocar el balón sin que este toque el aro. La ecuación que determina la distancia
a la que la pelota cae a la altura del aro es:
V0 * cos 2
 19.6 * H  h  
d *  tan    tan   
2

9.8 
 V0 * cos 2 
donde h=2m es la altura del jugador, R=0.225m y H=3.05m son el radio y la
altura del aro, r=0.125m es el radio de la pelota, L=6m es la distancia desde la
que se hace el lanzamiento.
Escriba un programa en el que se ingrese una única velocidad V0, y distintos ángulos hasta que se
ingrese un ángulo menor a 30º o se realicen 5 intentos.
Cuando tan    19.6 * H  h  / V0 * cos  no se puede calcular d porque la pelota no alcanza
2 2

la altura del aro, pero sí debe contarse el lanzamiento y mostrar un mensaje. Mostrar d siempre que
se calcule, y en ese caso determinar si se ha marcado un doble ( | L  d |  R  r ) o no. En caso de
doble se muestra un mensaje y se suma 2 puntos. Al finalizar el programa informar el puntaje
obtenido y cantidad de lanzamientos.
Los ángulos deben ingresarse en grados, pero internamente deberán convertirse a radianes. Pruebe
el programa comenzando con V0=9 y un ángulo de 64º (con estos datos debería encestar).

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 11


Año 2021. Última revisión: 26/08/2021
52- Un elfo se encuentra en un bosque cuando se da cuenta que un ogro
gigante se acerca corriendo, por lo que decide dispararle con su arco (sabe
que su única opción es darle en la cabeza). La ecuación que determina la
trayectoria de la flecha es y x   h  tan( ) * x  4.9 * x 2 / V0 * cos( ) 2 , donde
h  1.9m es la altura del elfo.
Escriba un programa que permita lanzar las flechas con una misma velocidad ingresada al principio
del programa, y con un ángulo (en grados) ingresado para cada disparo. Cada flecha lanzada insume
un tiempo de preparación (poner la flecha en su lugar, tensar el arco y apuntar) de 1.3 segundos.
Además, la distancia a la que se encuentra el ogro viene dada por xt   200  20 t . El programa
termina cuando el ogro alcanza y aplasta al elfo (x<=0), o cuando una flecha da en la cabeza del
ogro (|H – y(x)|<d/2, donde H=3m es la altura del ogro y d=0.6m es el diámetro de su cabeza).
Para simplificar un poco puede reemplazar directamente los valores de h, H y d en vez de definir
las variables. Considere que la primer flecha es lanzada en t=0. (Despreciar el tiempo de vuelo de la
flecha).
Después de cada disparo realizado se debe informar la altura y calculada, y la distancia x a la que
se encuentra el ogro en ese instante. Al finalizar el programa mostrar la cantidad de flechas lanzadas
y si el elfo sobrevive o no. Probar el programa con velocidad inicial V0  80m / s y repetir el mismo
ángulo de 6º en cada disparo (con estos datos el elfo debería sobrevivir).
y
53- En ejercicios anteriores se presentaron series que permitían calcular el valor
de  , pero también es posible determinar su valor estadísticamente.
(1,1)

Supongamos un círculo de radio unitario inscripto en un cuadrado con lados de dos (0,0) x
unidades de longitud, como lo indica la figura. Podemos pensar que dado un punto
cualquiera en el interior del cuadrado, la probabilidad de que este esté también en
el interior del círculo es igual a la proporción de áreas, es decir p  ACIRC / ACUAD 2

Como ACIRC   r 2   y ACUAD  L2  4 , entonces la probabilidad será p   / 4 . Esta relación


también se cumple si tomamos solo un cuadrante del cuadrado y un cuarto del círculo. De aquí
podemos despejar   4 * p .
a. Escribir un programa en Scilab para calcular el valor de  de esta Para generar los valores
manera, pidiendo al usuario la cantidad N de ensayos a realizar. Cada aleatorios entre 0 y 1:
ensayo consiste en generar un número aleatorio entre 0 y 1 para x, y
x = rand()
otro para y. Los N puntos estarán dentro del cuadrado, y los que y = rand()
cumplan la condición x ²  y ²  1 estarán dentro del círculo.
Mostrar el valor de  calculado y el error porcentual de esta aproximación respecto al valor
verdadero de  (%pi). Probar el programa con N=1000000.
b. Escribir un nuevo programa para calcular distintas aproximaciones del valor de  usando el
método anterior, pidiendo al usuario la cantidad N de ensayos a realizar hasta que se ingrese un
cero o un número negativo. Mostrar el valor aproximado y el error porcentual respecto al valor
verdadero para cada ensayo. Al finalizar el procesamiento indicar cuál fue la mejor aproximación.

Programación Básica y Métodos Numéricos. TP N°1: Herramientas y algoritmos generales 12


Año 2021. Última revisión: 26/08/2021

También podría gustarte