Prof. Arón Elías Herrera Ponte Pág. 2
Capítulo 1.
Estructuras Secuenciales
La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso.
En Pseudocódigo una Estructura Secuencial se representa de la siguiente forma:
Observe el siguiente problema de tipo cotidiano y sus respectivos algoritmos representados en Pseudocódigo y en diagramas de flujos:
• Tengo un teléfono y necesito llamar a alguien pero no sé como hacerlo.
El anterior ejemplo es un sencillo algoritmo de un problema cotidiano dado como muestra de una estructura secuencial. Ahora veremos los componentes que pertenecen a ella:
Acción 1
Acción 2
Acción N INICIO
Prof. Arón Elías Herrera Ponte Pág. 3 Asignación
La asignación consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
• Simples: Consiste en pasar un valor constante a una variable (a 15)
• Contador: Consiste en usarla como un verificador del numero de veces que se
realiza un proceso (a a + 1)
• Acumulador: Consiste en usarla como un sumador en un proceso (a a + b)
• De trabajo: Donde puede recibir el resultado de una operación matemática que
involucre muchas variables (a c + b*2/4).
En general el formato a utilizar es el siguiente:
< Variable > <valor o expresión >
El símbolo debe leerse “asigne”.
Escritura o salida de datos
Consiste en mandar por un dispositivo de salida (por ejemplo: monitor o impresora) un resultado o mensaje. Esta instrucción presenta en pantalla el mensaje escrito entre comillas o el contenido de la variable. Este proceso se representa así como sigue:
Pseudocódigo
ESCRIBIR(“MENSAJE CUALQUIERA”) ESCRIBIR( <variable> )
ESCRIBIR(“La variable es: ”, <variable>)
Lectura o entrada de datos
La lectura o entrada de datos consiste en recibir desde un dispositivo de entrada (por ejemplo: el teclado) un valor o dato. Este dato va a ser almacenado en la variable que aparece a continuación de la instrucción. Esta operación se representa así:
Pseudocódigo LEER(<variable 1> ) LEER( <variable 2> ) LEER(<variable 3> )
DECLARACION DE VARIABLES Y CONSTANTES
La declaración de variables es un proceso que consiste en listar al principio del algoritmo todas las variables que se usarán, además de colocar el nombre de la variable se debe decir qué tipo de variable es.
ENTERO : Contador ENTERO : Edad, I
CADENA_DE_CARACTERES : Direccion REAL : Salario_Basico
CARACTER : Opcion
Prof. Arón Elías Herrera Ponte Pág. 4 Salario_Basico es una variable de tipo real, Opcion es de tipo carácter y la variable Direccion está declarada como una variable alfanumérica de cadena de caracteres.
En el momento de declarar constantes debe indicarse usando la palabra CONSTANTE y colocarse su respectivo valor.
CONSTANTE Pi 3.14159
CONSTANTE Msg “Presione una tecla y continue” CONSTANTE ALTURA 40
Cuando se trabaja con algoritmos por lo general no se acostumbra a declarar las variables ni tampoco constantes debido a razones de simplicidad, es decir, no es camisa de fuerza declarar las variables. Sin embargo en este curso lo haremos para todos los algoritmos que realicemos, con esto logramos hacerlos más entendibles y organizados y de paso permite acostumbrarnos a declararlas ya que la mayoría de los lenguajes de programación (entre ellos el C++) requieren que necesariamente se declaren las variables que se van a usar en los programas.
Veamos algunos ejemplos donde se aplique todo lo que hemos visto hasta el momento sobre algoritmos:
Ejemplo 1: Escriba un algoritmo que pregunte por dos números y muestre como resultado la suma de estos. Use Pseudocódigo y diagrama de flujos.
Pseudocódigo:
VARIABLES ENTERO : Num1, Num2, Suma
ACCION Suman_de_numeros ESCRIBIR("Diga dos números:")
LEER(Num1, Num2)
Suma Num1 + Num2 ESCRIBIR("La Suma es:", Suma) FIN _ACCION
Prof. Arón Elías Herrera Ponte Pág. 5
Pseudocódigo:
VARIABLES ENTERO : Base, Altura
ACCION Area_de_triangulo ESCRIBIR("Diga la Base:")
LEER(Base)
ESCRIBIR("Diga la Altura:") LEER(Altura)
ESCRIBIR("Área del triangulo:",
Prof. Arón Elías Herrera Ponte Pág. 6 Práctica Dirigida N° 1
Estructuras Secuenciales Problema 1:
Hacer un algoritmo que permita obtener el tiempo en segundos, si se ingresa el tiempo en horas, minutos y segundos. ( Ejm. 15 hrs 20 min 30 seg )
Pseudocódigo
VARIABLES ENTERO_LARGO : hora, minuto, segundo, R
ACCION Convertir_a_segundos ESCRIBIR("Ingrese las Horas :") LEER(hora)
ESCRIBIR("Ingrese los Minutos :") LEER(minuto)
ESCRIBIR("Ingrese los Segundos :") LEER(segundo) R hora*3600 + minuto*60 + segundo
ESCRIBIR("La hora en segundos es :", R) FIN _ACCION
Diagrama de Flujo
INICIO
FIN
ENTERO_LARGO : hora, minuto, segundo, R "Ingrese las Horas:"
hora
minuto
segundo
"Ingrese los Minutos:"
"Ingrese los Segundos:"
Prof. Arón Elías Herrera Ponte Pág. 7 C++ #include <iostream.h> #include <conio.h> void main(){ clrscr();
long hora, minuto, segundo, R;
cout<<"Ingrese las Horas :"; cin>>hora; cout<<"Ingrese los Minutos :"; cin>>minuto; cout<<"Ingrese los Segundos :"; cin>>segundo; R = hora*3600 + minuto*60 + segundo;
cout<<"La hora en segundos es :"<<R; getch();
}
Problema 2:
Hacer un algoritmo que permita obtener la temperatura en grados Fahrenheit, si se ingresa una temperatura en grados Celsius.
Pseudocódigo
VARIABLES
REAL : temperatura, R ACCION Convertir_temperatura
ESCRIBIR("Ingrese la temperatura :") LEER(temperatura)
R temperatura*9/5 + 32 ESCRIBIR("La temperatura en grados Fahrenheit es :", R , " F°")
FIN_ACCION C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); double temperatura, R;
cout<<"Ingrese la temperatura :"; cin>>temperatura; R = temperatura*9/5 + 32;
cout<<"La temperatura en grados Fahrenheit es :"<<R<<" F°"; getch();
Prof. Arón Elías Herrera Ponte Pág. 8 Diagrama de Flujo
Problema 3:
Hacer un algoritmo que permita obtener la suma de los ‘N’ primeros números naturales. Pseudocódigo
VARIABLES
ENTERO : n, R ACCION Hallar_suma
ESCRIBIR("Ingrese la cantidad de números :") LEER(n)
R n*(n+1)/2 ESCRIBIR("La suma de los números es : ", R) FIN_ACCION C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); int n, R;
cout<<"Ingrese la cantidad de números:"; cin>>n; R=n*(n+1)/2;
cout<<"La suma de los "<<n<<" primeros números es:"<<R; getch(); } INICIO FIN "Ingrese la temperatura :" temperatura
"La temperatura en grados Fahrenheit es :", R , " F°"
REAL : temperatura, R
Prof. Arón Elías Herrera Ponte Pág. 9 Diagrama de Flujo
Problema 4:
Hacer un algoritmo que permita obtener el área de un triángulo, dado como datos el valor de 2 lados del y el ángulo entre estos.
Pseudocódigo VARIABLES
REAL : L1, L2, Ang, R
ACCION Hallar_area_triangulo
ESCRIBIR("Ingrese el valor del lado del triangulo : ") LEER(L1)
ESCRIBIR("Ingrese el valor del lado del triangulo : ") LEER(L2)
ESCRIBIR("Ingrese el valor del ángulo en sexagesimal: ") LEER(Ang)
R L1*L2*seno(Ang*PI/180)/2
ESCRIBIR("El área del triangulo es : ", R) FIN_ACCION C++ #include <iostream.h> #include <conio.h> #include <math.h> #define PI 3.14159 void main(){ clrscr(); double L1, L2, Ang, R; INICIO FIN "Ingrese la cantidad de números :" n
"La suma de los números es : ", R ENTERO : n, R
Prof. Arón Elías Herrera Ponte Pág. 10 cout<<"Ingrese el valor del lado del triangulo : "; cin>>L1;
cout<<"Ingrese el valor del lado del triangulo : "; cin>>L2; cout<<"Ingrese el valor del ángulo en sexagesimal: "; cin>>Ang; R = L1*L2*sin(Ang*PI/180)/2;
cout<<"El área del triangulo es : "<<R; getch();
}
Diagrama de Flujo
INICIO
FIN
"Ingrese el valor del lado del triangulo : "
"El área del triangulo es : ", R REAL : L1, L2, Ang, R
R L1*L2*seno(Ang*PI/180)/2 L1
"Ingrese el valor del lado del triangulo : "
L2
"Ingrese el valor del ángulo en sexagesimal:
Prof. Arón Elías Herrera Ponte Pág. 11 Problema 5:
Hacer un algoritmo que permita obtener el monto final de una cuenta de ahorros, dado como datos un monto inicial (capital) y un tiempo T en años.
a) Para una tasa de interés anual R simple.
b) Para una tasa de interés anual R compuesto (capitalizable en años) Pseudocódigo
VARIABLES
REAL : capital,tasa, R ENTERO : tiempo ACCION Hallar_monto_total
ESCRIBIR("Ingrese el capital : ") LEER(capital)
ESCRIBIR("Ingrese el tiempo : ") LEER(tiempo)
ESCRIBIR("Ingrese la tasa de interés: ") LEER(tasa) R capital*(1+tasa*tiempo/100)
ESCRIBIR("El Monto Final a Interés Simple es : ", R)
R capital*potencia((1+tasa/100),tiempo)
ESCRIBIR("El Monto Final a Interés Compuesto es : ", R) FIN_ACCION C++ #include <iostream.h> #include <conio.h> #include <math.h> void main(){ double capital,tasa, R; int tiempo;
cout<<"Ingrese el capital : "; cin>>capital; cout<<"Ingrese el tiempo : "; cin>>tiempo; cout<<"Ingrese la tasa de interés: "; cin>>tasa; R = capital*(1+tasa*tiempo/100);
cout<<"\nEl Monto Final a Interés Simple es : "<<R; R = capital*pow((1+tasa/100),tiempo);
cout<<"\nEl Monto Final a Interés Compuesto es : "<<R; getch();
Prof. Arón Elías Herrera Ponte Pág. 12 Diagrama de Flujo
INICIO
FIN
"Ingrese el capital : "
"El Monto Final a Interés Simple es : ", R
REAL : capital, tasa, R ENTERO : tiempo R capital*(1+tasa*tiempo/100) capital "Ingrese el tiempo : " tiempo "Ingrese la tasa de interés : " tasa
"El Monto Final a Interés Compuesto es : ", R
Prof. Arón Elías Herrera Ponte Pág. 13 Problema 6:
‘N’ postes de teléfono están situados uno detrás de otro a una distancia de ‘D’ metros entre sí. ¿Cuál es la distancia del tercer al último poste?
Pseudocódigo
Entre el poste 1 al ‘N’ se determinan espacios de ‘D’ metros cada uno; luego del 3er poste al ‘N’ se tiene = ( N – 3 ) D
VARIABLES ENTERO : N REAL : D, R
ACCION Hallar_distancia
ESCRIBIR("Ingrese el numero de postes : ") LEER(N) ESCRIBIR("Ingrese la distancia entre cada poste : ") LEER(D) R ( N - 3 )*D
ESCRIBIR("La distancia entre el 3er y el último poste es: ", R, "m") FIN_ACCION C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); int N; double D, R;
cout<<"Ingrese el numero de postes : ";cin>>N; cout<<"Ingrese la distancia entre cada poste : ";cin>>D; R = ( N - 3 )* D;
cout<<"La distancia entre el 3er y el ultimo poste es : "<<R<<" m"; getch();
Prof. Arón Elías Herrera Ponte Pág. 14 Diagrama de Flujo
Problema 7:
El gerente de ventas de cierta compañía reduce su promedio de producción en N%. Si el promedio final fue T, entonces el promedio original fue.
Pseudocódigo Sean Po = Promedio original Pf = Promedio final Como el N% es = N*Po/100 y Pf = T Entonces T = Po – N*Po/100 Entonces Po = 100*T/(100-N) VARIABLES REAL : N, T, R ACCION Hallar_promedio_inicial
ESCRIBIR("Ingrese el promedio final : ") LEER(T) ESCRIBIR("Ingrese la tasa de reducción : ") LEER(N) R 100*T/(100 - N )
ESCRIBIR("El promedio inicial es : ", R) FIN_ACCION INICIO FIN "Ingrese el número de postes : " ENTERO : N REAL : D, R R ( N - 3 )*D N "Ingrese la distancia entre cada poste: "
D
Prof. Arón Elías Herrera Ponte Pág. 15 C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); double N, T, R;
cout<<"Ingrese el promedio final : "; cin>>T; cout<<"Ingrese la tasa de reducción : "; cin>>N; R= 100*T/(100 - N);
cout<<"El promedio inicial es : "<<R; getch();
}
Diagrama de Flujo
Problema 8:
Una varilla de ‘a’ cm de longitud se corta en dos partes. La parte menor mide ¼ del total, luego con la parte mayor se repite el procedimiento. ¿Cuánto mide el pedazo más largo? Pseudocódigo INICIO FIN "Ingrese el promedio final : " REAL : N, T, R R 100*T/(100 - N ) T "Ingrese la tasa de reducción : " N
Prof. Arón Elías Herrera Ponte Pág. 16 El pedazo mas largo es : 3a/4 – 3a/16 = 9a/16
VARIABLES
REAL : a, R
ACCION Hallar_tamanio_restante
ESCRIBIR("Ingrese la longitud de la varilla : ") LEER(a) R 9*a/16
ESCRIBIR("El pedazo mas largo mide : ", R) FIN_ACCION C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); double a, R;
cout<<"Ingrese la longitud de la varilla :"; cin>>a; R = 9*a/16;
cout<<"El pedazo mas largo mide : "<<R<<" cm"; getch(); } Diagrama de Flujo INICIO FIN "Ingrese la longitud de la varilla : " REAL : a, R R 9*a/16 a
Prof. Arón Elías Herrera Ponte Pág. 17 Problema 9:
El ‘a’ por ciento de ‘P’ habitantes de un cierto país son hombres. Si el ‘b’ por ciento del número de mujeres saben leer y escribir, entonces el número de mujeres que no saben leer ni escribir es:
Pseudocódigo
El número de mujeres es igual a : P – ( a/100 )*P = ( 1 – a/100 )*P
El número de mujeres que saben leer y escribir es : b*( 1 – a/100 )*P/100
Luego el número de mujeres que no saben leer ni escribir es: = ( 1 – a/100 )*P – b*( 1 – a/100 )*P/100
= ( 1 – a/100 )*P*( 1 – b/100 ) VARIABLES
REAL : P, a, b, R
ACCION Hallar_cantidad_analfabetos
ESCRIBIR("Ingrese la cantidad de habitantes : ") LEER(P)
ESCRIBIR("Ingrese el porcentaje de habitantes hombres : ") LEER(a)
ESCRIBIR("Ingrese el porcentaje de habitantes mujeres que saben leer y escribir : ")
LEER(b)
R ( 1 - a/100 )*( 1 - b/100 )*P
ESCRIBIR("El numero de mujeres que no saben leer ni escribir es : ",R)
FIN_ACCION C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); double P, a, b, R;
cout<<"Ingrese la cantidad de habitantes : "; cin>>P;
cout<<"Ingrese el porcentaje de habitantes hombres : "; cin>>a; cout<<"Ingrese el porcentaje de habitantes mujeres que saben leer y escribir : "; cin>>b;
R = ( 1 - a/100 )*( 1 - b/100 )*P;
cout<<"El numero de mujeres que no saben leer ni escribir es : "<<R; getch();
Prof. Arón Elías Herrera Ponte Pág. 18 Diagrama de Flujo
Problema 10:
Juan puede hacer un trabajo en ‘N’ días. Si Carlos es un X% más eficiente que Juan, ¿ En qué tiempo haría Carlos el mismo trabajo ?
Pseudocódigo
Juan en un día hará : 1/N
Carlos en un día hará: 1/N + X/(100*N) = (100 + X ) / 100*N En un día Carlos hará (100 + X ) / 100*N
Entonces, todo el trabajo lo hará en 100*N/( 100 + X ) VARIABLES
REAL : N, X, R
ACCION Hallar_tiempo_obra
ESCRIBIR("Ingrese el numero de días : ") LEER(N)
ESCRIBIR("Ingrese el porcentaje de eficiencia extra : ") LEER(X) R 100*N/( 100 + X )
ESCRIBIR("El tiempo que haría la obra es : ", R, "días") FIN_ACCION INICIO FIN "Ingrese la cantidad de habitantes: " REAL : P, a, b, R R ( 1 - a/100 )*( 1 - b/100 )*P P
"El número de mujeres que no saben leer
ni escribir es : ", R
"Ingrese el porcentaje de habitantes hombres:
a
"Ingrese el porcentaje de habitantes mujeres que saben leer y escribir: "
Prof. Arón Elías Herrera Ponte Pág. 19 C++ #include <iostream.h> #include <conio.h> void main(){ clrscr(); double N, X, R;
cout<<"Ingrese el numero de días : "; cin>>N;
cout<<"Ingrese el porcentaje de eficiencia extra : "; cin>>X; R = 100*N/( 100 + X );
cout<<"El tiempo que haría la obra es : "<<R<<" días."; getch(); } Diagrama de Flujo INICIO FIN "Ingrese el numero de días: " REAL : N, X, R R 100*N/( 100 + X ) N
"El tiempo que haría la obra es : ", R, "días" "Ingrese el porcentaje