Ciclos-ParaMientrasRepetir_ver2013_conRespuestas

Anuncio
Taller para Iterizers Nro 3
Universidad Central de Venezuela.
Escuela de Computación - Algoritmos y Programación
Profa. Yusneyi Carballo, Mayo 2013
TAREA N° 2: EJERCICIOS CON ESTRUCTURAS ITERATIVAS
( Tema Nro. 5 )
RESPUESTAS A CONSULTAS Y
EJEMPLOS DE SOLUCIÓN PARA LOS EJERCICIOS UTILIZANDO
ESTRUCTURAS ITERATIVAS Y PROCEDIMIENTOS
OBJETIVO DE LA ACTIVIDAD
Consolidar los primeros 4 temas de la materia y practicar el uso de las tres estructuras iterativas o
ciclos vistos en la materia: Para, Mientras y Repetir.
EJERCICIOS
Para cada uno de los siguientes enunciados, construye algoritmos en pseudocódigo que resuelvan el
problema mediante el secuenciamiento de acciones, validación de datos, uso de condicionales y de
estructuras iterativas:
1. Escribir un algoritmo que solicite parejas de números, hasta que el usuario indique que no hay más
valores para procesar. El algoritmo debe contar la cantidad de parejas procesadas y calcular para cada una
la media armónica, donde:
Resuelva utilizando Repetir
MediaArmónica  2,0X*XY*Y
Ayuda: En este ejercicio la cantidad de valores a procesar no es conocida, le debes solicitar al usuario el
valor X e Y para utilizar en la fórmula de la Media Armónica y también le debes preguntar si desea procesar
otro par de valores, la respuesta del usuario la pueden guardar en una variable tipo Entero, carácter o
string, si es entero por ejemplo, utilizando 0 para no y 1 para si. Ayudarse con los ejercicios vistos en clase.
Acción Principal
Función mediaArmónica(Entero n1, n2): Real
# procesa pares de números calculándoles la media armónica
# calcula la media armónica de los valores n1 y n2
String detener; Entero Cont, X, Y; Real MA;
Cont=0;
Retornar( (2 * n1 * n2) / (n1 + n2) );
FinFunción;
Repetir
Repetir #solicitud y validación de datos de entrada
Escribir(“Suministre una pareja de números enteros X, Y
para el cálculo de la media armónica, donde X + Y debe
ser distinta de cero.”);
Leer (X, Y);
Hasta (X+Y  0);
#se actualiza el contador, calcula y escribe la media
Cont = Cont + 1; # en este caso estoy contando sólo los
# pares que sirven para calcular la media armónica
MA = mediaArmónica(X, Y);
Escribir(“La media armónica para el par ” + X + “ - ” + Y +
“ es: ” + MA);
Pág. 1
Taller para Iterizers Nro 3
Universidad Central de Venezuela.
Escuela de Computación - Algoritmos y Programación
Profa. Yusneyi Carballo, Mayo 2013
# se consulta al usuario si desea suministrar otros valores
Escribir(“¿Desea suministrar otro par de valores para el
cálculo de la media armónica? Responda con si o no”);
Leer (detener);
Hasta detener == “si”;
#se muestra el contador de pares de valores
Escribir(“La cantidad de pares de valores X, Y a los que se
calcularon la media armónica es:” + cont);
FinAcción Principal;
2. Escribir un algoritmo que pida una secuencia de 100 números enteros al usuario y verifique para cada valor
suministrado si se trata de un número primo. Para los números que no son primos, se debe indicar el
resultado de la suma de sus dígitos.
Resuelva utilizando Para y Repetir
Ayuda:
En este ejercicio se utiliza un ciclo dentro del cual se va a solicitar 100 números enteros al usuario, para
cada número se verifica si es un número primo (http://es.wikipedia.org/wiki/N%C3%BAmero_primo
http://mimosa.pntic.mec.es/jgomez53/matema/conocer/primos.htm )
Para los números que no son primos, se debe indicar el resultado de la suma de sus dígitos, por ejemplo, si el
usuario suministró el número 24 (que NO es un primo) el resultado a mostrar será 2 + 4, es decir la suma de
sus dígitos. Si el número suministrado es 252 el resultado a mostrar será 2 + 5 + 2
En este ejercicio se usan VARIOS ciclos, ya que se tiene uno para solicitar los 100 números, otro para validar
si el número es primo contando la cantidad de divisores que tiene, y otro para descomponer el número no
primo en sus dígitos ayudados con el div y el mod. Como ven por lo menos hay 3 ciclos.
Acción Principal
# procesa una secuencia de números enteros verificando si
# cada número es primo o el resultado de la suma de sus
# dígitos
Función esPrimo(Entero x): Lógico
# verifica si el número x es un número primo, contando la
# cantidad de divisores que tiene
Entero i, contDiv;
contDiv=0;
Entero i, n, x, primo, suma;
n=100; # cantidad de números procesados
Para i = 1 hasta n en 1 hacer
Escribir(“Suministre el número ” + i); Leer(x);
Si esPrimo(x) Entonces
Escribir(“El número “ + x + ” es primo”);
Else
Escribir(“El número “ + x + ” no es primo y la suma
de sus dígitos es: ” + sumaDígitos(x) );
FSi;
FPara;
# se verifica si x es igual a 0 o si X es menor que 0 por ser
# casos especiales, si es menor a 0 se transforma a positivo
Si (x==0) Entonces Retornar(Verdadero);
Else
Si (x<0) Entonces x = -1*x; # se voltea signo de x
FSi;
# con este Para se cuenta la cantidad de divisores de x
Para i=1 hasta x en 1 hacer
# se divide x entre cada valor de i, contando los i que
# los dividen exactamente
Si x mod i == 0 Entonces ContDiv = ContDiv + 1; FSi;
FPara;
FinAcción Principal;
Si (contDiv  2) Entonces
Sino
Retornar(Verdadero);
Retornar(Falso);
FSi;
FinFunción;
Pág. 2
Taller para Iterizers Nro 3
Universidad Central de Venezuela.
Escuela de Computación - Algoritmos y Programación
Profa. Yusneyi Carballo, Mayo 2013
Función sumaDígitos(Entero x): Entero
# suma los dígitos del número x
Entero sumaDig;
sumaDig=0;
Repetir
sumaDig = sumaDig + x mod 10;
x = x div 10;
Hasta x == 0;
Retornar(sumaDig);
FinFunción;
3. Un alpinista va rumbo a un pico de una montaña verificando sus avances en 16 puntos mediante la
observación de la altura a la que se encuentra. Construye un algoritmo que indique cuánto fue el ascenso
neto del alpinista, cuál fue el mayor cambio de altura y entre qué puntos se observó.
Resuelva utilizando Mientras
En la pregunta 3 no tiene sentido que declaren 16 variables.
Se lee el primer valor antes del ciclo. Luego dentro del ciclo se leen cada uno de los 15 valores restantes.
Para poder sacar la diferencia entre las alturas debes restar a la altura anterior (altAnt) la altura actual
(altAct). La primera altura (altAnt) es leída antes del ciclo y la altura actual (altAct) es la que leen dentro
del ciclo. Luego de hacer la resta, a la variable altAnt le asignas altAct, y le pides después al usuario la
siguiente altura la cual guardas en altAct. ES DECIR, altAnt es la variable que guarda la altura anterior a la
nueva que te da el usuario, así es que podemos sacar la resta entre ellas. El ascenso total es la suma de
todas las diferencias entre la altActu y la altAnt (resta de las alturas), PERO de los resultados que sean
positivos, ya que queremos saber la altura que se subió. Aunque en C++ no existe el Repetir ... hasta, sino el
Mientras ... FMientras (while ...do) y el hacer ... Mientras (do ... While), PERO en pseudocódigo vas a usar el
Repetir y el Mientras o el Para visto en clase.
Acción Ascenso
# procesa medidas de altura en n puntos del camino de
# un alpinista
Entero i, n, pAnt, pAct;
Real altAnt, altAct; Ascenso, mayorCambio;
mayorCambio=0;
n=16; # cantidad de puntos observados
ascenso=0; i = 1; altAnt = 0;
Función valorAbs(Real x): Real
# verifica si el valor x es menor que 0, en cuyo caso lo
# transforma a positivo, es la función valor absoluto o |x|
Si( x < 0) Entonces
Retornar( -1 * x );
Sino
Retornar( x );
FSi;
Mientras i  16 hacer
# a partir de la medida 2 se guarda la altura
FinFunción;
# del punto anterior
Si (i  2) Entonces altAnt = altAct;
FSi;
# se solicita la nueva altura
Escribir(“Suministre la altura del punto ” + i);Leer(altAct);
Si altAct > altAnt Entonces
# si la altura actual es mayor que la anterior, entonces
# se suma la distancia ascendida o subida, que es la
# resta entre ellas
Ascenso = Ascenso + (altAct - altAnt);
FSi;
Pág. 3
Taller para Iterizers Nro 3
Universidad Central de Venezuela.
Escuela de Computación - Algoritmos y Programación
Profa. Yusneyi Carballo, Mayo 2013
Si valorAbs(altAct – altAnt) > mayorCambio Entonces
mayorCambio = valorAbs(altAct – altAnt);
pAnt = i - 1; pAct = i;
FSi;
i = i + 1; #actualizamos el contador de puntos i
FMientras;
Escribir(“El ascenso del alpinista es ” + Ascenso + ”, la
mayor diferencia de altura es ” + mayorCambio + “ y se
ocurrió entre el punto ” + pAnt + “ y ” + pAct);
FinAcción Principal;
4. Algoritmo que obtenga la suma de los números pares que hay entre dos números leídos por teclado, es
decir, el usuario te va a indicar cual es el primer valor (num1), cual es el segundo valor (num2) y tu
algoritmo debe calcular y escribir cuántos números pares hay entre num1 y num2 y cuáles son.
El algoritmo debe considerar el caso de que num1 < num2, de que num1 ≥ num2, o el caso en que num1 =
num2, y funcione sin obligar al usuario a que el primer número sea el menor.
Resuelva utilizando Repetir
Acción procesarPares
# suma de los números pares entre dos números
# suministrados por el usuario
Entero num1, num2, suma, cuenta;
# se solicitan los datos de entrada al usuario
Escribir(“Suministre los dos números enteros entre
los cuales se desea calcular los pares”);
Leer(num1, num2);
sumaPares(num1, num2, suma, cuenta);
Escribir(“La suma de los números pares entre ” +
num1 + “ y ”+ num2 + “ es: ” + suma);
Escribir(“La cantidad de números pares encontrados
es: ” + cuenta);
FinAcción Principal;
Acción sumaPares(Entero num1, num2; Var Entero S, cont)
# suma los números pares entre num1 y num2
Entero inc, aux;
inc = 1; # si num1 es menor que num2 sumamos 1 para avanzar
Si (num1 > num2) Entonces
inc = -1;
# si num1 es mayor que num2 entonces debemos
# restar 1, se debe decrementar y no incrementar
FSi;
# inicializamos variables
aux = num1; S = 0; cont = 0;
Repetir
Si (aux mod 2 == 0) entonces
S = S + aux; cont = cont + 1;
FSi;
aux = aux + inc; # inc suma o resta 1 según num1 es menor o
# mayor que num2
Hasta aux == (num2+ inc); #nos detenemos en el siguiente a num2
FinAcción;
Pág. 4
Taller para Iterizers Nro 3
Universidad Central de Venezuela.
Escuela de Computación - Algoritmos y Programación
Profa. Yusneyi Carballo, Mayo 2013
5. Construya un algoritmo en donde se traduzca la siguiente expresión matemática a pseudocódigo y se calcule
su resultado. Realice las validaciones necesarias sobre los valores i, n y x.
Resuelva utilizando Para
n
i
i 1
k 1
10   i * (k * n / x)3
x
Acción Fórmula
# traduce la fórmula con sumatoria y multiplicatorias a un algoritmo
Entero i, n, k, x, Suma, Multi;
Real Res1, Res2;
# se solicita y valida el valor de n, el cual debe ser  1
Repetir
Escribir(“Suministre el valor de n para la fórmula”);
Leer(n);
Hasta n  1;
# se solicita y valida el valor de x, el cual debe ser  0 por la división de la multiplicatoria
Repetir
Escribir(“Suministre el valor de la constante x”);
Leer(x);
Hasta x  0;
Res1 = (10 ^ x ) ^ (1/2); # primera parte de la fórmula
Res2 = n / x; # esta parte también es constante
# ciclos que calculan la sumatoria y la multiplicatoria
Suma = 0;
Para i = 1 hasta n hacer
# este primer ciclo es para la sumatoria
Multi = 1; # se reinicia Multi a 1 en cada ciclo de la sumatoria
Para k = 1 hasta i hacer
# este segundo ciclo es para la multiplicatoria
Multi = Multi * (k * Res2) ^ 3; #multiplicatoria
FPara;
Suma = Suma + i * Multi; # sumatoria de los valores
FPara;
Escribir(“Resultado de la fórmula: ” + (Res1 – Suma) );
Acción Fórmula;
Ciudad Universitaria de Caracas, Patrimonio Mundial
07.Mayo.2013 / 19.Mayo.2013
Pág. 5
Descargar