Documentos de Académico
Documentos de Profesional
Documentos de Cultura
en Informtica
25/04/2013
PONDERACIN:
73
NOTA: ___________
15%
Instrucciones: Conteste lo enunciado en cada pregunta. NO se acepta enmienda, por lo tanto, lea bien antes de contestar. Responda con lapicera, si lo hace con lpiz grafito NO tendr derecho a reclamo si considera una pregunta mal corregida. La evaluacin tiene una exigencia de un 60% para el 4.0. Utilice slo las hojas entregadas.
ITEM
Declare una nueva estructura TRIANGULO con tres atributos, el primero llamado altura de tipo int, el segundo llamado base de tipo int y el tercero llamado info de tipo puntero a FIGURA. (3 puntos) struct TRIANGULO { int altura; int base; struct FIGURA *info; // 3 punto };
c.
Declare una variable llamada v_f de tipo FIGURA. (1 punto) struct FIGURA v_f;
d.
Declare una variable llamada v_c de tipo CUADRADO. (1 punto) struct CUADRADO v_c;
e.
Declare una variable llamada v_t de tipo TRIANGULO. (1 punto) struct TRIANGULO v_t;
f.
Declare una variable llamada p_f de tipo puntero a FIGURA. (1 punto) struct FIGURA *p_f;
g.
Declare una variable llamada p_c de tipo puntero a CUADRADO. (1 punto) struct CUADRADO *p_c;
h.
Declare una variable llamada p_t de tipo puntero a TRIANGULO. (1 puntos) struct TRIANGULO *p_t;
i.
Inicialice la variable p_f con la direccin del atributo info de la variable v_c. ( 1 punto) p_f = &v_c.info;
j.
Inicialice el atributo info de la variable v_t con la direccin de la variable v_f. ( 1 punto) v_t.info = &v_f;
k.
Utilizando la variable v_c, asigne el valor 5 al atributo lado, la palabra cuadrado al atributo nombre correspondiente del atributo info, y adems calcule el rea y permetro y asgnelos en los atributos correspondientes tambin del atributo info. (7 puntos) Las frmulas para el clculo del rea y permetro del cuadrado son las siguientes: area = lado * lado permetro = 4 * lado v_c.lado = 5; // 1 pto strcpy(v_c.info.nombre,"cuadrado"); //2 ptos. v_c.info.perimetro = 4*v_c.lado; // 2 ptos. v_c.info.area = v_c.lado*v_c.lado; // 2 ptos.
l.
Utilizando la variable puntero p_t, asigne el valor 3 al atributo base y el valor 2 al atributo altura, la palabra triangulo al atributo nombre correspondiente del atributo info, y adems calcule el rea y permetro y asgnelos en los atributos correspondientes tambin del atributo info. (8 puntos) Las frmulas para el clculo del rea y permetro del tringulo son las siguientes: area = ( base * altura ) / 2 permetro = 3 * base p_t = &v_t; p_t->base = 3; // 1 pto. p_t->altura = 2; // 1 pto. strcpy(p_t->info->nombre, "triangulo"); // 2 ptos. p_t->info->perimetro = 3*p_t->base; // 2 ptos. p_t->info->area = (p_t->base*p_t->altura)/2; // 2 ptos.
int A = 2; int B = 6; int C = 3; int *P1, *P2; P1 = &A; P2 = &C; *P1=*P2*2; B -= (*P2)++; P2 = &B; P1 = &C; *P2*=*P1; A = *P1+*P2; C *= (*P2)--;
A 2
B 6
P1
P2
ITEM
El formato en el que se encuentra almacenada la informacin es: 2 nmeros, 1 nmero, 1 nmero y 1 numero. (Se considera que la mxima cantidad de goles que se pueden realizar en un partido es de 9). tabla.dat - codigo de tipo entero (correspondiente al cdigo del equipo) - nombre de tipo cadena de caracteres de largo 30 (correspondiente al nombre del equipo) - puntos de tipo entero (correspondiente a la cantidad de puntos totales obtenidos) - totalafavor de tipo entero (correspondiente a la cantidad total de goles realizados) - totalencontra de tipo entero (correspondiente a la cantidad total de goles recibidos) El formato en el que se deber almacenar la informacin es: 2 nmeros, 20 caracteres, 3 nmeros, 3 nmeros y 3 nmeros. Observaciones: 1) Para calcular la cantidad de puntos obtenidos de un equipo por partido se cuenta con la siguiente informacin: Si el equipo empato, obtiene 1 punto Si el equipo gano, obtiene 3 puntos. Si el equipo perdi, no obtiene ningn punto. Considere adems que si un equipo no participo en ningn partido, entonces no debe registrarse en el archivo de salida tabla.dat. 2) Toda la informacin leda de los archivos deber ser almacenada en las estructuras de datos correspondientes. 3) Se pide disear el programa completo en lenguaje C/C++. c.
// Programa Copa de Futbol INACAP #include <stdio.h> #include <stdlib.h> #include <string.h> struct equipos { int codigo; char nombre[30]; }; struct int int int int }; resultados { codigo; resultado; golesfavor; golescontra;
struct tabla { int codigo; char nombre[30]; int puntos; int totalafavor; int totalencontra; }; void main(){ FILE *aequipos,*aresultado,*atabla; struct equipos e; struct resultados r; struct tabla t; bool participo; aequipos = fopen("equipos.dat","r"); if (aequipos == NULL ){ printf("Error al abrir el archivo equipos.dat"); exit(0); } atabla = fopen("tabla.dat","w"); if (atabla == NULL ){ printf("Error al crear el archivo tabla.dat"); exit(0); } while (fscanf(aequipos,"%2d%20s",e.codigo,e.nombre)!= EOF){ aresultado = fopen("resultados.dat","r"); if ( aresultado == NULL ){ printf("Error al abrir el archivo resultados.dat"); exit(0); } strcpy(t.nombre, e.nombre); t.codigo = e.codigo; t.puntos = 0; t.totalafavor = 0; t.totalencontra = 0;
participo = false; while (fscanf(aresultado,"%2d%1d%1d%1d",r.codigo,r.resultado, r.golesfavor,r.golescontra) != EOF){ if ( r.codigo == e.codigo ) { participo = true; if ( r.resultado == 0 ) t.puntos = t.puntos + 1; else if ( r.resultado == 1 ) t.puntos = t.puntos + 3; t.totalafavor += r.golesfavor; t.totalencontra += r.golescontra; }; }; fclose(aresultado); if ( participo == true ) fprintf(atabla,"%2d%20s%3d%3d%3d",t.codigo,t.nombre,t.puntos, t.totalafavor,t.totalencontra); }; fclose(aequipos); fclose(atabla); }