Pract met de la program templa

4
Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas Ingº William E. Arcaya C. Docente Asociado TC Práctica de Metodología de la Programación Apellidos y nombres:…………………………………………………………………… Cód.Matric:……….. Fecha: ………………………. I.- Marcar los que son verdaderos con V, y los que son falsos con F. 1.- Seleccionar la forma correcta de definición de cabecera de un template de función: a) template (int) (*foo) (char *m[]). b) template class foo(char *m[]). c) template<typename T> int foo(char *m[]). d) template<typename T, T2> T foo(T2 *m[]). e) template<class X> void *foo(X *m[]). 2.- a) los templates de función no pueden ser sobrecargados. b) Cuando un template de función es sobrecargado, el compilador primero intenta emparejar con la versión no-template de la función. 3.- a) Una plantilla (template) de clase no necesita la palabra clave template. b) los templates de clases representan las clases genéricas. c) los templates de clases son tipos parametrizados. 4.- a) Los templates de clases pueden tener parámetros sin tipo. b) Los templates de clases que tienen parámetros sin tipo con diferentes valores son considerados como tipos de datos diferentes. II.- Ejemplo de template de función (a) #include <iostream> using namespace std; template<class Type> Type Min(Type arg1, Type arg2) { Type min; if (arg1 < arg2) min = arg1; else min = arg2; return min; } int main() { cout << Min(15, 25) << endl; cout << Min(254.78, 12.983) << endl; cout << Min('A', 'Z') << endl; return 0; } En el ejercicio anterior sobrecargar la función Min para comparar cadenas, por ejemplo cout<<Min(“MANZANA” , “NARANJA”); Ejemplo de template de función (b) #include <iostream> using std::cout; using std::endl; // funcion template printArray //template< typename T > template< class T > void printArray( const T *array, int count ) { for ( int i = 0; i < count; i++ ) cout << array[ i ] << " ";

Transcript of Pract met de la program templa

Page 1: Pract met de la program templa

Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas

Ingº William E. Arcaya C. Docente Asociado TC

Práctica de Metodología de la Programación

Apellidos y nombres:…………………………………………………………………… Cód.Matric:……….. Fecha: ……………………….

I.- Marcar los que son verdaderos con V, y los que son falsos con F. 1.- Seleccionar la forma correcta de definición de cabecera de un template de función:

a) template (int) (*foo) (char *m[]).

b) template class foo(char *m[]).

c) template<typename T> int foo(char *m[]).

d) template<typename T, T2> T foo(T2 *m[]).

e) template<class X> void *foo(X *m[]).

2.-

a) los templates de función no pueden ser sobrecargados.

b) Cuando un template de función es sobrecargado, el compilador primero intenta emparejar con la versión

no-template de la función.

3.- a) Una plantilla (template) de clase no necesita la palabra clave template.

b) los templates de clases representan las clases genéricas. c) los templates de clases son tipos parametrizados. 4.- a) Los templates de clases pueden tener parámetros sin tipo. b) Los templates de clases que tienen parámetros sin tipo con diferentes valores son considerados como

tipos de datos diferentes.

II.- Ejemplo de template de función (a) #include <iostream>

using namespace std;

template<class Type>

Type Min(Type arg1, Type arg2)

{

Type min;

if (arg1 < arg2)

min = arg1;

else

min = arg2;

return min;

}

int main()

{

cout << Min(15, 25) << endl;

cout << Min(254.78, 12.983) << endl;

cout << Min('A', 'Z') << endl;

return 0;

}

En el ejercicio anterior sobrecargar la función Min para comparar cadenas, por

ejemplo cout<<Min(“MANZANA” , “NARANJA”);

Ejemplo de template de función (b) #include <iostream>

using std::cout;

using std::endl;

// funcion template printArray

//template< typename T >

template< class T >

void printArray( const T *array, int count )

{

for ( int i = 0; i < count; i++ )

cout << array[ i ] << " ";

Page 2: Pract met de la program templa

Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas

Ingº William E. Arcaya C. Docente Asociado TC

cout << endl;

}

int main()

{

const int ACOUNT = 5;

const int BCOUNT = 7;

const int CCOUNT = 6;

int a[ ACOUNT ] = { 1, 2, 3, 4, 5 };

double b[ BCOUNT ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };

char c[ CCOUNT ] = "HELLO"; // 6ta posicion para null

cout << "Array a Contiene:" << endl;

//invoca función template para enteros

printArray( a, ACOUNT );

cout << "Array b Contiene:" << endl;

// invoca función template para doubles

printArray( b, BCOUNT );

cout << "Array c Contiene:" << endl;

// invoca función template para caracteres

printArray( c, CCOUNT );

return 0;

}

III.- Ejemplo de template de clase #include <iostream>

using std::cout;

using std::endl;

template<class Type>

class CCompare

{

protected:

Type arg1;

Type arg2;

public:

CCompare(Type arg1, Type arg2)

{

CCompare::arg1 = arg1;

CCompare::arg2 = arg2;

}

~CCompare() {}

Type GetMin()

{

Type min;

if (arg1 < arg2)

min = arg1;

else

min = arg2;

return min;

}

Type GetMax()

{

Type max;

if (arg1 > arg2)

max = arg1;

else

max = arg2;

Page 3: Pract met de la program templa

Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas

Ingº William E. Arcaya C. Docente Asociado TC

return max;

}

int Igual()

{

int Igual;

if (arg1 == arg2)

Igual = 1;

else

Igual = 0;

return Igual;

}

};

int main()

{

CCompare<int> compare1(15, 25);

CCompare<double> compare2(254.78, 12.983);

CCompare<char> compare3('A', 'Z');

cout << "EL OBJETO COMPARE1" << endl;

cout << "Menor: " << compare1.GetMin() << endl;

cout << "Mayor: " << compare1.GetMax() << endl;

cout << "Igual: " << compare1.Igual() << endl;

cout << endl;

cout << "EL OBJETO COMPARE2" << endl;

cout << "Menor: " << compare2.GetMin() << endl;

cout << "Mayor: " << compare2.GetMax() << endl;

cout << "Igual: " << compare2.Igual() << endl;

cout << endl;

cout << "EL OBJETO COMPARE3" << endl;

cout << "Menor: " << compare3.GetMin() << endl;

cout << "Mayor: " << compare3.GetMax() << endl;

cout << "Igual: " << compare3.Igual() << endl;

cout << endl;

return 0;

}

Ejemplo de template de clase(b) //pila.h (esto va en Header Files)

template< typename T >

class Pila

{

public:

Pila( int = 10 );

~Pila()

{

delete [] PilaPtr;

}

bool push( const T& );

bool pop( T& );

bool isEmpty() const

{

return top == -1;

}

bool isFull() const

{

return top == size - 1;

}

private:

int size;

int top;

T *PilaPtr;

};

template< typename T >

Pila< T >::Pila( int s )

: size( s > 0 ? s : 10 ),

top( -1 ),

PilaPtr( new T[ size ] )

{

}

template< typename T >

bool Pila< T >::push( const T &pushValue )

{

if ( !isFull() )

{

PilaPtr[ ++top ] = pushValue;

return true;

}

return false;

}

template< typename T >

bool Pila< T >::pop( T &popValue )

{

if ( !isEmpty() )

{

popValue = PilaPtr[ top-- ];

return true;

}

return false;

}

Page 4: Pract met de la program templa

Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas

Ingº William E. Arcaya C. Docente Asociado TC

//main.cpp (esto va en Source Files)

#include <iostream>

using std::cout;

using std::endl;

#include "Pila.h"

int main()

{

Pila< double > doublePila( 5 );

double doubleValue = 1.1;

cout << "Empilar elementos de tipo double\n";

while ( doublePila.push( doubleValue ) )

{

cout << doubleValue << ' ';

doubleValue += 1.1;

}

cout << "\nPila llena. no puede empilar " << doubleValue

<< "\n\nDesapilar elmentos de pila con doubles\n";

while ( doublePila.pop( doubleValue ) )

cout << doubleValue << ' ';

cout << "\nPila vacia. no puede desapilar\n";

Pila< int > intPila;

int intValue = 1;

cout << "\nEmpilar elementos en Pila de enteros\n";

while ( intPila.push( intValue ) )

{

cout << intValue << ' ';

intValue++;

}

cout << "\nPila llena. no puede empilar " << intValue

<< "\n\ndesapilar elementos de pila de enteros\n";

while ( intPila.pop( intValue ) )

cout << intValue << ' ';

cout << "\nPila vacia. no puede desapilar" << endl;

return 0;

}

V.- Implementar una función template para ordenar un array de enteros, float o doubles.