1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 | /*
============================================================================
Name : LibrosLab.c
Author : Santiago
Version :
Description : C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
/*
* Ej1: declaraci贸n y definici贸n b谩sica
*/
void ej1Libros(void) {
Libro ejLibro1; /* Se declaran un libro (Libro es un tipo struct) */
printf("ej1Libros:\n");
printf("----------\n");
/* Inicializa ejLibro1 campo por campo. Usa '.' */
ejLibro1.isbn = 56470887;
strcpy(ejLibro1.titulo, "Programaci贸n en C");
strcpy(ejLibro1.autor, "Pepito Grillo");
strcpy(ejLibro1.descripcion, "Buena gu铆a de introducci贸n al C");
/* Visualiza ejLibro1 campo por campo */
printf("\tISBN del libro: %d\n", ejLibro1.isbn);
printf("\tT铆tulo del libro: %s\n", ejLibro1.titulo);
printf("\tAutor del libro: %s\n", ejLibro1.autor);
printf("\tDescripci贸n del libro: %s\n", ejLibro1.descripcion);
}
/*
* Ej2: Pasando punteros ptrLibro como argumentos de verLibro() e iniLIbro()
*/
void ej2Libros(void) {
Libro ejLibro2; /* Se declaran un libro (Libro es un tipo struct) */
ptrLibro dirLibro = &ejLibro2; /* Se declara e inicializa dirLibro que apunta a ejLibro2 */
memset(dirLibro, '\0', sizeof(Libro)); /* Inicializar siempre */
printf("ej2Libros (1/2):\n");
printf("----------------\n");
verLibro(dirLibro); /* Se invoca dirLibro pasando la direcci贸n (puntero) de ejLibro2 */
printf("\nej2Libros (2/2):\n");
printf("----------------\n");
/* Como antes pero para inicializar */
iniLibro(dirLibro, 123456, "Programaci贸n en Java", "Pepito Grillo", "Buena gu铆a de introducci贸n a Java");
verLibro(dirLibro);
}
/*
* Ej3: Array de 5 libros
*/
void ej3Libros(void) {
Libro biblio[5]; /* Array de 5 libros */
ptrLibro dirLibro = biblio; /* Puntero a los libros en la biblio */
char tit[10], aut[10], des[10];
int i;
memset(biblio, '\0', 5 * sizeof(Libro)); /* Inicializar siempre */
printf("ej3Libros (1/2):\n");
printf("----------------\n");
for(i = 0; i < 5; i++)
verLibro(biblio+i); /* Se invoca verLibro pasando la direcci贸n (puntero) */
printf("\nej3Libros (2/2):\n");
printf("----------------\n");
for(i = 0; i < 5; i++) {
memset(tit, '\0', 10);
sprintf(tit, "T铆t #%d", i+1);
memset(aut, '\0', 10);
sprintf(aut, "Aut #%d", i+1);
memset(des, '\0', 10);
sprintf(des, "Des #%d", i+1);
iniLibro(dirLibro+i, i+1, tit, aut, des);
verLibro(dirLibro+i);
}
printf("--- Libro #3 ---\n");
verLibro(dirLibro+2);
printf("--- Equivalente:\n");
printf("\tISBN: %d; T铆tulo: %s; Autor: %s; Descripci贸n: %s\n",
biblio[2].isbn, biblio[2].titulo, (dirLibro+2)->autor, (biblio+2)->descripcion);
}
int main(int argc, char * argv[]) {
if (argc == 2) {
switch(argv[1][0]) {
case '1':
ej1Libros();
break;
case '2':
ej2Libros();
break;
case '3':
ej3Libros();
break;
default:
printf("Par谩metro incorrecto. No hace nada\n");
}
}
else
printf("Par谩metros incorrectos. No hace nada\n");
return 0;
}
|