Sei sulla pagina 1di 33

FUNDAMENTOS DE INFORMTICA

Ejercicios de Laboratorio







Curso: 14/15
Profesoras: Montserrat Ferreira Snchez
Carmen Ocariz Sanz

EPD - (03/09/2014) Laboratorios
2

Evaluacin de los laboratorios (1,5 puntos)

Al finalizar cada laboratorio, el alumno debe realizar un ejercicio de evaluacin (puede
ser un test o un programa).
Cada ejercicio de evaluacin se punta sobre 10 puntos.
La nota final de los laboratorios (1,5 puntos) se corresponde con la nota media de los
ejercicios de evaluacin, 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 algn ejercicio de evaluacin:
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 opcin a la nota final de laboratorios hay que realizar, al menos, el 75% de
los ejercicios de evaluacin.





Es imprescindible ir al laboratorio con los ejercicios previamente
ledos 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 informticos que ofrece la UPV
Conocer el funcionamiento bsico del compilador de C.
Realizar nuestros primeros programas.

Gaur, Bildu, correo electrnico, Bilatu, Moodle.
Gestin acadmica: 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
direccin: 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/
Direccin 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 tenis la gua de instalacin.
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 evaluacin del laboratorio:
- Contestad al correo electrnico enviado por el profesor.
- Subid a moodle un conjunto de ficheros de prueba comprimidos.
Ventana de
edicin
Errores de
compilacin

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 asignacin con operaciones aritmticas bsicas.
Utilizar de forma adecuada las instrucciones de entrada y salida de datos.
Ejercicios:
1. Este programa pide dos nmeros enteros y nos muestra su divisin entera y real.
#include <stdio.h>
#include <stdlib.h>
main()
{ int a,b,dE;
float dR;
printf("Introduce dos nmeros enteros separados por un espacio");
scanf("%d %d",&a,&b);
dE= a / b;
dR=float(a)/b;
printf(" Resultado de la divisin entera = %d\n ",dE);
printf(" Resultado de la divisin 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 nmeros enteros, calcula la divisin entera, el resto de la
divisin 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 nmeros 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 compilacin.

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 permetro*/


printf( Dame el radio de la circunferencia);
scanf("%d",&r); /*lectura del radio*/
p= 2PIr; /*clculo del permetro*/
Printf("el perimetro de la circunferncia es %10.3f\n",p);

system("PAUSE");
}
EPD - (03/09/2014) Laboratorios
8
//Lmites 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 nmero float en notacin cientifica: %.2e \n",x);
printf("\n Escribe un nmero 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 libreras,
declaracin 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 permetro de un cuadrado. Dato de entrada: el lado.
2) rea y permetro de un rectngulo. Datos de entrada: los dos lados.
3) rea y permetro de un crculo. 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 permetro 16

Introduce los dos lados del rectngulo: 2 6
El rea es 12 y el permetro 16

Introduce el radio del crculo: 5
El rea es 78.54 y el permetro 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 segn las necesidades del programa.
Conocer las estructuras condicionales y distinguir entre sus distintas utilidades.
Disear y programar adecuadamente condiciones anidadas.
Construir condiciones utilizando expresiones lgicas compuestas.
Ejercicios:

1. Realizar un programa que permita al usuario elegir la figura de la cual quiere
calcular el rea y permetro, presentando para ello en pantalla un men con las
opciones que se pueden elegir. Los datos de entrada sern: la opcin elegida y
los datos necesarios para calcular el rea y permetro de dicha la figura. El
programa deber comprobar que los datos son correctos (es decir, positivos).
Ejemplo:
1) rea y permetro de un cuadrado.
2) rea y permetro de un rectngulo.
3) rea y permetro de un crculo.
Introduce la opcin deseada: -3
Error! La opcin debe ser positiva. Ejecute otra vez el
programa.
1) rea y permetro de un cuadrado.
2) rea y permetro de un rectngulo.
3) rea y permetro de un crculo.
Introduce la opcin deseada: 2
Introduce los dos lados del rectngulo: -3 6
Error! Los datos deben ser positivos. Ejecute otra vez el
programa.
1) rea y permetro de un cuadrado.
2) rea y permetro de un rectngulo.
3) rea y permetro de un crculo.
Introduce la opcin deseada: 2
Introduce los dos lados del rectngulo: 2 6
El rea es 12 y el permetro 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,ao), seguidos de otros tres enteros que representen la fecha de
nacimiento de una persona, y que escriba la edad de la persona en aos.
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 races de la ecuacin de
segundo grado: ax
2
+ bx +c = 0 donde a,b y c son los coeficientes reales que
introduce el usuario.
Las races se determinan por la frmula x
b b ac
a
=

2
4
2

Se debern tener en cuenta las siguientes consideraciones:
i. Evitar la divisin entre cero de la ecuacin en el caso de que a=0. En este
caso la raz ser nica y se obtendr de la forma: x
c
b
=
ii. Si el trmino situado dentro de la raz cuadrada (es decir, el discriminante) es
negativo, las races 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 races son reales y la ecuacin se
puede utilizar directamente.

Algunas funciones matemticas que hacen falta son: raz cuadrada sqrt( ), valor
absoluto fabs( ) y cuadrado pow( ). Para utilizarlas hay que incluir la librera
math.h
Diagrama de flujo:
Inicio
Leer
a,b,c
a=0


Calcula
races complejas
Calcula
races reales
Imprime
races
Imprime
races
Raz= -c / b
Imprime
raz
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 nmero 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 PEQUEO si el piso tiene menos de 80 m
2
, PISO
MEDIANO si el tamao est incluido entre 80 y 100 m
2
y PISO GRANDE si tiene
ms de 100 m
2
.

7. Hacer un programa que, dados dos nmeros introducidos por el usuario, nos indique
por pantalla si el resultado de su multiplicacin es positivo, negativo o nulo.
El programa debe obtener el resultado sin realizar la operacin de multiplicacin.
Ejemplo:

Introduce dos nmeros: -10 4
El resultado de la multiplicacin ser: negativo

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

1. Si con esas medidas se puede formar realmente un tringulo. Para comprobarlo
utilizar la siguiente propiedad:
Un lado de un tringulo siempre es menor que la suma de los otros dos
2. Si los lados introducidos forman un tringulo indicar si es equiltero, issceles o
escaleno.
Equilateros: Tienen sus tres lados iguales.
Issceles: Tienen dos lados iguales.
Escalenos: Los 3 lados tienen diferente medidas.
Ejemplo 1:
Introduce los tres lados del tringulo separados por coma: 2,8,7
Es un tringulo escaleno.
Ejemplo 2:
Introduce los tres lados del tringulo separados por coma: 2,2,5
No es un tringulo.

9. Realizar un programa que pida el ao y el mes (de forma numrica) y con estos
datos indique cuntos das tiene dicho mes.
Nota: Un ao es bisiesto si es divisible entre 4 pero no entre 100 o divisible entre
400
Ejemplo: como los aos 1700, 1800, 1900 y 2100, 1600, 2000 y 2400

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

Ejemplo

Introduce ao, 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 permetro, presentando para ello en pantalla un
men con las diferentes opciones. Los datos de entrada sern: la opcin elegida
y los datos necesarios para calcular el rea y permetro de dicha la figura. El
programa deber comprobar que los datos son correctos (es decir, positivos).
Ejemplo:
1) rea y permetro de un cuadrado.
2) rea y permetro de un rectngulo.
3) rea y permetro de un crculo.
0) Salir del programa.
Introduce la opcin deseada: 2
Introduce los dos lados del rectngulo: 2 6
El rea es 12 y el permetro 16
1) rea y permetro de un cuadrado.
2) rea y permetro de un rectngulo.
3) rea y permetro de un crculo.
0) Salir del programa.
Introduce la opcin deseada: 0

2. Realiza un programa que lea un nmero y luego una secuencia de nmeros
terminada en cero. El programa deber indicar la posicin de la ltima aparicin
del nmero en la secuencia. Si el nmero no est en la secuencia se devolver un
0.
Ejemplo: (los datos introducidos por el usuario estn en negrita )
Escribe el nmero a buscar: 7
Introduce la secuencia (0 para terminar):
4 5 7 6 7 5 3 0
Posicin: 5
3. La empresa TORNILLOS S.A., desea que realicemos un programa para
controlar su produccin de tornillos. Para ello, dispondremos de los siguientes
datos:
Nmero de tornillos a controlar, es decir, el tamao de la muestra.
Margen de tolerancias, o sea, el dimetro mximo y mnimo de la cabeza del
tornillo, dentro de los cuales se darn por buenos los tornillos producidos.
Dimetro real de cada uno de los tornillos controlados (los mediremos con
un calibre).
Se quiere que, una vez introducidos todos los dimetros de los tornillos
controlados, el programa nos indique:
a. Cuntos tornillos tienen el dimetro dentro del margen de tolerancias y
cuntos fuera.
b. Cul es el dimetro medio de los tornillos que estn dentro de las
tolerancias.
c. Cul es dimetro mximo de los tornillos vlidos? Y, el mnimo?
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 multiplicacin de cada nmero
ledo. Cuando el usuario teclee un 0 indicar fin de la secuencia y no habr que
escribir su tabla de multiplicacin. Ejemplo (en negrita los datos introducidos
por el usuario):

Dame un nmero entero: 3
3 x 1 = 3

3 x 10 = 30
Dame un nmero entero: 2
2 x 1 = 2

2 x 10 = 20
Dame un nmero entero: 0
Fin del programa!!

2. Utilizando el carcter introducido por el usuario dibuja el siguiente rectngulo (5
filas y 10 columnas). Ejemplo (en negrita los datos introducidos por el usuario):

Dame el carcter: *
**********
**********
**********
**********
**********

Ahora modifica el programa anterior para que tambin pida al usuario el nmero
de filas y columnas que tendr el rectngulo. Necesitars utilizar la funcin
fflush(stdin), por qu?. Ejemplo (en negrita los datos introducidos por el
usuario):

Dame el nmero de filas: 3
Dame el nmero de columnas: 3
Dame el carcter: /
///
///
///

3. Realiza un programa que, elija un nmero 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 nmero se le restarn 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 nmero 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 nmero, el mensaje tendr que indicarle cuntos puntos ha
obtenido. (Ver el diagrama de flujo).

EPD - (03/09/2014) Laboratorios
18
NOTA: Para asignar un nmero 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 podrn
esconderse entre un profundidad de 0 y 5 y a una distancia tambin entre 0 y 5.
Es decir, cada submarino lo representaremos como un punto en el plano, con su
coordenada X e Y respectivamente.
Dispararn 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
posicin cmo sus disparos se realizarn con nmeros al azar entre 0 y 5.


Hundir la flota
Asignar coordenadas al sub.
de la Mquina
Leer coordenadas del
sub. del Usuario
Leer disparo del Usuario
aguaU
Dispara la Mquina
Si
aguaM
No
Gana el Usuario
Gana la Mquina Contina 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 tringulo en pantalla tras pedir al
usuario el lado y carcter con el que quiere dibujarlo. Ejemplo (en negrita los datos
introducidos por el usuario):

Longitud del lado: 5
Carcter: *
*****
****
***
**
*

2. Hacer un programa que muestre todos los nmeros primos hasta un lmite dado N.
Ejemplo (en negrita los datos introducidos por el usuario):
Introduce el tope de la serie: 50
Nmeros 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
nmeros amigos.
Dos nmeros 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 nmeros 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 ejecucin (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 nmero N y escribir los siguientes tringulos con nmeros.
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 nmero: 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 nmeros perfectos menores que un nmero
entero y positivo N.
Nota: Un nmero 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 utilizacin de subprogramas.
Entender las ventajas del manejo de subprogramas.
Distinguir entre parmetros formales (subprogramas) y parmetros actuales
(llamada).

Pasos a seguir para crear un proyecto con CodeBlocks:

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


Elige la opcin 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 aadir una funcin al proyecto, seleccionar File/New/Empty file y en la
siguiente ventana pulsar OK
Acurdate de aadirle la extensin .cpp al fichero en el que vas a guardar el
subprograma, si no por defecto le da la extensin .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
compilacin
Contiene el
fichero
ejecutable
EPD - (03/09/2014) Laboratorios
27
Ejercicios:
1. Hacer un proyecto cuyo programa principal pida al usuario introducir dos nmeros 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 nmeros y devolver la suma. Utilizar la
siguiente cabecera para la funcin:
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 carcter y el nmero de filas
de las figuras. Y utilice el procedimiento escribirFila para dibujar las figuras que se
muestran a continuacin.
Cabecera para el procedimiento:
void escribirFila ( char caracter, int topeColumna);
/*Este procedimiento escribe en una fila el caracter tantas veces como
indica el parmetro topeColumna */

Ejemplos de ejecucin:
Figura 1
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
Figura 2
*
* *
* * *
* * * *
* * * * *
Figura 3
* * * * *
* * * *
* * *
* *
*
3. Hacer un programa principal que pida al usuario un nmero x, y un nmero n y
utilice la funcin factorial para calcular las combinaciones de x elementos tomados
EPD - (03/09/2014) Laboratorios
28
de n en n, utilizando la frmula que se da a continuacin. La funcin factorial tiene
que recibir un nmero 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 parmetros por referencia y por valor.

Ejercicios:

1. Hacer un programa que pida dos nmeros e indique si son o no AMIGOS, utilizando
para ello la funcin divisores.
La funcin divisores tiene que recibir un nmero 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 nmeros amigos

2. Realizar un programa que dado un carcter nos indique si es letra (vocal o
consonante), dgito o un carcter especial. Para ello, implementar las siguientes
funciones:
esLetra: dado un carcter dice si es letra o no
esVocal: dada una letra dice si es vocal o no
esDigito: dado un carcter dice si es un digito o no

3. Realizar un programa que lea 3 nmeros 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 nmeros 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 posicin de un dato dentro del vector y el dato de dicha
posicin.

Ejercicios:
1. Dada una secuencia (que como mximo tendr 100 nmeros) de nmeros terminada
en 0 escribirla en orden inverso. Ejemplo (en negrita los datos introducidos por el
usuario):

Escribe el nmero de la posicin 0: 3
Escribe el nmero de la posicin 1: 4
... ... ...
Escribe el nmero de la posicin 10: 9
Escribe el nmero de la posicin 11: 0

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

2. Dados dos vectores de 5 nmeros decir si son iguales o no. Dos vectores sern
iguales si en las mismas posiciones tienen los mismos nmeros. Ejemplos de
ejecucin:



Otro ejemplo de ejecucin:
EPD - (03/09/2014) Laboratorios
32


3. Leer una secuencia de 10 nmero enteros y calcular para cada nmero ledo cuntos
son mayores que l en la secuencia. Tambin hay que calcular el nmero mximo de
la secuencia junto con su posicin. Ejemplo (en negrita los datos introducidos por el
usuario):

Escribe el nmero de la posicin 0: 3
Escribe el nmero de la posicin 1: 4
... ... ...
Escribe el nmero de la posicin 9: 9

Hay 5 nmeros mayores que el nmero 3
Hay 4 nmeros mayores que el nmero 4
... ... ...
Hay 1 nmeros mayores que el nmero 9

El mximo nmero de la secuencia es el 17 y esta en la posicin 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 estacin meteorolgica desea realizar semanalmente un estudio estadstico de
las temperaturas obtenidas a lo largo de la semana. Para ello dispone, al finalizar
cada semana, de las temperaturas mxima y mnima obtenidas durante cada uno de
los 7 das de la semana, y adems, estos datos los tiene ordenados por da.
Realiza un programa que les permita determinar:
a. temperatura mxima de la semana,
b. temperatura mnima de la semana,
c. temperatura media de cada da,
d. temperatura media de la semana,
e. diferencia entre la temperatura media de la semana y la media de cada da.

Presenta la solucin en pantalla de la siguiente forma; ejemplo:

MXIMA DE LA SEMANA: 40
MNIMA DE LA SEMANA: 10
MEDIA DE LA SEMANA: 24,14

DIA MXIMA MNIMA 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 tenis 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 nmeros y guardarlos en un array. Visualizar, contar y sumar
los elementos pares que ocupan las posiciones impares dentro del array.
Mostrndolo de las siguiente forma:

Posicin elemento
xx xx
xx xx
Total elementos : xx
Suma: xx

Potrebbero piacerti anche