Title: Estructuras
1Estructuras
2Contenido
1. Enumeraciones 2. typedef 3. Estructuras
(struct)
3Declaración de tipos y variables de enumeraciones
- Un tipo enumeración es un conjunto finito.
- enum day SUN, MON, TUE, WED, THU, FRI,
SAT - Declaración de variables del tipo enum day
- enum day d1, d2
4Uso de variables de enumeración
- La asignación puede usar solo enumeraciones
- d1 FRId2 MON
- Prueba
- if (d1 d2) . . . / hacer algo/
5Inicialización
- enum palo CLUBS 1, DIAMONDS, HEARTS,
SPADESenum palo a, b,c - O
- enum palo CLUBS 1, DIAMONDS, HEARTS,
SPADES a, b, c
6Usando typedef
- typedef se usa para definir nuevos nombres de
tipos - typedef int age/ typedef ltcurrent typegt ltnew
typegt / - Declara 3 variables
- age s, t, u
- Use
- s 18
7Que dÃa es mañana?
/ Manipulando un tipo day /include
ltstdio.hgtenum day SUN, MON, TUE, WED, THU,
FRI, SATtypedef enum day DayDay
get_next_day(Day d)/ enum day
get_next_day(enum day d) /
8 int main() Day d1 MON d1
get_next_day(d1) return 0
9 Day get_next_day(Day d) Day next_day
switch (d) case SUN next_day MON
break case MON next_day TUE break
/ un caso para cada dÃa / case
SAT next_day SUN break return
next_day
10O
- Day get_next_day(Day d)/ Computa el siguiente
dÃa con / return ( (Day) (( (int) d 1)
7 ))
11Uso avanzado de typedef
typedef float vector10vector x / float
x10 / define N 3 typedef double
scalartypedef scalar vectorNtypedef scalar
matrixNNvector w, s / arreglo de 3
elementos de doubles /matrix b / arreglo
de 3x3 de doubles /
12Usando estructuras
- Un struct es una manera de coleccionar juntos un
grupo de datos en un solo tipo. - struct card int value char suit /
'c','d','h' or 's' /struct card c1, c2
/ dos cartas /
13Asignación a las partes
c1.value 5 c1.suit 'd' c2.value
12 / una reyna / c2.suit 's'
14Asignación y prueba
- struct card a, b a b / ok /
- if (a b) / incorrect / . . .
- Escribir
- if (card_equality(a,b)) . . .
15 int card_equality(struct card a, struct
card b) if ((a.value b.value)
(a.suit b.suit)) return 1 else return
0
16Combinando tipos y variables
struct card int value char suit c,
deck52
El arreglo deck
deck51
deck0
deck1
deck2
. . . . .
. . . . .
Miembros value
Miembros suit
17El arreglo deck
deck0.value 3deck0.suit 'd' / 3 de
diamantes /deck2.value 5deck2.suit
'h' / 5 of corazones /
18Inicialización de estructuras
struct card c 12, 's' / reyna de espadas
/ struct complex double real double
imaginary struct complex m33
1.0,-0.5, 2.5,1.0,0.7, 0.7,7.0, -6.5,
-0.5, 1.0, 45.7, 8.0
19Ejemplo de números complejos
struct complejo double real double
imaginario complejo suma(complejo,
complejo) complejo multiplica(complejo,
complejo) void imprime(complejo) int main(int
argc, char argv) complejo x,y,z,w
x.real 4 x.imaginario 6 y.real -3
y.imaginario 9 z suma(x,y) w
multiplica(x,y) imprime(x)cout ltlt endl
imprime(y)cout ltlt endl imprime(z)cout ltlt
endl imprime(w)cout ltlt endl
system("PAUSE") return EXIT_SUCCESS
20complejo suma(complejo a, complejo b) complejo
c c.real a.real b.real c.imaginario
a.imaginario b.imaginario return
c complejo multiplica(complejo a, complejo
b) complejo c c.real a.realb.real -
a.imaginariob.imaginario c.imaginario
a.imaginariob.real a.realb.imaginario
return c void imprime(complejo a,int w, int
d) cout ltlt fixed ltlt setw(w) ltlt
setprecision(d) cout ltlt a.real ltlt "(" ltlt
a.imaginario ltlt")i"
21Tarea
Defina las operaciones de resta y división de
complejos, también defina funciones para calcular
la magnitud y el argumento de un complejo y
desplegarlo en forma polar, ej. 3 4i
5/_53.13. Escriba un programa para probar sus
funciones. Utilizando la declaración y el código
que sigue escriba un código donde defina
funciones para restar y multiplicar matrices de
complejos. Escriba un programa para probar sus
funciones. typedef struct complejo
matriz33 (a bi)/(c di) (ac bd)
(bc ad)i/(c2 d2)
22Sumar e imprimir matriz.
void sumaM(matriz a, matriz b, matriz c)
for(int i 0 i lt 3 i) for(int j 0 j lt
3 j) cij suma(aij,bij)
void imprimeM(matriz m) for(int i 0 i lt 3
i) cout ltlt '' for(int j 0 j lt 3
j) imprime(mij,8,2) cout ltlt ''
ltlt endl cout ltlt endl
23Juego de dados
Primer tiro suma 7 o 11, jugador gana suma
2, 3 o 12, jugador pierde suma otro número,
número ganador suma y continua Siguientes
tiros suma 7, jugador pierde suma número
ganador, jugador gana
24Juego de dados
//lazo principal do juego()
despliegaConfirmacion() c getch()
while(c's' c'S') closegraph()
return EXIT_SUCCESS void inicio() void
juego() void despliegaConfirmacion()
setfillstyle(1,BLACK) bar(100,100,200,150)
setcolor(WHITE) outtextxy(120,120,
Otro juego? (S/N)")
Esbozo de programa principal /Programa para
jugar dados Hecho por Héctor E. Medellin
Curso de Programación fecha 3 de abril de 2008
/ include ltcstdlibgt include
ltiostreamgt //utiliza gráficos include
ltgraphics.hgt using namespace std void
inicio() void juego() void despliegaConfirmacion
() int main(int argc, char argv) char
c initwindow(400, 400, "Juego de
Dados", 200, 100) //inicia el juego
inicio()
25Posible rutina de juego
void juego() //pedir apuesta //tirar dados // si
dados7 o 11, gana jugador sino // si dados
2, 3 o 12 jugador pierde, // sino almacena
su número ganador // mientras juego continua //
tirar dados // si suma 7, jugador pierde
sino // si suma número ganador, jugador
gana // Desplegar ganancias o pérdidas
26int pedirApuesta() char s20,c int
cantidad clearviewport() outtextxy(120,130,"
1 - 5 pesos") outtextxy(120,150,"2 - 10
pesos") outtextxy(120,170,"3 - 20 pesos")
outtextxy(120,190,"4 - 50 pesos")
outtextxy(120,210,"Seleccione cantidad (1-4)
") c getch() if(c'1') cantidad5
if(c'2') cantidad10 if(c'3')
cantidad20 if(c'4') cantidad50
itoa(cantidad,s,10) outtextxy(120,230,"Apuesta
") outtextxy(120textwidth("Apuesta
"),230,s) c getch() return cantidad
27Tomado de Deitel Deitel int tiraDados( void
) int dado1 int dado2 int
sumaTrabajo // obtiene valor aleatorio del
dado1 dado1 1 rand() 6 // obtiene
valor aleatorio del dado2 dado2 1 rand()
6 // suma dado1 y dado2 sumaTrabajo dado1
dado2 // despliega los resultados del tiro
cout ltlt "El jugador tiro " ltlt dado1 ltlt " " ltlt
dado2 ltlt " " ltlt sumaTrabajo ltlt endl //
devuelve suma de los dados return sumaTrabajo
// fin de la función tiraDados
28// si dados7 o 11, gana jugador sino // si
dados 2, 3 o 12 jugador pierde, sino almacena
su número ganador enum Status CONTINUA, GANA,
PIERDE int suma int miPunto Status
estadoJuego // puede contener CONTINUA, GANA o
PIERDE // randomiza el generador de números
aleatorios mediante time srand( time( 0 ) )
suma tiraDados() // primer tiro de
dados switch ( suma ) // gana en el
primer tiro case 7 case 11 estadoJuego
GANA break // pierde en el
primer tiro case 2 case 3 case 12
estadoJuego PIERDE break //
recuerda puntos default estadoJuego
CONTINUA miPunto suma cout
ltlt "El punto es " ltlt miPunto ltlt endl
break // opcional // fin
de switch
29// mientras juego continua // tirar dados //
si suma 7, jugador pierde sino // si suma
número ganador, jugador gana while (
estadoJuego CONTINUA ) // tira dados
nuevamente suma tiraDados() //
determina el estado del juego if ( suma
miPunto ) // gana por puntos
estadoJuego GANA else if ( suma
7 ) // pierde por obtener 7
estadoJuego PIERDE // fin de while
30// Desplegar ganancias o pérdidas