Anda di halaman 1dari 6

Arrays

Arrays

1. [001.txt] Crea una funci´on creaVector que te devuelva un vector de n enteros

Soluci´on:

int c r e a V e c t o r I n t (

int n ) {

}

return

new

int [ n ] ;

2. [002.txt] Crea una funci´on creaTabla que te devuelva una tabla cuadrada de n x n enteros

Soluci´on: int ∗∗ c r e aT a bl a I n t ( int
Soluci´on:
int ∗∗ c r e aT a bl a I n t ( int n )
{
int
∗∗ r e t = new
int ∗ [ n ]
;
for ( int
i =0; i <n ; i++) {
r
e t [ i ] = new int [ n ] ;
}
return
r e t ;
}
{ r e t [ i ] = new int [ n ] ; } return

3. [003.txt] Crea una funci´on creaCuboInt que te devuelva un cubo de n x n x n enteros

Soluci´on: int ∗∗∗ c reaCubo In t ( int n ) { int ∗∗∗ r
Soluci´on:
int ∗∗∗ c reaCubo In t ( int n )
{
int
∗∗∗
r e t = new int ∗ ∗ [ n ] ;
for ( int
i =0; i <n ; i++) {
r
e t [ i ] = new int ∗ [ n ] ;
for
(
int
i 2 =0; i 2 <n
; i 2++) {
r e t [
i ] [ i 2 ] = new int [ n ] ;
}
}
return
r e t
;
}

4. [004.txt] Crea una funci´on buscarEnCuboInt que busque la primera aparici´on de un n´umero dado dentro de un cubo de tama˜no n Devolver´a su direcci´on de memoria ´o 0 si no est´a

Soluci´on:

int

(

for ( int i 1 =0; i 1 < s i z e

buscarEnCuboInt

int num, int s i z e , int ∗∗∗ cubo ) { ; i 1++) {

for ( int i 2 =0; i 2 < s i z e ; i 2++) {

for

(

int

i 3 =0; i 3 < s i z e

; i 3++) {

i f ( cubo [ i 1 ] [ i 2 ] [ i 3 ] == num) {

return &(cubo [ i 1 ] [ i 2 ] [ i 3 ] ) ;

}

}

}

}

return 0 ;

}

P´agina 1 de 6

Arrays

Arrays

5. [005.txt] Crea una funci´on crearCuboCadenas que te devuelva un cubo de n x n x n punteros a char

Soluci´on:

char ∗ ∗∗∗ crearCuboCadenas ( int n ) {

}

char ∗ ∗∗∗ r e

for ( int i =0; i <n ; i++) {

t = new char ∗ ∗ ∗ [ n ]

r e t [ i ] = new char ∗ ∗ [ n ] ;

for

(

int

i 2

=0; i 2 <n ; i 2++) {

}

r e t [

i ] [ i 2 ] = new char [ n ] ;

}

return

r e t

;

;

i 2 ] = new char ∗ [ n ] ; } return r e t

6. [006.txt] Crea una funci´on crearCuboCadenas que te devuelva un cubo de n x n x n punteros a char

Soluci´on: char ∗ ∗∗∗ crearCuboCadenas ( int n ) { char ∗ ∗∗∗ r e
Soluci´on:
char ∗ ∗∗∗ crearCuboCadenas ( int n ) {
char ∗ ∗∗∗ r e
t = new char ∗ ∗ ∗ [ n ]
;
for ( int i =0; i <n ; i++) {
r
e t [ i ] = new char ∗ ∗ [ n ] ;
for
(
int
i 2
=0; i 2 <n ; i 2++) {
r e t [
i ] [ i 2 ] = new char ∗ [ n ] ;
}
}
return
r e t
;
}

7. [007.txt] General´ızala con el nombre crearCubo para que pueda crear cubos de cualquier tipo de datos

Soluci´on:

template < c l a s s T> T ∗∗∗ crearCubo ( int n ) {

T

∗∗∗ r e t = new T ∗ ∗ [ n ] ;

for ( int

r

for

i =0; i <n ; i++) {

e t [ i ] = new T [ n ] ;

(

int

i 2

=0; i 2 <n ; i 2++) {

 

r

e t [

i

]

[ i 2 ] = new T

[ n

]

;

 

}

}

return

r e t

;

}

8. [008.txt] Crea una funci´on buscarEnCubo que te permita buscar algo en cualquier tipo de cubo Devolver´a su direcci´on de memoria ´o 0 si no est´a

Arrays

Arrays

template < c l a s s

T> T buscarEnCubo

for ( int i 1

=0; i 1 < s i z e ; i 1++) {

for ( int i 2 =0; i 2 < s i z e ; i 2++) {

for

(

int

i 3

=0; i 3 < s i z e

; i 3++) {

(T dato , int s i z e , T ∗∗∗ cubo ) {

i f ( cubo [ i 1 ] [ i 2 ] [ i 3 ] == dato return &(cubo [ i 1 ] [ i 2 ] [ i 3 ] ) ;

) {

}

}

}

}

return 0 ;

}

[ i 3 ] ) ; ) { } } } } return 0 ; }

9. [009.txt] Crea una clase CuboInt que represente a un cubo de enteros Agrega los siguientes servicios:

un m´etodo setValue que pone un valor en un lugar del cubo setValue que pone un valor en un lugar del cubo

un m´etodo getValue que obtiene el valor que hay en un lugar del cubo getValue que obtiene el valor que hay en un lugar del cubo

Un destructorgetValue que obtiene el valor que hay en un lugar del cubo Un operador de asignacion

Un operador de asignacionobtiene el valor que hay en un lugar del cubo Un destructor Un constructor de copias

Un constructor de copiasen un lugar del cubo Un destructor Un operador de asignacion Soluci´on: c l a s

Soluci´on: c l a s s CuboInt { public : CuboInt ( int s i
Soluci´on:
c l a s s CuboInt {
public :
CuboInt ( int s i z e =1) ;
void s e tV al u e
( int x
, int y , int z
, int v al u e ) ;
int ge tV alue
( int x , int y , int z )
;
˜ CuboInt ( ) ;
CuboInt & operator =(CuboInt & c ) ;
private :
int
∗∗∗
d a t o s ;
int
s i z e
;
} ;
CuboInt
: : CuboInt ( int
s i z e
) {
th is −> s i z e = s i z e ;
d
a t o s = new int ∗ ∗ [
s i z e
]
for
(
int
i 1
[ i 1
int
=0; i 1 < s i z e
;
; i 1++) {
d a t o s
s i z e
for
(
] = new int ∗ [
i 2 =0; i 2 < s i z e ;
;
i 2++) {
]
d a t o s [
i 1
]
[
i 2
] = new int [ s i z e
]
;
}
}
}
CuboInt : : ˜ CuboInt ( ) {
for ( int i 1
=0; i 1 < s i z e ; i 1++) {
for ( int
de lete
i 2
=0; i 2 < s i z e
; i 2++) {
[
]
d a t o s
[
i 1
]
[
i 2
]
;
}
de lete [
]
d a t o s
[ i 1
]
;
}
de lete [
] d a t o s
;
}
CuboInt & CuboInt : : operator =(CuboInt & c ) {

P´agina 3 de 6

Arrays

Arrays
i f (&c == th is ) { return ∗ th is ; } for
i f (&c == th is )
{
return ∗ th is
;
}
for ( int i 1
=0; i 1 < s i z e ; i 1++) {
for ( int
i 2
=0; i 2 < s i z e
; i 2++) {
de lete
[
]
d a t o s
[
i 1
]
[
i 2
]
;
}
de lete [
]
d a t o s
[
i 1
]
;
}
de lete [ ]
d a t o s
;
th is −> s i z e = c .
s i z e
;
d a t o s = new int
∗ ∗ [
s i z e
]
;
for
(
int
i 1
=0; i 1 < s i z e ;
i 1++) {
d a t o s
[ i 1
] = new
int ∗ [
for
;
i 2++) {
s i z e
]
( int
i 2 =0; i 2 < s i z e ;
d a t o s [
i 1
] [ i 2 ] = new int [ s i z e ]
;
for (
int
i 3
=0; i 3 < s i z e
d a t o s [
i 1
]
[
i 2
]
[
i 3 ]
=
; i 3++) {
. d a t o s
c
[
i 1
]
[
i 2
]
[
i 3
]
;
}
}
}
return ∗ th is
;
}
void CuboInt :
:
s e tV al u e ( int
x ,
int y
, int z
,
int v al u e ) {
d a t o s [ x ] [ y ]
[ z ] = v al u e ;
}
int CuboInt :
:
ge tV alue
( int
x , int y ,
int z ) {
return d a t o s [
x ] [
y ] [
z
]
;
}
y , int z , T v al u e ) ; x , int
y , int z , T v al u e ) ;
x , int
y ,
int z )
;

10. [010.txt] Parametriza la clase para que represente cubos de cualquier tipo de elementos

Soluci´on: template < c l a s s T> c l a s s Cubo
Soluci´on:
template < c l a s s T> c l a s s Cubo {
public :
Cubo (
int s i z e =1) ;
void
s e tV al u e
( int x , int
T ge tV alue ( int
˜Cubo ( ) ;
Cubo & operator =(Cubo & c ) ;
protected :
T ∗∗∗ d a t o s
int s i z e ;
;
} ;
template < c l a s s T> Cubo<T > :: Cubo (
int s i z e ) {
th is −> s i z e = s i z e
;
d
a t o s = new T ∗ ∗ [
s i z e
;
for
(
int
i 1
=0; i 1 < s i z e ;
]
i 1++) {
d
a t o s
[ i 1
]
= new
T
∗ [
s i z e
]
;
for
( int
i 2
=0; i 2 < s i z e
; i 2++) {
d
a t o s [
i 1 ] [ i 2 ] = new T
[ s i z e
]
;
}
}

P´agina 4 de 6

Arrays

Arrays

}

template < c l a s s

T> Cubo<T > :: ˜ Cubo ( ) {

 

for ( int i 1

=0; i 1 < s i z e ; i 1++) {

 

for ( int

i 2

=0; i 2 < s i z e

; i 2++) {

de lete [

]

d a t o s

[

i 1

]

[

i 2

]

;

}

de lete

[

]

d a t o s

[ i 1

]

;

}

de lete [

] d a t o s ;

 

}

template < c l a s s T> Cubo<T> & Cubo<T > :: operator =(Cubo
template < c l a s s T> Cubo<T> &
Cubo<T > :: operator =(Cubo & c
) {
i f (&c == th is
return ∗ th is
) {
;
}
for ( int i 1
for ( int
=0; i 1 < s i z e ; i 1++) {
i 2
=0; i 2 < s i z e
; i 2++) {
de lete [
]
d a t o s
[
i 1
]
[
i 2
]
;
}
de lete [
]
d a t o s
[
i 1
]
;
}
de lete [ ]
d a t o s
;
th is −> s i z e = c
.
s i z e ;
d
a t o s = new T ∗ ∗ [
s i z e
]
;
for
(
int
=0; i 1 < s i z e
; i 1++) {
d a t o s
i 1
[ i 1
int
] = new T ∗ [
i 2 =0; i 2 < s i z e
s i z e
]
;
for
(
; i 2++) {
d a t o s [
i 1
]
[
i 2 ]
= new T [ s i z e ]
;
for
(
int
i 3
=0; i 3 < s i z e ; i 3++) {
d a t o s [
i 1
]
[
i 2
]
[
i 3 ]
=
c . d a t o s
[ i 1
]
[
i 2
]
[
i 3
]
;
}
}
}
return ∗ th is
;
}
template < c l a s s
T>
void Cubo<T > ::
s e tV al u e ( int
x
, int
y , int z , T v al u e ) {
d
a t o s [
x ] [ y ]
[
z ]
=
v al u e ;
}
template < c l a s s
T> T Cubo<T > :: ge tV alue ( int x ,
int y , int z ) {
return d a t o s
[ x
]
[
y ] [
z
]
;
}

11. [011.txt] Crea una clase HiperCubo heredera de la anterior en la que se sustituyan los m´etodos de obtener y poner un valor por un solo operador sobrecargado que te permita ofrecer ambos servicios. Elige el operador m´as adecuado.

Haz que se pueda construir un HiperCubo inicializando todos sus valores con un valor determinado. Sobrecarga el operador ! para que env´ıe el HiperCubo por la pantalla

Soluci´on:

#include ” 0 1 0. cpp ” #include < i o s t re am > using namespace s t d ; template < c l a s s T> c l a s s HiperCubo : public Cubo<T>{ public :

P´agina 5 de 6

Arrays

Arrays
HiperCubo ( int s i z e =1) : Cubo<T> ( s i z e
HiperCubo ( int
s i z e =1) : Cubo<T> ( s i z e
) {}
HiperCubo ( int
s i z e , T v a l o r I n i c i a l
)
: Cubo<T> ( s i z e ) {
for ( int
for ( int
i 1 =0;
i 1 < th is −> s i z e
; i 1++) {
i 2 =0; i 2 < th is −> s i z e ; i 2++) {
for ( int
i 3 =0; i 3 < th is −> s i z e
; i 3++) {
th is −> d a t o s [
i 1
]
[
i 2
]
[
i 3 ]= v a l o r I n i c i a l
;
}
}
}
}
T
&
operator ( ) ( int
x ,
int y , int z )
;
void operator
!
( )
;
} ;
template < c l a s s T> T & HiperCubo <T > ::
operator ( ) ( int x , int y , int z ) {
// CUIDADO!
// para que
El
uso
de
t h i s −>
e s
o b l i g a t o r i o
a q u i
la
p l a n t i l l a
se genere correctamente
return th is −> d a t o s [ x ] [ y ]
[
z
]
;
}
template < c l a s s
T>
void HiperCubo <T > :: operator ! ( ) {
for ( int
i 1
for ( int i
=0; i 1 < th is −> s i z e ; i 1++) {
2 =0; i 2 < th is −> s i z e ; i 2++) {
for
( int
i 3 =0; i 3 < th is −> s i z e
; i 3++) {
c ou t <<
th is −> d a t o s [ i 1 ] [ i 2 ] [ i 3 ] ;
}
c ou t << e n dl ;
}
c ou t << e n dl
;
}
c
ou t << e n dl ;
}
int main ( )
{
HiperCubo <int >
c ;
!
c ;
HiperCubo <int >
d ( 2 )
;
!
d ;
HiperCubo <int >
e
( 3 )
;
!
e ;
HiperCubo <char> f ( 4 , ’X ’ ) ;
!
f ;
}

P´agina 6 de 6