You are on page 1of 33

FUNDAMENTOS DE INFORMÁTICA

Ejercicios de Laboratorio







Curso: 14/15
Profesoras: Montserrat Ferreira Sánchez
Carmen Ocariz Sanz

EPD - (03/09/2014) Laboratorios
2

Evaluación de los laboratorios (1,5 puntos)

Al finalizar cada laboratorio, el alumno debe realizar un ejercicio de evaluación (puede
ser un test o un programa).
Cada ejercicio de evaluación se puntúa sobre 10 puntos.
La nota final de los laboratorios (1,5 puntos) se corresponde con la nota media de los
ejercicios de evaluación, de tal forma que :
o Si la media es < 5 la nota de laboratorios será 0 (no se han realizado con
aprovechamiento).
o Si la media es >= 5 la nota de laboratorios será un 15% de dicha nota.
(Ejemplo, si la media es 8 entonces la nota será 1,2 puntos)

Si un alumno no realiza algún ejercicio de evaluación:
o Y lo justifica, no se tiene en cuenta dicho ejercicio para calcular la nota media.
o Y no lo justifica, tiene un cero en el ejercicio y se cuenta para calcular la
media.
Para tener opción a la nota final de laboratorios hay que realizar, al menos, el 75% de
los ejercicios de evaluación.





Es imprescindible ir al laboratorio con los ejercicios previamente
leídos y pensados. Y así, dedicar el tiempo de laboratorio a
desarrollar los ejercicios y preguntar dudas.

EPD - (03/09/2014) Laboratorios
3
Laboratorio 1
Objetivos:
• Conocer algunos de los servicios informáticos que ofrece la UPV
• Conocer el funcionamiento básico del compilador de C.
• Realizar nuestros primeros programas.

Gaur, Bildu, correo electrónico, Bilatu, Moodle.
Gestión académica: http://gestion.ehu.es/gaur
Zona de almacenamiento en disco, BILDU (200Mb):
- Para acceder a este servicio primero hay que darse de alta en la
dirección: http://www.ehu.es/bildu
- Una vez dado de alta, puedes entrar en BILDU desde el correo de la
universidad o si estas en el laboratorio, desde el acceso directo que hay
en el escritorio (leer el fichero nolaBildu).
Correo de la UPV: http://www.ehu.es/correow/
Dirección de correo del alumno: xxxx@ikasle.ehu.es
Directorio Bilatu: http://www.ehu.es/bilatu
Aula virtual de apoyo a la docencia: https://egela.ehu.es

Compilador de C, CodeBlocks (13.12), en eGela tenéis la guía de instalación.
En el siguiente diagrama de flujo se muestran los pasos para realizar un programa simple.


Ejecutar CodeBlocks
EPD - (03/09/2014) Laboratorios
4
Pantalla del entorno CodeBlocks:


















Ejercicios:

#include <stdio.h>
#include <stdlib.h>
main()
{
printf(" Hola mundo!!! ");
system("PAUSE");
}

#include <stdio.h>
#include <stdlib.h>
main()
{ int a,b,c;

printf("Dame un numero: ");
scanf("%d",&a);
printf("Dame otro numero : ");
scanf("%d",&b);
c = a + b;
printf("La suma es %d\n",c);

system("PAUSE");
}

Ejercicios de evaluación del laboratorio:
- Contestad al correo electrónico enviado por el profesor.
- Subid a moodle un conjunto de ficheros de prueba comprimidos.
Ventana de
edición
Errores de
compilación

Compilar
Ejecutar
EPD - (03/09/2014) Laboratorios
5
Laboratorio 2 (Tema 2.2)
Objetivos:
• Entender el funcionamiento del compilador.
• Ver la necesidad de trabajar con diferentes tipos de datos.
• Programar instrucciones de asignación con operaciones aritméticas básicas.
• Utilizar de forma adecuada las instrucciones de entrada y salida de datos.
Ejercicios:
1. Este programa pide dos números enteros y nos muestra su división entera y real.
#include <stdio.h>
#include <stdlib.h>
main()
{ int a,b,dE;
float dR;
printf("Introduce dos números enteros separados por un espacio");
scanf("%d %d",&a,&b);
dE= a / b;
dR=float(a)/b;
printf(" Resultado de la división entera = %d\n ",dE);
printf(" Resultado de la división real = %f\n ",dR);

system("PAUSE");
}
2. Este programa permite introducir dos caracteres cualesquiera del teclado.
#include <stdio.h>
#include <stdlib.h>

main()
{ char carac;
printf("\nIntroduce un caracter: ");
scanf("%c",&carac);
printf("%c\n",carac);

fflush(stdin); /* limpia el buffer de memoria*/

printf("\nIntroduce otro caracter: ");
scanf("%c", &carac);
printf("%c\n",carac);

system("PAUSE");
}

3. Este programa lee dos números enteros, calcula la división entera, el resto de la
división e indica si es verdadero (1) o falso (0) que el primer valor introducido
es mayor que el segundo.
#include <stdio.h>
#include <stdlib.h>
main()
{ int a,b,c,d,v;

printf("Introduce dos números enteros");
scanf("%d,%d",&a,&b);
c= a / b;
d= a % b;
v= a > b ;
printf("%d dividido entre %d = %d resto = %d\n ",a,b,c,d);
printf( "%d > %d ,%d\n",a,b, v);
system("PAUSE");
}
EPD - (03/09/2014) Laboratorios
6
4. Corregir en los siguientes programas los errores de compilación.

Ejer C1

#include <stdio.h>
#include <stdlib.h>
main()
{
int a,b,c;

a=17.65
b=1300;;
c= a + b
printf("El resultado es:%d\n", c);

system("PAUSE");
}

Ejer C2

#include <stdio.h>
#include <stdlib.h>
main()
{
int a,b,c;

printf("Este programa realiza la suma de dos numeros.\n");
printf("Dame uno de los numeros que quieres sumar: ");
scanf("%d",a)
printf("Dame el otro numero a sumar: ");
scanf("%d",&b);
c = a + b;
printf("La suma de %d y %d es %d .\n",a,b,c);

system("PAUSE");
}

Ejer C3
#include <stdio.h>
#include <stdlib.h>
main()
{
unsigned short a,b,c;

printf("Dame un numero entero: ");
scanf("%hu",a);
printf("Dame otro numero entero: ");
scanf(&b) ;
c= a+b;
printf ("%hu + %hu = %hu\n");

system("PAUSE");
}

Al ejecutar, ver qué ocurre si
introducimos los siguientes
valores para las variables a y
b:

a= 65535
b= 1

Otro caso:

a= 65535
b= 0


EPD - (03/09/2014) Laboratorios
7

Ejer C4

#include <stdio.h>
#include <stdlib.h>
main()
{
int perimetro,area;

printf("Dame el lado de un cuadrado: ");
scanf(&lado);
area = lado*lado;
perimetro = lado*4;
printf("El area del cuadrado es %d y el perimetro es d\n",area,perimetro);

}



Ejer C5

#include <stdio.h>
#include <math.h>
main()
{
printf("%.0f\n",pow(2,3));

system("PAUSE");
}


Ejer C6

#include <stdio.h> /* Cabecera */
#define PI 3.1416 /* Constante*/
main() /*Programa principal */
{
int r; /* variable que guarda el radio*/
float p; /*variable en la que se calcula el perímetro*/


printf(‘ Dame el radio de la circunferencia’);
scanf("%d",&r); /*lectura del radio*/
p= 2PIr; /*cálculo del perímetro*/
Printf("el perimetro de la circunferncia es %10.3f\n",p);

system("PAUSE");
}
EPD - (03/09/2014) Laboratorios
8
//Límites y formatos para las variables

#include<stdio.h>
#include<stdlib.h>
#include <limits.h> // para enteros
#include <float.h> //para reales

main()
{float x=25.256;

//Enteros
printf("minimo entero %d \n", INT_MIN);
printf("maximo entero %d \n", INT_MAX);

printf("minimo short %hd \n", SHRT_MIN);
printf("maximo short %hd \n", SHRT_MAX);

printf("maximo entero sin signo %u \n", UINT_MAX);
printf("maximo short sin signo %hu \n", USHRT_MAX);

//Reales
printf("\n Escribe un número float en notación cientifica: %.2e \n",x);
printf("\n Escribe un número float en coma fija: %.2f \n\n",x);

printf("minimo real positivo %e \n", FLT_MIN);
printf("maximo real positivo %e \n", FLT_MAX);

printf("minimo real negativo %e \n", -FLT_MIN);
printf("maxino real negativo %e \n", -FLT_MAX);

system("PAUSE");


}
EPD - (03/09/2014) Laboratorios
9
Laboratorio 3 (Tema 2.2)
Objetivos:
• Dominar la estructura general de un programa en C : llamadas a librerías,
declaración de variables …)
• Escribir programas secuenciales sencillos que permitan al alumno utilizar con
seguridad las instrucciones de entrada y salida de datos.
Ejercicios:

1. Realizar un programa que determine:
1) Área y perímetro de un cuadrado. Dato de entrada: el lado.
2) Área y perímetro de un rectángulo. Datos de entrada: los dos lados.
3) Área y perímetro de un círculo. Dato de entrada: el radio.
Se deberá ejecutar una figura tras otra, de forma secuencial. Ejemplo:
Introduce el lado del cuadrado: 4
El área es 16 y el perímetro 16

Introduce los dos lados del rectángulo: 2 6
El área es 12 y el perímetro 16

Introduce el radio del círculo: 5
El área es 78.54 y el perímetro 31.416

2. Hacer un programa que lea una hora expresada en segundos y la convierta en
horas, minutos y segundos. Ejemplo:
Introduce una cantidad de segundos: 50000
Resultado : 13 horas 53 minutos 20 segundos

Ejercicios Complementarios:

3. Escribir un programa que pida un ángulo expresado en grados y lo pase
radianes. Radianes= Grados*(PI / 180) . Ejemplo:
Introduce un ángulo en grados: 90
El ángulo en radianes es 1.57

4. Realizar un programa que determine:
a) El coste de pintar una piscina, conocidas sus dimensiones y el precio de la
pintura por m2.
b) Volumen de agua necesario para llenar dicha piscina.

Ejemplo:

Introduce las dimensiones largo, ancho y alto: 15, 10, 2
Introduce el precio de la pintura por m2: 2
El coste de pintar la piscina es : 500 €
Volumen de aguan necesario 300000 litros.
EPD - (03/09/2014) Laboratorios
10

EPD - (03/09/2014) Laboratorios
11
Laboratorio 4 (Tema 2.3)
Objetivos:
• Aplicar las estructuras condicionales según las necesidades del programa.
• Conocer las estructuras condicionales y distinguir entre sus distintas utilidades.
• Diseñar y programar adecuadamente condiciones anidadas.
• Construir condiciones utilizando expresiones lógicas compuestas.
Ejercicios:

1. Realizar un programa que permita al usuario elegir la figura de la cual quiere
calcular el área y perímetro, presentando para ello en pantalla un menú con las
opciones que se pueden elegir. Los datos de entrada serán: la opción elegida y
los datos necesarios para calcular el área y perímetro de dicha la figura. El
programa deberá comprobar que los datos son correctos (es decir, positivos).
Ejemplo:
1) Área y perímetro de un cuadrado.
2) Área y perímetro de un rectángulo.
3) Área y perímetro de un círculo.
Introduce la opción deseada: -3
Error! La opción debe ser positiva. Ejecute otra vez el
programa.
1) Área y perímetro de un cuadrado.
2) Área y perímetro de un rectángulo.
3) Área y perímetro de un círculo.
Introduce la opción deseada: 2
Introduce los dos lados del rectángulo: -3 6
Error! Los datos deben ser positivos. Ejecute otra vez el
programa.
1) Área y perímetro de un cuadrado.
2) Área y perímetro de un rectángulo.
3) Área y perímetro de un círculo.
Introduce la opción deseada: 2
Introduce los dos lados del rectángulo: 2 6
El área es 12 y el perímetro 16

2. Realizar un programa que pida al usuario la hora (en formato hora, minutos y
segundos) y devuelva la hora obtenida tras sumar un segundo. : Casos de
prueba:
Entrada Salida
10:30:10 10:30:11
10:59:10 10:59:11
10:30:59 10:31:0
10:59:59 11:0:0
23:59:11 23:59:12
23:30:59 23:31:0
23:59:59 0:0:0
EPD - (03/09/2014) Laboratorios
12
3. Hacer un programa que lea tres enteros que representen la fecha de hoy
(dia,mes,año), seguidos de otros tres enteros que representen la fecha de
nacimiento de una persona, y que escriba la edad de la persona en años.
Ejemplo:

Introduce la fecha actual: 5,5,2011
Introduce la fecha de nacimiento: 23,6,1999
Tu edad es : 11

4. Realizar un programa que calcule e imprima las raíces de la ecuación de
segundo grado: ax
2
+ bx +c = 0 donde a,b y c son los coeficientes reales que
introduce el usuario.
Las raíces se determinan por la fórmula x
b b ac
a
=
− ± −
2
4
2

Se deberán tener en cuenta las siguientes consideraciones:
i. Evitar la división entre cero de la ecuación en el caso de que a=0. En este
caso la raíz será única y se obtendrá de la forma: x
c
b
= −
ii. Si el término situado dentro de la raíz cuadrada (es decir, el discriminante) es
negativo, las raíces son complejas y se calculan de la siguiente forma:
Parte real del complejo, Re =
−b
a 2
y parte imaginaria, ±Im =
− b ac
a
2
4
2

iii. Si el discriminante es positivo, entonces las raíces son reales y la ecuación se
puede utilizar directamente.

Algunas funciones matemáticas que hacen falta son: raíz cuadrada sqrt( ), valor
absoluto fabs( ) y cuadrado pow( ). Para utilizarlas hay que incluir la librería
math.h
Diagrama de flujo:
Inicio
Leer
a,b,c
a=0


Calcula
raíces complejas
Calcula
raíces reales
Imprime
raíces
Imprime
raíces
Raíz= -c / b
Imprime
raíz
FIN
SI
NO
SI
NO
b
2
− ≥ 4 0 ac

Casos de prueba:

Entrada Salida
a= 1, b= -5, c= -6 x1= 6, x2= -1
a= 0, b= 2, c= 3 x= -1
a= 1, b= 2, c= 99 Re= -1, Im= 9.90

EPD - (03/09/2014) Laboratorios
13
Laboratorio 4(bis) (Tema 2.3)

5. Realizar un programa que lea un número entero e indique por pantalla si es par o
impar.

6. Realizar un programa que pida los metros cuadrados de un piso e indique por
pantalla lo siguiente: PISO PEQUEÑO si el piso tiene menos de 80 m
2
, PISO
MEDIANO si el tamaño está incluido entre 80 y 100 m
2
y PISO GRANDE si tiene
más de 100 m
2
.

7. Hacer un programa que, dados dos números introducidos por el usuario, nos indique
por pantalla si el resultado de su multiplicación es positivo, negativo o nulo.
El programa debe obtener el resultado sin realizar la operación de multiplicación.
Ejemplo:

Introduce dos números: -10 4
El resultado de la multiplicación será: negativo

8. Realizar un programa que pida las medidas de los tres lados de un triángulo y nos
indique:

1. Si con esas medidas se puede formar realmente un triángulo. Para comprobarlo
utilizar la siguiente propiedad:
“Un lado de un triángulo siempre es menor que la suma de los otros dos”
2. Si los lados introducidos forman un triángulo indicar si es equilátero, isósceles o
escaleno.
Equilateros: Tienen sus tres lados iguales.
Isósceles: Tienen dos lados iguales.
Escalenos: Los 3 lados tienen diferente medidas.
Ejemplo 1:
Introduce los tres lados del triángulo separados por coma: 2,8,7
Es un triángulo escaleno.
Ejemplo 2:
Introduce los tres lados del triángulo separados por coma: 2,2,5
No es un triángulo.

9. Realizar un programa que pida el año y el mes (de forma numérica) y con estos
datos indique cuántos días tiene dicho mes.
Nota: Un año es bisiesto si es divisible entre 4 pero no entre 100 o divisible entre
400
Ejemplo: como los años 1700, 1800, 1900 y 2100, 1600, 2000 y 2400

Suponemos que siempre nos dan los datos correctos.
Ejemplo:
Introduce año y mes (aaaa/mm): 2012/2
El mes 2 de 2012 tiene 29 dias.
EPD - (03/09/2014) Laboratorios
14
10. Dado el año, el mes y el día hacer un programa que calcule la fecha del siguiente
día. (Para hacer esto te será útil el programa que has realizado en el ejercicio
anterior.)

Ejemplo

Introduce año, mes y dia (aaaa/mm/dd): 2012/2/28
Siguiente dia: 2012/02/29.


Casos de prueba:

Entrada Salida
2013/10/30 2013/10/31
2013/10/31 2013/11/01
2013/12/31 2014/01/01
2012/02/28 2012/02/29
2014/02/28 2014/03/01


EPD - (03/09/2014) Laboratorios
15
Laboratorio 5 (Tema 2.4)
Objetivos:
• Empezar con el manejo de las sentencias repetitivas.
• Ver la diferencia entre las sentencias de control condicionales y las repetitivas.
• Trabajar las diferentes sentencias de control repetitivas.
Ejercicios:
1. Realiza un programa que permita al usuario elegir repetidamente la figura de la
cual quiere calcular el área y perímetro, presentando para ello en pantalla un
menú con las diferentes opciones. Los datos de entrada serán: la opción elegida
y los datos necesarios para calcular el área y perímetro de dicha la figura. El
programa deberá comprobar que los datos son correctos (es decir, positivos).
Ejemplo:
1) Área y perímetro de un cuadrado.
2) Área y perímetro de un rectángulo.
3) Área y perímetro de un círculo.
0) Salir del programa.
Introduce la opción deseada: 2
Introduce los dos lados del rectángulo: 2 6
El área es 12 y el perímetro 16
1) Área y perímetro de un cuadrado.
2) Área y perímetro de un rectángulo.
3) Área y perímetro de un círculo.
0) Salir del programa.
Introduce la opción deseada: 0

2. Realiza un programa que lea un número y luego una secuencia de números
terminada en cero. El programa deberá indicar la posición de la última aparición
del número en la secuencia. Si el número no está en la secuencia se devolverá un
0.
Ejemplo: (los datos introducidos por el usuario están en negrita )
Escribe el número a buscar: 7
Introduce la secuencia (0 para terminar):
4 5 7 6 7 5 3 0
Posición: 5
3. La empresa TORNILLOS S.A., desea que realicemos un programa para
controlar su producción de tornillos. Para ello, dispondremos de los siguientes
datos:
• Número de tornillos a controlar, es decir, el tamaño de la muestra.
• Margen de tolerancias, o sea, el diámetro máximo y mínimo de la cabeza del
tornillo, dentro de los cuales se darán por buenos los tornillos producidos.
• Diámetro real de cada uno de los tornillos controlados (los mediremos con
un calibre).
Se quiere que, una vez introducidos todos los diámetros de los tornillos
controlados, el programa nos indique:
a. Cuántos tornillos tienen el diámetro dentro del margen de tolerancias y
cuántos fuera.
b. Cuál es el diámetro medio de los tornillos que están dentro de las
tolerancias.
c. ¿Cuál es diámetro máximo de los tornillos válidos? Y, ¿el mínimo?
EPD - (03/09/2014) Laboratorios
16

EPD - (03/09/2014) Laboratorios
17
Laboratorio 6 (Tema 2.4)
Objetivos:
• Manejar sentencias de control repetitivas anidadas.
Ejercicios:

1. Realiza un programa que escriba la tabla de multiplicación de cada número
leído. Cuando el usuario teclee un 0 indicará fin de la secuencia y no habrá que
escribir su tabla de multiplicación. Ejemplo (en negrita los datos introducidos
por el usuario):

Dame un número entero: 3
3 x 1 = 3

3 x 10 = 30
Dame un número entero: 2
2 x 1 = 2

2 x 10 = 20
Dame un número entero: 0
Fin del programa!!

2. Utilizando el carácter introducido por el usuario dibuja el siguiente rectángulo (5
filas y 10 columnas). Ejemplo (en negrita los datos introducidos por el usuario):

Dame el carácter: *
**********
**********
**********
**********
**********

Ahora modifica el programa anterior para que también pida al usuario el número
de filas y columnas que tendrá el rectángulo. Necesitarás utilizar la función
fflush(stdin), ¿por qué?. Ejemplo (en negrita los datos introducidos por el
usuario):

Dame el número de filas: 3
Dame el número de columnas: 3
Dame el carácter: /
///
///
///

3. Realiza un programa que, elija un número al azar entre 0 y 100 y nos dé 5
oportunidades para acertarlo. El jugador partirá con 10 puntos, y en cada jugada
que no acierte el número se le restarán 2 puntos, de esta forma si por ejemplo
acertamos en la 5ª jugada nos habremos quedado con 2 puntos. A partir del 1
er

intento, si no acertamos, el ordenador deberá indicar si el número a acertar es
mayor o menor que el introducido. Cuando el jugador se quede sin puntos, tiene
que aparecer un mensaje que le indique que ha perdido la partida. Y si el
jugador acierta el número, el mensaje tendrá que indicarle cuántos puntos ha
obtenido. (Ver el diagrama de flujo).

EPD - (03/09/2014) Laboratorios
18
NOTA: Para asignar un número aleatorio a una variable, tienes que poner las
siguientes instrucciones en el programa:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main ( )
{ int x;
srand(time (NULL));
x= rand( ) % 101;
………………………………………………………
………………………………………………………



Diagrama de flujo:


10101




























num<x

num!=x
y
puntos>=2
puntos
EPD - (03/09/2014) Laboratorios
19
Ejercicio complementario:

4. Hundir la flota. Realiza un juego en el que se enfrenten 2 submarinos. Uno
pertenecerá al ordenador y otro al jugador. Los dos submarinos podrán
esconderse entre un profundidad de 0 y 5 y a una distancia también entre 0 y 5.
Es decir, cada submarino lo representaremos como un punto en el plano, con su
coordenada X e Y respectivamente.
Dispararán de forma alternativa hasta que uno de ellos se hunda. Solo
consideraremos que el resultado del disparo puede ser: agua o hundido.

Nota: Para el submarino del ordenador, tanto las coordenadas X e Y de su
posición cómo sus disparos se realizarán con números al azar entre 0 y 5.


Hundir la flota
Asignar coordenadas al sub.
de la Máquina
Leer coordenadas del
sub. del Usuario
Leer disparo del Usuario
aguaU
Dispara la Máquina
Si
aguaM
No
Gana el Usuario
Gana la Máquina Continúa el Juego
Si No
aguaU
y aguaM
Si
FIN
No
EPD - (03/09/2014) Laboratorios
20
EPD - (03/09/2014) Laboratorios
21
Laboratorio 7 (Tema 2.4)
Objetivos:
• Afianzar el conocimiento de las diferentes sentencias de control repetitivas.
Ejercicios:

1. Realizar un programa que dibuje el siguiente triángulo en pantalla tras pedir al
usuario el lado y carácter con el que quiere dibujarlo. Ejemplo (en negrita los datos
introducidos por el usuario):

Longitud del lado: 5
Carácter: *
*****
****
***
**
*

2. Hacer un programa que muestre todos los números primos hasta un límite dado N.
Ejemplo (en negrita los datos introducidos por el usuario):
Introduce el tope de la serie: 50
Números primos hasta el 50:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,

3. Escribir un programa que, lea una secuencia de pares de datos hasta que alguno de
los datos del par sea 0 y para cada par de datos introducido nos indique si son ó no
números amigos.
Dos números N y M son amigos si la suma de los divisores de N (sin contar N) es
igual a M y, del mismo modo, si la suma de los divisores de M (sin contar M) es
igual a N.

Ejemplo: los números 220 y 284 son amigos:
los divisores de 220 => 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110. Su suma es 284
los divisores de 284 => 1, 2, 4, 71 y 142. Su suma es 220.

Ejemplo de ejecución (en negrita los datos introducidos por el usuario):
Introduce una serie de pares de datos (para finalizar 0 en
alguno de los datos):

220 284
AMIGOS
221 283
NO AMIGOS
20 0
FIN
EPD - (03/09/2014) Laboratorios
22
Ejercicios complementarios:

4. Leer un número N y escribir los siguientes triángulos con números.
1 2 3 … N-1 N
1 2 3 … N-1

1 2
1

N N-1 … 3 2 1
N-1 N-2 … 2 1

2 1
1

Ejemplo:

Dame un número: 5
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1

5 4 3 2 1
4 3 2 1
3 2 1
2 1
1


5. Hacer un programa que muestre todos los números perfectos menores que un número
entero y positivo N.
Nota: Un número perfecto, es aquel que, es igual a la suma de sus divisores excepto
él mismo. Ejemplo: 6, 28

EPD - (03/09/2014) Laboratorios
23
Laboratorio 8 (Tema 2.5)
Objetivos:
• Aprender a realizar proyectos en el entorno CodeBlocks
• Dar los primeros pasos en la utilización de subprogramas.
• Entender las ventajas del manejo de subprogramas.
• Distinguir entre parámetros formales (subprogramas) y parámetros actuales
(llamada).

Pasos a seguir para crear un proyecto con CodeBlocks:

1. Selecciona File/New/Project y aparece la siguiente ventana


Elige la opción Console application y pulsa Go

2. Pulsa Next en la siguiente ventana:









EPD - (03/09/2014) Laboratorios
24

3. En esta ventana elige como lenguaje C++ y pulsa Next en:









4. Ahora elige un nombre para el proyecto y la carpeta que lo va a contener.














5. Elige el compilador GNU GCC Compiler








EPD - (03/09/2014) Laboratorios
25

6. Una vez creado el proyecto aparece la siguiente pantalla














7. Para añadir una función al proyecto, seleccionar File/New/Empty file y en la
siguiente ventana pulsar OK
Acuérdate de añadirle la extensión .cpp al fichero en el que vas a guardar el
subprograma, si no por defecto le da la extensión .c y el proyecto lo hemos
creado para C++, lo cual nos puede dar problemas.















Programa Principal
Proyecto
Carpeta con
los ficheros
fuente
EPD - (03/09/2014) Laboratorios
26

8. Carpetas y ficheros del proyecto

















Una vez compilado el proyecto, tendremos las siguientes carpetas:












Compilar
Ejecutar
Contiene
ficheros de
compilación
Contiene el
fichero
ejecutable
EPD - (03/09/2014) Laboratorios
27
Ejercicios:
1. Hacer un proyecto cuyo programa principal pida al usuario introducir dos números y
nos devuelva su suma por pantalla, junto con una frase de despedida. Para ello el
programa principal deberá llamar a los siguientes subprogramas:

a. sumar, tiene que recibir los dos números y devolver la suma. Utilizar la
siguiente cabecera para la función:
int sumar (int a, int b);
b. despedida, tiene que sustituir al procedimiento system(“PAUSE”) por las
siguientes instrucciones.

#include<stdio.h>

void despedida()
{ char tecla;

printf("\nFIN DEL PROGRAMA.\nPulse Intro para cerrar el programa.");
fflush(stdin);
scanf("%c",&tecla);

}

2. Realizar un proyecto cuyo programa principal pida: un carácter y el número de filas
de las figuras. Y utilice el procedimiento escribirFila para dibujar las figuras que se
muestran a continuación.
Cabecera para el procedimiento:
void escribirFila ( char caracter, int topeColumna);
/*Este procedimiento escribe en una fila el caracter tantas veces como
indica el parámetro topeColumna */

Ejemplos de ejecución:
Figura 1
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
Figura 2
*
* *
* * *
* * * *
* * * * *
Figura 3
* * * * *
* * * *
* * *
* *
*
3. Hacer un programa principal que pida al usuario un número x, y un número n y
utilice la función factorial para calcular las combinaciones de x elementos tomados
EPD - (03/09/2014) Laboratorios
28
de n en n, utilizando la fórmula que se da a continuación. La función factorial tiene
que recibir un número y devolver su factorial.


x x!
C n = Ejemplo: si x=10 y n=2 entonces C=45
n!(x-n)!
EPD - (03/09/2014) Laboratorios
29
Laboratorio 9 (Tema 2.5)
Objetivos:
• Coger soltura en el manejo de subprogramas.
• Diferenciar entre parámetros por referencia y por valor.

Ejercicios:

1. Hacer un programa que pida dos números e indique si son o no AMIGOS, utilizando
para ello la función divisores.
La función divisores tiene que recibir un número y devolver la suma de sus
divisores excepto él mismo. Ejemplo:
Los divisores de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110, que suman 284.
Los divisores de 284 son 1, 2, 4, 71 y 142, que suman 220.
Po lo tanto, 220 y 284 son números amigos

2. Realizar un programa que dado un carácter nos indique si es letra (vocal o
consonante), dígito o un carácter especial. Para ello, implementar las siguientes
funciones:
• esLetra: dado un carácter dice si es letra o no
• esVocal: dada una letra dice si es vocal o no
• esDigito: dado un carácter dice si es un digito o no

3. Realizar un programa que lea 3 números enteros y los devuelva ordenados de mayor
a menor utilizando el procedimiento intercambio.
Cabecera del procedimiento:
void intercambio ( int &a, int &b);
//Este procedimiento recibe dos números a y b y tiene que devolver el mayor en a y
el menor en b
EPD - (03/09/2014) Laboratorios
30

EPD - (03/09/2014) Laboratorios
31
Laboratorio 10 (Tema 2.6)

Objetivos:
• Entender la necesidad de los vectores.
• Familiarizarse con el manejo de los vectores.
• Diferenciar entre, la posición de un dato dentro del vector y el dato de dicha
posición.

Ejercicios:
1. Dada una secuencia (que como máximo tendrá 100 números) de números terminada
en 0 escribirla en orden inverso. Ejemplo (en negrita los datos introducidos por el
usuario):

Escribe el número de la posición 0: 3
Escribe el número de la posición 1: 4
... ... ...
Escribe el número de la posición 10: 9
Escribe el número de la posición 11: 0

La secuencia en orden inverso:
El numero de la posición 10: 9
... ... ...
El numero de la posición 1: 4
El numero de la posición 0: 3

2. Dados dos vectores de 5 números decir si son iguales o no. Dos vectores serán
iguales si en las mismas posiciones tienen los mismos números. Ejemplos de
ejecución:



Otro ejemplo de ejecución:
EPD - (03/09/2014) Laboratorios
32


3. Leer una secuencia de 10 número enteros y calcular para cada número leído cuántos
son mayores que él en la secuencia. También hay que calcular el número máximo de
la secuencia junto con su posición. Ejemplo (en negrita los datos introducidos por el
usuario):

Escribe el número de la posición 0: 3
Escribe el número de la posición 1: 4
... ... ...
Escribe el número de la posición 9: 9

Hay 5 números mayores que el número 3
Hay 4 números mayores que el número 4
... ... ...
Hay 1 números mayores que el número 9

El máximo número de la secuencia es el 17 y esta en la posición 7.


EPD - (03/09/2014) Laboratorios
33
Laboratorio 11 (Tema 2.6)
Objetivos:
• Coger soltura en el manejo de vectores y subprogramas.
Ejercicios:

1. Una estación meteorológica desea realizar semanalmente un estudio estadístico de
las temperaturas obtenidas a lo largo de la semana. Para ello dispone, al finalizar
cada semana, de las temperaturas máxima y mínima obtenidas durante cada uno de
los 7 días de la semana, y además, estos datos los tiene ordenados por día.
Realiza un programa que les permita determinar:
a. temperatura máxima de la semana,
b. temperatura mínima de la semana,
c. temperatura media de cada día,
d. temperatura media de la semana,
e. diferencia entre la temperatura media de la semana y la media de cada día.

Presenta la solución en pantalla de la siguiente forma; ejemplo:

MÁXIMA DE LA SEMANA: 40
MÍNIMA DE LA SEMANA: 10
MEDIA DE LA SEMANA: 24,14

DIA MÁXIMA MÍNIMA MEDIA DIFERENCIA
0 30 25 27,5 - 3,36
1 40 30 35 -10,86
2 35 20 27,5 - 3,36
3 30 15 22,5 1,64
4 28 14 21 3,14
5 25 10 17,5 6,64
6 26 10 18 6,14

Prototipo de los subprogramas que tenéis que utilizar:
void llenar_array (float v[], int tope);
int buscar_max (float v[], int tope);
int buscar_min (float v[], int tope);
void calcular_mediaDia (float v1[], float v2[], float v3[], int tope);
float calcular_mediaSem (float v[], int tope);
void calcular_diferencias (float v[], int tope, float msem, float v2[]);

2. Pedir por pantalla 30 números y guardarlos en un array. Visualizar, contar y sumar
los elementos pares que ocupan las posiciones impares dentro del array.
Mostrándolo de las siguiente forma:

Posición elemento
xx xx
xx xx
Total elementos : xx
Suma: xx