Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
INDICE
2015/16
4 EJERCICIOS
1 OBJETIVOS
4.1 Ejercicio 1 Aprendizaje del IDE para el lenguaje C/C++
Al finalizar esta actividad, sers capaz de:
Entender el funcionamiento del compilador.
4.1.1 Objetivo 1
Definir variables y efectuar asignaciones de valores con operaciones aritmticas
bsicas.
Familiarizarse con el manejo bsico del compilador.
Escribir un programa sencillo con entrada y salida de datos.
Crear un sistema de almacenamiento de datos para tus trabajos.
4.1.2 Enunciado 1
2 MOTIVACIN En este ejercicio el alumno debe abrir el IDE (de MS Visual Studio o Dev-C++) y
familiarizarse con los botones y reas de mayor uso de la pantalla principal. Para ello, leer
Para escribir cualquier programa vamos a tener que utilizar el compilador, conviene, por el manual e introducir los ejemplos que contiene.
tanto, conocer adecuadamente su funcionamiento.
4.1.3 Ayuda para el enunciado 1
En la resolucin de la mayora de los problemas tendremos que pedir datos al usuario para
realizar clculos u operaciones con ellos y mostrar resultados. La entrada y salida de datos Ver la imagen que aparece a continuacin y leer el anexo "Manual de Visual Studio para
ser, por tanto, una parte bsica de todos los programas que es imprescindible dominar. C/C++". La imagen muestra la pantalla principal del compilador y en el manual se resaltan
los objetos de mayor inters.
Conviene conocer adecuadamente los sistemas de almacenamiento del ordenador si
queremos poder recuperar nuestros programas o llevarlos a otro ordenador.
Todos los datos de entrada, salida e intermedios de un programa tendrn que estar
almacenados en variables o constantes.
Recordamos que una variable no es ms que una parte reservada de la memoria a la cual
ponemos un nombre para poder utilizarla y que cambia su valor a lo largo del programa. La
manera de definirla es indicando el tipo y nombre seguido de punto y coma.
Ejemplo:
int num;
float altura;
Las constantes son objetos cuyo valor no cambia a lo largo del programa y se indican en la
parte de las directivas del preprocesador.
Ejemplo:
#define PI 3.1416
Para la salida de datos utilizaremos la sentencia printf con todos los argumentos necesarios.
Ejemplo:
printf("\nel valor de num es: %d y el de altura es: %.2f", num, altura);
Para la entrada de datos utilizaremos la sentencia scanf con sus argumentos necesarios.
Ejemplos:
scanf("%d", &num);
Figura 1. El entorno integrado de desarrollo MS Visual Studio 2010
scanf("%f", &altura);
Conchi Presedo Garca EUITI Bilbao 2015 1 Conchi Presedo Garca EUITI Bilbao 2015 2
LABORATORIO 1 FUNDAMENTOS DE INFORMTICA LABORATORIO 1 FUNDAMENTOS DE INFORMTICA
Ver la imagen que aparece a continuacin y leer el anexo "Manual de Dev-C++ para 4.2 Ejercicio 2 Clculo de la longitud y el rea dado un radio
C/C++". La imagen muestra la pantalla principal del compilador y en el manual se resaltan
los objetos de mayor inters. 4.2.1 Objetivo 2
4.2.2 Enunciado 2
Ejemplo de ejecucin:
CALCULO LONGITUD Y AREA DADO UN RADIO
(los datos tecleados por
el usuario estn en Introduce el radio: 3.1
cursiva y subrayados ) Longitud: 19.48
Area: 30.19
Presione una tecla para continuar . . .
En este caso y por ser el primer ejercicio se ofrece la solucin completa del enunciado. Se
tratar por tanto de copiarla utilizando el editor del compilador, compilar, ver que no da
errores, guardar y ejecutar el cdigo.
1 #include <stdlib.h>
2 #include <stdio.h> system("orden");
3 Pasa la orden indicada para que
4 #define PI 3.1416 sea ejecutada por el intrprete de
Figura 2. El entorno integrado de desarrollo Dev-C++ 5.7.1 5 comandos del entorno local, que en
el caso de Windows es MS-DOS.
6 int main(void)
7 {
Por ejemplo:
8 float radio,area,longitud;
system("PAUSE");
9 printf("Introduce el radio: ");
Se ejecuta la orden PAUSE de MS-
10 scanf("%f",&radio);
DOS, que deja en pausa la consola
11 longitud=2*PI*radio; hasta que pulsemos cualquier tecla
12 printf("Longitud: %.2f",longitud); y nos lo indica con el mensaje
13 area=PI*radio*radio; correspondiente "Presione una
tecla para continuar".
14 printf("\nArea: %.2f\n",area);
15 system("PAUSE");
16 }
Conchi Presedo Garca EUITI Bilbao 2015 3 Conchi Presedo Garca EUITI Bilbao 2015 4
LABORATORIO 1 FUNDAMENTOS DE INFORMTICA LABORATORIO 1 FUNDAMENTOS DE INFORMTICA
4.3 Ejercicio 3 Conversor de euros a pesetas 4.4 Ejercicio 4 Intercambio del contenido de dos variables
Conchi Presedo Garca EUITI Bilbao 2015 5 Conchi Presedo Garca EUITI Bilbao 2015 6
LABORATORIO 1 FUNDAMENTOS DE INFORMTICA LABORATORIO 1 FUNDAMENTOS DE INFORMTICA
4.5 Ejercicio 5 Clculo del sueldo en funcin del tipo de horas 4.6.2 Enunciado 6
Una empresa se encarga de la produccin de tres tipos de piezas P1, P2 y P3 y los tiempos
4.5.1 Objetivo 5
de produccin por pieza son de 3 horas para P1, 4 horas para P2 y 5 horas para P3.
Solicitar al usuario la cantidad de piezas de cada clase (x de P1, y de P2 y z de P3) y
Utilizar varios datos de entrada as como las constantes simblicas para efectuar un calcular cunto se tardar en la produccin, es decir, cuntas semanas, das y para qu
clculo. hora de la jornada laboral estar el pedido sabiendo que se trabaja de lunes a viernes y que
el horario de produccin de la empresa es continuo de 8:00 a 16:00.
4.5.2 Enunciado 5
NOTA: Utiliza la idea en el ejemplo de la ayuda para obtener las semanas, das, y horas
Realizar un programa que solicite dos datos: el nmero de horas extras y ordinarias restantes en el total de horas de produccin implicadas.
trabajadas por un empleado (sern enteros) y calcule cul es su sueldo total utilizando el
precio por hora de 40 y 20 euros la hora respectivamente.
Ejemplo de
CALCULO DESGLOSADO DEL TIEMPO DE PRODUCCION
ejecucin : Introduce el numero de piezas P1: 10
NOTA: Utiliza los defines de la ayuda.
Introduce el numero de piezas P2: 11
Introduce el numero de piezas P3: 12
Ejemplo de
El total de horas necesarias es: 134
ejecucin: CALCULO DEL SUELDO EN FUNCION DEL TIPO DE HORAS.
Introduce numero de horas ordinarias: 10 Teniendo en cuenta el horario de la empresa, si empezaran
Introduce numero de horas extra: 20 maniana a fabricar las piezas, acabarian despues de
3 semanas y 1 dias completos de trabajo,
De acuerdo con los datos introducidos el sueldo es: 1000 a las 14 horas del dia siguiente.
Presione una tecla para continuar...
Presione una tecla para continuar
Una constante simblica se define como un nombre que cuando es utilizado en el programa El siguiente ejemplo solicita un nmero de das e indica cuntas semanas completas y das
tiene un valor fijo. Podemos utilizarlo por ejemplo, para especificar lo que se pagar por restantes son. Por ejemplo, en 15 das hay 2 semanas completas y 1 da sobrante.
hora extra o por hora extraordinaria y luego en nuestro programa utilizamos el nombre para
calcular sueldos en base a las horas trabajadas y a estos precios por hora constantes para
todos los trabajadores: 1 #include <stdio.h>
2 #include <stdlib.h> dias
15 7 Das en
#define EXTRA 40 3 una
#define ORDINARIA 20 4 int main(void) 1 2 semana
5 {
6 int semanas,dias,rdias;
dias / 7
4.6 Ejercicio 6 Clculo desglosado del tiempo de produccin 7 printf("Numero de dias: ");
dias % 7
8 scanf("%d",&dias);
4.6.1 Objetivo 6 9 semanas = dias/7;
10 rdias = dias%7;
Realizar unos clculos ms complejos que en los casos anteriores que utilicen varias
variables e impliquen varias operaciones. 11 printf("\n %d dias son:\n %d semanas y %d dias \n",dias, semanas, rdias);
12 system("PAUSE");
13 }
Conchi Presedo Garca EUITI Bilbao 2015 7 Conchi Presedo Garca EUITI Bilbao 2015 8
LABORATORIO 2 FUNDAMENTOS DE INFORMTICA LABORATORIO 2 FUNDAMENTOS DE INFORMTICA
La ejecucin secuencial de las instrucciones no es suficiente para poder informatizar Especificar condiciones simples y condiciones anidadas.
cualquier tipo de problema, sino que es necesario disponer de otras estructuras que nos
permitan canalizar el flujo de la informacin en el programa permitiendo que se puedan 4.1.2 Enunciado 1
realizar unas acciones u otras dependiendo del cumplimiento o no de una condicin.
Construir un programa que solicite por pantalla un nmero entero positivo y realice de
3 LA ESTRUCTURA CONDICIONAL EN C manera independiente los siguientes apartados:
a) Informe si es par o impar.
El ifelse en C b) Informe si es mltiplo de 3 no.
c) Si es par, informe adems si es mltiplo de 3 o no, y si es impar muestre si es
if (condicin){ mltiplo de 5 o no.
AccionesV
} else {
AccionesF Ejemplo de ejecucin:
}
(los datos tecleados por Introduce un numero entero (>0): 45
el usuario estn en
Si se cumple la condicin se realizan las AccionesV y sino se realizan las AccionesF.
cursiva y subrayados ) ********* Apartado a *****
La parte else siempre va unida a un if y se puede omitir si no hay que realizar ninguna 45 es impar
accin cuando no se cumpla la condicin.
********* Apartado b *****
Si tenemos varias condiciones excluyentes entre s podemos utilizar una variante de esta
instruccin: los bloques anidados else if. 45 es multiplo de 3
4.2.2 Enunciado 2 Construir un programa que informe sobre las caractersticas de un tringulo. Para ello
pedir por pantalla las longitudes de los lados e indicar si el tringulo es equiltero,
Sabiendo que la valencia qumica del oxgeno es 2, y que la del nitrgeno es 1,3 y 5 para issceles o escaleno.
segn qu compuestos, se pide construir un programa que solicite los coeficientes x e y de
NxOy y compruebe si la frmula sera correcta o no especificando en qu coeficiente/s est Ejemplo de ejecucin:
el error. En la frmula, x son las posibles valencias del Oxgeno e y son las del Nitrgeno. Primer lado: 3.1
Segundo lado: 5.76
Pedir datos separados por comas: scanf(%d,%d,&x,&y); Tercer lado: 3.1
Triangulo ISOSCELES.
Ejemplos de
ejecucin: Dime los valores de x e y separados por una coma: 3 , 8 4.3.3 Ayuda para el enunciado 3
ERROR en coeficiente x. ERROR en coeficiente y.
Dime los valores de x e y separados por una coma: 2 , 5 Un tringulo es equiltero si todos sus lados son iguales, es issceles si dos lados son
iguales y el tercero distinto y es escaleno si sus tres lados son distintos.
La formula N2O5 es CORRECTA.
4.4 Ejercicio 4 Ordenacin de tres nmeros en descendente
4.2.3 Ayuda para el enunciado 2
4.4.1 Objetivo 4
Para poder mostrar un mensaje que especifique cada tipo de error debemos evaluar
sucesivamente (y de manera independiente) cada una de las condiciones de error. Aprender a especificar todos los casos posibles de manera eficiente.
Como mtodo general, se puede utilizar una variable (en el ejemplo hay_errores) que nos
indique si ha habido errores o no. Antes de empezar a evaluar las condiciones la variable 4.4.2 Enunciado 4
valdr 0 y en el momento que se produzca algn error su valor cambiar a 1.
Construir un programa que pida tres nmeros enteros y los escriba en orden descendente.
hay_errores=0; // 1. En principio NO HAY ERRORES
// 2. COMPROBAMOS SUCESIVAMENTE los distintos tipos de error Ejemplo de ejecucin:
// modificando el valor de hay_errores en cuanto se produzca alguno Dime el primer numero: 3
// Comprobamos primera condicin de error(condicin1) Dime el segundo numero: 5
if (condicin1){ Dime el tercer numero: 3
printf("Mensaje de ERROR en condicin1"); Los numeros en orden descendente son: 5, 3, 3
hay_errores=1;
} 4.4.3 Ayuda para el enunciado 4
// Comprobamos siguiente condicin de error(condicin2)
Los casos posibles suponiendo que n1, n2 y n3 son los tres nmeros introducidos son:
if (condicin2){
printf("Mensaje de ERROR en condicin2"); Nmeros pedidos n1 (primero) n2 (segundo) n3 (tercero)
hay_errores=1; Caso 1 mayor mediano menor
Caso 2 mayor menor mediano
}
Caso 3 mediano mayor menor
**** Y as hasta que no queden ms **** Caso 4 menor mayor mediano
// 3. SI NO HUBO ERRORES visualizamos mensaje que lo indique Caso 5 mediano menor mayor
Caso 6 menor mediano mayor
if(hay_errores= =0){
printf("Mensaje de TODO es CORRECTO"); } Tener en cuenta que los nmeros pueden ser iguales.
4.5 Ejercicio 5 Cuadrante al que pertenece un punto P(x,y) 4.6.3 Ayuda para el enunciado 6
4.5.1 Objetivo 5 Como ayuda, se da la solucin del caso en el que NO ESPECIFICAMOS qu TIPO DE ERROR
hay en la fecha, solamente indicamos "Error en la fecha" con lo cual, EN CUANTO
Seguir practicando con condiciones. ENCONTREMOS EL PRIMER ERROR el programa no sigue comprobando y TERMINA.
Mostrar la necesidad de alguna estructura que nos permita repetir instrucciones.
1 #include <stdlib.h>
4.5.2 Enunciado 5 2 #include <stdio.h>
3 2
3
Dada la funcin f(x)= x - 4x + x - 9 se pide construir un programa que pida DOS valores
4 /* Comprueba la validez de una fecha SIN ESPECIFICAR donde hay errores */
de x e indique para cada uno en qu cuadrante (primero, segundo, tercero o cuarto) se
encuentra el punto P(x,y), siendo y=f(x). 5 int main(void)
6 {
Ejemplo de 7 int dia,mes,anio; //Datos que se piden por teclado
ejecucin: Introducir primer valor para x: 3
8
El punto P(3.00,-15.00) se encuentra en el CUARTO cuadrante
9 printf("Introduce una fecha en formato dd/mm/aaaa: ");
Introducir segundo valor para x: -1.5
10 scanf("%d/%d/%d",&dia,&mes,&anio);
El punto P(-1.50,-22.88) se encuentra en el TERCER cuadrante
11
12 // Comprobamos ao, mes y da (entre 1 y 31)
4.5.3 Ayuda para el enunciado 5
13 if (error en ao || (error en mes) || (error en dia)){
Representar el clculo de f(x) a partir de x. Se puede usar la funcin pow(a,b) que 14 printf("\n\t\tERROR en la fecha.\n\n"); }
calcula ab donde a, b y el resultado son de tipo real (double) . Est en la librera 15 else{
math.h (por tanto deberemos poner al principio #include <math.h>).
16 // Aqu el ao y el mes son correctos y el da est entre 1 y 31
Primer cuadrante: Tanto x como y son positivos. Segundo: x negativo e y positivo.
Tercero: x e y negativos. Cuarto: x positivo e y negativo. 17 // Comprobamos el da segn el mes
Tener en cuenta que el punto resultante tambin puede estar en alguno de los ejes. 18 if(dia>30 && (el mes tiene 30 das)){
19 printf("\n\t\tERROR en la fecha.\n\n"); }
20 else{
4.6 Ejercicio 6 Validacin de una fecha 21 if(el mes es febrero){
22 if(dia>29){
4.6.1 Objetivo 6
23 printf("\n\t\tERROR en la fecha.\n\n"); }
Seguir practicando con condiciones dependientes ms complejas. 24 else {
Aprender la diferencia entre indicar que existe alguna condicin que no se cumple y 25 if(dia>28 && (el ao no es bisiesto)){
especificar exactamente qu condiciones se cumplen o no.
26 printf("\n\t\tERROR en la fecha.\n\n"); }
4.6.2 Enunciado 6 27 else {
28 printf("\n\t\tFecha CORRECTA.\n\n"); }}
Construir un programa que solicite una fecha (da, mes y ao) y compruebe si es una fecha 29 }else{
vlida, en cuyo caso mostrar el mensaje correspondiente. En caso contrario, presentar
30 // Es un mes de 31 das
textos indicativos de los errores.
NOTA: El programa deber indicar TODOS los errores que haya, en da, mes, ao o en el da 31 printf("\n\t\tFecha CORRECTA.\n\n");
respecto al mes. 32 } // Fin del else (lnea 29)
33 } // Fin del segundo else (lnea 20)
Ejemplos de Introduce una fecha en formato dd/mm/aaaa: 35/3/-2010 34 } // Fin del primer else (lnea 15)
ejecucin: ERROR en el anio. ERROR en el dia. 35 system("PAUSE");
Presione una tecla para continuar 36 }
Introduce una fecha en formato dd/mm/aaaa: 31/12/2000
Fecha CORRECTA. SIGUE LA AYUDA
Presione una tecla para continuar
Condiciones a considerar para comprobar si una fecha es correcta.
Conchi Presedo Garca EUITI Bilbao 2015 13 Conchi Presedo Garca EUITI Bilbao 2015 14
LABORATORIO 2 FUNDAMENTOS DE INFORMTICA LABORATORIO 2 FUNDAMENTOS DE INFORMTICA
Ejemplos de Se debe realizar por separado la suma de cada componente de la duracin teniendo en
ejecucin: Introduce la hora en formato hh:mm:ss --> 10:65:00 cuenta que 60 segundos son un minuto, 60 minutos son una hora y 24 horas son un da.
ERROR!! La hora 10:65:00 no es correcta. Por ejemplo, si las dos duraciones introducidas son 20:50:10 y 11:10:2 haramos las
siguientes sumas 10+2=12 segundos, 50+10=60 minutos = 1 hora, 1+20+11=32 horas =
Introduce la hora en formato hh:mm:ss --> 10:35:00 un da completo ms 8 horas.
10:35:01
Determinar las reglas generales para la suma de las duraciones.
4.7.3 Ayuda para el enunciado 7 Determinar las excepciones. A partir de las excepciones, y tenindolas en cuenta,
plantear el esquema o lgica del programa.
Determinar las reglas generales para el instante siguiente (teniendo en cuenta que
60 segundos son un minuto y 60 minutos son una hora)
Determinar las excepciones. A partir de las excepciones, y tenindolas en cuenta,
plantear el esquema o lgica del programa.
3.1.2 Enunciado
LABORATORIO 3 Realizar un programa en C que presente en pantalla los primeros n nmeros naturales. El
programa pide al usuario un nmero n las veces que sea necesario hasta que sea n1 y
ESTRUCTURAS REPETITIVAS - WHILE / DOWHILE n10. Cuando n sea correcto el programa visualiza los nmeros desde 1 hasta n.
system("PAUSE");
Mientras la condicin sea cierta ejecuta una y otra vez las instrucciones que }
aparecen entre llaves
El dowhile en C 4 EJERCICIOS
Si es necesario, inicializacin de las variables de la condicin
4.1 Ejercicio 1 Clculo de todos los divisores de un nmero
do {
Conjunto de instrucciones que han de repetirse incluyendo la
actualizacin de las variables de la condicin 4.1.1 Objetivo 1
}while (condicin);
Experimentar con soluciones de fuerza bruta.
Ejecuta una vez las instrucciones que aparecen entre llaves y luego mientras la 4.1.2 Enunciado 1
condicin sea cierta las ejecuta una y otra vez.
Pedir un nmero entero al usuario y determinar cules son sus divisores.
Conchi Presedo Garca EUITI Bilbao 2015 17 Conchi Presedo Garca EUITI Bilbao 2015 18
LABORATORIO 3 FUNDAMENTOS DE INFORMTICA LABORATORIO 3 FUNDAMENTOS DE INFORMTICA
Resolver un problema mediante fuerza bruta consiste en generar todas las posibilidades Hacer un programa que pida un nmero entero al usuario, determine si el nmero es primo
(en este ejercicio consiste en presuponer que todo numero <= n es en principio un posible o no, y despus le pregunte si quiere seguir introduciendo ms nmeros de forma que se le
divisor), filtrando (o visualizando en este caso) las que nos interesan (es decir los que sean vayan pidiendo nmeros mientras el usuario responda afirmativamente (s S).
divisores).
Para descubrir los divisores de un nmero n generaremos todos los enteros de 1 a n y por Ejemplo de ejecucin:
cada uno comprobaremos si es divisor del nmero que nos dan. Introduce un numero: 5
Utilizar el ejemplo inicial para ir obteniendo los nmeros. La diferencia consistir en que por El numero 5 es PRIMO.
cada nmero que se genere (en cada vuelta del while se generar uno), tendremos que Quieres probar un nuevo numero (s/n): S
decidir si es divisor o no. Para saber si un nmero es divisor de otro se utiliza la operacin Introduce un numero: 6
El numero 6 NO es PRIMO.
aritmtica %, que nos calcula el resto de una divisin. As, si a%b==0, entonces podremos
Quieres probar un nuevo numero (s/n): n
decir que b es divisor de a.
NOTA: Una versin ms eficiente del ejercicio comprobara slo los nmeros de 1 a n/2. 4.3.3 Ayuda para el enunciado 3
4.2.1 Objetivo 2 Para el lenguaje C una s es una variable. Si queremos referirnos a la letra s deberemos
escribirla entre comillas simples s.
Introducir el concepto de flag (bandera o chivato). No es lo mismo s que S. Hay que considerar las dos posibilidades, o bien pasar la letra
tecleada a minsculas utilizando la funcin tolower(car) que est en la librera ctype.h.
4.2.2 Enunciado 2 Utilizar el ejemplo anterior para decidir si el nmero es primo.
Conchi Presedo Garca EUITI Bilbao 2015 19 Conchi Presedo Garca EUITI Bilbao 2015 20
LABORATORIO 3 FUNDAMENTOS DE INFORMTICA LABORATORIO 3 FUNDAMENTOS DE INFORMTICA
Para conseguir las distintas cifras del nmero num (1327 en este ejemplo) se realizan 4.5.3 Ayuda para el enunciado 5
divisiones sucesivas entre 10:
El mayor (menor) valor de una secuencia de nmeros se puede ir obteniendo a medida que
Valor INICIAL se van leyendo los nmeros, aplazando el resultado hasta que se hayan ledo todos los
PASO de una divisin a la valores.
dividendo 1327 10 siguiente: Para ello, utilizaremos una variable que almacene el mximo (mnimo) valor que se haya
7 132 10 El cociente de cada divisin es encontrado HASTA EL MOMENTO. Una variable que podramos llamar max (min). El valor
el dividendo de la siguiente. inicial para esta variable ser el primer nmero ledo.
2 13 10
Utilizando el ejemplo del enunciado:
3 1 10 Num introducido num>max max
5 5
1 0 valor FINAL dividendo 10 V 10
2 F
Fijarse que en cada divisin la cifra se obtiene en el resto de la divisin. -15 F
2000 V 2000
Por otra parte, num_vuelto se forma cogiendo los restos de cada divisin y acumulndolos: 8 F
0 * 10 + 7 = 7 9 F
7 * 10 + 2 = 72 0 Fin
72 * 10 + 3 = 723
723 * 10 + 1 = 7231
con la ltima divisin obtenemos el nmero dado la vuelta y es 7231.
4.5.1 Objetivo 5
4.5.2 Enunciado 5
Hacer un programa que permita que el usuario vaya introduciendo nmeros (cuando el
usuario introduzca un 0 el programa acabar). Nuestro programa deber mostrar el nmero
mximo de entre los nmeros distintos de 0 tecleados por el usuario.
Ejemplo de ejecucin:
Introduce un numero entero (0 para finalizar): 5
Introduce un numero entero (0 para finalizar): 10
Introduce un numero entero (0 para finalizar): 2
Introduce un numero entero (0 para finalizar): -15
Introduce un numero entero (0 para finalizar): 2000
Introduce un numero entero (0 para finalizar): 8
Introduce un numero entero (0 para finalizar): 9
Introduce un numero entero (0 para finalizar): 0
Conchi Presedo Garca EUITI Bilbao 2015 21 Conchi Presedo Garca EUITI Bilbao 2015 22
LABORATORIO 4 FUNDAMENTOS DE INFORMTICA LABORATORIO 4 FUNDAMENTOS DE INFORMTICA
El programa debe comprobar que el nmero introducido est entre 1 y 10, es decir, debe
pedir nmeros al usuario mientras no lo est. Adems, cada vez que el nmero no sea
adecuado debe mostrar un mensaje de error que lo indique.
LABORATORIO 4
Ejemplo de ejecucin:
ESTRUCTURAS REPETITIVAS - FOR (los datos tecleados por Introduce un numero entre 1 y 10: 14
el usuario estn en ERROR. El numero no es adecuado.
cursiva y subrayados ) Introduce un numero entre 1 y 10: 0
ERROR. El numero no es adecuado.
1 OBJETIVOS Introduce un numero entre 1 y 10: 3
La sintaxis del for nos resulta mucho ms cmoda en algunos casos ya que se escriben la
3.1.3 Ayuda para el enunciado
inicializacin, la condicin de final y las actualizaciones en una misma lnea de cdigo.
Vamos a mostrar 2 soluciones. La primera con un while y la segunda con un for.
3 LA ITERACIN EN C UTILIZANDO FOR
Conchi Presedo Garca EUITI Bilbao 2015 23 Conchi Presedo Garca EUITI Bilbao 2015 24
LABORATORIO 4 FUNDAMENTOS DE INFORMTICA LABORATORIO 4 FUNDAMENTOS DE INFORMTICA
#include <stdio.h>
#include <stdlib.h> Podemos tomar como base el ejercicio ejemplo, pero esta vez como por cada fila no
deberemos dibujar slo un asterisco sino varios, deberemos utilizar OTRO bucle adicional
int main(void) para escribir POR CADA LNEA tantos asteriscos como sea necesario.
{
int n, fila; #include <stdio.h>
#include <stdlib.h>
/* Pedimos n hasta que est entre 1 y 10 */
do{ int main(void)
printf("\nIntroduce un numero entre 1 y 10: "); {
scanf("%d", &n); int n, fila;
if((n < 1)||(n > 10)){
printf("\nERROR. El numero no es adecuado.\n"); } do{
} while((n < 1)||(n > 10)); printf("\nIntroduce un numero entre 1 y 10: ");
scanf("%d", &n);
/* Visualizamos los asteriscos */ if((n < 1)||(n > 10)){
for(fila = 1; fila <= n; fila = fila + 1){
printf("\nERROR. El numero no es adecuado."); }
printf("*"); } while((n < 1)||(n > 10));
printf("\n");
}/* final del for*/
for(fila = 1; fila <= n; fila = fila + 1){
Pedir al usuario un nmero entero n perteneciente al rango [1,10] hasta que sea correcto y 4.2.1 Objetivo 2
visualizar en pantalla el dibujo del ejemplo.
Seguir practicando con las estructuras for anidadas.
Ejemplo de ejecucin:
4.2.2 Enunciado 2
(los datos tecleados por Introduce un numero entre 1 y 10: 14
el usuario estn en ERROR. El numero no es adecuado.
Introduce un numero entre 1 y 10: 0 Pedir al usuario un nmero entero n perteneciente al rango [1,10] hasta que sea correcto y
cursiva y subrayados )
ERROR. El numero no es adecuado. visualizar en pantalla el dibujo del ejemplo.
Introduce un numero entre 1 y 10: 3
Ejemplo de ejecucin:
* Introduce un numero entre 1 y 10: 14
** ERROR. El numero no es adecuado.
*** (tantas filas como n) Introduce un numero entre 1 y 10: 3
Conchi Presedo Garca EUITI Bilbao 2015 25 Conchi Presedo Garca EUITI Bilbao 2015 26
LABORATORIO 4 FUNDAMENTOS DE INFORMTICA LABORATORIO 4 FUNDAMENTOS DE INFORMTICA
4.3.1 Objetivo 3
4.3.2 Enunciado 3
Mostrar los factoriales de los nmeros que se van introduciendo por pantalla. Pedir cada
dato hasta que sea correcto, es decir, nmero 0 y respuesta s n.
Ejemplo de ejecucin:
Introduce un numero entero: 0
0!=1
Deseas calcular mas factoriales (s/n)? s
Introduce un numero entero: 5
5!=120
Deseas calcular mas factoriales (s/n)? n
4.4.1 Objetivo 4
4.4.2 Enunciado 4
n
Calcular la suma de los 10 primeros trminos de la serie i / 2
i 1
i
, mostrando en pantalla
Ejemplo de
ejecucin: La suma a realizar es: 1/2 + 2/4 + 3/8 + 4/16 + 5/32
+ 6/64 + 7/128 + 8/256 + 9/512 + 10/1024
Resultado: 1.988281
Conchi Presedo Garca EUITI Bilbao 2015 27 Conchi Presedo Garca EUITI Bilbao 2015 28
LABORATORIO 5 FUNDAMENTOS DE INFORMTICA LABORATORIO 5 FUNDAMENTOS DE INFORMTICA
1 OBJETIVOS
3.1.2 Enunciado
Al finalizar esta actividad, sers capaz de:
Programa que pide al usuario dos nmeros enteros mayores o iguales que 0 y calcula el
Utilizar funciones predefinidas en la funcin main.
factorial de cada uno de ellos, los muestra y, a continuacin, si la raz cuadrada del primer
Entender que es posible aislar subtareas dentro de un programa y que es posible
factorial partido por el segundo es mayor o igual que 1, calcula y muestra el primer factorial
definir funciones nuevas que realizan esas subtareas.
elevado al segundo y si no, el segundo elevado al primero. Al pedir los datos iniciales, se ha
Definir nuevas funciones y utilizarlas dentro de la funcin main.
de repetir el proceso de peticin de cada nmero hasta que sea >=0.
Muchas veces una misma subtarea es realizada varias veces dentro de un programa o pedir_numero_mayor: funcin que, dado un nmero entero z, pide al usuario que
aparece en distintos programas. Aislar esa subtarea y definir una funcin que la resuelve teclee un nmero mayor que z. El proceso se ha de repetir hasta obtener un nmero
hace posible que no haya que escribir todas sus instrucciones cada vez que se que vaya a que cumpla dicha condicin, en este momento devolver el nmero tecleado.
realizarla, ya que bastar con escribir la funcin una vez y llamarla todas las veces que sea
necesario. calcular_factorial: funcin que, a partir de un nmero entero x mayor o igual que
Aislar subproblemas y resolverlos de manera independiente, definiendo funciones, posibilita cero, calcula y devuelve el factorial de x.
estructurar los programas haciendo que stos sean ms claros y fciles de seguir.
mostrar_factorial: funcin que, dados un nmero entero x ( 0) y su factorial f,
3 LAS FUNCIONES EN C muestra un mensaje por pantalla indicando que el factorial de x es f.
Conchi Presedo Garca EUITI Bilbao 2015 29 Conchi Presedo Garca EUITI Bilbao 2015 30
LABORATORIO 5 FUNDAMENTOS DE INFORMTICA LABORATORIO 5 FUNDAMENTOS DE INFORMTICA
f1 = calcular_factorial(n1); 4 EJERCICIOS
f2 = calcular_factorial(n2);
mostrar_factorial(n1, f1);
mostrar_factorial(n2, f2); 4.1 Ejercicio 1 Elevar un nmero a otro hasta que alguno sea negativo
if ( sqrt(f1/f2) >= 1)
{ 4.1.1 Objetivo 1
printf("\nPrimer factorial elevado al segundo: %.0f", pow(f1,f2));
} Aprender a utilizar funciones predefinidas.
else
{
4.1.2 Enunciado 1
printf("\nSegundo factorial elevado al primero: %.0f", pow(f2,f1));
}
printf("\n\n"); Escribir un programa que vaya pidiendo nmeros enteros de dos en dos y calculando y
system("PAUSE"); /* Espera hasta que pulsemos una tecla */ mostrando el resultado que se obtiene al elevar el primero por el segundo en cada caso. El
} /* Fin de la funcin main */ proceso terminar cuando alguno de los nmeros introducidos sea menor o igual que 0.
Para realizar este ejercicio no crearemos ninguna funcin propia, nos limitaremos a
/** DEFINICIONES de las FUNCIONES utilizadas **/ utilizar la funcin pow explicada en la ayuda.
int pedir_numero_mayor(int z)
{ Ejemplo de
/* Pide al usuario un nmero entero mayor que z repitiendo el ejecucin: Introduce dos enteros (> 0) separados por una coma: 3, 2
proceso hasta obtener uno que lo sea. Cuando obtenga un nmero que (los datos tecleados 3 elevado a 2 es 9
cumpla esa condicin lo devolver como resultado. */ Introduce dos enteros (> 0) separados por una coma: 2, 10
por el usuario estn
int num; /* para guardar el nmero tecleado por el usuario. */ 2 elevado a 10 es 1024
en cursiva y
do Introduce dos enteros (> 0) separados por una coma: -5, 30
{ subrayados )
printf("\nIntroduce un numero entero mayor que %d: ", z);
scanf("%d", &num);
if (num <= z) 4.1.3 Ayuda para el enunciado 1
{
printf("\nEl numero introducido no es adecuado."); La funcin matemtica predefinida pow(x, y) calcula xy. La funcin pow est definida de
} forma general, por lo que tanto x como y pueden ser nmeros reales (tipo double) con lo
} while (num <= z); que el resultado tambin puede ser un nmero real y est definido como tal (tipo double).
return(num); Se encuentra en la librera math.h de C.
} /* Fin de la funcin pedir_numero_mayor */
long calcular_factorial(int x)
{
/* Dado un entero x >= 0, calcula y devuelve su factorial. */ 4.2 Ejercicio 2 Clculo de los nmeros perfectos menores que n
Conchi Presedo Garca EUITI Bilbao 2015 31 Conchi Presedo Garca EUITI Bilbao 2015 32
LABORATORIO 5 FUNDAMENTOS DE INFORMTICA LABORATORIO 5 FUNDAMENTOS DE INFORMTICA
Un nmero entero x mayor que 0 es perfecto si la suma de sus divisores (sin tener en Hay que definir y utilizar las mismas funciones que en el ejercicio anterior.
cuenta el propio x) es x. Como ejemplos, 6 es perfecto y 12 no lo es.
Ejemplo de ejecucin:
Introduce un numero entero > 0: -4
El dato introducido no es correcto. 4.4 Ejercicio 4 Clculo de nmeros medios consecutivos
Introduce un numero entero > 0: 40
6 es perfecto. 4.4.1 Objetivo 4
28 es perfecto.
Definir dos funciones nuevas y utilizarlas en la funcin main.
Para decidir si un nmero es perfecto habr que partir desde 1 e ir pasando los nmeros de Escribir un programa que muestre al usuario el primer nmero medio y a continuacin le
uno en uno e ir calculando la suma de los que sean divisores. Si al final la suma es igual al pregunte si quiere el siguiente. Si el usuario responde que s ('s'), el programa ha de
nmero dado, el nmero es perfecto y si no, no es perfecto. Ejemplos de nmeros perfectos calcular y mostrar el siguiente nmero medio y ha de volver a preguntar al usuario si quiere
y no perfectos: el siguiente. El proceso se repetir hasta que el usuario responda que no ('n'). Cada vez que
6 es perfecto porque 1 + 2 + 3 = 6 el usuario tenga que responder con una 's' o una 'n', no se admitir ninguna otra respuesta,
28 es perfecto porque 1 + 2 + 4 + 7 + 14 = 28 repitiendo la pregunta hasta obtener uno de esos dos caracteres.
12 no es perfecto porque 1 + 2 + 3 + 4 + 6 12
Un nmero entero x mayor o igual que 1 es un nmero medio si la suma de sus
Para localizar los nmeros perfectos menores que n habr que empezar a pasar los nmeros predecesores (1 + 2 + 3 + + x-1) se puede obtener tambin sumando algunos
de uno en uno a partir del 1 e ir comprobando en cada caso si es perfecto o no, llamando nmeros contiguos que le siguen. Ejemplos de nmeros medios y no medios:
para ello a la funcin es_perfecto. Se continuar hasta llegar al nmero n. 6 es medio porque 1 + 2 + 3 + 4 + 5 = 15 y 7 + 8 = 15. Es decir, la suma de los
predecesores de 6 es obtenible sumando algunos sucesores contiguos de 6.
35 es medio porque 1 + 2 +...+ 34 = 595 y 36 + 37 ++ 49 = 595 Es decir, la
suma de los predecesores de 35 es obtenible sumando algunos sucesores contiguos
4.3 Ejercicio 3 Clculo de los primeros n nmeros perfectos de 35.
7 no es medio porque 1 + 2 + 3 + 4 + 5 + 6 = 21 y no se puede obtener 21
4.3.1 Objetivo 3 sumando nmeros contiguos a partir de 8: 8 21, 8 + 9 21, 8 + 9 + 10 21,
etc. Adems 8 + 9 + 10 es mayor que 21 y por tanto ya se sabe que ninguna otra
Reutilizar funciones definidas con anterioridad para resolver un problema distinto suma superior dar 21.
pero que comparte algunos subproblemas con otro que ya se resolvi.
Hay que definir y utilizar las siguientes funciones:
4.3.2 Enunciado 3
es_medio: funcin que, dado un nmero entero x ( 1), decide si es medio o no. Si
Escribir un programa que pida al usuario un nmero entero y positivo n (> 0) y calcule los x es medio, la funcin devolver un 1 y si no devolver un 0.
primeros n nmeros perfectos. A la hora de pedir el valor n habr que repetir el proceso
de peticin hasta obtener un nmero que cumpla el requisito mencionado.
Conchi Presedo Garca EUITI Bilbao 2015 33 Conchi Presedo Garca EUITI Bilbao 2015 34
LABORATORIO 5 FUNDAMENTOS DE INFORMTICA LABORATORIO 5 FUNDAMENTOS DE INFORMTICA
preguntar_otro_medio: funcin que pregunta al usuario si desea otro nmero Hay que definir y utilizar las siguientes funciones:
medio o no. El proceso se ha de repetir hasta obtener una 's' o una 'n'; en ese
momento la funcin devolver la 's' o la 'n' tecleada. pedir_numero_mayor: funcin que, dado un nmero entero z, pide al usuario que
teclee un nmero mayor que z. El proceso se ha de repetir hasta obtener un nmero
que cumpla dicha condicin, en este momento devolver el nmero tecleado.
Ejemplo de ejecucin: calcular_fibonacci: funcin que, dado un nmero entero x (0), calcula y devuelve
El primer numero medio es: 6
el Fibonacci de x.
Quieres el siguiente numero medio?(s/n): q
El dato introducido no es adecuado.
Quieres el siguiente numero medio?(s/n): s
El siguiente numero medio es: 35 Ejemplo de ejecucin:
Quieres el siguiente numero medio?(s/n): n Introduce un numero entero > 0: -4
El dato introducido no es correcto.
Introduce un numero entero > 0: 4
Fibonacci(0) = 0
4.4.3 Ayuda para el enunciado 4 Fibonacci(1) = 1
Fibonacci(2) = 1
Para decidir si un nmero es medio o no, primero se ha de calcular la suma de sus Fibonacci(3) = 2
predecesores (a partir de 1) y a continuacin se ha de ir probando con las sumas de sus
sucesores contiguos, hasta encontrar una suma que coincide con la de los predecesores o
hasta obtener una suma que es mayor que la suma de los predecesores. Si se da este 4.5.3 Ayuda para el enunciado 5
ltimo caso, se sabe que ninguna otra suma coincidir con la suma de los predecesores
(porque las sumas de los sucesores son cada vez mayores). En la funcin main para obtener los primeros n trminos de la serie de Fibonacci habr que
ir pasando los nmeros de uno en uno a partir del 0 y calcular el Fibonacci de cada uno de
ellos llamando a la funcin calcular_fibonacci.
4.5 Ejercicio 5 Clculo de los primeros n nmeros de Fibonacci
Al definir la funcin calcular_fibonacci, como para obtener el Fibonacci de un nmero es
necesario sumar los Fibonaccis de los dos anteriores, para calcular el Fibonacci de x hay que
4.5.1 Objetivo 5
partir de los Fibonaccis de 0 y 1 (que se consideran bsicos) e ir calculando los Fibonaccis
Definir una funcin nueva y reutilizar otra ya definida con anterioridad. Esto sirve de todos los nmeros hasta llegar a tener el Fibonacci de x. Por tanto, aunque al final esta
para ver que las funciones son muy tiles para aislar subprogramas y luego usarlos funcin slo devolver el Fibonacci de x, en el proceso se habrn tenido que calcular los
en distintos ejercicios sin necesidad de retocar las funciones. Fibonaccis de todos los nmeros menores que x.
4.5.2 Enunciado 5
Escribir un programa que pida al usuario un nmero entero y positivo n (>0) y calcule los
primeros n trminos de la serie de Fibonacci. Como el primer trmino de la serie es el
Fibonacci de 0, el ltimo Fibonacci a mostrar ser el de n1. A la hora de pedir el valor n
habr que repetir el proceso hasta obtener un nmero que cumpla la condicin requerida.
Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(x) = Fibonacci(x 2) + Fibonacci(x 1) x>1
Ejemplos de Fibonaccis:
x 0 1 2 3 4 5 6 7 8 9 10 11
Fibonacci(x) 0 1 1 2 3 5 8 13 21 34 55 89
Conchi Presedo Garca EUITI Bilbao 2015 35 Conchi Presedo Garca EUITI Bilbao 2015 36
LABORATORIO 6 FUNDAMENTOS DE INFORMTICA LABORATORIO 6 FUNDAMENTOS DE INFORMTICA
Conchi Presedo Garca EUITI Bilbao 2015 37 Conchi Presedo Garca EUITI Bilbao 2015 38
LABORATORIO 6 FUNDAMENTOS DE INFORMTICA LABORATORIO 6 FUNDAMENTOS DE INFORMTICA
Conchi Presedo Garca EUITI Bilbao 2015 39 Conchi Presedo Garca EUITI Bilbao 2015 40
LABORATORIO 6 FUNDAMENTOS DE INFORMTICA LABORATORIO 6 FUNDAMENTOS DE INFORMTICA
4 EJERCICIOS Ejemplo de ejecucin: (los datos tecleados por el usuario estn en cursiva y subrayados)
4.1 Ejercicio 1 Clculo de las races reales de una ecuacin de 2 grado Introduce los coeficientes de una ecuacion de segundo grado: 2, 1, 2
La ecuacion no tiene raices.
4.1.1 Objetivo 1 Introduce los coeficientes de una ecuacion de segundo grado: 2, 4, 2
La ecuacion tiene una unica raiz: -1
Utilizar una funcin predefinida en C dentro de otra que no es la funcin main. Introduce los coeficientes de una ecuacion de segundo grado: 2, 5, 2
La ecuacion tiene dos raices: -0.5 y -2
Introduce los coeficientes de una ecuacion de segundo grado: 0, 3, 5
4.1.2 Enunciado 1
Escribir un programa que pida al usuario los tres coeficientes de una ecuacin de segundo
4.1.3 Ayuda para el enunciado 1
grado, calcule y muestre sus races reales (si las tiene) y repita el proceso hasta que el
usuario introduzca como primer coeficiente (valor del coeficiente a) el 0.
La raz cuadrada se calcula utilizando la funcin matemtica predefinida sqrt, es decir,
sqrt(x) calcula x . La funcin est en la librera math.h.
Una ecuacin de segundo grado tiene la siguiente forma: ax2 + bx + c = 0, donde a, b y
c son los coeficientes.
La funcin sqrt se utilizar dentro de las funciones calcular_raiz_positiva y
b b 2 4ac calcular_raiz_negativa.
La frmula general para calcular las races es la siguiente: x
2a
Una ecuacin de segundo grado puede no tener races reales, tener una nica raz o tener Las funciones calcular_raiz_positiva y calcular_raiz_negativa se utilizarn dentro de la
dos races: funcin calcular_raices.
Si b 2 4 ac es menor que 0, no tiene raz real.
Cuando la ecuacin tenga una nica raz, para calcular esa raz se puede utilizar
Si b 4 ac es 0, tiene una nica raz.
2
calcular_raiz_positiva o calcular_raiz_negativa, es decir, cualquiera de las dos.
Si b 4 ac es mayor que 0, tiene dos races.
2
Definir dos funciones y utilizar una de ellas dentro de la otra. Las dos calcularn un
Hay que definir y utilizar las siguientes funciones: resultado y lo devolvern.
calcular_raices: funcin que, dados los coeficientes a, b y c de una ecuacin de 4.2.2 Enunciado 2
segundo grado, procede de la siguiente forma:
o Si la ecuacin no tiene races, muestra un mensaje indicndolo. Escribir un programa que pida al usuario dos nmeros enteros m ( 1) y n ( 1), calcule
o Si la ecuacin tiene una nica raz, la calcula y la muestra e indica que slo
hay una raz.
m
n
(aproximacin entera por defecto de la raz n-sima de m) y a continuacin le
pregunte al usuario si quiere calcular otra raz. Si el usuario responde que s ('s'), el
o Si la ecuacin tiene dos races, las calcula y las muestra.
programa ha de volver a pedir dos enteros m ( 1) y n ( 1) al usuario y calcular la raz
correspondiente. El proceso se repetir hasta que el usuario responda que no ('n') quiere
calcular_raiz_positiva: funcin que, dados los coeficientes a, b y c de una
calcular ms races. Cada vez que el usuario tenga que responder con una 's' o una n', no
b b 2 4ac se admitir ninguna otra respuesta, repitiendo la pregunta hasta obtener uno de esos dos
ecuacin de segundo grado tal que b2 4ac 0, calcula y devuelve
2a caracteres. Tambin al pedir m y n habr que comprobar que son 1. No se pueden
utilizar las funciones matemticas predefinidas.
calcular_raiz_negativa: funcin que, dados los coeficientes a, b y c de una
Ejemplos de aproximaciones enteras por defecto de races:
b b 2 4ac
ecuacin de segundo grado tal que b2 4ac 0, calcula y devuelve
2a
8 2
3
10 2
3
3
29 3
Conchi Presedo Garca EUITI Bilbao 2015 41 Conchi Presedo Garca EUITI Bilbao 2015 42
LABORATORIO 6 FUNDAMENTOS DE INFORMTICA LABORATORIO 6 FUNDAMENTOS DE INFORMTICA
Hay que definir y utilizar las siguientes funciones: El tringulo de Tartaglia para un valor n = 4 tiene 5 filas y 5 columnas y sera el
siguiente:
calcular_raiz: funcin que, dados dos nmeros enteros x ( 1) e y ( 1), calcula y 1
devuelve x .
y
1 1
1 2 1
mi_pow: funcin que, dados dos nmeros enteros x ( 1) e y ( 1), calcula (sin
utilizar pow) y devuelve xy. 1 3 3 1
1 4 6 4 1
preguntar_raiz: funcin que pregunta al usuario si desea calcular otra raz o no. El
proceso se ha de repetir hasta obtener una 's' o una 'n'. Si nos fijamos en las filas y las columnas tenemos lo siguiente:
4.2.3 Ayuda para el enunciado 2 Hay que definir y utilizar las siguientes funciones:
y
Para definir la funcin mi_pow, es decir, para indicar cmo se calcula x hay que tener en mostrar_triangulo_tartaglia: funcin que, dado un nmero entero x ( 1),
cuenta que xy = x * x * x * ... (multiplicando x y veces). Esta funcin slo servir para muestra por pantalla el tringulo de Tartaglia de x filas y x columnas.
enteros positivos y por tanto no es tan general como la funcin predefinida pow que sirve
incluso para los reales. calcular_combinatorio: funcin que, dados dos nmeros enteros x e y (tal que x
x
La funcin mi_pow se utilizar dentro de la funcin calcular_raiz. 0, y 0, x y), calcula y devuelve .
y
Al definir la funcin calcular_raiz, para aproximar x , habr que ir calculando 0y, 1y, 2y, 3y,
y
etc. hasta obtener una potencia que es mayor que x. El resultado ser el nmero utilizado calcular_factorial: funcin que, dado un nmero entero x mayor o igual que cero,
calcula y devuelve el factorial de x. Esta funcin ya ha sido definida en otros
en el caso anterior al que es mayor x. Por ejemplo para calcular 85 se calcularan 0 , 1 ,
3 3 3
ejercicios por lo que se puede reutilizar.
23, 33, 43 y 53. Como 53 es mayor que 85 el resultado es 4.
Ejemplo de ejecucin:
Introduce un numero entero >= 1: 2
Triangulo de Tartaglia correspondiente:
4.3 Ejercicio 3 Visualizacin del tringulo de Tartaglia 1
1 1
1 2 1
4.3.1 Objetivo 3 Introduce un numero entero >= 1: 4
Triangulo de Tartaglia correspondiente:
Definir tres funciones y utilizar una de ellas dentro de otra. Unas funciones sern 1
llamadas desde main y otras desde funciones que no son la funcin main. 1 1
1 2 1
4.3.2 Enunciado 3 1 3 3 1
1 4 6 4 1
Escribir un programa que pida al usuario un nmero entero y positivo n ( 1), muestre por Introduce un numero entero >= 1: -9
pantalla el tringulo de Tartaglia correspondiente, vuelva a pedir otro valor n, vuelva a
mostrar el tringulo correspondiente y repita el proceso hasta que el usuario teclee un
nmero negativo.
Conchi Presedo Garca EUITI Bilbao 2015 43 Conchi Presedo Garca EUITI Bilbao 2015 44
LABORATORIO 6 FUNDAMENTOS DE INFORMTICA LABORATORIO 6 FUNDAMENTOS DE INFORMTICA
4.3.3 Ayuda para el enunciado 3 calcular_logaritmo: funcin que, dados dos nmeros enteros x e y (tal que x > 1 e
y x), calcula y devuelve log x y .
Al definir la funcin mostrar_triangulo_tartaglia habr que ir generando todos los pares
posibles de filas y columnas desde la posicin (0,0) hasta la (x,x) y llamar a la funcin
preguntar_logaritmo: funcin que pregunta al usuario si desea calcular otra
calcular_combinatorio con cada par generado.
secuencia de logaritmos o no. El proceso de recoger la respuesta se ha de repetir
hasta obtener una 's' o una 'n'.
La funcin calcular_combinatorio utilizar la funcin calcular_factorial.
Ejemplo de ejecucin:
Introduce dos enteros >= 1: 5, -2
4.4 Ejercicio 4 Clculo del logaritmo aproximado Los datos introducidos no son correctos.
Introduce dos enteros >= 1: 4, 20
log(2)20 = 4 log(3)20 = 2 log(4)20 = 2
4.4.1 Objetivo 4 La suma es 8.
Quieres calcular otros logaritmos? (s/n): q
Definir y utilizar dos funciones nuevas y utilizar una de ellas dentro de otra, El dato tecleado no es adecuado.
aprendiendo a estructurar programas. Quieres calcular otros logaritmos? (s/n): s
Introduce dos enteros >= 1: 3, 50
4.4.2 Enunciado 4 log(2)50 = 5 log(3)50 = 3
La suma es 8.
Quieres calcular otros logaritmos? (s/n): n
Escribir un programa que pida al usuario dos nmeros enteros m y n (tales que m>1 y
nm) calcule y muestre los elementos log 2 n , log 3 n , log 4 n , ..., log m n
(aproximaciones enteras por defecto de los correspondientes logaritmos) y la suma de
4.4.3 Ayuda para el enunciado 4
todos ellos y a continuacin le pregunte al usuario si quiere repetir el clculo para otros dos
valores. Si el usuario responde que s ('s'), el programa ha de volver a pedir dos enteros m
Al definir la funcin mostrar_logaritmos con respecto a los parmetros x e y, habr que
y n al usuario y calcular los logaritmos y la suma correspondientes. El proceso se repetir
pasar las bases de los logaritmos de uno en uno a partir de 2 y hasta llegar a x. Para cada
hasta que el usuario responda que no ('n') quiere calcular ms logaritmos. Cada vez que el
base habr que llamar a la funcin calcular_logaritmo pasndole como argumentos la base
usuario tenga que responder con una 's' o una 'n', no se admitir ninguna otra respuesta,
e y.
repitiendo la pregunta hasta obtener uno de esos dos caracteres. Tambin al pedir m y n
habr que comprobar que son correctos. No se pueden utilizar las funciones
Al definir la funcin calcular_logaritmo con respecto a los parmetros x e y, habr que ir
matemticas predefinidas.
multiplicando x por s mismo (x * x * x * ...) hasta obtener un valor mayor que y. El
nmero de veces que se haya multiplicado menos 1 ser el resultado que ha de devolver la
Para calcular la aproximacin entera por defecto de un logaritmo, log m n , hay que funcin.
calcular cuntas veces es necesario multiplicar m por s mismo (m * m * m * ) para
obtener un valor mayor que n. Ese nmero de veces menos 1 ser el resultado.
Ejemplos de aproximaciones enteras por defecto de logaritmos: 4.5 Ejercicio 5 Validacin de un posible nmero de Fibonacci
log 2 8 3 porque para obtener un valor mayor que 8 hay que multiplicar 2 por s 4.5.1 Objetivo 5
mismo 4 veces (2 * 2 * 2 * 2) y por tanto el resultado es 4 1, es decir, 3.
log 2 12 3 porque para obtener un valor mayor que 12 hay que multiplicar 2 por s Definir una funcin nueva y reutilizar otra definida con anterioridad utilizndola
mismo 4 veces (2 * 2 * 2 * 2) y por tanto el resultado es 4 1, es decir, 3. adems dentro de la primera.
log 4 20 2 porque para obtener un valor mayor que 20 hay que multiplicar 4 por
s mismo 3 veces (4 * 4 * 4) y por tanto el resultado es 3 1, es decir, 2. 4.5.2 Enunciado 5
Escribir un programa que pida al usuario un nmero entero n ( 0) y decida si existe algn
Hay que definir y utilizar las siguientes funciones: nmero tal que su Fibonacci sea n. El programa debe repetir el mismo proceso hasta que el
usuario introduzca un nmero negativo.
mostrar_logaritmos: funcin que, dados dos nmeros enteros x e y (tal que x > 1
e y x), calcula y muestra log 2 y , log 3 y , log 4 y , ..., log x y y la suma de
todos ellos.
Conchi Presedo Garca EUITI Bilbao 2015 45 Conchi Presedo Garca EUITI Bilbao 2015 46
LABORATORIO 6 FUNDAMENTOS DE INFORMTICA LABORATORIO 6 FUNDAMENTOS DE INFORMTICA
Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(x) = Fibonacci(x 2) + Fibonacci(x 1)
Ejemplos de Fibonaccis:
x 0 1 2 3 4 5 6 7 8 9 10 11
Fibonacci(x) 0 1 1 2 3 5 8 13 21 34 55 89
Ejemplo de ejecucin:
Introduce un numero entero >= 1: 4
4 no es Fibonacci de ningun numero.
Introduce un numero entero >= 1: 8
8 es el Fibonacci de 6.
Introduce un numero entero >= 1: -5
Conchi Presedo Garca EUITI Bilbao 2015 47 Conchi Presedo Garca EUITI Bilbao 2015 48
LABORATORIO 7 FUNDAMENTOS DE INFORMTICA LABORATORIO 7 FUNDAMENTOS DE INFORMTICA
Conchi Presedo Garca EUITI Bilbao 2015 49 Conchi Presedo Garca EUITI Bilbao 2015 50
LABORATORIO 7 FUNDAMENTOS DE INFORMTICA LABORATORIO 7 FUNDAMENTOS DE INFORMTICA
ind 0 1 2 3 4 5 6 7 8 9 (N-1) 28
29 /* Bucle para desplazar el resto, CUIDADO, darnos cuenta de dos
t[ind] 3 24 7 -25 0 3 21 19 3 895 cosas:
30 empezamos en ind=1 y acabamos en ind=nelem-1.
31 Para desplazar hacia la izda tomamos cada nmero y lo asignamos a la
2. Desplazar esos 10 elementos hacia la izquierda: (lneas cdigo 25 a 42)
32 posicin que est a su izquierda. Empezamos en la segunda posicin
Para N=10 tendremos en principio 33 para asignrselo a la primera, por eso comenzamos con ind 1 */
34
ind 0 1 2 3 4 5 6 7 8 9 35 ind=1;
t[ind] 3 24 7 -25 0 3 21 19 3 895 36 while(ind<nelem){
37 t[ind-1]=t[ind];
38 ind=ind+1;
Y deber quedar: 39 }
40
ind 0 1 2 3 4 5 6 7 8 9 41 /* En la ltima posicin guardamos lo que haba en la primera */
42 t[nelem-1]=aux;
t[ind] 24 7 -25 0 3 21 19 3 895 3 43
44 /* 3. VISUALIZAMOS la tabla resultante
45 No olvidar poner el indice a 0 al implementar el bucle para
3. Visualizar la tabla t (lneas cdigo 49 a 51) 46 recorrer y visualizar la tabla*/
47 printf("\nEl array desplazado hacia la IZQUIERDA queda asi:\n");
ind 0 1 2 3 4 5 6 7 8 9 48
t[ind] 24 7 -25 0 3 21 19 3 895 3 49 for(ind =0;ind<nelem;ind++){
50 printf("%d ",t[ind]);
51 }
52 printf("\n\n");
3.1.4. Solucin del enunciado 1 53 system("PAUSE");
54 }
Se da resuelto el ejercicio con comentarios para tomarlo de gua para el enunciado 1:
Conchi Presedo Garca EUITI Bilbao 2015 51 Conchi Presedo Garca EUITI Bilbao 2015 52
LABORATORIO 7 FUNDAMENTOS DE INFORMTICA LABORATORIO 7 FUNDAMENTOS DE INFORMTICA
Aprender a usar condiciones a la hora de cargar tablas y recorrer las tablas, ya que
no siempre tenemos un nmero fijo de elementos. 4.4 Ejercicio 4 Ordenacin mediante el mtodo de la burbuja
Pedir al usuario una serie de nmeros y almacenarla en un array de tamao N. El programa Aprender a utilizar el algoritmo de la burbuja para ordenar los elementos de una
deber pedir nmeros hasta que se hayan introducido N elementos en la tabla o el usuario tabla.
teclee un nmero negativo. Una vez se dispone del array con como mucho N nmeros
positivos, se pide intercambiar el menor de ellos con el que est en la primera posicin. 4.4.2 Enunciado 4
Ejemplo de (para N = 10) Hacer un programa que ordene de menor a mayor los elementos de un vector de como
ejecucin: INTERCAMBIO DEL ELEMENTO MENOR mucho N nmeros. Igual que en el ejercicio anterior, el vector puede no llenarse, dado que
Introduce HASTA 10 enteros (negativo para terminar): si el usuario teclea un nmero negativo no se seguirn pidiendo ms valores.
45 67 13 29 3 28 32 51 -1
El array, una vez realizado el intercambio, queda asi:
Ejemplo de (para N = 10)
3 67 13 29 45 28 32 51
ejecucin: ORDENO UNA TABLA POR EL METODO DE LA BURBUJA
Introduce HASTA 10 numeros reales (negativo para terminar):
4.2 1.3 777 4.75 4.2 0.555 3.25 0 10
4.2.3 Ayuda para el enunciado 2 La tabla, ORDENADA en ASCENDENTE, queda asi:
0 0.555 1.3 3.25 4.2 4.2 4.75 777
Recorremos la tabla desde el principio hasta el final buscando el mnimo y guardando tanto
su valor como su posicin.
4.4.3 Ayuda para el enunciado 4
4.3 Ejercicio 3 Mayor nmero de iguales consecutivos y posicin El mtodo de la burbuja bsico recorre la tabla entera comparando cada elemento con el
anterior, de manera que intercambiamos sus valores si estn desordenados respecto del
4.3.1 Objetivo 3 orden que se quiere conseguir. Este proceso se debe repetir tantas veces como nmero de
elementos tenga la tabla (por ejemplo, para una tabla con 8 elementos habr que recorrer
Aprender a utilizar contadores e ndices que guarden los estados por los que pasa el la tabla 8 veces o lo que es lo mismo, habr que dar 8 vueltas).
programa al recorrer la tabla. Tomando como estado en este caso la cantidad
mxima de elementos iguales y su posicin de inicio y final. inicializar el nmero de vueltas a 0
hacer
4.3.2 Enunciado 3 para cada posicin i de la tabla desde la 1 hasta la ltima
si (el valor de la posicin i est desordenado respecto del de la posicin i-1)
Dada una tabla de N elementos, calcular la cantidad mxima de elementos iguales Intercambiar sus valores
consecutivos que hay, as como las posiciones de comienzo y final en las que se encuentran. fin si
fin para
Ejemplo de (para N = 10) aumentar en 1 el nmero de vueltas
ejecucin: mientras el nmero de vueltas no alcance a la cantidad de elementos de la tabla
MAYOR NUMERO DE IGUALES CONSECUTIVOS Y POSICION
Introduce 10 enteros: 15 23 23 5 7 4 4 4 23 23 NOTA: Este mtodo se puede optimizar utilizando un flag que detecte si en una
El mayor numero de elementos consecutivos iguales aparece 3 determinada vuelta no ha habido intercambios (significar que ya est ordenado) y
veces y lo hace entre las posiciones 5 y 7. haciendo que termine cuando esto ocurra. Se puede optimizar an ms, recorriendo un
elemento menos en cada vuelta, ya que cada vez que realizamos un recorrido a la tabla se
ordena un elemento que ir a la ltima posicin que quedara sin ordenar.
4.3.3 Ayuda para el enunciado 3
Conchi Presedo Garca EUITI Bilbao 2015 53 Conchi Presedo Garca EUITI Bilbao 2015 54
LABORATORIO 8 FUNDAMENTOS DE INFORMTICA LABORATORIO 8 FUNDAMENTOS DE INFORMTICA
3.1 Ejercicio Primera posicin que ocupa un valor dentro de una tabla
LABORATORIO 8
3.1.1 Objetivo
TABLAS NUMRICAS ARRAYS EN FUNCIONES El objetivo del ejercicio es probar funciones con tablas y poder identificar los
diferentes elementos (declaracin, definicin y funcin) y comprobar su
1 OBJETIVOS funcionamiento.
Prototipo: void inicializar_matriz (int tabla[],int nelems); Se da resuelto el enunciado para tomarlo de gua para el resto de ejercicios.
Definicin: void inicializar_matriz (int tabla[], int nelems)
{ #include <stdio.h>
int i; #include <stdlib.h>
for (i=0;i<nelems;i++){ #define N 10
tabla[i]=0;
} // PROTOTIPOS funciones
} // Funcin que calcula la posicin de num dentro de tabla
Llamada: int main(void) // Si num no est en la tabla devuelve -1
{ int buscar_posicion_en_tabla(int num, int tabla[]);
/* Nmero de elementos de la tabla */
int const N=200; // Programa PRINCIPAL
/* Declaracin de la tabla de enteros */ int main(void)
int asistencia_alumno[N]; {
... int tabla [N],i,posicion,num;
inicializar_matriz (asistencia_alumno, N);
... // Pedimos los N nmeros de la tabla
} printf("\nDame %d numeros para almacenar en una tabla.\n",N);
Conchi Presedo Garca EUITI Bilbao 2015 55 Conchi Presedo Garca EUITI Bilbao 2015 56
LABORATORIO 8 FUNDAMENTOS DE INFORMTICA LABORATORIO 8 FUNDAMENTOS DE INFORMTICA
Poner en prctica los conocimientos adquiridos en el ejercicio anterior. Para realizar este programa se utilizar una funcin llamada insertar_menor_en_tabla que
se encargar de buscar el elemento menor desde la posicin indicada hasta el final y
despus de desplazar todos los elementos a la derecha, insertar el elemento menor en esa
4.1.2 Enunciado 1 posicin. El prototipo de esta funcin ser:
Igual que el ejercicio anterior, pero con dos notables diferencias: void insertar_menor_en_tabla(int posicion, int tabla[],int dimension);
La tabla podr no llenarse, dado que ahora si el usuario teclea un nmero negativo
no se seguirn pidiendo ms valores. Esto significa que en la funcin necesitaremos donde:
un argumento ms: el tamao real de la tabla, es decir, la cantidad de nmeros que Posicion: Es la posicin a partir del cual se buscar el elemento menor y una vez
nos han dado. encontrado se colocar en dicha posicin despus de haber desplazado todos los
El usuario introducir los elementos de la tabla ordenados de menor a mayor (no es elementos a la derecha.
necesario comprobarlo, suponemos que siempre es as por lo que los nmeros Tabla: Es la tabla a modificar.
siempre estarn ordenados dentro de la tabla) y esto influir a la hora de buscar el
Dimension: Es el nmero de elementos introducidos en la tabla.
nmero.
Conchi Presedo Garca EUITI Bilbao 2015 57 Conchi Presedo Garca EUITI Bilbao 2015 58
LABORATORIO 8 FUNDAMENTOS DE INFORMTICA LABORATORIO 8 FUNDAMENTOS DE INFORMTICA
4.3 Ejercicio 3 Generacin de un vector ascendente a partir de otro 4.3.3 Ayuda para el enunciado 3
4.3.1 Objetivo 3 Los pasos a dar POR ORDEN en el programa principal sern:
Aprender a trabajar con varios arrays simultneamente. a) Mediante la funcin pedir_vector pedir los enteros para el vector v1 hasta que el
Aprender a implementar funciones tpicas con arrays. usuario teclee un nmero < 0 se hayan dado 10 nmeros
4.3.2 Enunciado 3 i: 0 1 2 3 4 5 6 7 8 9
v1 12 14 3 11 4 17 15 28 24
Escribir un programa en C que pida un vector de hasta 10 enteros no negativos, a
continuacin genere otro vector eliminando los nmeros que no mantienen el orden b) Mediante la funcin crear_vector_asc crear v2, copiando desde v1 a v2 los
ascendente, y por ltimo pida un nuevo nmero no negativo y lo inserte en el lugar nmeros que mantienen el orden ascendente.
adecuado del nuevo vector, de forma que se mantenga el orden ascendente. En el ejemplo, se eliminan los nmeros que estn entre 14 y 17 por no mantener el
orden ascendente. Lo mismo ocurre con el nmero que est entre el 17 y el 28 y el
nmero que est detrs del 28.
Ejemplo de (para N = 10)
ejecucin:
Vector de hasta 10 enteros no negativos : j: 0 1 2 3 4 5 6 7 8 9 10
12 14 3 11 4 17 15 28 24 -5 v2 12 14 17 28
Vector eliminando los nmeros que no mantienen el orden
ascendente: c) Mediante la funcin ver_vector visualizar v2.
12 14 17 28 d) Mediante la funcin pedir_entero pedir un nuevo nmero, num.
Dame un numero entero no negativo: 15 e) Mediante la funcin insertar_en_vector_asc insertar este nmero num en la
Tras insertar 15 en el vector anterior: posicin adecuada del vector v2 manteniendo el orden ascendente. Los pasos a
12 14 15 17 28 seguir son:
Encontramos en v2 la posicin en la que debe ir num para mantener el orden
(posicin de v2 en la que est el primer nmero que es mayor o igual que
num, o bien la primera posicin libre en caso de que no haya ningn
Prototipos y explicacin de las funciones a utilizar: elemento mayor o igual que num). Tomando los valores del ejemplo para v2,
int pedir_vector(int v[]); si num es 15 la posicin es la 2, si num fuese 30 la posicin sera la 4.
Mediante esta funcin llamada pedir_vector que tiene como argumento un vector de
enteros se piden los distintos elementos para el vector v y se devuelve su dimensin 0 1 2 3 4 5 6 7 8 9 10
(nmero de elementos vlidos). v2 12 14 17 28
int crear_vector_asc(int v1[], int dim1,int v_asc[]);
Mediante esta funcin llamada crear_vector_asc que tiene como argumentos un Desplazamos los nmeros del vector v2, a partir de esa posicin incluida, una
vector de enteros v1, su dimensin dim1 y un vector v_asc, crea a partir de v1 el vector posicin a la derecha (si el nuevo nmero num es 15, como la posicin es la
v_asc con los enteros que seguan el orden ascendente y devuelve la dimensin de este 2, desplazaramos el 17 y el 28)
nuevo vector v_asc.
void ver_vector(int v[], int dim); 0 1 2 3 4 5 6 7 8 9 10
Mediante esta funcin llamada ver_vector que tiene como argumentos un vector de v2 12 14 17 17 28
enteros y su dimensin visualizamos los elementos del vector de enteros v que tiene
dim elementos. Para finalizar, colocamos num en la posicin adecuada del vector v2:
int pedir_entero();
Mediante esta funcin llamada pedir_entero se pide un entero no negativo por teclado 0 1 2 3 4 5 6 7 8 9 10
y cuando es correcto se devuelve. v2 12 14 15 17 28
int insertar_en_vector_asc(int num, int v[], int dim);
Mediante esta funcin llamada insertar_en_vector_asc que tiene como argumentos el
f) Mediante la funcin ver_vector visualizar este nuevo v2.
nmero a insertar num, un vector con enteros colocados en orden ascendente v y su
dimensin dim, inserta el nmero en el lugar adecuado de v para que se siga
manteniendo el orden ascendente. Devuelve la nueva dimensin de v que ser dim+1.
Conchi Presedo Garca EUITI Bilbao 2015 59 Conchi Presedo Garca EUITI Bilbao 2015 60
LABORATORIO 9 FUNDAMENTOS DE INFORMTICA LABORATORIO 9 FUNDAMENTOS DE INFORMTICA
4 EJERCICIOS
Trabajar adecuadamente con las cadenas de caracteres, tambin llamadas strings. Realizar un programa que pida una cadena (mximo 250 caracteres) e indique de cuntas
Utilizar funciones que manejen strings. palabras est compuesta.
2 MOTIVACIN
Ejemplo de ejecucin:
Existen multitud de problemas que no se pueden solucionar si no es con el uso de (los datos tecleados por DADA UNA CADENA CUENTO SUS PALABRAS.
estructuras de datos como las cadenas de caracteres. el usuario estn en Introduce un conjunto de palabras:
En particular, nos referimos a problemas en los que es necesario almacenar, manejar cursiva y subrayados) _Hola gente____
y escribir series de caracteres (frases, listas de palabras, cdigos, etc.). Numero de palabras: 2.
Almacenan en una misma estructura un nmero determinado de valores de tipo Cada palabra puede estar separada de la siguiente por uno o ms espacios en blanco;
carcter. asimismo, puede ocurrir que antes de la primera palabra, o despus de la ltima, haya uno
o ms blancos. Ejemplo:
En general, su uso es como el de las tablas numricas sustituyendo los nmeros por
caracteres. Por ejemplo, para declarar una cadena se pondr: cad 'H' 'o' 'l' 'a' 'g' 'e' 'n' 't' 'e' '\0' ...
char nombre_cadena[N];
Para contar palabras basta con identificar dnde empieza cada una de ellas, de modo que al
Las diferencias ms notables se citan a continuacin. detectar un espacio en blanco seguido de una letra podemos asegurar que hemos
encontrado una nueva palabra. Atencin a la primera palabra del string, pues puede ser un
Las cadenas de caracteres se piden y visualizan sin necesidad de bucles: caso especial.
o Pedir por teclado gets(nombre_cadena); De modo anlogo, podran contarse los finales de palabra, es decir, el nmero de letras
o Visualizar printf(%s, nombre_cadena); seguidas por un blanco. En este caso, la ltima palabra de la cadena sera el caso especial.
Toda cadena en C debe terminar con un carcter especial de fin de cadena ('\0')
que se ubica detrs de la ltima posicin ocupada del string. 4.2 Ejercicio 2 Clculo de la letra que ms aparece
o Existe la funcin predefinida strlen(nombre_cadena) que nos devuelve la
posicin de este carcter de fin de cadena en nombre_cadena; esta funcin se 4.2.1 Objetivo 2
encuentra en la librera string.h y es til porque esta posicin coincide con
el nmero de caracteres de la cadena. Aprender a trabajar diferentes aspectos de los strings. Requiere la realizacin de
bsquedas y filtrados (lo que exige un adecuado uso de los ndices para el acceso a
las posiciones del string) y, opcionalmente, la definicin de funciones.
4.2.2 Enunciado 2
Hacer un programa que pida una cadena de caracteres formada exclusivamente por letras y
espacios en blanco (250 caracteres mximo), y visualice las iniciales de cada palabra de
dicha cadena, sabiendo que las palabras pueden estar separadas por uno o ms blancos.
Conchi Presedo Garca EUITI Bilbao 2015 61 Conchi Presedo Garca EUITI Bilbao 2015 62
LABORATORIO 9 FUNDAMENTOS DE INFORMTICA LABORATORIO 9 FUNDAMENTOS DE INFORMTICA
A continuacin se generar otra cadena, que resulte de eliminar en la anterior todos los Funcin cambiar_c: Dada una cadena la transforma cambiando la 'c' por la 'k'
blancos y convertir todas sus letras a minsculas. Por ltimo, se visualizar cul es la letra siempre que est seguida por 'a', 'o', 'u'. Ejemplo: dado guepardo agil vaga
que ms aparece. cansado se transformara en guepardo agil vaga kansado.
Funcin cambiar_bv: Dada una cadena la transforma cambiando 'v' por 'b', y 'b' por
'v'. Ejemplo: dado guepardo agil vaga cansado se transformara en guepardo agil
Ejemplo de baga cansado.
ejecucin: DADA UNA CADENA VISUALIZO INICIALES Y LETRA QUE MAS APARECE. Funcin cambiar_gue_gui: Dada una cadena la transforma eliminando la 'u' en los
Introduce una cadena (solo letras y blancos):
casos gue y gui. Ejemplo: dado guepardo agil vaga cansado se transformara
_Hola gente____
Las iniciales de las palabras son: H g en gepardo agil vaga cansado.
Cadena transformada: holagente Funcin insertar_h: Dada una cadena la transforma insertando 'h' en cada palabra
La letra que mas aparece es e (2 veces) que empiece por vocal. Ejemplo: dado guepardo agil vaga cansado se
transformara en guepardo hagil vaga cansado.
cad2 'h' 'o' 'l' 'a' 'g' 'e' 'n' 't' 'e' '\0' ... Si seguimos el ejemplo de ejecucin, la frase inicial cad sera:
i:0 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 ...
Visualizamos esta nueva cadena para ver si la hemos hecho bien. 'g' 'u' 'e' 'p' 'a' 'r' 'd' 'o' ' ' 'a' 'g' 'i' 'l' ' ' 'v' 'a' 'g' 'a' ' ' 'c' 'a' 'n' 's' 'a' 'd' 'o' '\0' ...
Y, por ltimo, en esta nueva cadena calculamos qu letra aparece ms y cuntas veces. En
el ejemplo es la 'e', que aparece 2 veces. Y la aplicacin de todas las transformaciones indicadas debe dar como resultado una nueva
Incluir si se desea una funcin llamada visualizar_maximo que, dado un string formado cadena, que llamaremos cad_con_faltas :
exclusivamente por letras determine el carcter que ms aparece y cuntas veces lo hace,
visualizando el mensaje La letra que mas aparece es X (Y veces).. j:0 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 ...
'g' 'e' 'p' 'a' 'r' 'd ' 'o' '' 'h' 'a' 'g' 'i' 'l' ' ' 'b' 'a' 'g' 'a' ' ' 'k' 'a' 'n' 's' 'a' 'd' 'o' '\0' ...
4.3.2 Enunciado 3
Escribir un programa que pida una frase y produzca ciertas faltas de ortografa. Para ello si
encontramos una 'c' seguida de 'a', 'o' 'u' la cambiaremos por una 'k', intercambiaremos 'v'
y 'b', cuando encontremos gue gui eliminaremos la 'u' e insertaremos una 'h' en todas
las palabras que empiecen por vocal, tal como se indica en el apartado de Ayuda para el
enunciado 3.
Para incluir las faltas de ortografa en la frase inicial deberemos realizar cambios, que
podemos programar mediante las siguientes funciones:
Conchi Presedo Garca EUITI Bilbao 2015 63 Conchi Presedo Garca EUITI Bilbao 2015 64
LABORATORIO 9 FUNDAMENTOS DE INFORMTICA LABORATORIO 9 FUNDAMENTOS DE INFORMTICA
4.4 Ejercicio 4 Validacin de un posible nmero capica 4.5 Ejercicio 5 Validacin de un posible palndromo
Aprender a trabajar con un nmero que ha sido almacenado como string. Se Aprender a abordar un problema relativamente complejo de strings, simplificndolo
trata de ver la ventaja de almacenar un nmero en una cadena cuando se quiere mediante el uso de funciones.
trabajar con sus distintas cifras, ya que cuando hacemos esto cada dgito del nmero
y la coma decimal si la tiene - queda guardado automticamente en cada una de 4.5.2 Enunciado 5
las posiciones de la cadena.
Hacer un programa que pida por teclado una cadena de caracteres y muestre por pantalla si
4.4.2 Enunciado 4 se trata de un palndromo o no. Un palndromo es una cadena que se lee igual de izquierda
a derecha que de derecha a izquierda. Por ejemplo: Dbale arroz a la zorra el abad
Realizar un programa que pida por teclado un nmero entero con un mximo de N dgitos y
visualice un mensaje que indique si es capica o no.
Ejemplos de ejecucin: (para N = 250)
Ejemplos de (para N = 5)
ejecucin: DADO UN NUMERO MUESTRO SI ES CAPICUA O NO. DADA UNA CADENA MUESTRO SI ES UN PALINDROMO O NO.
Introduce un numero de HASTA 5 cifras y pulsa Intro: 1231 Introduce una cadena (mximo 250 caracteres):
El numero 1231 NO es CAPICUA. Sara Baras
Es PALINDROMO
Conchi Presedo Garca EUITI Bilbao 2015 65 Conchi Presedo Garca EUITI Bilbao 2015 66
LABORATORIO 10 FUNDAMENTOS DE INFORMTICA LABORATORIO 10 FUNDAMENTOS DE INFORMTICA
4 EJERCICIOS
Trabajar adecuadamente con ficheros. 1. Escribir un programa que nos permita almacenar en el fichero float.txt los datos
Utilizar funciones que manejen ficheros. introducidos por el teclado. El programa debe finalizar cuando se introduzca un
Entender la diferencia entre los ficheros y las variables que los manipulan. nmero negativo.
Entender la diferencia entre los ficheros y los nombres de los ficheros. 2. Ejecutar el programa.
Utilizar los ficheros realizando acceso secuencial y directo. 3. Comprobar que los datos introducidos por teclado se corresponden con los datos
Comprobar la utilidad de la utilizacin de ficheros. almacenados en el fichero.
4. Ejecutar el programa por segunda vez y comprobar los resultados.
5. Modificar el programa para que los datos introducidos se aadan al final del fichero.
2 MOTIVACIN
3 USO DE FICHEROS EN C Escribir un programa cclico que permita introducir datos desde el teclado, para luego
almacenar dichos datos en un nuevo fichero.
Los prototipos de las funciones que podemos utilizar en este laboratorio son los siguientes:
Lo primero que tenis que hacer es escribir un breve programa de introduccin de datos.
FILE *fopen(char nombre_fichero[], char modo_apertura[]); Podis utilizar cualquier programa de los que habis escrito hasta ahora que solicite datos
int fprintf(FILE * fichero, char formato[], ); numricos del usuario y finalice al introducir un nmero negativo.
int fputs(char cadena[], FILE *fichero);
int fscanf(FILE * fichero, char cadena[], ); Despus de ejecutar el programa, los datos que habis introducido deberan estar
char *fgets(char cadena[], int n, FILE *fichero); almacenados en el fichero float.txt. Eso lo podis comprobar abriendo el fichero desde el
int fclose(FILE *fichero); entorno de desarrollo o bien desde el explorador de Windows.
int fseek(FILE *fichero, long pos, int modo);
int feof(FILE *fichero); Recordar que para almacenar los datos en un fichero, podis utilizar la funcin:
char *strerror(int error);
int rand(void); int fprintf(FILE * fichero, char formato[], );
void srand(unsigned int semilla);
pero para ello necesitis con anterioridad disponer de una variable fichero, a la cual le
podis asignar valor al utilizar la funcin:
Conchi Presedo Garca EUITI Bilbao 2015 67 Conchi Presedo Garca EUITI Bilbao 2015 68
LABORATORIO 10 FUNDAMENTOS DE INFORMTICA LABORATORIO 10 FUNDAMENTOS DE INFORMTICA
4.3.2 Enunciado 3
4.2 Ejercicio 2 Almacenamiento del juego de caracteres ASCII
Escribir un programa que utilizando los datos del fichero float.txt obtenga su suma y su
4.2.1 Objetivo 2 producto. Para ello definir dos funciones una para la suma y otra para el producto, con
prototipos similares a los siguientes:
Almacenar en disco datos generados por el programa.
Observar que existen algunos caracteres que no tienen representacin visible. float sum_fich (char nomfich[]);
float mult_fich (char nomfich[]);
4.2.2 Enunciado 2
Escribir un programa que almacene en el fichero ascii.txt el juego de caracteres ASCII. Ejemplo de ejecucin:
SUMA Y PRODUCTO DE LOS VALORES GUARDADOS
Ejemplo de ejecucin: EN EL FICHERO float.txt
CODIGO ASCII CARACTER
Suma de los numeros: 83.24
Comprende
Producto de los numeros: 87646.87
cdigos de 0 a 65 A
127 (7 bits) e 66 B
incluye las letras
67 C Comprobar que podemos eliminar los decimales en el fichero float.txt y el programa
correspondientes
al ingls 68 D funciona correctamente; es decir, podemos introducir los datos tanto con representacin
entera como con representacin decimal.
1. Generalizar el programa anterior para recibir desde el teclado el nombre del fichero
que deseamos utilizar.
Modificar el programa para que almacene el juego de caracteres extendido.
Recordar que algunos de los caracteres, aquellos cuyo cdigo es menor que 32, no son Utilizar el fichero float.txt obtenido anteriormente para editar o aadir nuevos valores.
representables grficamente en la pantalla (por ejemplo el carcter 8 no se visualiza y
suena un pitido). El fichero debera tener un aspecto similar al siguiente:
.
4.4 Ejercicio 4 Almacenamiento de nmeros aleatorios
65 A En este caso los cdigos van de 0
66 B 4.4.1 Objetivo 4
a 255 (8 bits) e incluye las letras
67 C correspondientes al castellano. Por
68 D Comprobar la utilidad de la generacin de nmeros al azar para obtener datos
ejemplo existen cdigos para cada
69 E almacenados en ficheros que sern utilizados posteriormente para la realizacin de
letra con acento y la ee (164 es
test de programas).
y 165 es )
76 L
Conchi Presedo Garca EUITI Bilbao 2015 69 Conchi Presedo Garca EUITI Bilbao 2015 70
LABORATORIO 10 FUNDAMENTOS DE INFORMTICA LABORATORIO 10 FUNDAMENTOS DE INFORMTICA
4.4.2 Enunciado 4 del autobs, que indicar el estado del asiento. As, en cada asiento para viajeros se pondr
un 0 (libre) o un 1 (ocupado) dependiendo de un nmero que habremos de generar
1. Escribir una funcin que almacene en un fichero, cuyo nombre ha sido proporcionado aleatoriamente. Si el nmero generado es par pondremos un 0 en esa posicin del autobs
por el usuario, una secuencia 100 de nmeros generados al azar mediante la funcin y si es impar pondremos un 1.
rand(). Una vez creados todos los asientos, deberemos visualizar el fichero resultante como aparece
2. Utilizando los datos del fichero, escribir una funcin que proporcione el valor medio, en el ejemplo de ejecucin, es decir, 4 asientos por fila.
la varianza y la desviacin tpica.
3. Construir un fichero denominado semilla.txt que contenga un valor entero.
4. Modificar la funcin del punto primero con el fin de almacenar diferentes secuencias
de nmeros, usando el valor de la semilla almacenado en semilla.txt
4.5.1 Objetivo 5
4.5.2 Enunciado 5
Se debe generar un fichero que contenga tantas posiciones como asientos disponga el
autobs. A la hora de crear el fichero iremos escribiendo libre u ocupado en cada posicin
Conchi Presedo Garca EUITI Bilbao 2015 71 Conchi Presedo Garca EUITI Bilbao 2015 72
ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA
Cada plantilla de proyecto crea y mantiene un archivo de proyecto para almacenar los
metadatos especficos del proyecto en cuestin. Mientras trabaja en el entorno de desarrollo
ANEXO integrado (IDE), la plantilla crea y mantiene dicho archivo de proyecto por el usuario. La
MANUAL DE MS VISUAL STUDIO PARA C/C++ extensin y el contenido real del archivo de proyecto vendrn determinados por el tipo de
proyecto que se defina.
Microsoft Visual Studio es un Entorno Integrado de Desarrollo que permite desarrollar EL EXPLORADOR DE SOLUCIONES
aplicaciones en varios lenguajes de programacin. Es un software de propietario, sin El Explorador de soluciones proporciona una vista grfica de toda la solucin que le ayuda a
embargo existen maneras de conseguirlo de forma gratuita: administrar los proyectos y archivos durante el desarrollo de la aplicacin.
Por un tiempo limitado: Cualquiera se puede descargar una versin de prueba El Explorador de soluciones, una interfaz para ver y administrar estos contenedores y sus
(vlida durante 30 das) en http://www.microsoft.com/spain/visualstudio elementos asociados, forma parte del entorno de desarrollo integrado (IDE).
Sin lmite de tiempo: Teniendo una licencia acadmica de Microsoft MSDNAA. Muchas
universidades poseen este ltimo tipo de licencia para profesores y alumnos.
SOLUCIONES
Las soluciones administran la manera en que Visual Studio configura, genera e implementa Figura 3. El entorno integrado de desarrollo MS Visual Studio 2010
conjuntos de proyectos relacionados. Una solucin incluye uno o varios proyectos ms los
archivos y metadatos que ayudan a definir la solucin como un todo.
Visual Studio 2010 almacena la definicin correspondiente a una solucin en dos archivos:
.sln y .suo. En versiones anteriores de Visual Studio, se almacenaba en los archivos de
grupo (.vbg) o de rea de trabajo (.dsw) en Visual Basic y Visual C++, respectivamente.
PROYECTOS
Para organizar los elementos y realizar tareas comunes con los elementos que est
desarrollando, los proyectos de Visual Studio se utilizan como contenedores dentro de una
solucin a fin de administrar, compilar y depurar lgicamente los elementos que componen
la aplicacin. El resultado de un proyecto suele ser un programa ejecutable (.exe), un
archivo de biblioteca de vnculos dinmicos (.dll) o un mdulo, entre otros.
La manera ms fcil de crear y administrar los proyectos es utilizar las mltiples plantillas y
configuraciones predefinidas en Visual Studio.
Conchi Presedo Garca EUITI Bilbao 2015 73 Conchi Presedo Garca EUITI Bilbao 2015 74
ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA
Antes de empezar a trabajar con Visual Studio y C/C++ Funcionamiento bsico de MS Visual Studio
CREAR UN NUEVO PROYECTO VACO PARA TRABAJAR CON C/C++ Cmo Editar un programa
Si todava no hemos creado ningn proyecto, debemos crear un proyecto vaco del tipo
Aplicacin de consola Win32. ABRIR EL PROYECTO QUE LO VA A CONTENER
Entrar en Visual Studio y
En una Aplicacin de consola habitualmente el diseo no tiene interfaz grfica de usuario En la pgina principal buscarlo en Proyectos Recientes, o bien
(GUI) y se compila en un archivo ejecutable. En un Proyecto vaco la plantilla crea la
estructura de archivos necesaria para almacenar la informacin sobre la aplicacin. Las Men Archivo Abrir Proyecto y hacer doble clic en el .sln o el .vcxproj
referencias, archivos o componentes se deben agregar de forma manual.
CREAR UN ARCHIVO NUEVO EN UN PROYECTO
Como ejemplo vamos a crear un proyecto vaco llamado labo1ejer2:
Entrar en el proyecto y seleccionar Men Archivo Nuevo Archivo
En el Men Archivo seleccionamos Nuevo proyecto
En las plantillas de Visual C++ elegimos Archivo C++ (.cpp) le ponemos un
Aparece una pantalla con las plantillas predefinidas:
nombre y damos a Aceptar.
En el explorador de soluciones podemos ver todos los ficheros de nuestro proyecto.
Seleccionamos Visual C++ Win32 Aplicacin de consola Win32 Por ejemplo, si creamos un archivo nuevo llamado labo1ejer2 en el proyecto vaco creado
Especificamos en el cuadro de dilogo algunas de las propiedades del nuevo proyecto: su anteriormente tendramos:
Nombre, Ubicacin y Nombre de la solucin que va a contener el proyecto y damos a
Aceptar.
Aparece la pantalla de configuracin de la aplicacin, marcamos Proyecto vaco y damos a Figura 5. Detalle del Explorador de soluciones
Finalizar.
Y una nueva pantalla en la que deberemos teclear el cdigo fuente del programa:
Conchi Presedo Garca EUITI Bilbao 2015 75 Conchi Presedo Garca EUITI Bilbao 2015 76
ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA
Conchi Presedo Garca EUITI Bilbao 2015 77 Conchi Presedo Garca EUITI Bilbao 2015 78
ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA
Conchi Presedo Garca EUITI Bilbao 2015 79 Conchi Presedo Garca EUITI Bilbao 2015 80
ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA ANEXO. Manual de MS Visual Studio para C FUNDAMENTOS DE INFORMTICA
Si queremos que haga tambin paso a paso alguna de nuestras funciones, deberemos Detener la depuracin
combinar la depuracin por procedimientos (F10) y la depuracin por instrucciones (F11) En cualquier momento podemos salirnos del modo depuracin con:
segn nos convenga:
Men Depurar Detener depuracin, o bien
Men Depurar Paso a paso por instrucciones, o bien Myus. + F5
F11.
Control de la depuracin
Visualizacin en el cdigo fuente Cuando depuramos existen varias maneras de hacerlo, que se pueden combinar entre s
Podemos visualizar el valor contenido situndonos con el cursor sobre la variable o como ms nos convenga.
seleccionando la expresin directamente en el cdigo fuente. Instruccin a instruccin:
Paso a paso por procedimientos (F10): Ejecuta la siguiente instruccin del
programa (la flecha amarilla). Cuando dicha instruccin contiene una llamada a una
funcin, dicha funcin se ejecuta completamente , es decir, no se hace paso a paso.
Figura 14. Visualizacin de valores en el cdigo fuente Esta posibilidad es muy til cuando estamos seguros de que esa funcin no contiene
ningn tipo de error.
Visualizacin del contenido de las variables
Paso a Paso por instrucciones (F11): Ejecuta la siguiente instruccin del
Para ello existe la ventana Variables locales, en la que se aaden automticamente todas
programa. Si dicha instruccin contiene una llamada a una funcin el ndice de
las variables del programa en el momento en que ejecutemos su declaracin.
ejecucin (la flecha amarilla) se situar en la primera sentencia de dicha funcin
En el ejemplo, despus de declarar las variables tendramos:
para ejecutarla paso a paso.
Hasta un punto determinado del cdigo fuente:
Ejecutar hasta el cursor (Ctrl+F10): Ejecuta sentencias hasta el lugar donde
se sita el cursor.
Mediante puntos de ruptura:
Punto de interrupcin : Se crea haciendo un clic en el margen gris de la lnea
de cdigo en la que queramos insertarlo. Esto har que quede marcada la instruccin
Figura 15. Visualizacin de valores en la ventana Variables locales con un punto rojo, indicando que se ha insertado un punto de ruptura que obligar al
depurador a detenerse. Para eliminar los puntos de ruptura basta realizar un doble
Visualizacin de otras expresiones que nos interesen clic sobre el punto.
Iniciar depuracin o Continuar (F5): Ejecuta instrucciones hasta alcanzar el
En MODO DEPURACIN tambin podemos incluir otras expresiones que nos interese ver siguiente punto de ruptura. Cuando no hay puntos de ruptura situados despus de la
utilizando la ventana Inspeccin 1. Para ello, seleccionamos la expresin en el cdigo sentencia actual, se ejecutarn todas las instrucciones hasta finalizar el programa.
fuente
y con el botn derecho del ratn elegimos Agregar inspeccin, con lo que la
expresin se aade a la ventana Inspeccin 1.
Para quitar una expresin de esta ventana, la marcamos y pulsamos Eliminar inspeccin.
Conchi Presedo Garca EUITI Bilbao 2015 81 Conchi Presedo Garca EUITI Bilbao 2015 82
ANEXO. MANUAL DE Dev-C++ FUNDAMENTOS DE INFORMTICA ANEXO. MANUAL DE Dev-C++ FUNDAMENTOS DE INFORMTICA
- Mensaje: Indica el tipo de error detectado por el compilador. Pueden ser errores que
hay que corregir aparecer [Error] al principio del mensaje o simplemente avisos
[Warning].
Conchi Presedo Garca EUITI Bilbao 2015 85 Conchi Presedo Garca EUITI Bilbao 2015 86
ANEXO. MANUAL DE Dev-C++ FUNDAMENTOS DE INFORMTICA ANEXO. MANUAL DE Dev-C++ FUNDAMENTOS DE INFORMTICA
Cmo Ejecutar un programa. donde aparece el nmero de lnea y pulsar el botn izquierdo del ratn en dicha
posicin, o bien Depurar Aadir/Quitar punto de ruptura.
Para ejecutar un programa, previamente compilado, realizaremos lo siguiente: Esto har que quede marcada la instruccin, indicando que se ha insertado un punto de
ruptura (la lnea quedar marcada en rojo) que obligar al depurador a detenerse en
- Ejecutar --> Ejecutar , o bien Ctrl+F10
este punto. Para eliminar los puntos de ruptura se realiza la misma operacin que para
Para realizar compilacin y ejecucin en un solo paso:
marcarlos.
- Ejecutar --> Compilar y Ejecutar , o bien F9 Para depurar el programa entero se debe colocar el punto de ruptura sobre la primera
La ejecucin del programa se realizar en una ventana de consola emergente. instruccin del main.
Opcionalmente se pueden aadir al programa tantos puntos de ruptura como se estime
Por defecto, el fichero ejecutable con extensin .exe - se crea en el mismo directorio conveniente.
donde se almacen el fichero fuente.
2.- Entrar en el modo depuracin. Pulsar , o bien Ejecutar Depurar (bien en
el Men Principal, bien en las pestaas inferiores), con lo que comenzar la ejecucin
paso a paso del programa, indicndose en azul cul ser la siguiente lnea que se
ejecutar. Adems aparecer una ventana de consola para que se realicen las entradas y
salidas que el programa necesite durante su depuracin.
Comenzar la depuracin
Para ilustrar los pasos supongamos un programa en C que pide un radio por teclado y
calcula la longitud de la circunferencia y el rea del crculo correspondiente. Figura 22. Ventana con una depuracin paso a paso en curso
Cuando se quiere aadir una variable a dicha ventana puede hacerse pulsando el botn marcada en azul) se situar en la primera sentencia de dicha funcin/mtodo para
Aadir Watch para despus escribir el nombre de la variable. Como ejemplo, en la ejecutarlo paso a paso.
siguiente pantalla se est observando la variable radio y se est a punto de aadir la - Saltar Paso: Ejecuta instrucciones hasta alcanzar el siguiente punto de ruptura.
variable longitud a la ventana Watch. Cuando no hay puntos de ruptura situados despus de la sentencia actual, se ejecutarn
todas las instrucciones hasta finalizar el programa.
- Parar ejecucin : Detiene la ejecucin paso a paso, sin necesidad de llegar al
final del programa.
En la pantalla que aparece a continuacin se est ejecutando paso a paso el cdigo del
ejemplo, vigilando los valores de las variables: PI, radio, area y longitud. Las
instrucciones de 9 a 12 ya han sido ejecutadas, lo que se refleja en la consola. Al pulsar
Siguiente Paso se ejecutar la lnea 13 del cdigo fuente.
Otra manera de aadir una variable a seguir, esta vez desde el cdigo fuente, es
seleccionar con el ratn la variable en cualquier sitio del programa donde aparezca, dar
botn derecho y pulsar Aadir Watch. Esta ltima forma tambin permite seguir
cualquier expresin, frmula y/o condicin que aparezca en el programa a depurar.
Cuando se observa el valor de una condicin se sigue la convencin que adopta C para
Figura 24. Tras visualizar la longitud en la pantalla
las condiciones, es decir, 0 significa Falso y 1 Verdadero.
Para eliminar una variable, frmula o condicin de la ventana Watch, hay que marcarla
en la ventana, dar botn derecho y elegir Quitar Watch.
- Siguiente Paso: Ejecuta la siguiente instruccin del programa (la marcada en color
azul). Cuando dicha instruccin contiene una llamada a una funcin/mtodo, dicha
funcin/mtodo se ejecuta completamente tras seleccionar Siguiente Paso. Esta
posibilidad es muy til cuando estamos seguros de que esa funcin/mtodo no contiene
ningn tipo de error.
- Avanzar Paso a Paso: Ejecuta la siguiente instruccin del programa. Si dicha
instruccin contiene una llamada a una funcin o mtodo el ndice de ejecucin (lnea
Conchi Presedo Garca EUITI Bilbao 2015 89 Conchi Presedo Garca EUITI Bilbao 2015 90