Taller 2 - Matematica - Discretas - G1 - T2
Taller 2 - Matematica - Discretas - G1 - T2
Taller 2 - Matematica - Discretas - G1 - T2
Presentado por:
Matemáticas Discretas II
Ingeniería de Sistemas
2021
PREGUNTAS GENERADORAS
1. ¿Qué es un algoritmo?
2. Describa las siguientes propiedades que por lo general tiene un algoritmo: entrada,
● Entrada: representa todos los datos que necesita el algoritmo para ser procesados, es
la alimentación necesaria para que se puedan procesar los datos, pueden ser datos que
introduzca el usuario del algoritmo o bien que se obtengan de alguna otra fuente.
● Salida: Son los resultados que se desean obtener en la ejecución del algoritmo, cabe
mencionar que aquí debe obtenerse la o las respuestas que resuelvan la problemática
● Precisión: Hace referencia a que todas las acciones de un algoritmo deben estar bien
definidas, esto es, ninguna acción puede ser ambigua, sino que cada una de ellas sólo
están determinados sólo por las entradas y los resultados de los pasos anteriores.
4. ¿Cuáles son las ventajas del pseudocódigo sobre el texto común al escribir un
algoritmo?
formal.
5. En los procesos de aprendizaje de los alumnos de programación, éstos están más cerca
del paso siguiente (codificación en un lenguaje determinado, que los que se inician en
Dentro de las diferencias que existen entre ellos, podemos destacar que el pseudocódigo es la
sintaxis que define el cómo resolver un problema, mientras que el algoritmo viene siendo la
que provee estimaciones teóricas para los recursos que necesita cualquier algoritmo que
resuelva un problema computacional dado. Estas estimaciones resultan ser bastante útiles en
Se refiere a la situación inicial de los datos que genera una ejecución del algoritmo con una
Se refiere a la situación inicial de los datos que genera una ejecución del algoritmo con una
La situación inicial de los datos no sigue ningún patrón preestablecido que aporte ventajas o
desventajas. Se puede considerar, por tanto, la situación típica de ejecución del algoritmo.
La notación-O (big o), sirve para dar una cota superior para el crecimiento de nuestro
algoritmo, esta afirma que hay un punto n0, tal que para los valores n después de este punto,
el valor múltiplo de la función g(n) supera o está en el mismo orden que nuestro algoritmo
f(n), es decir que: Existe un c y un n tal que 0 < f(n) < cg(n) para todo n0 < n.
orden muy superior, pero no hacemos eso, porque queremos saber cuanto tardara nuestro
algoritmo con el cálculo más justo que podamos. se llama notación O grande.
Todo lo que se concluye es que, excepto por un factor constante y un número finito de
excepciones, f está acotada arriba por g, de manera que g crece al menos tan rápido como f.
Existe un c y un n que 0 ≤ f(n) ≤ cg(n) para todo n0 ≤ n. Y lo representamos como: f (n) =
O(g(n)).
La notaciòn -Ω (notaciòn omega), sirve para dar una cota inferior para el crecimiento de
nuestro algoritmo, esta afirma que hay un punto n0, tal que para los valores n después de este
punto, el valor múltiplo de la función g(n) está en un orden inferior o está en el mismo orden
Si, excepto por un factor constante y un número finito de excepciones, f está acotada por
abajo por g. También se dice que g es una cota inferior asintótica para f.
Existe un c y un n tal que 0 ≤cg (n) ≤ f(n) para todo n0 ≤n. y lo representamos como:
f (n) = Ω(g(n)).
La notación-Θ(notación theta), sirve para dar una cota superior e inferior para el crecimiento
de nuestro algoritmo, esta afirma que hay un punto n0, tal que para los valores n después de
este punto, un valor múltiplo de la función g(n) está en el mismo orden que nuestro algoritmo
f(n), es decir que: Existe un c1, c2 y un que 0 ≤ c1g(n) ≤f(n) ≤ c2g(n) para todo n0 ≤n. y lo
Todo lo que se concluye es que, excepto por un factor constante y un número finito de
excepciones, f está acotada arriba por g, de manera que g crece al menos tan rápido como f.
Existe un c1, c2 y un n tal que 0 ≤ c1g(n) ≤f(n) ≤ c2g(n) para todo n0 ≤n. y lo representamos
Un algoritmo recursivo es una llamada de una función desde la misma función, son
recursivos aquellos algoritmos que están dentro de ellos mismos son llamados una y otra vez.
informática.
● Conocer las ventajas y desventajas de las funciones recursivas frente a las funciones
iterativas.
Las funciones recursivas son funciones que se llaman a sí mismas durante su propia
ejecución. Ellas funcionan de forma similar a las iteraciones, pero debe encargarse de
planificar el momento en que dejan de llamarse a sí mismas o tendrá una función recursiva
infinita.
Estas funciones se estilan utilizar para dividir una tarea en subtareas más simples de forma
Un ejemplo de una función recursiva sin retorno, es el ejemplo de cuenta regresiva hasta cero
a partir de un número:
def cuenta_regresiva(número):
número -= 1
if numero > 0:
print numero
cuenta_regresiva(número)
else:
print "Boooooooom!"
cuenta_regresiva (5)
2
1
Boooooooom!
Fin de la función 0
Fin de la función 1
Fin de la función 2
Fin de la función 3
Fin de la función 4
Se dice que una función es recursiva cuando el cuerpo de la función utiliza a la propia
función.
Las definiciones recursivas funcionan siempre y cuando las llamadas recursivas se realicen de
Una función es recursiva final cuando tras la llamada recursiva no hay que realizar ningún
cómputo adicional. Es decir, el valor devuelto en la llamada recursiva es igual al valor que
20. ¿Por qué toda función recursiva debe tener un caso base?
Siempre se debe avanzar hacia un caso base: Las llamadas recursivas simplifican el problema
y, en última instancia, los casos base nos sirven para obtener la solución. Aspectos que hay
que considerar al decidir cómo implementar la solución a un problema (de forma iterativa o
de forma recursiva)
EJERCICIOS PROPUESTOS:
Entrada de datos con los números de teléfono, Código de país, ciudad, etc
2. La conjetura de GoldBach establece que todo número par mayor que 2 es la suma de
dos números primos. El siguiente es un algoritmo propuesto para verificar si la
conjetura de Gold Bach es verdadera:
leer a,b,c
print a
print c
print b
package punto4;
import java.util.Scanner;
int a = 0, b = 0, c = 0;
try{
a = Integer.parseInt(sc.next());
b = Integer.parseInt(sc.next());
condition = false;
}catch(Exception e){
continue;
}else{
package test;
import java.util.Scanner;
String cadena;
int ingreso = 1;
int i=0;
cadena = in.next();
try{
numeros = Integer.parseInt(cadena.substring(2));
if(i==0){
numeros2 = numeros;
i=i+1;
}else{
if(numeros2<numeros){
numeros2 = numeros;
}catch(Exception e){
}else{
System.out.println("No ha ingresado correctamente los datos como se pedían,
por favor ingrese los caracteres 'S_' seguido de su número deseado");
try {
ingreso = ingreso1;
}catch(Exception q){
if(numeros2 ==0){
}else{
6. Escriba un algoritmo que regrese el valor más grande y el segundo elemento más
grande en la sucesión S_1 ,……S_n. Suponga que n > 1 y que los valores de la
sucesión son diferentes.
package punto6;
import java.util.Scanner;
String cadena;
int ingreso = 1;
int i=0;
cadena = sc.next();
if (cadena.length()>1){
pre = String.valueOf(cadena.charAt(0));
pre2 = String.valueOf(cadena.charAt(1));
}else{
continue;
try{
numeros = Integer.parseInt(cadena.substring(2));
if(i==0){
numeros2 = numeros;
i=i+1;
}else if(i==1){
numeros3 = numeros;
i=i+1;
numeros3 = numeros2;
numeros2= numeros;
i=i+1;
}else{
}else if (i>1){
numeros2 = numeros3;
numeros3 = numeros;
numeros2= numeros;
}else{
}catch(Exception e){
}else{
}
System.out.println("digite el número '1' si quiere introducir otro digito, de lo
contrario digite cualquier otro número si quiere salir.");
try {
ingreso = ingreso1;
}catch(Exception q){
}else{
7. Escriba un algoritmo que regrese el valor más pequeño y el segundo elemento más
pequeño en la sucesión S_1 ,……S_n Suponga que n > 1 y que los valores de la sucesión
son.
package punto7;
import java.util.Scanner;
String cadena;
int ingreso = 1;
int i=0;
cadena = sc.next();
if (cadena.length()>1){
pre = String.valueOf(cadena.charAt(0));
pre2 = String.valueOf(cadena.charAt(1));
}else{
continue;
try{
numeros = Integer.parseInt(cadena.substring(2));
if(i==0){
numeros2 = numeros;
i=i+1;
}else if(i==1){
numeros3 = numeros;
i=i+1;
numeros2= numeros;
i=i+1;
}else{
}else if (i>1){
numeros2 = numeros3;
numeros3 = numeros;
numeros2= numeros;
}else{
}catch(Exception e){
}else{
try {
int ingreso1 = sc.nextInt();
ingreso = ingreso1;
}catch(Exception q){
}else{
package javaapplication1;
import java.util.Scanner;
System.out.println("Escriba un valor");
System.out.println("Escriba un valor");
System.out.println("Escriba un valor");
int val3 = kb.nextInt();
int mayor=val1;
if (mayor<val2)
mayor=val2;
if(mayor<val3)
mayor=val3;
package javaapplication1;
import java.util.Scanner;
int n = kb.nextInt();
int a = kb.nextInt();
int mayor=a;
int b = kb.nextInt();
if(mayor<b)
mayor=b;
package javaapplication1;
import java.util.Scanner;
System.out.println("Escriba un valor");
System.out.println("Escriba un valor");
System.out.println("Escriba un valor");
if (val1<val2){
if(val1<val3){
if(val2<val3){
}else{
System.out.println("El segundo menor es: "+val3);
}else{
if(val1<val2){
}else{
}else{
if(val2<val3){
if(val1<val3){
}else{
}else{
if(val1<val2){
}else{
}
}