-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path4-MarquezElizabeth-NumLet.c
More file actions
211 lines (208 loc) · 6.4 KB
/
Copy path4-MarquezElizabeth-NumLet.c
File metadata and controls
211 lines (208 loc) · 6.4 KB
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/* Elizabeth Márquez Gómez
Principios de Programación 2020-1
Generación 17
Licenciatura en Ciencias Genómicas
Universidad Nacional Autónoma de México */
//El siguiente programa recibe un número entre 0 y 999,999 y lo muestra al usuario en su forma escrita
#include <stdio.h>
/*ESTA FUNCIÓN SE ENCARGA DE PARTIR AL NÚMERO POR UNIDADES Y ALMACENARLO EN UN VECTOR PARA PODER UBICAR
FÁCILMENTE EL NÚMERO DE CADA UNIDAD*/
int implode(int lim, int vec[3], int uni, int num) {
int i = 0;
while(uni >= lim){
vec[i] = num / uni; //DIVISIÓN PARA OBTENER EL NÚMERO DE LA UNIDAD
num -= vec[i]*uni; //RESTA AL NÚMERO LA CANTIDAD ENTERA PARA IR ELIMINANDO LAS UNIDADES
i++;
uni /= 10; //SE DIVIDE ENTRE 10 PARA IR PARTIENDO A LAS UNIDADES MAYOR A MENOR
}
return num;
}
//ESTA FUNCIÓN SE ENCARGA DE ARMAR EL NOMBRE DEL NÚMERO SEGÚN LO QUE ENCUENTRE EN LOS VECTORES
int name(int vec[3], int mil, int a) {
//CENTENAS
switch (vec[0]) {
case 0: break;
case 1:
if(vec[1] == 0 && vec[2] == 0)
printf(" cien ");
else
printf(" ciento ");
break;
case 2:
printf(" doscientos ");
break;
case 3:
printf(" trescientos ");
break;
case 4:
printf(" cuatrocientos ");
break;
case 5:
printf(" quinientos ");
break;
case 6:
printf(" seiscientos ");
break;
case 7:
printf(" setecientos ");
break;
case 8:
printf(" ochocientos ");
break;
case 9:
printf(" novecientos ");
break;
}
//DECENAS
switch (vec[1]) {
case 0: break;
case 1:
if(vec[2] >= 6)
printf(" dieci");
else if(vec[2] == 0)
printf(" diez ");
break;
case 2:
if(vec[2] == 0)
printf(" veinte");
else
printf(" veinti");
break;
case 3:
printf(" treinta");
if(vec[2] > 0)
printf(" y ");
break;
case 4:
printf(" cuarenta");
if(vec[2] > 0)
printf(" y ");
break;
case 5:
printf(" cincuenta");
if(vec[2] > 0)
printf(" y ");
break;
case 6:
printf(" sesenta");
if(vec[2] > 0)
printf(" y ");
break;
case 7:
printf(" setenta");
if(vec[2] > 0)
printf(" y ");
break;
case 8:
printf(" ochenta");
if(vec[2] > 0)
printf(" y ");
break;
case 9:
printf(" noventa");
if(vec[2] > 0)
printf(" y ");
break;
}
//UNIDADES
switch (vec[2]) {
case 0:
if(vec[0] == 0 && vec[1] == 0 && mil == 0 && a == 0) //EN CASO DE QUE NO EXISTAN LOS MILLARES
printf("cero");
break;
case 1:
if(vec[1] == 1)
printf(" once ");
else if(vec[0] == 0 && vec[1] == 0 && mil)//PARA QUE NO PONGA 0, Y PONGA MIL
printf("");
else if((vec[0] == 1 && vec[1] == 0 && mil) || (mil))//CASOS COMO VEINTIUN
printf("un ");
else
printf("uno ");
break;
case 2:
if(vec[1] == 1)
printf("doce ");
else
printf("dos ");
break;
case 3:
if(vec[1] == 1)
printf(" trece ");
else
printf("tres ");
break;
case 4:
if(vec[1] == 1)
printf(" catorce ");
else
printf("cuatro ");
break;
case 5:
if(vec[1] == 1)
printf(" quince ");
else
printf("cinco ");
break;
case 6:
printf("seis ");
break;
case 7:
printf("siete ");
break;
case 8:
printf("ocho ");
break;
case 9:
printf("nueve ");
break;
}
if((vec[0]>0 || vec[1]>0 || vec[2]>0) && mil){
printf("mil ");
a = 1; //MARCADOR DE QUE HUBO MILLARES
}
else
printf("\n");
return a; //DEVUELVE LA MARCA SI SE TRATA DE MILLARES
}
int main() {
int num, vec0[3]={0}, vec1[3]={0}, active=0, win=0;
//DESCRIPCIÓN DEL PROGRAMA
printf("Este programa recibe un numero entre 0 hasta 999,999 y lo muestra en su forma escrita.\n");
//RECEPCIÓN DEL NÚMERO POR EL USUARIO Y VALIDACIÓN
while(!win){
printf("Ingrese el numero: ");
scanf("%d", &num);
win = (num >= 0 && num <= 999999) ? 1:0;
if(!win)
printf("El numero ingresado no entra en el rango de numeros aceptados entre 0-999999.\nIngreselo de nuevo\n");
}
/*LLAMAR A LA FUNCIÓN "implode" PARA OBTENER LOS NÚMEROS DE CADA UNIDAD EN LOS DOS VECTORES, MILLARES Y CENTENAS*/
implode(1, vec1, 100, implode(1000, vec0, 100000, num));
//LLAMAR A LA FUNCIÓN "nombra" PARA EL VECTOR DE MILLARES (vec0 000,xxx), AQUÍ SE OBTIENE LA SEÑAL SI HAY O NO MILLARES
active = name(vec0, 1, 0);
//LLAMAR A LA FUNCIÓN "nombra" PARA EL VECTOR DE CENTENAS (vec1 xxx,000)
name(vec1, 0, active);
return 0;
}
/* ------DICCIONARIO DE VARIABLES------
+----Función implode----+
*NOMBRE* *TIPO* *FUNCIÓN*
i Entera Indica los indices del vector
lim Entera Límite hasta donde se divide uni, según la mitad de unidades (unidades o unidades de millar)
vec Entera Almacenará al número
uni Entera La unidad por la que va a empezar superior (centenas o centenas de millar)
num Entera Número con el que va a trabajar
+----Función name----+
*NOMBRE* *TIPO* *FUNCIÓN*
vec Entera Vector con el que va a trabajar
mil Entera Si se trata del vector de millares, recibe una señal
a Entera Indica que hubo valores en los millares, y ya no es posible escribir "cero"
+----MAIN----+
*NOMBRE* *TIPO* *FUNCIÓN*
num Entera Almacena el número del usuario
vec0 Entera tipo vector Almacena los números de la parte de los millares
vec1 Entera tipo vector Almacena los números de la parte de las centeras
active Entera de estado Indica si existen millares para el 2do vector
win Entera de estado Sirve para controlar las validaciones en éxito del valor dado por el usuario
*/