TP1 - Algoritmos - Generales2021 - C Links
TP1 - Algoritmos - Generales2021 - C Links
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.
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)
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
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
15- Escriba un programa en Scilab para calcular los diámetros del ejercicio 1.
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.
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.
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
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
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)
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
n0 n!
... 1 1
0! 1! 2! 3! 4! 5!
2 6 24 120
...
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.
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 n1 f n2 , 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 n1 ? (Rta: “número de oro” o “proporción aurea”).
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)
1n 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).
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.
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).
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