You are on page 1of 17

Fundamentos de Informtica.

Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

EJERCICIOS DE TEORIA
FUNDAMENTOS DE INFORMATICA
I.T.I. Todas las especialidades
Curso Acadmico 2003-04

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 1/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

INDICE.Tabla de Cdigo Ascii...................................

Problemas del tema 4....................................

Problemas del tema 5....................................

Problemas del tema 7....................................

11

Problemas del tema 8....................................

16

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 2/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

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

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 3/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

Cdigo Caracter Cdigo Caracter Cdigo Caracter Cdigo Caracter


164

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

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 4/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

PROBLEMAS DEL TEMA 4.


ELEMENTOS BSICOS DE PROGRAMACIN
1. Realizar un programa que resuelva cualquier ecuacin de segundo grado ax2-bx = c. Por
tanto, debe pedir al usuario que introduzca los valores de a, b y c. Y el programa indicar las
dos posibles raices solucin.
#include <stdio.h>
#include <math.h>
void main(void)
{
float raiz1, raiz2;
int a,b,c;
printf(Si una ecuacin de segundo grado tiene esta forma ax2+bx=c \n);
printf(Indique el valor de a: );
scanf(%i, &a);
printf(Indique ahora el valor de b: );
scanf(%i, &b);
printf(Por ltimo indique el valor de c: );
scanf(%i, &c);
/* Se van a realizar todas las operaciones sin comprobaciones del tipo se har
un sqrt de un nmero negativo?, dividiremos por 0?, con lo cual el programa
est expuesto a multitud de posibles fallos. Cuando conozcan las estructuras de
decisin, podrn mejorarlo */
raiz1 = (-b + sqrt ((b*b) (4*a*c))) / (2*a);
raiz2 = (-b sqrt ((b*b) (4*a*c))) / (2*a);
printf(El resultado de la ecuacin %ix2+%ix=%i , es el siguiente: primera
raiz %f, segunda raiz %f, a, b, c, raiz1, raiz2 \n);
}

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);
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 5/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

PROBLEMAS DEL TEMA 5.


CONTROL DE FLUJO DEL PROGRAMA
1. Escriba un programa que calcule el factorial de un nmero entero n dado por teclado. Dicho
nmero deber ser mayor que cero y menor o igual a 25.
#include <stdio.h>
void main(void) {
int i,n;
float factorial;
do {

/* do {...} while se repite mientras el n introducido sea < 1 o > 25 */

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();

2. Encontrar dnde estn los errores en el siguiente programa:


#include <stdio.h>
void main(void) {
for (i=1; i<10; i--);
printf("Hola\n");
}

Los errores son los siguientes:


La variable i no esta declarada.
El sentencia for no debe terminar con un punto y coma.
En vez de i-- se debe poner i++.

El programa correcto queda de la siguiente manera:


#include <stdio.h>
void main(void) {
int i;
for (i=1; i<10; i++)
printf("Hola\n");
}

El programa escribe 9 veces la palabra "Hola" en pantalla.

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 6/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

3. Realizar un programa que calcule el m.c.d y el m.c.m. de dos nmeros cualesquiera


introducidos por teclado.
/* para hallar el mcd la estrategia ha seguir sera probar si el n mas pequeo
de los dos introducidos por teclado es divisible por ambos n, si no es asi
ir probando con n una unidad mas pequeos y asi hasta hallar un n divible
por ambos, que en el peor de los casos sera el 1. Para hallar el mcm la
estrategia sera similar solo que empezaremos por el numero mayor, e iremos
probando con n una unidad mayores hasta que los dos nmeros introducidos por
teclado sean divisibles por dicho n */
#include <stdio.h>
void main(void) {
int n1,n2,mcd,mcm;
clrscr();
printf("Introduce el primer numero: "); scanf("%d",&n1);
printf("Introduce el segundo numero: "); scanf("%d",&n2);
if (n1<n2) {
mcd=n1;

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();
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 7/17

Fundamentos de Informtica. Curso 03 / 04

4.

Primero de Ingeniera Tcnica Industrial

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();
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 8/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

Ejercicios propuestos:
Ejercicios con estructuras de seleccin

1.

2.

Implementar un algoritmo que calcule la raz cuadrada de un nmero y escriba su resultado


o un mensaje de error en el caso de no existir solucin real.
Realizar un programa que determine si un nmero es par.

3.

Implementar un algoritmo que averige si dados dos nmeros introducidos por teclado, uno
es divisor de otro.

4.

Determinar el precio de un billete de ida y vuelta en avin, conociendo la distancia a


recorrer y sabiendo que si el nmero de das de estancia es superior a 7 y la distancia
superior a 800km, o bien la persona es mayor de 55 aos, el billete tiene una reduccin del
25%. El precio por kilmetro es de 0.50.

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.

Un capital C est situado a un tipo de inters I, realizar un programa que determine si el


capital, al trmino de 2 aos, se habr doblado o bien ser mayor o menor del inicial. La
frmula que determina el capital que se obtiene pasados 2 aos es la siguiente:

CapitalFinal = CapitalInicial (1 + Interes )

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 9/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

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.

Ejercicios con estructuras de repeticin

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.

Ejercicios con estructuras de seleccin y repeticin

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.

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 10/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

PROBLEMAS DEL TEMA 7.


SUBPROGRAMAS Y MODULARIDAD
1. Escribe una funcin que calcule el factorial de un nmero, dado como parmetro. A
continuacin realiza un programa que lea por teclado un nmero entero n y muestre por
pantalla los factoriales de los nmeros de 1 a n. El programa debe usar la funcin factorial
previamente definida.

#include <stdio.h>

float factorial(int n); /* prototipo de funcion*/

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));
}

printf("Pulse 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);
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 11/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

2. Realizar un programa que calcule el nmero e, utilizando el siguiente desarrollo en serie:


e = 1 + 1/1! + 1/2!+ + 1/10! +
El programa debe usar la funcin factorial definida en el ejercicio anterior.

#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);
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 12/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

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);
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 13/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

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

segn el siguiente prototipo:


void solucion_ecuacion(int a; int b; int c; float *raiz1; float *raiz2; int *haysolucion);
siendo a,b,c los coeficientes de la ecuacin, raiz1 y raiz2 las dos soluciones de la ecuacin.
La funcin devolver en haysolucion un 0 para indicar que el sistema no tiene solucin y un
1 para indicar que si tiene solucin.
4. Realizar un programa que pida por teclado los 3 coeficientes de una ecuacin de 2 grado y
a continuacin muestre en pantalla la solucin de dicha ecuacin. Si la ecuacin no tuviera
solucin deber mostrar un mensaje en pantalla advirtiendo de tal circunstancia.
El programa deber preguntarnos si deseamos hallar la solucin de otra ecuacin, en caso
afirmativo deber volver a preguntarnos los coeficientes de otra ecuacin y as
sucesivamente hasta que alguna vez digamos que no; en ese caso el programa terminar.
Para realizar el programa debemos basarnos en la funcin solucion_ecuacion implementada
en el ejercicio anterior.

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 14/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

5. Realizar un programa que muestre por pantalla el siguiente men:


1.- Calcular el factorial de un nmero.
2.- Calcular el n e:
3.- Hallar si dos nmeros son amigos
4.- Resolver ecuacin de 2 grado
5.- Salir del programa
El usuario podr elegir cada una de las opciones del men. Si la opcin pulsada no es
ninguna de las anteriores el programa debe mostrar un mensaje informando de tal error.
Para cada opcin el programa mostrar en pantalla la solucin y esperar a que se pulse una
tecla. Una vez pulsada volver a mostrar el men anterior.
6. Encontrar dnde estn los errores en el siguiente programa:
#include <stdio.h>
void ordena(int *a, int *b) {
int c;
c=a;
if (a>b)
*a=*b;
*b=c;
}
void main(void)
{
int a=5, b=2, c;
c=invierte(a,b);
printf("El valor mas pequeo es %d",c);
printf("El valor mas grande es %d",*b);
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 15/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

PROBLEMAS DEL TEMA 8.


ESTRUCTURAS DE DATOS COMPLEJAS
1. Disear un programa que lee las calificaciones de un alumno en 5 asignaturas, las almacene
en un vector y calcula e imprime su media
#include <stdio.h>
#include <conio.h>
void main(void) {
float notas[5],media;
int n;
clrscr();
media=0;
for(n=0;n<5;n++) {
printf("Introduzca nota Asignatura %d: ",n+1);
scanf("%f",&notas[n]);
media=media+notas[n];
}
media=media/n;
printf("La media de las notas es %.2f\n",media);
printf("Pulse una tecla para terminar"); getch();
}

2. El mismo ejercicio anterior pero para 30 alumnos


#include <stdio.h>
#include <conio.h>
void main(void) {
float notas[30][5],media[30],suma;
int a,n;
clrscr();
for(a=0;a<30;a++) {
suma=0;
printf("Datos del alumno %d\n\n",a+1);
for(n=0;n<5;n++) {
printf("Introduzca nota Asignatura %d: ",n+1);
scanf("%f",&notas[a][n]);
suma=suma+notas[a][n];
}
media[a]=suma/n;
printf("\n\nLa media de las notas del alumno %d es %.2f\n",a+1,media[a]);
printf("\nPulse una tecla para continuar\n\n"); getch();
}
}

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 16/17

Fundamentos de Informtica. Curso 03 / 04

Primero de Ingeniera Tcnica Industrial

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.

Dpto. Ingeniera Electrnica, Sistemas Informticos y Automtica

Pg 17/17

You might also like