Escuela Politécnica Superior - ingeniería de sistemas y automática

Anuncio
Escuela Politécnica Superior
Ingeniería Industrial
EXAMEN TEÓRICO DE INFORMÁTICA APLICADA
11 de Junio de 2005
1. Explique en qué consiste el paso por valor, paso por dirección y paso por referencia.
Ponga un ejemplo de cada uno de ellos. ¿Cuáles se admiten en C y cuales en C++? (1 pto)
2. ¿Qué tipos de accesibilidad se pueden utilizar dentro de una clase de C++? Explique
las caraterísticas de cada uno de ellos.
(1 pto)
3. Indique los errores que aparecerían al compilar el siguiente programa C. Comente
qué tipo de error se ha cometido. Vuelva a escribir el código de manera que no exista
ningún error de compilación.
(1 pto)
struct alumno
{
char nombre[MAX];
float notas[3];
}
void LeerVector(float *v, int n)
void IntroducirAlumno(alumno *alu)
void main(void)
{
int n=5;
int v[MAX];
alumno pepe;
printf(Encuentre los errores...\n);
for(int i = 0, i < n, i++)
printf("%d", i);
}
LeerVector(v[], 30);
IntroducirAlumno(pepe);
void LeerVector(float *v, int n)
{
int i;
}
for(i=0, i < n, i++)
{
printf("Introduzca el elemento %d: ", i);
scanf("%f", &v(i));
}
void IntroducirAlumno(alumno *alu)
{
printf("Introduzca el nombre del alumno:\n");
scanf("%d", &alu.nombre);
printf("Introduzca las notas del alumno:\n");
scanf("%f", &alu.notas[0]);
scanf("%f", &alu.notas[1]);
scanf("%f", &alu.notas[2]);
}
Duración del examen: 2:00 horas
Escuela Politécnica Superior
Ingeniería Industrial
4. El fragmento de código que aparece a continuación se ha compilado sin ningún
problema. Sin embargo, al ejecutarlo, el sistema operativo produce un error y termina el
programa. Indique los errores y vuelva a escribir el código de forma correcta.
(1.5 ptos)
#include <stdio.h>
struct impresion{
char usuario[30];
int pc;
char fichero[30];
};
typedef struct impresion impresion;
void main(void)
{
impresion *doc;
FILE* fichero;
IntroducirImpresion(doc);
fichero = fopen("fichero.txt", "w");
if(fichero=NULL)
fclose(fichero);
}
fprintf(fichero,
fprintf(fichero,
fprintf(fichero,
fprintf(fichero,
"Datos de impresion\n");
"Usuario %s", doc->usuario);
"PC %s", doc->pc);
"Fichero %s", doc->fichero);
int IntroducirImpresion(impresion *imp)
{
printf("Introduzca el nombre del usuario:\n");
scanf("%s", imp->usuario);
printf("Introduzca el ordenador:\n");
scanf("%f", imp->pc);
printf("Introduzca el nombre del fichero:\n");
scanf("%s", imp->fichero);
}
5. Defina: Lista, cola y pila. Defina una estructura de datos en C que le permita
implementar las anteriores.
(1.5 ptos)
6. Definir brevemente los siguientes conceptos de C++: clase, objeto, método,
constructor, destructor y función amiga (friend).
(2 ptos)
Duración del examen: 2:00 horas
Escuela Politécnica Superior
Ingeniería Industrial
7. Lea atentamente el código de C++ que se muestra a continuación y conteste a las
siguientes preguntas:
a) Describa la jerarquía de clases.
b) Describa el funcionamiento del operator +.
c) ¿Indique en qué momento se llama a los constructores y a los destructores?
d) ¿Cuál es la salida por pantalla del programa?
(2 ptos)
MainCadena.cpp
#include <iostream.h>
#include "..\inc\CDCadena.h"
int main(void)
{
char cad1[]="abc";
char cad2[]="def";
CDCadena c1(4, cad1);
CDCadena c2(4, cad2);
CDCadena c3;
c3 = (c1 + c2);
c1.Visualizar();
c2.Visualizar();
c3.Visualizar();
return 0;
}
CCadena.h
class CCadena
{
protected:
int tam;
char *pCadena;
public:
CCadena(int t=20);
CCadena(int t, char *cad);
CCadena(CCadena &orig);
~CCadena(void);
void Visualizar(void);
};
Duración del examen: 2:00 horas
Escuela Politécnica Superior
Ingeniería Industrial
CDCadena.h
#include "../inc/CCadena.h"
class CDCadena : public CCadena{
public:
CDCadena(int t=20);
CDCadena(int t, char *cad);
CDCadena(CDCadena &orig);
~CDCadena(void); // destructor
CDCadena& operator = (CDCadena &orig);
CDCadena operator + (CDCadena &orig);
};
CCadena.cpp
#include <iostream.h>
#include "..\inc\CCadena.h"
CCadena::CCadena(int t)
{
tam = t;
pCadena = new char[tam];
cout << endl << "Constructor clase base";
}
CCadena::CCadena(int t, char *cad)
{
tam = t;
pCadena = new char[tam+1];
for(int i=0; i<tam; i++)
pCadena[i]=cad[i];
}
CCadena::CCadena(CCadena &orig)
{
tam = orig.tam;
pCadena = new char[tam+1];
for(int i=0; i<tam; i++)
pCadena[i]=orig.pCadena[i];
}
CCadena::~CCadena()
{
cout << endl << "Llamando al destructor de la clase base";
delete [] pCadena;
}
void CCadena::Visualizar()
{
cout << endl << "Cadena: " << pCadena << endl;
}
Duración del examen: 2:00 horas
Escuela Politécnica Superior
Ingeniería Industrial
CDCadena.cpp
#include <iostream.h>
#include <string.h>
#include "..\inc\CDCadena.h"
CDCadena::CDCadena(int t) : CCadena(t)
{
cout << endl<< "Llamando al constructor de la clase derivada";
}
CDCadena::CDCadena(int t, char *cad) : CCadena(t, cad)
{
}
CDCadena::CDCadena(CDCadena &orig) : CCadena(orig)
{
}
CDCadena::~CDCadena()
{
cout << endl<< "Llamando al destructor de la clase derivada";
}
CDCadena& CDCadena::operator = (CDCadena &orig)
{
delete []pCadena;
pCadena = new char[orig.tam];
strcpy(pCadena, orig.pCadena);
return (*this);
}
CDCadena CDCadena::operator + (CDCadena &orig)
{
char *cadena;
cadena = new char[tam + orig.tam];
strcpy(cadena, pCadena);
strcat(cadena, orig.pCadena);
CDCadena temp(tam + orig.tam, cadena);
return (temp);
}
Duración del examen: 2:00 horas
Descargar