Professional Documents
Culture Documents
Curso 03 / 04
EJERCICIOS DE TEORIA
FUNDAMENTOS DE INFORMATICA
I.T.I. Todas las especialidades
Curso Acadmico 2003-04
Pg 1/17
11
16
Pg 2/17
CDIGOS ASCII
El cdigo ASCII (American Standard Code for Information Interchange, cdigo
estndar americano para el intercambio de informacin) es un cdigo que traduce un carcter
binario de ocho bits en caracteres alfanumricos, instrucciones de control y otros smbolos.
Cdigo Caracter Cdigo Caracter Cdigo Caracter Cdigo Caracter
Nulo
41
0
)
82
R
123
{
1
42
*
83
S
124
|
2
43
+
84
T
125
}
3
44
,
85
U
126
~
4
45
86
V
127
5
46
.
87
W
128
6
47
/
88
X
129
48
0
89
Y
130
8
49
1
90
Z
131
y
9
50
2
91
[
132
10
51
3
92
\
133
11
52
4
93
]
134
12
53
5
94
^
135
13
54
6
95
_
136
14
55
7
96
`
137
15
56
8
97
a
138
16
57
9
98
b
139
17
58
:
99
c
140
18
59
;
100
d
141
19
60
<
101
e
142
20
61
=
102
f
143
21
62
>
103
g
144
22
63
?
104
h
145
23
64
@
105
i
146
24
65
A
106
j
147
25
66
B
107
k
148
26
67
C
108
l
149
27
68
D
109
m
150
28
69
E
110
n
151
29
70
F
111
o
152
30
71
G
112
p
153
31
72
H
113
q
154
32 Espacio
73
I
114
r
155
33
!
74
J
115
s
156
34
"
75
K
116
t
157
35
#
76
L
117
u
158
36
$
77
M
118
v
159
78
37
%
N
119
w
160
38
&
79
O
120
x
161
'
39
80
P
121
y
162
40
(
81
Q
122
z
163
Pg 3/17
187
210
233
165
188
211
234
166
189
212
235
167
190
213
236
168
191
214
237
169
'
192
215
238
170
193
216
239
171
194
217
240
172
195
218
241
173
196
219
242
174
197
220
243
175
198
221
244
176
199
222
245
177
200
223
246
178
201
224
247
179
202
225
248
180
203
226
249
181
204
227
250
182
205
228
251
183
206
229
252
184
207
230
253
185
208
231
254
186
209
232
255
Blanco
Pg 4/17
2. Realizar un programa que convierta a euros una determinada cantidad en pesetas que el
usuario le indique por teclado. (1 euro = 166.386 ptas.)
#include <stdio.h>
void main(void){
const float EURO = 166.386;
int PESETAS;
float RESULTADO;
printf(Indique el nmero de PESETAS que quiere convertir a EUROS);
scanf(%i, &PESETAS);
RESULTADO = PESETAS/EURO;
printf(Teniendo en cuenta que un EURO son %f ptas, %i ptas son %f euros \n,
EURO, PESETAS, RESULTADO);
}
Pg 5/17
clrscr();
printf("Introduce un n positivo (maximo 25): ");
scanf("%d",&n);
} while (n<1 || n>25);
factorial=1;
for(i=1;i<=n;i++) {
factorial=factorial*i;
}
printf("%d! = %.0f \n",n,factorial); /* %.0f -> float con 0 cifras decimales */
printf("Pulse una tecla para terminar");
getch();
Pg 6/17
mcm=n2;
}
else {
mcd=n2;
mcm=n1;
}
/* calculo del mcd */
/* mientras no sea divisible de ambos decrementar el mcd */
while (n1%mcd!=0 || n2%mcd!=0) {
mcd=mcd-1;
}
/* calculo del mcm */
/* mientras no sea multiplo de ambos incrementar el mcm */
while (mcm%n1!=0 || mcm%n2!=0)
mcm=mcm+1;
printf("El mcd de %d y %d es %d \n",n1,n2,mcd);
printf("El mcm de %d y %d es %d \n",n1,n2,mcm);
printf("Pulse una tecla para terminar"); getch();
}
Pg 7/17
4.
Dos nmeros son amigos, si cada uno de ellos es igual a la suma de los divisores del otro.
Por ejemplo, 220 y 284 son amigos, ya que:
Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220
Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Realizar un programa que determine si dos nmeros dados por teclado son amigos o no.
#include <stdio.h>
void main(void) {
int n1,n2,suma1,suma2,i,j;
printf("Introduce el primer numero: "); scanf("%d",&n1);
printf("Introduce el segundo numero: "); scanf("%d",&n2);
/* calculo de los divisores de n1 y de su suma */
suma1=1;
printf("\nSuma de divisores de %d = 1", n1);
for(i=2;i<n1;i++) {
if (n1%i==0) { /* es divisible */
printf("+%d",i);
suma1=suma1+i;
}
}
printf(" = %d \n",suma1);
/* calculo de los divisores de n2 y de su suma */
suma2=1;
printf("\nSuma de divisores de %d = 1", n2);
for (i=2;i<n2;i++) {
if (n2%i==0) { /* es divisible */
printf("+%d",i);
suma2=suma2+i;
}
}
printf(" = %d \n",suma2);
if (suma1==n2 && suma2==n1)
printf("\n%d y %d son numeros amigos",n1,n2);
else
printf("\n%d y %d no son numeros amigos",n1,n2);
printf("\n\nPulsa una tecla para terminar");
getch();
}
Pg 8/17
Ejercicios propuestos:
Ejercicios con estructuras de seleccin
1.
2.
3.
Implementar un algoritmo que averige si dados dos nmeros introducidos por teclado, uno
es divisor de otro.
4.
5.
Disear un programa en el que a partir de una fecha introducida por teclado con el formato
DA, MES, AO, se obtenga la fecha del da siguiente. Al realizar la implementacin
deberemos tener en cuenta la caracterstica peculiar del mes de febrero cuando el ao es
bisiesto (divisible entre 4). Supondremos que la fecha es introducida correctamente por
parte del usuario.
6.
Disear un programa que pida una fecha en formato numrico DA, MES, AO, y la
escriba con el siguiente formato Huelva a, dd de mm de aaaa, donde dd y aaaa son
nmeros y mm es el nombre del mes.
7.
Sabiendo que el da 1 de Marzo de 2003 fue sbado, realizar un programa que pida el
guarismo de un da de dicho mes, y determine a qu da correspondi. Por ejemplo, si el
usuario introduce el da 19, el programa deber contestar que el da 19 fue mircoles.
8.
Escribir un programa que lea un nmero y deduzca si est entre 10 y 100, ambos inclusive.
9.
Pg 9/17
10. Realizar un programa que le pida al usuario dos nmeros y qu operacin matemtica
(suma o resta) quiere realizar con ellos. Si el usuario pulsa + o S se realizar la suma, si
pulsa - o R se realizar la resta, y cualquier otra pulsacin ser considerada como una
operacin errnea, mostrndose el correspondiente mensaje de error.
11. Implementar un algoritmo que le pida al usuario una cantidad T de nmeros enteros y
muestre por pantalla la suma de todos ellos y su media.
12. Realizar un programa que pida un nmero por teclado, y muestre por pantalla su tabla de
multiplicar.
13. Realizar un programa que escribir los cuadrados de los 100 primeros nmeros enteros.
14. Se desea realizar una estadstica de las notas de los alumnos de un colegio, de modo que el
programa que implementemos indique:
a) Cuntos han suspendido.
b) Cuntos han aprobado
c) Cuntos han obtenido notable.
d) Cuntos han sacado sobresaliente.
La primera de las actividades a realizar por el programa ser preguntar al usuario de cuntos
alumnos se desea realizar dicha estadstica.
15. Escribir los cuadrados de los 100 primeros nmeros enteros divisibles entre 3.
16. Realizar un programa que muestre por pantalla la suma de los 100 primeros nmeros
enteros, exceptuando de dicha suma aquellos nmeros que sean primos.
17. Implementar un algoritmo capaz de calcular xn, donde x puede ser cualquier nmero entero
distinto de 0, y n puede ser cualquier nmero entero positivo, negativo o nulo.
Pg 10/17
#include <stdio.h>
void main(void) {
int i,n;
do {
clrscr();
printf("Introduce un n positivo (maximo 25): ");
scanf("%d",&n);
} while (n<1 || n>25);
for(i=1;i<=n;i++) {
printf("%d! = ",i);
printf("%.0f \n",factorial(i));
}
Pg 11/17
#include <stdio.h>
float factorial(int n); /* prototipo de funcion */
void main(void) {
int i,j,n;
float e;
do {
clrscr();
printf("Programa que calcula el valor del n e segun la formula:\n\n");
printf("e = 1 + 1/1! + 1/2! + ... + 1/10! + ... \n\n");
printf("Introduce el n de terminos a usar para calcular el n e (max 10):");
scanf("%d",&n);
} while (n<1 || n>10);
e=1;
printf("\nFormula: e = 1");
for(i=1;i<=n-1;i++) {
printf(" + 1/%d!",i);
e=e+1/factorial(i);
}
printf("\n\nEl numero e vale %f \n\n",e);
printf("Pulsa una tecla para terminar");
getch();
}
/* dado un numero n devuelve su factorial */
float factorial(int n) {
int i;
float fact=1;
for(i=1;i<=n;i++)
fact=fact*i;
return(fact);
}
Pg 12/17
3. Dos nmeros son amigos, si cada uno de ellos es igual a la suma de los divisores del otro.
Por ejemplo, 220 y 284 son amigos, ya que:
Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220
Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Hacer una funcin que determine si dos nmeros dados como parmetros son amigos o no.
A continuacin realizar un programa que muestre todas las parejas de nmeros amigos
menores o iguales que n, siendo n un nmero introducido por teclado. El programa debe
usar la funcin amigo previamente definida.
#include <stdio.h>
int amigo(int x, int y); /* prototipo de funcion */
void main(void) {
int n,n1,n2;
clrscr();
printf("Introduce un numero: "); scanf("%d",&n);
for(n1=1;n1<=n;n1++) {
for(n2=1;n2<=n;n2++) {
if (amigo(n1,n2))
printf("%d y %d son numeros amigos \n",n1,n2);
}
}
printf("Pulse una tecla para terminar");
getch();
}
/* dados dos n x y devuelve un 1 si son amigos y 0 si no lo son */
int amigo(int x, int y) {
int sumax,sumay,n;
sumax=1; sumay=1;
for(n=2;n<x;n++)
if (x%n==0) /* es divisible */
sumax=sumax+n;
for(n=2;n<y;n++)
if (y%n==0) /* es divisible */
sumay=sumay+n;
return(sumax==y && sumay==x);
}
Pg 13/17
Ejercicios propuestos:
1. Realizar una funcin llamada ordena3 que reciba tres parmetros enteros a, b, c, y los
intercambie, en caso necesario, para que se cumpla a<=b<=c.
2. Basndose en la funcin anterior, escribir un programa que pida los 3 lados de un tringulo
y a continuacin muestre los siguientes datos:
Cuanto vale la hipotenusa, cuanto el cateto mayor y cuanto el cateto menor, y si el tringulo
es equiltero, issceles o escaleno.
3. Escribe una funcin que resuelva una ecuacin de 2 grado segn la frmula
x=
b b 2 4ac
2a
Pg 14/17
Pg 15/17
Pg 16/17
Ejercicios propuestos:
1. Disear un programa que permita almacenar los datos de las notas de los 50 alumnos de una
asignatura. El programa recoger los nombres de los alumnos (nombre, apellido 1 y apellido
2) as como su nota, mostrando finalmente la nota mayor alcanzada as como la nota menor,
mostrando los nombres de los alumnos que las poseen. En caso de empate, es decir, que
varios alumnos posean a la vez la nota mxima o mnima, se mostrarn los nombres de los
alumnos empatados.
2. Realizar un programa que permita analizar si una palabra es o no palndroma. Una palabra
se dice que es palndroma cuando se escribe igual de izquierda a derecha que de derechas a
izquierda. Sirvan de ejemplo las palabras salas y reconocer que son palndromas.
3. Desarrollar un programa que cuente las ocurrencias de cada una de las letras del alfabeto, en
una palabra introducida por teclado.
Pg 17/17