Sie sind auf Seite 1von 37

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Facultad de Ingeniería de Sistemas e Informática


E.A.P INGENIERÍA DE SISTEMAS

ALGORÍTMICA I

PRACTICA 1: Programas Secuenciales

Ejemplos en C/C++
# include <iostream>
int main(){
printf("\n");
printf("hola");
printf("\n");
printf("\n");
system("pause");
return 0;
}

*******************************************************
# include <iostream>
using namespace std;
int main(){
char nombre[20];
cout<<"Nombre";
cin.getline(nombre,30);
cout<<"Buenos dias"<<nombre;
system("pause");
return 0;
}

ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ

1. La fuerza de atracción entre dos masas, m1 y m2 separadas por una distancia d, está dada por la
fórmula :

G * m1 * m2
F
d2
Donde G es la constante de gravitación universal, G=6.673x10-8 cm3/g.seg2.
Elaborar un programa que lea la masa de dos cuerpos y la distancia entre ellos y, a continuación, obtenga
la fuerza gravitacional entre ella. La salida debe ser en dinas; una dina es igual a gr.cm/seg2.

# include <iostream>
# include <cstdlib>
using namespace std;
# define G 6.673E-8
int main(){
int m1,m2,d;
double F;
printf("Calculando fuerza de atraccion entre dos masas: ");
printf("\nMasa 1 (en gramos): ");
scanf("%i",&m1);
printf("\nMasa 2 (en gramos): ");

1
scanf("%i",&m2);
printf("\nDistancia entre las masas (en cms): ");
scanf("%i",&d);
F=(G*m1*m2)/(d*d);
printf("\nFuerza gravitacional entre ellas: %8.2lf dinas",F);
printf("\n");
system("pause");
return 0;
}

2. La famosa ecuación de Einstein para conversión de una masa m en energía viene dada por la fórmula:
E=mc2, donde c es la velocidad de la luz y su valor es: c=2.99792458x10 10 cm/sg. Elaborar un programa
que lea una masa en gramos y obtenga la cantidad de energía producida cuando la masa se convierte en
energía. Nota: Si la masa se da en gramos, la fórmula produce la energía en ergios.

3. Elaborar un programa para convertir una medida dada en pies a sus equivalentes en: a) yardas; b)
pulgadas; c) centímetros, y d) metros; donde (1 pie = 12 pulgadas, 1 yarda = 3 pies, 1 pulgada = 2,54 cm,
1m = 100 cm). Leer el número de pies y mostrar por pantalla el número de yardas, pies, pulgadas,
centímetros y metros.

4. Elabore un programa que calcule e imprima el costo de producción de un artículo, teniendo como datos la
descripción y el número de unidades producidas. El costo se calcula multiplicando el número de unidades
producidas por un factor de costo de materiales de 3.5 y sumándole al producto un costo fijo de 10000.

5. Elaborar un programa que calcule e imprima el costo de un terreno cuadrado o rectangular, teniendo
como datos la anchura y la longitud en metros, y el costo del metro cuadrado.

6. Elaborar un programa para calcular el promedio de calificaciones de un estudiante. Los datos disponibles
son el nombre y las cuatro calificaciones de los exámenes. La información requerida es el Nombre y las
calificaciones. La calificación final es obtenida al multiplicar las calificaciones 1, 2, 3 y 4 por los
porcentajes 30%, 20%, 10% y 40%, respectivamente, y sumando los productos

7. La velocidad de la luz es 300,000 kilómetros por segundo. Elaborar un programa que lea un tiempo en
segundos e imprima la distancia que recorre en dicho tiempo.

8. Hacer un programa que obtenga e imprima el valor de Y a partir de la ecuación


Y = 3X2 + 7X – 15
solicitando como dato de entrada el valor de X.

9. Una temperatura en grados Centígrados (C) se puede convertir a su equivalente Fahrenheit (F) con la
formula:

F = (9/5) C + 32 de Fahrenheit a Centígrados con la formula: C = (F – 32)(5/9)

Elaborar un programa que lea una temperatura en grados centígrados y obtenga e imprima la
temperatura Fahrenheit equivalente.

10. Elaborar un programa que lea el artículo y su costo: la utilidad es el 150% y el impuesto es el 19%;
calcular e imprimir artículo, utilidad, impuesto y precio de venta.

11. Elaborar un programa que permita leer valores para X, Y, Z, W; e imprima el valor de F.

F
4x 2
y 2 2 zw  2

4x 2
3

b 4

12. Elaborar un programa que lea el radio (r) de una esfera, calcule e imprima el volumen y el área.
4r3

3
VOLUMEN = AREA = 4r2

13. Elaborar un programa que lea el valor de w e imprima el valor de Z.


w2
1 
z e 2

2

14. Elaborar un programa que lea la cantidad de dólares a comprar y el tipo de cambio (costo de un dólar) en:
yenes, pesetas, libras esterlinas y nuevos soles; calcular e imprimir la cantidad a pagar en yenes,
pesetas, libras esterlinas y nuevos soles.

15. Elaborar una programa que permita leer el tamaño de un ángulo en radianes e imprimir la tangente,
cotangente, secante y cosecante.

Tangente = seno Secante = 1


Coseno coseno

Cotangente = coseno cosecante = 1


Seno seno

16. Elaborar un programa que permita leer el tamaño de un ángulo en grados e imprima el seno, coseno y
arco tangente. Deben convertirse los grados leídos a radianes antes de hacer los cálculos.

17. Elaborar un programa que permita leer valores para A y B; e imprima Y, Z y W.

Y = 3a2b2 2a W = 2aa ( 3a2b2 2a )

12a1/2
Z =
b3/4

PRACTICA 2: Condicionales: Simples, Dobles. Selección múltiple

Ejemplos en C/C++

1. Elabore un programa para calcular e imprimir el precio de un terreno del cual se tiene los siguientes
datos: largo, ancho y precio por metro cuadrado. Si el terreno tiene mas de 400 metros cuadrados se
hace un descuento del 10%.

2. Elabore un programa para calcular e imprimir los valores de X y Y, teniendo como entrada el valor de X y
calculando el de Y de acuerdo con las siguientes condiciones

Si X < 0 entonces Y = 3X + 6
Si X > = 0 entonces Y = X2 + 6

3. De acuerdo con la clase de sus ángulos los triángulos se clasifican en:

Rectángulo tiene un ángulo recto (igual a 90°)


Obtusángulo tiene un ángulo obtuso (mayor que 90° pero menor que 180°)
Acutángulo los tres ángulos son agudos (menor que 90°)

3
Elaborar un programa que permita leer el tamaño de los tres ángulos (A, B,C) de un triángulo e imprima
de qué tipo es.

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv) {


int a,b,c;
printf("Dar tres valores de angulos para determinar el tipo de triangulo");
cin>>a>>b>>c;
if((a+b+c)==180){
if(a==90 || b==90 || c==90){
printf("El tipo es triangulo rectangulo");
}
else {
if((a>90 && a<180) || (b>90 && b<180) || (c>90 && c<180))
printf("El tipo es triangulo obtusangulo");
else
printf("El tipo es triangulo acutangulo");

}
}
else
printf("No forman los valores un triangulo");
cout<<"\n";
printf("Hola");
printf("\n");
printf("\n");
system("pause");
return 0;

4. Elabore un programa que permita leer los datos de un empleado: Nombre, Tipo de empleado, número de
horas trabajadas y pago por hora; calcular e imprimir el sueldo a pagar. Si el empleado es tipo 1 se le
pagan las horas extras (más de 40 horas) a 1.5 del pago por cada hora, si es tipo 2 a 2, si es tipo 3 a 2.5
y si es tipo 4 a 3 veces el pago por hora.

5. Elabore un programa que lea el número del mes entre 1 y 12 y, que imprima el nombre del mes
correspondiente: si es 1 ‘Enero’, si es 2 ‘Febrero’,...etc.

6. Elaborar un programa que permita hacer conversiones de temperaturas entre grados Fahrenheit, Celsius,
Kelvin y Rankine. Primero debe preguntar qué tipo de grados quiere convertir. Por ejemplo; si se le indica
que se desea convertir una temperatura en grados Fahrenheit, debe leer la cantidad de grados, y luego
calcular e imprimir su equivalente en grados Celsius, kelvin y Rankine, y así, debe hacer lo mismo para
cada uno de los otros tipos. Para convertir a Celsius la temperatura Fahrenheit se le resta 32 y se
multiplica por 5/9. para convertir a Kelvin, se le suma 273 a los grados Celsius. Para convertir a Rankine a
los grados Fahrenheit se le suma 460.

7. Un sistema de ecuaciones lineales

ax + by = c
dx + ey = f

se puede resolver con las formulas


ce – bf af – cd
X = ae - bd Y = ae - bd si (ae - bd) < > 0

4
Elaborar un programa que lea los coeficientes a, b, c, d, e y f y que calcule e imprima los valore de X y Y.
Si (ae - bd) < > 0; debe calcular e imprimir los valores de X y Y, en caso contrario debe imprimir un
mensaje que indique que no tiene solución.

8. Dar apellido y primera letra del nombre para convertir a nro. Telefónico

#include <iostream>

using namespace std;

int main()
{
char nom[30];
int i=0;
char cx;
cout << "Dar apellido y primera letra del nombre para convertir a nro. telefonico"<< endl;
//cout<<"\n Primera letra: ";
cin.getline(nom,28);
while(nom[i]!='\0'){
switch(nom[i]){
case 'a':case 'b':case 'c': cx='2';break;
case 'd':case 'e':case 'f': cx='3';break;
case 'g':case 'h':case 'i': cx='4';break;
case 'j':case 'k':case 'l': cx='5';break;
case 'm':case 'n':case 'ñ':case 'o': cx='6';break;
case 'p':case 'q':case 'r':case 's': cx='7';break;
case 't':case 'u':case 'v': cx='8';break;
case 'w':case 'x':case 'y':case 'z': cx='9';break;
default : break;
}
if(nom[i]==' '){
cout<<"*";
}
else cout<<cx;
i++;
}
cout<<"*"<<endl;
return 0;
}

PRACTICA 3: Iterativas – Pre condicionales

Ejemplos en C/C++

1. Elabore un programa que lea un valor N y que imprima un triángulo de asteriscos, como se muestra a
continuación, si el valor leído es 5 imprimir:
*
**
***
****
*****

2. Elaborar un programa que permita leer un número N par; y, calcule e imprima la suma de los números
pares del 2 hasta el número leído. Si el número leído es menor a 2 debe imprimir un mensaje de error.

3. Elaborar un programa que permita leer el valor inicial y el valor final en grados Fahrenheit ; e imprima una
tabla con equivalencias en grados Centígrados, desde el valor inicial hasta el valor final de 1 en 1.

5
Fahrenheit Centígrados
Valor Inicial 99.99
- 99.99
-
-
valor final 99.99

4. Elaborar un programa que imprima la secante, cosecante y tangente de X; para valores de X desde –1
hasta 1 con intervalos de 0.1. Debe imprimir una tabla:
X Secante X Cosecante X Tangente X
-1.0 99.99 99.99 99.99
-0.9 99.99 99.99 99.99
.
.
1.0 99.99 99.99 99.99
5. Elaborar un programa que permita que los valores de los coeficientes a, b, c; se comporten así: B debe ir
de 1 hasta 7. C debe ir de 7 a 1. A debe tomar cada vez que la diferencia de B – C. Y, que imprima para
cada juego de valores de a, b, c; si tiene raíz única, raíces complejas o raíces reales.

6. Elaborar un programa para calcular la cantidad que se tendría ahorrada después de 10 años, si se
deposita mil nuevos soles mensuales a una tasa de interés mensual de 3%, capitalizable cada mes, es
decir, que al capital se le agregan los intereses .

7. El departamento de Policía y tránsito de la ciudad de Hermosillo, tiene los datos de las infracciones
levantadas por sobrepasar los limites de velocidad establecidos. El departamento dividió a la ciudad en
tres zonas, para cada una de las cuales desea obtener datos estadísticos que muestran las infracciones
levantadas por el motivo indicado en el párrafo anterior. Por cada infracción se tiene los siguientes datos:

 Número de placa (registro) del vehículo.


 Zona en la que fue la infracción (1,2,3).
 Límite de velocidad en kilómetros por hora.
 Velocidad a la que iba el vehículo en kilómetros por hora.

Crear un programa para elaborar el reporte siguiente:

INFRACCIONES A LOS LIMITES DE VELOCIDAD

VEHÍCULO REG. VELOCIDAD MULTA

999999999 999 999 9,999.99


999999999 999 999 9,999.99
.
.
.
999999999 999 999 9,999.99

ZONA 1 : TOTAL DE INFRACCIONES : 999


MONTO RECAUDADO EN MULTAS : 9,999.99

ZONA 2 : TOTAL DE INFRACCIONES : 999


MONTO RECAUDADO EN MULTAS : 9,999.99

ZONA 3 : TOTAL DE INFRACCIONES : 999


MONTO RECAUDADO EN MULTAS : 9,999.99

Nota: El monto de la multa se calcula multiplicando S/.3.00 por cada kilómetro por hora que se
exceda el límite de velocidad.

8. Una compañía manufacturera fabrica el producto A. Para fabricar una unidad de dicho producto se
requiere los siguientes materiales:

6
Material 1: 3 unidades
Material 2: 4 unidades
Material 3: 1 unidad
Material 4: 2 unidades
Material 5: 3 unidades
Material 6: 2 unidades

Se tiene como datos el costo de una unidad de cada uno de los seis materiales. Elaborar un programa
que lea los costos de los materiales, luego que lea pedidos del producto A en cada pedido se tiene el dato
cantidad de unidades del producto A; cuando termine de leer los pedidos, imprimir:

LISTADO DE MATERIALES REQUERIDOS


MATERIAL CANTIDAD DE UNIDADES COSTO ESTIMADO

1 999 99,999.99
2 999 99,999.99
3 999 99,999.99
4 --- --------
5 --- --------
6 999 99,999.99

COSTO TOTAL 99,999.99

9. Elaborar un programa que emita el reporte de un aumento de sueldos siguientes

AUMENTOS DE SUELDOS
NOMBRE SUELDO ANTERIOR SUELDO ACTUAL

XXXXXXXXXXXXXXXXX 99,999.99 99,999.99


XXXXXXXXXXXXXXXXX 99,999.99 99,999.99
.
.
.
XXXXXXXXXXXXXXXXX 99,999.99 99,999.99

TOTAL 999,999.99 999,999.99

Datos: Nombre, Sueldo mensual, tipo empleado (1–5).

Cálculo del nuevo sueldo es:


Si tipo empleado es 1 se incrementa el 5%
Si tipo empleado es 2 se incrementa el 7%
Si tipo empleado es 3 se incrementa el 10%
Si tipo empleado es 4 se incrementa el 14%
Si tipo empleado es 5 se incrementa el 18%

PRACTICA 4: Iterativas - Post Condicionales


1. Elaborar un programa que imprima el siguiente reporte:

COSTO DE PRODUCCIÓN
UNIDADES FACTOR COSTO COSTO DE
ARTICULO PRODUCIDAS COSTO FIJO PRODUCCION

XXXXXXXXXXXXXXXXX 9999 999.99 99,999.99 999,999.99

7
XXXXXXXXXXXXXXXXX 9999 999.99 99,999.99 999,999.99
.
.
XXXXXXXXXXXXXXXXX 9999 999.99 99,999.99 999,999.99

TOTAL 999 ARTICULOS 99,999,999.99

Datos disponibles por cada articulo:


Descripción
Cantidad de unidades producidas
Factor de costo de materiales
Costo fijo
Cálculo del costo de producción =
Número de unidades producidas X Factor de costo de materiales + costo fijo

Al final imprimir el total de artículos procesados. Y el total general del costo de producción.

2. Elaborar un programa que permita el siguiente reporte:

PRECIOS DE VENTA

COSTO DE PRECIO DE
ARTÍCULO PRODUCCIÓN UTILIDAD IMPUESTO VENTA

XXXXXXXXXX 99,999.99 99,999.99 99,999.99 999,999.99


XXXXXXXXXX 99,999.99 99,999.99 99,999.99 999,999.99
.
.
XXXXXXXXXX 99,999.99 99,999.99 99,999.99 999,999.99

TOTAL 999 99,999.99 99,999.99 99,999.99 999,999.99

Datos disponibles para cada artículo:


Descripción
Costo de producción

Cálculos:
Utilidad = 120% del costo de producción
Impuesto = 15% (costo de producción + utilidad)
Precio de venta = costo de producción + utilidad +impuesto

3. Elaborar un programa para imprimir, una factura que contenga los datos de los artículos vendidos a un
cliente, y que tenga el siguiente formato:

FACTURA
NOMBRE DEL CLIENTE: XXXXXXXXXXXXXXXXXXXXXXXXX
PRECIO PRECIO
ARTICULO CANTIDAD UNITARIO TOTAL

XXXXXXXXXXXXXXXXX 999 99,999.99 999,999.99


XXXXXXXXXXXXXXXXX 999 99,999.99 999,999.99
.
.

8
XXXXXXXXXXXXXXXXX 999 99,999.99 999,999.99

SUBTOTAL 9,999,999.99
IMPUESTO 9,999,999.99
19%
TOTAL 9,999,999.99

Datos disponibles para cada artículo:


Descripción
Cantidad de artículos
Precio unitario de venta
Además se tiene el nombre del cliente

|Cálculos
Precio total = Cantidad de artículos X precio unitario
Subtotal = La suma de los precios totales
Impuesto = 19% del subtotal
Total = Subtotal + Impuesto

4. Elabore un programa que imprima el siguiente reporte:

NOMINA QUICENAL
NOMBRE SDO. BRUTO IMPUESTO SDO. NETO

XXXXXXXXXXXXXXXXX 999,999.99 999,999.99 999,999.99


XXXXXXXXXXXXXXXXX 999,999.99 999,999.99 999,999.99
.
.
XXXXXXXXXXXXXXXXX 999,999.99 999,999.99 999,999.99

TOTAL 999 999,999.99 999,999.99 999,999.99

Datos disponibles por cada empleado:


Nombre
Sueldo mensual
Antigüedad

Cálculos:
Sueldo bruto = (sueldo mensual / 2) + bonificación de antigüedad.
La bonificación de antigüedad se otorga a partir del tercer año de labores y es, de 2% anual

El impuesto se calcula usando la tabla siguiente

Lim. inferior Lim. Superior Cuota fija Porcentaje

1 300 30 3%
301 700 50 8%
701 1100 100 11%
1101 1700 150 16%
1701 adelante 200 20%

Cuando el sueldo bruto excede el salario mínimo, se calcula el excedente y se busca éste en la tabla a fin
de determinar en cual rango se encuentra.

9
El impuesto será la cuota fija más el porcentaje indicado en la diferencia del excedente sobre el límite
inferior.

5. Elabore un programa que contabilice una cuenta de cheques. Al inicio se le introduce el nombre del
cuentahabiente y el saldo inicial. A continuación se pueden hacer depósito y retiros. Cuando sea depósito
se incrementa al saldo y cuando sea retiro se resta. El programa terminará cuando ya no se desee hacer
movimientos. Se requiere la impresión del siguiente reporte:

ESTADO DE CUENTA

CUENTA HABIENTE: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


SALDO INICIAL : 99,999,999.99

MOVIMIENTO DEPOSITO RETIRO SALDO

1 999,999.99 99,999,999.99
2 999,999.99 99,999,999.99
3 999,999.99 99,999,999.99
4 999,999.99 99,999,999.99
.
.
N

TOTALES 9,999,999.99 9,999,999.99 99,999,999.99

6. Se tiene los datos del transporte del elevador de un edificio, por cada viaje hecho durante el día, se tiene
los siguientes datos:

Viaje:
Cantidad de personas: ---
Peso de viaje: ---
Viaje:
Cantidad de personas: ---
Peso de viaje: ---

Viaje:
Cantidad de personas: ---
Peso de viaje: ---

Elaborar un programa que lea los datos de los viajes del día, y al final que imprima:

ESTADISTICA DEL DIA

CANTIDAD DE VIAJES: 999


CANTIDAD DE PERSONAS TRNSPORTADAS: 999
PESO TRANSPORTADO (KILOS): 9999.99
PROMEDIO DE PERSONAS POR VIAJE: 99.99
PROMEDIO DE PESO POR VIAJE: 9999.99

7. Se tienen los datos de varios autos importados, elaborar un programa que permita leer los datos de cada
automóvil: marca, orígen y costo; imprimir el siguiente reporte:

10
REPORTE DE AUTOS IMPORTADOS

MARCA ORIGEN COSTO IMPUESTO PRECIO VTA.

XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 99,999.99 99,999.99 99,999.99


XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 99,999.99 99,999.99 99,999.99
.
.
.
XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 99,999.99 99,999.99 99,999.99

TOTAL 999 AUTOS 99,999.99 99,999.99 99,999.99

ALEMANIA: ----
JAPON: ----
ITALIA: ----
USA: ----
PAIS DEL QUE SE IMPORTO MAS AUTOS: X----------------------------------X

Cálculos:
IMPUESTO si el orígen es Alemania el impuesto es 20%, si es de Japón el impuesto es 30%, si es de
Italia el 15% y si es de USA el 8%.
PRECIO VTA. Se suma el costo mas el impuesto.
TOTALES se pide el total de los autos importados, así como totales del costo, impuesto y precio de venta.
Por último el total de autos importados de cada país.

8. Elaborar un programa que imprima el siguiente reporte:

NOMINA QUINCENAL
NOMBRE SUELDO BRUTO IMPUESTO SUELDO NETO

XXXXXXXXXXXXXXXXXXXXXXXXXX 99,999.99 99.999.99 99,999.99


XXXXXXXXXXXXXXXXXXXXXXXXXX 99,999.99 99.999.99 99,999.99
.
.
.
XXXXXXXXXXXXXXXXXXXXXXXXXX 99,999.99 99.999.99 99,999.99

TOTALES 999 99,999.99 99.999.99 99,999.99

Dato general: Salario mínimo general


Datos por cada empleado:
Nombre, sueldo mensual
Cálculos
Sueldo Bruto: se divide sueldo mensual entre dos porque la nómina es quincenal
Impuesto: Si el bruto no excede el salario mínimo el impuesto es cero. Si el bruto excede al salario
mínimo: se aplica el 5% de impuesto sobre el excedente del salario mínimo hasta dos salarios mínimos
de excedente, después de esta cantidad el impuesto es el 10%.

9. En la E.A.P de Ingeniería de Sistemas e Informática de la Universidad “ X ” , cada alumno tiene los


siguientes datos:

Nombre del alumno: X-----------------------------------------------X

Cada alumno puede haber llevado varios cursos, por cada curso, se tiene los datos:

Curso: X--------------------------------------X
Calificación 1: ---
Calificación 2: ---
Calificación 3: ---

11
----------
----------
----------

Nombre del alumno: X-----------------------------------------------X


Curso: X---------------------------------------X
Calificación 1: ---
Calificación 2: ---
Calificación 3: ---
--------
--------
--------
--------
--------

Elaborar un programa que lea los datos de cada uno de los alumnos y por cada alumno, los datos de
cada uno de los cursos e imprima el siguiente reporte:

REPORTE DE CURSOS
NOMBRE CURSOS CALIF. FINAL OBSERVACIÓN

XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 999.99 APROBADO


XXXXXXXXXXXXXXX 999.99 DESAPROBADO
.
.
XXXXXXXXXXXXXXX 999.99 DESAPROBADO

TOTAL ALUMNO 999 CURSOS PROMEDIO: 999.99


XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 999.99 APROBADO
XXXXXXXXXXXXXXX 999.99 DESAPROBADO
.
.
XXXXXXXXXXXXXXX 999.99 APROBADO

TOTAL ALUMNO 999 CURSOS PROMEDIO: 999.99


---------------
TOTAL ALUMNO 999 CURSOS PROMEDIO: 999.99
---------------
---------------
---------------
TOTAL GENERAL 999 ALUMNOS PROMEDIO GENERAL: 999.99

Cálculos:
CALIF. FINAL es el promedio de las tres calificaciones del curso.
OBSERVACION es el comentario APROBADO o DESAPROBADO según sea la calificación final.
TOTAL ALUMNO se imprime el número de materias que cursó y el promedio de la calificaciones finales
de todas las materias que cursó
TOTAL GENERAL se imprime la cantidad de los alumnos procesados y el promedio general de todos los
alumnos.

12
PRACTICA 5: Programación Modular, Funciones. Punteros

Ejemplos en C/C++

Funciones: Paso por referencia

#include <cstdlib>
#include <iostream>

using namespace std;


void referencia(int &y){
y+=2;
}
int main(int argc, char *argv[])
{
int x=20;
cout<<"\n Antes de la llamada x= "<<x;
referencia(x);
cout<<"\n Despues de la llamada x= "<<x<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Punteros

#include<iostream>
using namespace std;
void convertirAMayusculas(char *ptrS);
int main(){
char cadena[]="Caracteres y $50.12";
cout<<"\n Cadena antes de la conversion: "<<cadena;
//printf("\n Cadena antes de la conversión: %s",cadena);
convertirAMayusculas(cadena);
//printf("\n Cadena despues de la conversión: %s",cadena);
cout<<"\n Cadena despues de la conversion: "<<cadena<<endl;
system("PAUSE");
return 0;
}
void convertirAMayusculas(char *ptrS){
while(*ptrS!='\0'){
if(islower(*ptrS))
*ptrS=toupper(*ptrS);
++*ptrS;
}

13
}

******************************************************************************************
Programa para leer una cadena mostrar caracter a caracer verticalmente. Usar paso por referencia,
mediante un puntero no constante a un puntero constante.

#include <iostream>
using namespace std;
void imprimircaracteres(const char *ptrS);
int main(){
char cadena[30];
//cout<<"\n Ingrese nombre y apellido(con 28 caracteres)";
//cin.getline(cadena,28);
printf("\n Ingrese nombre y apellido(con 28 caracteres): ");
gets(cadena);
imprimircaracteres(cadena);
printf("\n");
system("pause");
return 0;
}
void imprimircaracteres(const char *ptrS){
for(*ptrS;*ptrS!='\0';*ptrS++){
//cout<<*ptrS<<"\n";
printf("\n%c",*ptrS);
}
}

*******************************************************************************************************************
*****

1. Elaborar un programa que evalúe la función:


X!
f = Y!(X – Y)!

de la cual se tiene los datos X y Y; los mismos que deberán solicitarse y leerse. Factorial de X se divide
entre el factorial de Y multiplicado por el factorial de X – Y.

2. Elaborar un programa que ofrezca un menú de opciones, mediante el cual se pueda escoger calcular el
área de las figuras geométricas: triángulo, cuadrado, rectángulo y círculo. Una vez seleccionada la
opción, que llame al módulo que permita solicitar, leer los datos necesarios, hacer el cálculo
correspondiente e imprimirlo.

Área de triángulo = BASE X ALTURA


2
Área de cuadrado = LADO2
Área de círculo = r2
Área de rectángulo = LARGO X ANCHO

Debe ofrecer el siguiente menú de opciones, donde está solicitando la opción deseada:

AREAS FIGURAS GEOMÉTRICAS


1. TRIANGULO
2. CUADRADO
3. RECTANGULO
4. CIRCULO
5. FIN
OPCION :

14
3. Elaborar un programa que permita leer dos números de tipo real en el módulo principal; que en un
módulo los intercambie vía parámetros por referencia, y los imprima en el módulo principal.

4. Elaborar un programa que permita leer tres números de tipo entero; e imprima el mayor; utilizando un
módulo para leer los números, una función para obtener y devolver el mayor y un módulo para imprimir el
mayor. Utilizando parámetros.

5. Elaborar un programa que permita leer la base y el exponente, que llame a una función que eleve el
número a la potencia, al regresar al módulo principal que imprima el resultado.

6. Elaborar un programa que imprima la sumatoria de las raíces cuadradas de los números pares desde 2
hasta 1500. Utilizar un módulo o función para el cálculo de la sumatoria.

7. Elaborar un programa que lea un número N, que imprima la sumatoria de los cuadrados de los enteros
entre 1 y N. Utilizar un módulo para el cálculo de la sumatoria vía parámetro por referencia.

8. Elaborar un programa que lea diez valores para Y y X, calcule e imprima el valor de Z; utilizando la
función
Z = YX
Imprimir los diez valores para X, Y y Z.

9. Elaborar un programa que permita leer un número de tipo entero de cinco cifras; calcular e
imprimir el dígito verificador. El dígito verificador es un número entre 0 y 9, que se obtiene a
partir de un número en el que se toma en cuenta la posición que tiene cada dígito; se obtiene
de la siguiente manera:
Si se tiene el número: 74621

Proceso 1 Se obtiene la suma de los productos: el primer número de la derecha multiplicado


por dos, el siguiente a la izquierda por tres, el siguiente por cuatro, y así
sucesivamente, hasta siete (el multiplicador vuelve a iniciar en 2, en caso de ser
necesario).

7 4 6 2 1

1X2= 2
2X3= 6
6 X 4 = 24
4 X 5 = 20
7 X 6 = 42
94
Proceso 2 Se determina el residuo al dividir el producto entre once.
94 11

6 8

Proceso 3 Si el residuo es cero o uno, entonces ese es el dígito verificador; de lo contrario el


dígito verificador será igual al resultado que se obtenga de once menos el residuo;
en el ejemplo:

Dígito verificador = 11 – 6 = 5

10. Simular una máquina expendedora de café. Crear un menú con las siguientes opciones:

****************************************
1. Seleccionar producto
2. Pagar y dar vuelto
3. Salir

15
Seleccione opción: …..

 Para la opción “Seleccionar producto” presentar

***************************************
a. Café S/. 1.00
b. Café con leche S/. 1.50
c. Leche S/. 2.00

Elegir opción: …..

 Para la opción “Pagar y dar vuelto” presentar

***************************************
Precio _ _ _ _ _ (debe aparecer precio de producto seleccionado)
Monto _ _ _ _ _ (monto que paga el cliente, verificar que no es menor que precio)

Finalmente en el programa principal debe mostrar:

Usted compró (nombre del producto ) de precio (precio)


Pagó (monto) y su vuelto es (vuelto)

Usar funciones y paso de parámetros.

#include <iostream>
#include <stdio.h>
using namespace std;
int sp(float *puntpp){
int sw;
char r;
float pp;
cout<<"\t\t****************************"<<endl;
cout<<"\t\t"<<"Seleccionar producto"<<endl;
cout<<"\t\t\t"<<"a.Cafe S/. 1.00"<<endl;
cout<<"\t\t\t"<<"b.Cafe con leche S/. 1.50"<<endl;
cout<<"\t\t\t"<<"c.Leche S/. 2.00"<<endl;
cout<<"\t\t\t\t\t"<<"Elegir opcion: ";
cin>>r;
switch(r){
case 'a': pp=1.0;
*puntpp=pp;
sw=1;
break;
case 'b': pp=1.5;
*puntpp=pp;
sw=2;
break;
case 'c': pp=2.0;
*puntpp=pp;
sw=3;
break;
default : cout<<"\n Error pulse a,b,c"<<endl;
break;

}
return sw;

16
}
int main()
{
int op,seleccion;
char r;
float pp=0,mp,vuelto;
do{
cout <<"\t\t******************" << endl;
cout<<"\t\t\t"<<"MENU"<<endl;
cout<<"\t\t"<<"1. Seleccionar producto"<<endl;
cout<<"\t\t"<<"2. Pagar y dar vuelto"<<endl;
cout<<"\t\t"<<"3. Salir"<<endl;
cout<<"\t\t\t\t"<<"Seleccione opcion: ";
cin>>op;
switch(op){
case 1:seleccion=sp(&pp);
break;
case 2:cout<<"\n Pagar y dar vuelto";
cout<<"\n Precio del producto: "<<pp;
do{
cout<<"\n Monto con el que paga: ";
cin>>mp;
}while(mp<pp);
switch(seleccion){
case 1: cout<<"\n Usted compro: Cafe de precio S/ 1.00"<<endl;
cout<<"\n Pago con: S/."<<mp<<" su vuelto es: S/."<<(mp-pp)<<endl;
vuelto=mp-pp;
printf("\n Pago con: S/. %8.2f su vuelto es: S/. %8.2f",mp,vuelto);
printf("\n");
break;
case 2: cout<<"\n Usted compro: Cafe de precio S/ 1.50"<<endl;
cout<<"\n Pago con: S/."<<mp<<" su vuelto es: S/."<<(mp-pp)<<endl;
break;
case 3: cout<<"\n Usted compro: Cafe de precio S/ 2.00"<<endl;
cout<<"\n Pago con: S/."<<mp<<" su vuelto es: S/."<<(mp-pp)<<endl;
break;
}
break;
case 3:break;

}
}while(op!=3);

return 0;
}

17
PRACTICA 6: Array (arreglos): unidimensionales, bidimensionales

Ejemplos en C/C++

Programa para agregar datos a un vector, mostrar datos del vector, presentar
un menú de opciones.

#include <iostream>
using namespace std;
#define nMaxE 100
void agregar(int v[nMaxE],int *pnE);
int buscar(int v[nMaxE],int datoB,int *pnE);
void actualizar(int v[nMaxE],int datoB,int r);
void mostrar(int v[nMaxE],int *pnE){
//int i;
cout<<"\n VECTOR INGRESADO";
for(int i=0;i<*pnE;i++){
cout<<"\n v["<<(i+1)<<"]="<<v[i];
}
}
int main()
{
int v[nMaxE];
int op,nE=0,datoB,r;
do{
cout<<"\n\t\t MENU";
cout<<"\n 1. Agregar";
cout<<"\n 2. Buscar";
cout<<"\n 3. Actualizar dato";
cout<<"\n 4. Ordenar de < a >";
cout<<"\n 5. Ordenar de > a <";
cout<<"\n 6. Eliminar un dato";
cout<<"\n 7. Mostrar datos ingresados";
cout<<"\n 8. Salir";
cout<<"\n\t\t\t Seleccione opcion: ";
cin>>op;
switch(op){
case 1:agregar(v,&nE);
break;
case 2: cout<<"\n Dato a buscar: ";
cin>>datoB;
r=buscar(v,datoB,&nE);
if(r!=-1)
cout<<"\nDato encontrado en la posicion: "<<(r+1);
else
cout<<"\nDato no encontrado";

18
break;
case 3:cout<<"\n Dato a reemplazar: ";
cin>>datoB;
r=buscar(v,datoB,&nE);
actualizar(v,datoB,r);
break;
case 4://agregar(v,&nE);
break;
case 5://agregar(v,&nE);
break;
case 6://agregar(v,&nE);
break;
case 7:mostrar(v,&nE);
break;
case 8:break;
default:cout<<"\n Error pulse <1 al 7>";
break;
}
}while(op!=8);

return 0;
}
void agregar(int v[nMaxE],int *pnE){
int datoE,i;
if(*pnE>=nMaxE)
cout<<"\n No hay espacio";
else{
cout<<"\n Dato entero para agregar: ";
cin>>datoE;
i=*pnE;
v[i]=datoE;
i++;
*pnE=i;
}
}
int buscar(int v[nMaxE],int datoB,int *pnE){
int i,posicion=-1;
for(i=0;i<*pnE;i++){
if(datoB==v[i]){
posicion=i;
i=*pnE;
}
}
return posicion;
}
void actualizar(int v[nMaxE],int datoB,int r){
int datoR;

19
cout<<"Dato a reemplazar: "<<datoB;
cout<<"Reemplazar por: "; cin>>datoR;
v[r]=datoR;
}

****************************************************************************************
Programa para agregar datos en una fila de una matriz, mostrar fila de la matriz, buscar un dato en
la matriz, presentar un menú de opciones.

#include <cstdlib>
#include <iostream>
# define nmaxF 5
# define nmaxC 5
using namespace std;
void agregarf(int a[nmaxF][nmaxC],int *pnf);
void mostrarf(int a[nmaxF][nmaxC],int nfm);
int buscar(int a[nmaxF][nmaxC],int datoB,int nf,int *pncB);
int main(int argc, char *argv[])
{
int a[nmaxF][nmaxC],op,nf=0,f,ncB,datoB,nfm;
do{
cout<<"\n\t\t"<<"Menu Matriz bidimensional";
cout<<"\n 1. Agregar datos en una fila";
cout<<"\n 2. Buscar un dato en la matriz";
cout<<"\n 3. Reemplazar por cero un dato";
cout<<"\n 4. Mostrar fila de la matriz";
cout<<"\n 5. Salir";
cout<<"\n\t\t\t"<<"Seleccione opcion: ";
cin>>op;
switch(op){
case 1: agregarf(a,&nf);
break;
case 2: cout<<"\n Dato de busqueda: ";cin>>datoB;
f=buscar(a,datoB,nf,&ncB);
if(f!=-1)
cout<<"\n Dato encontrado en la fila: "<<(f+1)<<" columna: "<<(ncB+1);
else
cout<<"\n Dato no encontrado";
break;
case 3: //agregarf(a,&nf);
break;
case 4: cout<<"\n Nro de fila para mostrar:";
cin>>nfm;
if(nfm<=nmaxF)
mostrarf(a,nfm);
else
cout<<"\n Numero de fila no existe";
break;
case 5: break;
default : cout<<"\n Error pulse del 1 al 5";
break;
}
}while(op!=5);

system("PAUSE");
return EXIT_SUCCESS;
}
void agregarf(int a[nmaxF][nmaxC],int *pnf){
int f,c;

20
if(*pnf >= nmaxF)
cout<<"\n No hay espacio";
else {
f=*pnf;
for(c=0;c<nmaxC;c++){
cout<<"a["<<f<<"]["<<c<<"]=";
cin>>a[f][c];
}
f=f+1;
*pnf=f;
}
}
void mostrarf(int a[nmaxF][nmaxC],int nfm){
int c;
cout<<"\n Datos de la fila: "<<nfm<<endl;
nfm=nfm-1;
for(c=0;c<nmaxC;c++)
cout<<a[nfm][c]<<" ";
}
int buscar(int a[nmaxF][nmaxC],int datoB,int nf,int *pncB){
int i,j,f=-1;
for(i=0;i<nf;i++){
for(j=0;j<nmaxC;j++){
if(a[i][j]==datoB){
f=i;
*pncB=j;
j=nmaxC;
i=nf;
}
}
}
return f;
}

1. Programa que lea 20 números enteros, los almacene en un vector, y calcule la suma de todos ellos, así
como la media aritmética.

2. Un vector se dice que es simétrico si el elemento que ocupa la posición i_ésima coincide con el que
ocupa la posición n_i_ésima, siempre que el número de elementos que almacene el vector sea n. Por
ejemplo el vector que almacena los valores 2,4,5,4,2 es simétrico. Elaborar un programa y una función
que decida si el vector de n datos que recibe como parámetro es simétrico.

3. Escribir un programa que halle y escriba una tabla con los 10 primeros números primos. Un número es
primo si sólo tiene por divisores la unidad y el propio número.

4. Programa que genere aleatoriamente los datos de un vector, lo visualice, y calcule la media m, la
desviación media dm y la desviación típica dt, dados por las siguientes expresiones:

n 1

 a i 
m i 0

n
n 1

 abs i   m
dm  i o

21
n 1

  a i   m  2

dt  i o

n
5. Dados los nombres, promedio final de los alumnos de un curso de Ingeniería, elaborar un programa para
almacenar(ingresar) dichos datos y mostrar, presentar en un menú de opciones.

6. Dado un vector de enteros de n elementos ordenar de menor a mayor

7. Elaborar un programa para presentar el siguiente menú de opciones, utilizando funciones:

MENU

a. Factorial de un número entero positivo.


b. Cargar y ordenar en orden descendente un
vector de diez elementos.
c. Salir

Seleccione Opción: __

8. Elaborar un programa para presentar el siguiente menú de opciones, utilizando funciones:

MENU

1. Cargar y realizar la diferencia de dos matrices del


mismo orden Amxn - Bmxn.

2. Salir.

Seleccione Opción: __

22
PRACTICA 7: Ejercicios varios. Registros (estructuras). Archivos.

Ejemplos en C/C++

Registros (struct)

Ingreso y listado de alumnos con los campos: codigo, nombre,sexo, promedio,


utilizando estructuras.

#include<iostream.h>
#include<conio.h>
#include <stdio.h>
#include<ctype.h>
# define max 50
struct alumno{
char cod[8];
char nom[30];
char sexo;
float prom;
};

int menu();
void carga(struct alumno *p, int * pn);
void lista(struct alumno p[], int x);

int main(int argc, char *argv[])


{
int n=0, op;
alumno d[max];
do
{
op=menu();
switch(op)
{
case 1: carga(d,&n);break;

case 3: lista(d,n);break;

}
}while(op!=4);

return 0;
}
int menu()
{ int op1;
cout<<"\n MENU ";
cout<<"\n 1. Carga ";

23
cout<<"\n 2. Ordena ";
cout<<"\n 3. Listado ";
cout<<"\n 4. Salir ";
cout<<"\n Seleccione Opcion: ";
cin>>op1;
return op1;
}
void carga(struct alumno *p, int *pn)
{
int k;
struct alumno e;

cout<<"cuantos alumnos desea ingresar:";


do
{

cin>>*pn;
}while(*pn<1 || *pn>max);
for(k=0; k<*pn;k++)
{

cout<<"datos del alumno N."<<k+1<<"\n\n";


cout<<"codigo :";

cin>>e.cod;

cout<<"nombre:";
gets(e.nom);
cout<<"sexo : m - f";
do
{
e.sexo = toupper(getche());
}while(e.sexo!='M' && e.sexo!='F');
cout<<"\n promedio: " ;
do
{

cin>>e.prom;
}while(e.prom<0 || e.prom>20);
*(p+k)=e;
}
}

void lista(struct alumno p[], int x)


{
cout<<"\n LISTADO DE ALUMNOS";
for(int i=0;i<x;i++)

24
{
cout<<"\n"<<p[i].cod<<" "<<p[i].nom<<" "<<p[i].sexo<<" "<<p[i].prom;
}
}
*********************************************************************************************************

Estructuras anidadas

Leer y visualizar estructuras anidadas mediante dos funciones. Primero, declarar la estructura
fecha_pago, con los atributos: dia, mes, año, seguidamente declarar la estructura empleado con los
atributos: nombre, edad, peso, fp del tipo fecha_pago, y por ultimo, la estructura persona_empleado
con los atributos: e del tipo empleado, totalsueldo, horas_trabajadas.
La funcion entrada tiene como parametro por referencia una persona empleado pe, en la que se
almacena y retorna toda la informacion que ingresa el usuario. Por su parte la funcion muestra,
presenta los valores que recibe en el parametro por valor en la consola. La estructura de los
registros, sugerida es la siguiente:

persona_empleado:
Empleado: nombre
edad
peso
fecha_pago:
dia
mes
anio
TotalSueldo
HorasTrabajadas
Presentar en un menu de opciones el ingreso y muestra de empleado.

#include <cstdlib>
#include <iostream>
using namespace std;
struct fecha_pago{
int dia;
int mes;
int anio;
};
struct empleado{
char nombre[30];
int edad;
float peso;
struct fecha_pago fp;
};
struct persona_empleado{
struct empleado e;
float totalsueldo;
float horastrabajadas;
};
void lectura(persona_empleado &pe);
void muestra(persona_empleado pe);
int menu();
int main(int argc, char *argv[])
{
char rpta;
int op;
persona_empleado pe;
do{
op=menu();
switch(op){

25
case 1: lectura(pe);
muestra(pe); break;
case 2: exit(0);
default: cout<<"\n Error"; break;
}
cout<<"\n Continuar<s/n>: ";
cin>>rpta;
}while(rpta=='s');
system("PAUSE");
return EXIT_SUCCESS;
}
int menu(){
int op1;
cout<<"\n\t\t"<<"MENU"<<endl;
cout<<"\n 1.Ingreso y muestra de Empleado"<<endl;
cout<<"\n 2.Salir"<<endl;
cout<<"\n Seleccione opcion: ";
cin>>op1;
return op1;
}
void lectura(persona_empleado &pe)
{
cout<<"\n DATOS DEL EMPLEADO";
fflush(stdin);
cout<<"\n Nombre(max. 28 caracteres): ";
cin.getline(pe.e.nombre,30);
cout<<"\n Edad<20 a 60>: ";
cin>>pe.e.edad;
cout<<"\n Peso: ";
cin>>pe.e.peso;
cout<<"\n Fecha de pago: ";
cout<<"\n dia <1 a 30>: ";
cin>>pe.e.fp.dia;
cout<<"\n mes <1 a 12>: ";
cin>>pe.e.fp.mes;
cout<<"\n anio<2013>: ";
cin>>pe.e.fp.anio;
cout<<"\n Total sueldo: ";
cin>>pe.totalsueldo;
cout<<"\n Horas trabajadas: ";
cin>>pe.horastrabajadas;
}
void muestra(persona_empleado pe)
{
cout<<"\n DATOS INGRESADOS DEL EMPLEADO";
cout<<"\n Nombre: "<<pe.e.nombre;
cout<<"\n Edad: "<<pe.e.edad;
cout<<"\n Peso: "<<pe.e.peso;
cout<<"\n Fecha de pago:";
cout<<"\n dia: "<<pe.e.fp.dia<<" mes: "<<pe.e.fp.mes<<" anio:"<<pe.e.fp.anio;
cout<<"\n Total sueldo: "<<pe.totalsueldo;
cout<<"\n Horas trabajadas: "<<pe.horastrabajadas;
}

26
Programa para el ingreso de alumnos, buscar y mostrar alumno por código; de
alumnos con los campos: código, nombre, apellidos, grupo, curso, profesor,
utilizando archivos.

#include <cstdlib>
#include <iostream>

using namespace std;


struct alumno{
int codigo;
char nombre[30];
char apellidos[30];
int grupo;
char curso[30];
char profesor[30];
};
void CrearFile();
void BuscarxCodigo();
//void MostrarFile();
int menu();
int main(int argc, char *argv[])
{
int op;
do{
op=menu();
switch(op){
case 1: CrearFile();
break;
case 2: BuscarxCodigo();
break;
case 3: //MostrarFile();
break;
case 4: exit(1);
break;
}
}while(op!=4);
system("PAUSE");
return EXIT_SUCCESS;
}
int menu(){
int opcion;
do{
cout<<"\n MENU";
cout<<"\n 1. Matricular alumno";
cout<<"\n 2. Buscar y mostrar alumno por codigo";
cout<<"\n 3. Listar alumnos matriculados";
cout<<"\n 4. Salir";
cout<<"\n Seleccione opcion: ";
cin>>opcion;
}while(opcion<1 || opcion>4);
return opcion;

27
}

void CrearFile(){
FILE *F;
alumno alu;
F=fopen("matricula.dat","a+");
if(F==NULL)
cout<<"\n No se abrio con exito";
cout<<"MATRICULA"<<endl;
cout<<"\n Codigo del alumno: ";
cin>>alu.codigo;
cout<<"\n Nombre del alumno: ";
fflush(stdin);
gets(alu.nombre);
cout<<"\n Apellidos del alumno: ";
fflush(stdin);
gets(alu.apellidos);
cout<<"\n Grupo: ";
cin>>alu.grupo;
cout<<"\n Curso: ";
fflush(stdin);
gets(alu.curso);
cout<<"\n Profesor: ";
gets(alu.profesor);
fwrite(&alu,sizeof(alumno),1,F);
fclose(F);
cout<<"\n Alumno matriculado con exito";
}
void BuscarxCodigo(){
int cod,hallado=0;
FILE *F;
alumno alu;
F=fopen("matricula.dat","a+");
if(F==NULL)
cout<<"No se abrio con exito";
cout<<"\n Ingrese codigo a buscar: ";
cin>>cod;
fread(&alu,sizeof(alumno),1,F);
while(!feof(F)){
if(alu.codigo==cod){
cout<<"\n Alumno: "<<alu.nombre<<endl;
cout<<"\n Apellido: "<<alu.apellidos<<endl;
cout<<"\n Grupo: "<<alu.grupo<<endl;
cout<<"\n Curso: "<<alu.curso<<endl;
cout<<"\n Profesor: "<<alu.profesor<<endl;
hallado=1;
}
fread(&alu,sizeof(alumno),1,F);
}
if(hallado==0)
cout<<"\n Alumno no se encontro";

28
fclose(F);
}

1. Programa que visualice un cuadrado mágico de orden impar n, comprendido entre


3 y11; el usuario elige el valor de n. Un cuadrado mágico se compone de números
enteros comprendidos entre 1 y n2 . La suma de los números que figuran en cada
línea, cada columna y cada diagonal son idénticos. Un ejemplo es:
8 1 6
3 5 7
4 9 2
Un método consiste en situar el número 1 en el centro de la primera línea, el
número siguiente en la casilla situada encima y a la derecha , y así sucesivamente.
Considerar que el cuadrado de cierra sobre sí mismo: la línea encima de la
primera es de hecho la última y la columna a la derecha de la última es la primera.
Cuando la posición del número caiga en una casilla ocupada, se elige la casilla
situada debajo del número que acaba de ser situado.

2. Se pretende simular la representación en el espacio tridimensional de triángulos,


pero minimizando el espacio necesario para almacenarlos. Teniendo en cuenta
que un triángulo en el espacio tridimensional viene determinado por las
coordenadas de sus tres vértices, escribir un programa con una estructura para
representar un triángulo que usando un vector dinámico almacene el índice de los
tres vértices así como su perímetro y área (de esta forma se almacena los tres
vértices con tres enteros en lugar de nueve reales, ahorrando memoria). El
perímetro y el área deben ser calculados mediante una función a partir del índice
de los tres vértices, y el vector dinámico de puntos del espacio tridimensional.

3. Los métodos de ordenación por inserción lineal e inserción binaria, sólo se


diferencian entre sí, conceptualmente, en el método de la búsqueda. Por tanto, el
n( n  1)
número de movimientos de claves será el mismo en ambos casos, y es .
2
En cuanto al número de comparaciones, cuando el intervalo tiene i elementos, se
realizan log 2 (i ) comparaciones. Por tanto, el número de comparaciones es:
n 1 n 1
C  log
i 1
2 (i )   log 2 ( x) dx  n log 2 ( n)

Es decir el número de comparaciones es O ( n log 2 ( n)) , y el número de


movimientos es O (n 2 ) .
En un menú de opciones presentar los subprogramas para ordenar un arreglo de
datos:
a) Por el método de inserción lineal
b) Por el método de inserción binaria

4. Programa que permita crear un arreglo de 100 enteros aleatorios en el rango de 1


a 200 y, a continuación, utilizando una búsqueda secuencial, realizar la búsqueda
de 50 enteros seleccionados aleatoriamente (iguales o distintos). Al final del
programa se deben visualizar las siguientes estadísticas:
 Número de búsquedas con éxito
 Número de búsquedas fallidas

29
 Porcentajes de éxito y de fallo

5. Un atleta utiliza un pulsómetro para sus entrenamientos. El pulsómetro almacena


las pulsaciones cada 15 segundos, durante un tiempo máximo de 2 horas.
Elaborar un programa para almacenar en un archivo los datos del pulsómetro del
atleta, de tal forma que el primer registro contenga la fecha, hora y tiempo en
minutos de entrenamiento, a continuación, los datos del pulsómetro por parejas:
tiempo, pulsaciones. Los datos deben ser leídos del teclado. Una vez escrito en el
archivo los datos, el programa debe visualizar el contenido completo del archivo.

6. Convertir un número a letras e incluir signo monetario, ejemplo S/. 1.237,50 (Un
mil doscientos treinta y siete con cincuenta / céntimos Nuevos Soles).

7. El “Juego de sociedad” es un acertijo que mediante operaciones elementales


procesa dos números: el primero que presenta el día y mes de su nacimiento, así
por ejemplo 5 de marzo es: 503, y el segundo número es su edad, requiriéndose
de los siguientes cálculos:
a) Multiplicar el primer número por 2
b) Adicionarle 5
c) Multiplicarlo por 50
d) Sumarle el segundo número
e) Sumarle 365
f) Restarle 615
Elaborar un programa utilizando función para mostrar la unión del primer número
con el segundo.

8. Elaborar un programa que permita leer un número de tipo entero de cinco cifras;
calcular e imprimir el dígito verificador. El dígito verificador es un número entre 0 y
9, que se obtiene a partir de un número en el que se toma en cuenta la posición
que tiene cada dígito; se obtiene de la siguiente manera:
Si se tiene el número: 74621

Proceso 1 Se obtiene la suma de los productos: el primer número de la derecha


multiplicado por dos, el siguiente a la izquierda por tres, el siguiente por
cuatro, y así sucesivamente, hasta siete (el multiplicador vuelve a iniciar
en 2, en caso de ser necesario).

7 4 6 2 1

1X2= 2
2X3= 6
6 X 4 = 24
4 X 5 = 20
7 X 6 = 42
94
Proceso 2 Se determina el residuo al dividir el producto entre once.

94 11

6 8

30
Proceso 3 Si el residuo es cero o uno, entonces ese es el dígito verificador; de lo
contrario el dígito verificador será igual al resultado que se obtenga de
once menos el residuo; en el ejemplo:

Dígito verificador = 11 – 6 = 5

9. Simular una máquina expendedora de agua. Crear un menú con las siguientes
opciones:

****************************************
4. Seleccionar producto
5. Pagar y dar vuelto
6. Salir

Seleccione opción: …..


 Para la opción “Seleccionar producto” presentar

***************************************
a. Cielo S/. 1.00
b. San Luis S/. 1.20
c. San Mateo S/. 1.50

Elegir opción: …..


 Para la opción “Pagar y dar vuelto” presentar

***************************************
Precio _ _ _ _ _ (debe aparecer precio de producto seleccionado)
Monto _ _ _ _ _ (monto que paga el cliente, verificar que no es menor que precio)

Finalmente en el programa principal debe mostrar:

Usted compró (nombre del producto ) de precio (precio)


Pagó (monto) y su vuelto es (vuelto)

Usar funciones y paso de parámetros.

10. Escribir un programa para calcular el número de días que hay entre dos fechas;
declarar fecha como una estructura.

11. Un número racional se caracteriza por el numerador y denominador. Escribir un


programa para operar con números racionales. Las operaciones a definir son la suma,
resta, multiplicación y división; además de una función para simplificar cada número
racional.

12. Escribir un programa que gestione una agenda de direcciones. Los datos de la agenda
se almacenan en memoria en un array de estructuras, cada una de las cuales tiene los
siguientes campos: nombre, dirección, teléfono fijo, teléfono móvil, dirección de correo
electrónico. El programa debe permitir añadir una nueva entrada a la agenda, borrar
una entrada, buscar por nombre y eliminar una entrada determinada por el nombre.

31
13. Suponer que se tienen dos arrays del tipo descrito en el problema propuesto 12 ó 10.
Codificar un programa en C++ que los una en uno solo, eliminando los duplicados que
puedan existir entre los dos.

14. Suponer que se tiene un array que almacena la información de los empleados de una
empresa. De cada empleado se guarda el nombre, los dos apellidos, el número de la
Seguridad Social, la edad, el departamento en el que trabaja y la antigüedad en la
empresa. Escribir un programa en el que se ordene el array por el campo primer
apellido y en caso de que el primer apellido coincida por el segundo apellido. Si ambos
apellidos coinciden para algún registro, ordenar entonces por el nombre.

15. Utilizando el array del Problema anterior escribir un programa que permita a un
usuario por medio de un menú elegir uno de los campos para realizar una búsqueda
por dicho campo en el array de registros.

16. Escribir un programa auxiliar que permita añadir nuevos campos a la tabla de
empleados, como por ejemplo, sueldo anual y porcentaje de retenciones de
impuestos. Una vez modificado el array de estructuras, escribir un programa que
permita a un usuario elegir un rango de registros de empleados especificando un
apellido inicial y otro final, o un departamento concreto, y produzca en la salida la
suma total de los sueldos que se les pagan a los empleados seleccionados.

17. Escribir un programa que permita elaborar un informe a partir del array de estructuras
anterior con el siguiente formato. Cada página contendrá los empleados de un solo
departamento. Al comienzo de cada página se indica por medio de una cabecera cada
uno de los campos que se listan y al departamento que corresponde el listado. Los
campos aparecen justificados a la derecha en cada columna.

18. Escribir un programa que lea líneas de texto obtenga las palabras de cada línea y las
escriba en pantalla en orden alfabético. Se puede considerar que el máximo número
de palabras por línea es 28.

19. Un sistema de encriptación simple consiste en sustituir cada carácter de un mensaje


por el carácter que está situado a tres posiciones alfabéticas por delante suyo. Escribir
una función que tome como parámetro una cadena y devuelva otra cifrada como se ha
explicado.

20. Escribir un programa que lea un texto, y dos palabras claves, clave1 y clave2. El
programa debe sustituir todas las apariciones de clave1 por clave2, mostrar el nuevo
texto, e indicar el número de intercambios realizados.

21. Otro sistema de encriptación consiste en sustituir cada carácter del alfabeto por otro
decidido de antemano, pero siempre el mismo. Utilizar este método en una función
que tome como parámetros el mensaje a cifrar y una cadena con las
correspondencias ordenadas de los caracteres alfabéticos. La función devolverá un
puntero a la cadena cifrada del mensaje.

22. Se trata de encriptar un texto mediante una función de cifrado. El cifrado se realiza se
realiza cambiando todas las letras minúsculas por otras nuevas letras que recibe en
un array cifrado de caracteres; es decir de cambiar “a” por cifrado0, “b” por
cifrrado1, etc. Escribir una función que reciba un texto y lo encripte.

32
23. Escribir una función que reciba el texto que retorna la función del problema anterior,
debidamente encriptado, y lo transforme en el texto original. El array de cifrado es un
dato.

24. Utilizando estructuras elaborar un programa para mostrar la fecha y hora actual del
sistema.

25. Una criptografía es un simple mensaje codificado donde una carta es simplemente
sustituida por otra, todo el mensaje.
Por ejemplo:
Codificado : HPC PJVYMIY
Decodificado : ACM CONCURSO

En el ejemplo de arriba, H=A, P=C, C=M, J=O, V=N, Y=T, M=E y I=S. Para este
problema, usted decodificará los mensajes.

Entrada
La primera línea de entrada contiene un solo entero N, (1 ≤ N ≤ 1000) que es el
número de conjuntos de datos que siguen. Cada conjunto de datos consta de dos
líneas de entrada. La primera línea es el mensaje codificado. La segunda línea es uno
de los 26 caracteres de letras en mayúscula dando el carácter cartografía para cada
letra del alfabeto: el primer carácter da la cartografía de A, la segunda de B y así
sucesivamente. Únicamente con letras mayúsculas será utilizado.

Salida
De cada conjunto de datos, usted debe generar una línea de producción con los
siguientes valores: el conjunto de datos número como un decimal entero (inicia el
escrutinio en uno), un espacio y el descifrado mensaje.

Ejemplo de Entrada
2
HPC PJVYMIY
BLMRGJIASOPZEFDCKWYHUNXQTV

FDY GAI BG UKMY


KIMHOTSQYRLCUZPAGWJNBVDXEF

Ejemplo de Salida
1 ACM CONTEST
2 THE SKY IS BLUE

26. Implementar un programa al que se le pase el nombre de un archivo como argumento,


el cual, debe existir en el disco, y contenga un texto cualquiera formado por palabras.
El programa debe ofrecer un menú con dos opciones:
a) ordenar las palabras del texto en orden descendente
b) ordenar las palabras del texto en orden ascendente
Utilizar punteros a funciones, y funciones como argumentos.

27. Mostrar una cruz en la pantalla.

33
Lista para llenar frontalmente

#include <cstdlib>
#include <iostream>
using namespace std;
struct nodo{
int dato;
struct nodo *sgte;
};
int main(int argc, char *argv[])
{
struct nodo *primero_lista;
struct nodo *temp;
int n,i,k=0;
primero_lista=NULL;
cout<<"\n Numero de elementos para llenar lista frontalmente: ";
cin>>n;
for(i=0;i<n;i++){
temp=new(struct nodo);
cout<<"\n Elemento("<<i+1<<"):";
cin>>temp->dato;
if(primero_lista==NULL){
temp->sgte=NULL;
primero_lista=temp;
}
else{
temp->sgte=primero_lista;
primero_lista=temp;
}
}
temp=primero_lista;
cout<<"\n Los elementos de la lista son:"<<endl;
while(temp!=NULL){
cout<<temp->dato<<endl;
temp=temp->sgte;
k++;
}
system("PAUSE");
return EXIT_SUCCESS;
}

34
REFERENCIAS

1. H.M Deitel, P.J. Deitel. C++ como Programar. Edit. Prentice Hall
Hispanoamericana, S.A 2012. México.

2. García, Félix; Carretero, Jesús et al. Programación en Lenguajes


Estructurados. Edit. Paraninfo. 2008. España. ISBN: 978-84-9732-549-3.
447p.

3. Ceballos Sierra, Fco. Javier. Enciclopedia del lenguaje C++. 2009. Edit.
Alfaomega Ra-Ma. México. ISBN: 978-607-7686-43-9. 856p.

4. Cairó, Osvaldo. METODOLOGÍA DE LA PROGRAMACIÓN, 2011. Edit.


Alfaomega. México. ISBN: 970-15-1100-X. 462p.

5. Joyanes, Luis; Zahonero, Luis. Programación en C, C++, Java y UML. Edit.


Mc Graw Hill. 2010. México.

6. Joyanes Aguilar, Luis; Sánchez García, Lucas. Programación en C++. Un


enfoque práctico. Edit. Mc. Graw Hill. 2006. España.

7. López Román, Leobardo. Programación estructurada un enfoque


algorítmico. Edit. Alfaomega. 2011. México.

35
Agradecimiento:

A Dios, a mis padres, a los


que fueron mis alumnos, y
todos los que colaboraron en
la presente guía.

36
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA


E.A.P INGENIERIA DE SISTEMAS

Guía Práctica de Algorítmica I

Luis Guerra Grados

Agosto – 2017

37

Das könnte Ihnen auch gefallen