0% encontró este documento útil (0 votos)
118 vistas9 páginas

Solucionario Examen Programación II

Este documento contiene las instrucciones y el solucionario de un examen de Programación II. El solucionario incluye dos problemas: 1) un programa para analizar los resultados de unas elecciones usando matrices y 2) un juego que pide al usuario adivinar un número aleatorio en 10 intentos usando colores y punteros. También incluye un tercer problema para crear un programa que gestione datos de empleados almacenados en un fichero usando menús y estructuras.

Cargado por

Brandon Rivera
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
118 vistas9 páginas

Solucionario Examen Programación II

Este documento contiene las instrucciones y el solucionario de un examen de Programación II. El solucionario incluye dos problemas: 1) un programa para analizar los resultados de unas elecciones usando matrices y 2) un juego que pide al usuario adivinar un número aleatorio en 10 intentos usando colores y punteros. También incluye un tercer problema para crear un programa que gestione datos de empleados almacenados en un fichero usando menús y estructuras.

Cargado por

Brandon Rivera
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

CÓDIGO DEL ESTUDIANTE

SEGUNDO PARCIAL
SOLUCIONARIO
CARRERA: INGENIERÍA DE
ASIGNATURA: Programación II FECHA: 21/10/2021
SISTEMAS
CURSO: Tercer Semestre DOCENTE: Lic. Marlene Ticona Flores
UNIDADES 1. Punteros
TEMÁTICAS A EVALUAR 2. Ficheros en c

RECOMENDACIONES A LOS ESTUDIANTES


1. Los estudiantes tienen 5 (Cinco) minutos para interpretar el examen y solicitar aclaraciones al docente.
2. El RAC-07 (RÉGIMEN DISCIPLINARIO), en el CAP IV. FALTAS Y SANCIONES, Art. 20 tipifica el FRAUDE
O INTENTO DE FRAUDE EN EXÁMENES, como “CAUSAL DE SEPARACIÓN SIN DERECHO A
REINCORPORACIÓN” de la EMI.
3. Mediante MOODLE el estudiante descargará el examen y subirá el examen resuelto en formato PDF
4. Mediante TEAMS el estudiante está en la obligación de permanecer conectado durante el desarrollo de
la prueba
5. Tiempo de Duración:
a. “90 Minutos” para resolver el EXAMEN
b. “10 Minutos” para subir el examen en formato PDF
6. Otras que el docente considere necesarias.

1. Los resultados de la últimas elecciones has sido los siguientes:

Distrito Candidato Candidato Candidato Candidato


A B C D
1 194 48 206 45
2 180 20 320 16
3 221 90 140 20
4 432 50 821 14
5 820 61 946 18

Realizar un programa para:

a. Imprimir la tabla anterior con las cabeceras incluidas.


b. Calcular e imprimir el número total de votos recibidos por cada candidato.
c. Si algún candidato recibe más del 50% de los votos Mostrar el candidato más
votado y decláralo ganador.
Utilizar matrices o vectores dinámicos en la solución del problema

PROGRAMA:

#include <iostream>
#include <stdlib.h>
using namespace std;
void llenar_matriz(int **m,int f, int c);
void mostrar_matriz(int **m,int f,int c);
void tvotos_candi(int **m,int f,int c,int *v);
void ganador(int **m,int f,int c,int *v);

//PROGRAMA PRINCIPAL
int main()
{int fil,col,i;
int **pm;
int *vec;
fil=5;
col=6;
vec= new int(4);
pm= new int*[fil];//reserva espacio en la memoria para filas
for(i=0;i<fil;i++){
pm[i] =new int(col);//reserva espacio para columnas
}
cout << "LLENADO DE LA MATRIZ" << endl;
//llenar_matriz(pm,fil,col);
cout << "IMPRESION DE LA MATRIZ" << endl;
mostrar_matriz(pm,fil,col);
cout << "VOTOS DE CANDIDATOS DE LA MATRIZ" << endl;
tvotos_candi(pm,fil,col,vec);
ganador(pm,fil,col,vec);
//liberar memoria de filas
for(i=0;i<fil;i++){
delete[] pm[i];
}
//liberar memoria de columnas
for(i=0;i<col;i++){
delete[] pm[i];
}
delete[] vec; //libera memoria DEL VECTOR
system("pause");
return 0;
}

/*LLENADO DE MATRIZ*/
void llenar_matriz(int **m,int f, int c){
int i,j;
char ca;
for(i=0;i<f;i++){
m[i][0]=i+1;
for(j=1;j<c;j++){
switch(j){
case 1:ca='A';break;
case 2:ca='B';break;
case 3:ca='C';break;
case 4:ca='D';break;}
cout<<"VOTOS DEL DISTRITO "<<i+1<<" CANDIDATO "<<ca<<" ";
cin>>*(*(m+i)+j);
}
}
}

/*IMPRESION DE MATRIZ*/
void mostrar_matriz(int **m,int f, int c){
int i,j;
cout<<"DISTRITO CANDIDATO CANDIDATO CANDIDATO CANDIDATO
"<<endl;
cout<<" A B C D "<<endl;
for(i=0;i<f;i++){
for(j=0;j<c;j++){
cout<<*(*(m+i)+j)<<" ";
}
cout<<endl;
}
}

/* TOTAL VOTOS DE CANDIDATOS*/


void tvotos_candi(int **m,int f,int c,int *v){
int i,j,sum;
for(j=1;j<c;j++){
sum=0;
for(i=0;i<f;i++){
sum=sum+*(*(m+i)+j);
}
*(v+j)=sum;
cout<<"\nTOTAL VOTOS DEL CANDIDATO "<<j<<" ES "<<sum<<endl;
}
}

/*GANADOR*/
void ganador(int **m,int f,int c,int *v){
float p1=0,p2=0,p3=0,p4=0;
int i,s=0;
for(i=1;i<c;i++){
s=s+*(v+i);//v[i]
}
p1=(v[1]*100)/s;
p2=(v[2]*100)/s;
p3=(v[3]*100)/s;
p4=(v[4]*100)/s;
cout<<"\nPORCENTAJE DE VOTOS OBTENIDO POR CADA CANDIDATO
"<<endl;
cout<<"CANDIDATO CANDIDATO CANDIDATO CANDIDATO "<<endl;
cout<<" A B C D "<<endl;
cout<<" "<<p1<<"% "<<p2<<"% "<<p3<<"% "<<p4<<"% "<<endl;
if(p1>50)
cout<<"EL GANADOR ES EL CANDIDATO A CON "<<p1<<"%"<<endl;
else if(p2>50)
cout<<"EL GANADOR ES EL CANDIDATO B CON "<<p2<<"%"<<endl;
else if(p3>50)
cout<<"EL GANADOR ES EL CANDIDATO C CON "<<p3<<"%"<<endl;
else if(p4>50)
cout<<"EL GANADOR ES EL CANDIDATO D CON "<<p4<<"%"<<endl;
else
cout<<"NO EXISTE GANADOR ABSOLUTO!!! "<<endl;
}
2. Realizar un programa de un juego simple que pide al usuario que adivine un numero
generado por la computadora en un máximo 10 intentos. Utilizar colores, generación
aleatoria del número y punteros. Se calificará también formato de salida en consola.

PROGRAMA:

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
using namespace std;
int backcolor=3;

/*PROCEDIMIENTO PARA DIRECCIONAR SALIDA EN CONSOLA*/


void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

/*PROCEDIMIENTO PARA DIRECCIONAR COLOREAR SALIDAS EN CONSOLA*/


void setCColor( int color)
{
static HANDLE hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
SetConsoleTextAttribute( hConsole, color | (backcolor * 0x10 + 0x100) );
}

/*VECTOR GLOBAL DE CODIGOS DE COLORES*/


int color[7] = {
0x009,
0x00E,
0x00C,
0x002,
0x00B,
0x005,
0x00F
};

/*PROCEDIMIENTO JUEGO DE PALABRAS*/


void juego_palabras(){
srand(time(NULL));
int intentos=10;
int num_secreto=rand()%100+1;
int nume;
int *ptrcolor=color;
system("color 31");
setCColor(*ptrcolor);
gotoxy(10,2);
cout<<"COMENZAMOS EL JUEGO ";
cout<<"ADIVINE EL NUMERO SECRETO GENERADO POR EL COMPUTADOR TIENE
10 INTENTOS ";
gotoxy(10,4);
setCColor(*ptrcolor+1);
cout<<"Un numero entre 1 a 100 : ";
cin>>nume;
while (num_secreto!=nume && intentos>1){
if(num_secreto>nume){
setCColor(*ptrcolor+2);
cout<<endl;
gotoxy(10,5);
cout<<"Numero muy bajo";
}
else{
setCColor(*ptrcolor+3);
cout<<endl;
gotoxy(10,5);
cout<<"Numero muy alto";
}
intentos=intentos-1;
setCColor(*ptrcolor+4);
gotoxy(10,8);
cout<<"Le quedan "<<intentos<<" intentos ";
getche();
system("cls");
gotoxy(10,2);
setCColor(*ptrcolor+5);
cout<<"Intente con otro Numero ";
cin>>nume;
}
if (num_secreto==nume){
setCColor(*ptrcolor+6);
gotoxy(10,4);
cout<<"Numero correcto!!! adivinaste en "<<11-intentos<<" intentos FELICIDADES!!";
}
else{
setCColor(*ptrcolor+6);
gotoxy(10,4);
cout<<"El numero secreto era: "<<num_secreto;
}
}

/*PROGRAMA PRINCIPAL*/
int main()
{
system("cls");
juego_palabras();
getche();
return 0;
}

3. Realizar un programa que permita crear un fichero nuevo, abrir uno existente y
realizar las siguientes tareas: modificar registros, eliminar registros, mostrar todos
los datos del fichero y mostrar solo empleados mayores de 40 años. Cada registro
del fichero estará formado según la estructura siguiente:
Registro datos
Empleados
Código
Nombre
Apellido
Edad
Sueldo base
3000
Bono
IVA(13%)
Total Ganado
Acceder a cada una de las tareas desde un menú de opciones.

PROGRAMA:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <iomanip>
#include<conio.h>
using namespace std;
struct empleados {
int cod;
char nombre[15];
char apellidos[15];
int edad;
float sueldob;
float bono;
float iva;
float totalg;
};

//PROTOTIPO DE FUNCIONES Y PROCEDIMINETOS


void crear();
void anadir();
void modificar();
void eliminar();
void mostrar();
void menu();
void mostra_mayores();

/*PROGRAMA PRINCIPAL*/
int main()
{
int opcion;
setlocale(LC_ALL,"spanish");//comando para mejora mensajes de salida
do{
menu();
cin>> opcion;
switch(opcion){
case 1: crear(); system("cls");break;
case 2: anadir();break;
case 3: modificar();break;
case 4: eliminar();break;
case 5: mostrar();break;
case 6: mostra_mayores();break;
case 7:break;
}
}while(opcion!=7);
return 0;
}

/*PROCEDIMINETO MENU*/
void menu(){
cout<<"------------------------\n";
cout<<"\n MENU DE OPCIONES \n";
cout<<"------------------------\n";
cout<<" 1- Crear empleados \n";
cout<<" 2- Añadir empleados \n";
cout<<" 3- Modificar empleados \n";
cout<<" 4- Eliminar empleados \n";
cout<<" 5- Mostrar empleados \n";
cout<<" 6- Mostrar empleados mayores \n";
cout<<" 7- Salir \n";
cout<<"------------------------\n";
cout<<" Que desea hacer? ";
}

/*PROCEDIMIENTO ABRIR ARCHIVO*/


void crear() {
FILE *fich;
char nombrefich[15];
cout<<("Ingrese nombre de fichero que desea crear ");
cin>>nombrefich;
if ((fich = fopen(nombrefich, "wb")) == NULL)
{
cout<<"Error en apertura del archivo para lectura!!!! \n";
}
else
{
cout<<"Archivo se creo correctamente!!!! \n";
getche();
}
fclose (fich);
}

/*PROCEDIMIENTO CREAR ARCHICO*/


void anadir() {
FILE *fich;
int i,n;
empleados r;
char nombrefich[15];
cout<<("Ingrese nombre de fichero que desea abrir ");
cin>>nombrefich;
if ((fich = fopen(nombrefich, "ab")) == NULL)
{
cout<<"Error en apertura del archivo para escritura\n ";
exit(1);
}
else
{
cout<< "Cuantos empleados va añadir a la empresa? ";
cin>>n;
for (i=1; i <=n; i++){
cout<<"\nDATOS DEL EMPLEADO "<<i<<endl;
cout<<"Ingrese código ";
cin>>r.cod;
cout<<"Ingrese nombre del empleado: ";
fflush(stdin);
gets(r.nombre);
fflush(stdin);
cout<<"Ingrese apellidos del empleado: ";
fflush(stdin);
gets(r.apellidos);
fflush(stdin);
cout<<"Ingrese edad: ";
cin>>r.edad;
cout<<"Ingrese sueldo básico ";
cin>>r.sueldob;
cout<<"Ingrese bono ";
cin>>r.bono;
r.iva=r.sueldob*0.13;
r.totalg=r.sueldob+r.bono-r.iva;
fwrite(&r, sizeof(r), 1, fich);
}
fclose (fich);
}

}
/*PROCEDIMIENTO MOSTRAR ARCHIVO*/
void mostrar(){
FILE *fich;
empleados a;
char nombrefich[15];
cout<<("Ingrese nombre de fichero para mostrar datos en pantalla ");
cin>>nombrefich;
if ((fich = fopen(nombrefich, "rb")) == NULL)
{
cout<<"Error en apertura del fichero para lectura \n";
exit(1);
}
else
{
fread (&a, sizeof(a), 1, fich);
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
cout<<"\n PLANILLA DE SUELDOS
\n";
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
cout<<"CODIGO NOMBRE APELLIDOS EDAD SUELDOBASE BONOS
DESCIVA TOTAL GANADO \n";
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
while (! feof(fich)) {

cout<<a.cod<<setw(10)<<a.nombre<<setw(15)<<a.apellidos<<setw(15)<<a.edad<<set
w(10)<<a.sueldob<<setw(10)<<a.bono<<setw(10)<<a.iva<<setw(15)<<a.totalg<<endl;
fread (&a, sizeof(a), 1, fich);
}
fclose (fich);
}
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
}

/*MODIFICA REGISTRO DE ARCHIVO*/


void modificar(){
FILE *fich;
int codi;
empleados a;
int band=0,pos=0;
char nombrefich[15];
cout<<("Ingrese nombre de fichero que desea modificar ");
cin>>nombrefich;
fich=fopen(nombrefich,"rb+");
if (fich==NULL)
exit(1);
cout<<"\nIngrese el codigo del registro que quiere modificar: ";
cin>>codi;

fread(&a, sizeof(empleados), 1, fich);


while(!feof(fich) && band==0)
{
if (codi==a.cod)
{
cout<<"Los campos que puede modificar son: "<<endl;
cout<<"SUELDO BASE ? ";cin>>a.sueldob;
cout<<"BONO? ";cin>>a.bono;
a.iva=a.sueldob*0.13;
a.totalg=a.sueldob+a.bono-a.iva;
pos=ftell(fich)-sizeof(empleados);
fseek(fich,pos,SEEK_SET);
fwrite(&a, sizeof(empleados), 1, fich);
cout<<"\nEl registro se modifico exitosamente!!!\n";
band=1;
break;
}
fread(&a, sizeof(empleados), 1, fich);
}
if (band==0)
cout<<"No existe empleado con ese codigo!!!\n";
fclose(fich);
}

/*ELIMINA REGISTRO DE ARCHIVO*/


void eliminar(){
FILE *fich;
FILE *fichaux;
empleados a;
int codigo;
char nombrefich[15];
cout<<("Ingrese nombre de fichero del cual se eliminaran datos ");
cin>>nombrefich;
cout<<"Ingrese codigo del empleado que desea eliminar ";
cin>>codigo;
if((fichaux=fopen("datosaux.dat", "wb"))==NULL)
{
cout<<"Error en apertura del fichero para escritura \n";
exit(1);
}
if ((fich = fopen(nombrefich, "rb")) == NULL)
{
cout<<"Error en apertura del fichero para lectura \n";
exit(1);
}
fread(&a, sizeof(a),1, fich);
while(!feof(fich)){
if (codigo==a.cod){
cout<<"SE eliminara al empledo:"<<endl;
cout<<"NOMBRE : "<<a.nombre<<endl;
cout<<"Empleado de codigo "<<codigo<<" fue eliminado exitosamente!!!"<<endl;
}
else{
fwrite(&a, sizeof(a),1,fichaux);
}
fread(&a, sizeof(a),1, fich);
}
fclose(fich);
fclose(fichaux);
fichaux=fopen("datosaux.dat","rb");
fich=fopen(nombrefich,"wb");
fread(&a, sizeof(a), 1, fichaux);
while(!feof(fichaux))
{
fwrite(&a, sizeof(a),1, fich);
fread(&a, sizeof(a), 1, fichaux);
}
fclose(fich);
fclose(fichaux);
}
//MOSTRAR MAYORES DE 40
void mostra_mayores(){
FILE *fich;
empleados a;
char nombrefich[15];
cout<<("Ingrese nombre de fichero para mostrar datos en pantalla ");
cin>>nombrefich;
if ((fich = fopen(nombrefich, "rb")) == NULL)
{
cout<<"Error en apertura del fichero para lectura \n";
exit(1);
}
else
{
fread (&a, sizeof(a), 1, fich);
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
cout<<"\n PLANILLA EMPLEADOS MAYORES
\n";
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
cout<<"CODIGO NOMBRE APELLIDOS EDAD SUELDOBASE BONOS
DESCIVA TOTAL GANADO \n";
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
while (! feof(fich)) {
if(a.edad>=40)

cout<<a.cod<<setw(10)<<a.nombre<<setw(15)<<a.apellidos<<setw(15)<<a.edad<<set
w(10)<<a.sueldob<<setw(10)<<a.bono<<setw(10)<<a.iva<<setw(15)<<a.totalg<<endl;
fread (&a, sizeof(a), 1, fich);
}
fclose (fich);
}
cout<<"\n--------------------------------------------------------------------------------------------------
---\n";
}

También podría gustarte