Universidad del Bío Bío Facultad de Ciencias Empresariales Departamento de Sistemas de Información Campus Concepción CERTAMEN RECUPERATIVO ASIGNATURA . DISEÑO Y CONSTRUCCIÓN DE ALGORITMOS CARRERAS . INGENIERÍA CIVIL EN INFORMÁTICA INGENIERÍA EJECUCIÓN EN COMPUTACIÓN E INFORMÁTICA PROFESORES . CLAUDIO GUTIÉRREZ SOTO FECHA . 14 de Diciembre del 2009 ALUMNO: # HOJAS: NOTA: Instrucciones Lea bien antes de responder cada pregunta. Escriba su nombre y rut en cada hoja que utilice para responder. Tiempo máximo: 100 minutos. PREGUNTA 1- ESTRUCTURAS Dadas las siguientes estructuras, las cuales se encuentran con datos, se pide struct Datos_Personales{ char nombre[20]; char rut[12]; int edad; char direccion[30]; }Alumnos[30]; Struct Ramo{ char NombreRamo[30]; char anho[4]; int Semestre; char codigo_ramo[10]; // el código de ramo es distinto para cada versión de 1 asignatura char Nombre_Carrera[10]; }; struct Notas{ char rut[12]; struct Ramo ramo_; float Notas[3]; //notas parciales float promedio; //promedio final incluido examen }Notas_[150]; Pregunta 1.1 Crear una función que recibe como parámetro, el nombre del alumno, y el año; muestre todas las asignaturas (nombre) aprobadas, así como el promedio. (25 PUNTOS) Universidad del Bío Bío Facultad de Ciencias Empresariales Departamento de Sistemas de Información Campus Concepción Pregunta 1.2 Crear una función que recibe como parámetro el nombre del ramo, la carrera, el año y semestre. La función debe mostrar todos los alumnos (el nombre) que aprobaron el ramo en el examen, (25 PUNTOS) PREGUNTA 2- RECURSIVIDAD Pregunta 2.1 Crear una función recursiva que ordene de manera ascendente el arreglo Notas_[150], (por el promedio) correspondiente a las estructuras de la parte 1 de este certamen. La función recibe como parámetro el nombre del ramo, el año y el semestre. (25 PUNTOS) PREGUNTA 3- PUNTEROS 3.1.- ¿ Cuáles son los valores que se imprimen en cada caso? a) int *p, papa[4],i=5,*ptro=&papa,*ptro2; // (10 puntos) papa[4]={1,2,3,4}; p=&i; *p=*p-*(ptro+3); printf(“%d”, *p); ptro2=ptro+2; ptro++; i=i+*(papa+2); printf(“%d %d \n”,i,*p); *(ptro+3)=*(ptro2+*p)+*ptro; printf(“d\n”,papa[3]); b) 15 puntos typedef struct{ int anhos_servicio; int mes; int dia; int anio; }fecha; struct Cuenta{ int *no_cuenta; char *tipo_cuenta[5]; char *nombre; float *saldo; fecha anhos; }cliente,*pc=&cliente; main(){ int n,*p=&n; char papa[4]={‘A’,’b’,’c’,’d’},*c=&papa[0]; float b,*f=&b; *p=10;*f=(11.0+*p); cliente.no_cuenta=p; cliente.tipo_cuenta=c+2; cliente.nombre=“Lázaro”; cliente.saldo=&b; printf(“%d %c %s %.2f”,*cliente.no_cuenta,*cliente.tipo_cuenta, cliente.nombre,*cliente.saldo); printf(“%d %c %s %.2f \n”,*pc->no_cuenta,*pc->tipo_cuenta, pc>nombre,*pc->saldo); } Universidad del Bío Bío Facultad de Ciencias Empresariales Departamento de Sistemas de Información Campus Concepción RESPUESTA PREGUNTA 1.1 ALUMNO: SECCIÓN PUNTAJE void AsignaturaAprob(char nombre[ ],char anho[ ]) { int i,j; for(i=0;i<30;i++) { if(!strcmp(nombre,Alumnos[i].nombre)) // 05 primer for y el nombre { for(j=0; j<150 ; j++) // 08 puntos el segundo for y los comparadores { if(!strcmp(Alumnos[i].rut,Notas_[j].rut) && !strcmp(Notas_[j].ramo_.anho, anho) && Notas_[j].promedio>=60) printf(“%s %d\n”, Notas_[j].ramo_.NombreRamo, Notas_[j].promedio); //04 impresión else continue; } } else continue; } } // 08 puntos el funcionamiento correcto Universidad del Bío Bío Facultad de Ciencias Empresariales Departamento de Sistemas de Información Campus Concepción RESPUESTA PREGUNTA 1.2 ALUMNO: SECCIÓN PUNTAJE void AprobaronExamen(char NombreRamo[ ],char carrera[ ],char anho[ ],int Semestre) { int i,j; for(i=0;i<150;i++) // 08 puntos el for y los comparadores { if(!strcmp(NombreRamo,Notas_[i].ramo_.NombreRamo) && !strcmp(anho,Notas_[i].ramo_.anho) && !strcmp(carrera,Notas_[i].ramo_.Nombre_Carrera) && Semestre==Notas_[i].ramo_.Semestre && Notas_[i].promedio>=60 ) { If(((Notas_[i].Notas[0]+Notas_[i].Notas[1]+Notas_[i].Notas[2])/3)<60) { // 05 puntos el calculo de la nota de presentación for(j=0;j<30;j++) { if(!strcmp(Notas_[i].rut,Alumnos[j].rut)) // 04 puntos impresión printf(“%s %d\n”, Alumnos[j].nombre); else continue; } } else continue; } else continue; } // 08 puntos el funcionamiento correcto Universidad del Bío Bío Facultad de Ciencias Empresariales Departamento de Sistemas de Información Campus Concepción RESPUESTA PREGUNTA 2.1 ALUMNO: SECCIÓN PUNTAJE void Ordenar(Struct Notas Notas[], int inic, char NombreRamo[ ], char anho[ ],int Semestre) { int i,j,Mayor; Struct Notas Aux; for(i=Inic.,j=0;i<150 ;i++) { if(!strcmp(NombreRamo,Notas_[i].ramo_.NombreRamo) && !strcmp(anho,Notas_[i].ramo_.anho) && Semestre==Notas_[i].ramo_.Semestre ) { If(j==0) { // 05 puntos encontrar el mayo Mayor=i; j=1; } else if(Notas_[i].promedio>Notas[Mayor].promedio) Mayor=i; } else continue; } // fin del for If(j==1) {// 05 puntos el intercambio Aux=Notas_[Inic.]; Notas_[Inic.]=Notas_[Mayor]; Notas_[Mayor]=Aux; } Ordenar(Notas_,Inic+1,NombreRamo, anho, Semestre); // Adecuada llamada 05 puntos } // 10 puntos el funcionamiento correcto Universidad del Bío Bío Facultad de Ciencias Empresariales Departamento de Sistemas de Información Campus Concepción RESPUESTA PREGUNTA 3 ALUMNO: SECCIÓN a) Imprime 1 Imprime 4, 4 y una dirección de memoria si esta es menor que 64k b) Imprime 10, c, Lazaro, 21.0 Imprime 10, c, Lazaro, 21.0 PUNTAJE