FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una...

26
Mª CARMEN ARANDA GARRIDO ANTONIO LUIS CARRILLO LEÓN JOSÉ GALINDO GÓMEZ JOSÉ ANTONIO GÓMEZ RUIZ JOSÉ LUIS LEIVA OLIVENCIA FUNDAMENTOS DE INFORMÁTICA UNIVERSIDAD DE MÁLAGA / MANUALES FUNDAMENTOS DE INFORMÁTICA Mª Carmen Aranda • Antonio L. Carrillo • José Galindo • José A. Gómez • José L. Leiva 90 9 788497 472876 ISBN 978-84-9747-287-6

Transcript of FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una...

Page 1: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

Mª CARMEN ARANDA GARRIDOANTONIO LUIS CARRILLO LEÓN

JOSÉ GALINDO GÓMEZJOSÉ ANTONIO GÓMEZ RUIZJOSÉ LUIS LEIVA OLIVENCIA

FUNDAMENTOS DEINFORMÁTICA

UNIVERSIDAD DE MÁLAGA / MANUALES

FUND

AMEN

TOS D

E INF

ORMÁ

TICA

Mª Ca

rmen

Arand

a • An

tonio L

. Carr

illo • J

osé Ga

lindo

• José A

. Góm

ez • Jo

sé L. L

eiva

90

9 788497 472876

ISBN 978-84-9747-287-6

Page 2: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

 

Relación de Problemas 

 

del 

 

Capítulo 4 del libro 

Page 3: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 192

Las llaves pueden eliminarse en el caso de que el cuerpo del bucle esté formado por una única instrucción, siendo obligatorio ponerlas cuando esté formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje C. La sentencia break solo puede utilizarse dentro de una estructura switch, Para evitar bucles infinitos es una buena costumbre comprobar que las variables alcanzarán el valor que utilizamos en las condiciones del mismo.

4.7. EJERCICIOS PROPUESTOS

4.7.1. Nivel fácil

1. Realizar un programa que pida por teclado un número y nos indique si es par o impar. Utilice en la solución el operador %.

2. Realizar un programa que pida por teclado 3 números y nos indique el mayor y el menor.

3. Realizar un programa que pida por teclado el precio de un producto y el número de unidades que se va a comprar de dicho producto. En este comercio se realiza un 10% de descuento si el número de unidades sobrepasa las 10 unidades. En caso de que el precio sea inferior a 20€ no se hace descuento. Si es mayor o igual a 20€ y menor o igual que 100€ se hace un 3% de descuento, y si sobrepasa los 100€ y es menor de 300€ se le hace un 7%. En caso de que sea mayor o igual a los 300€ se le hace un 12% de descuento inicial. Para los casos donde el número de unidades sobrepase las 10 unidades y tenga ya descuento se le aplica un 12% de descuento. El programa debe devolver el precio final que tiene que pagar el cliente.

4. Realizar un programa que lea tres números cualesquiera y nos escribe en pantalla los tres números en orden ascendente.

5. Realizar un programa que lea por teclado cuatro números cualesquiera y nos indica todas sus relaciones de igualdad (si son los cuatro iguales, si dos son iguales y los otros dos no, si hay tres iguales, si son iguales dos a dos y si son todos distintos)

6. Realizar un programa que pida por teclado una fecha compuesta por día, mes y año y nos muestra en pantalla la fecha correspondiente al día siguiente.(Suponemos que todos los meses de Febrero tienen 28 días)

7. Una empresa de correos maneja códigos postales compuesto de números con las siguientes características:

- Cada código consta de cinco dígitos. - Los dos primeros representan la provincia. - El tercero si vale 0 indica que es un código de la capital de la provincia y

los dos siguientes sería el distrito; si el tercer dígito no es cero indica población junto a los dos últimos.

Page 4: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 193

Escriba un programa que lea de teclado un número de cuatro dígitos, almacenándolo en una variable de tipo int, y posteriormente imprima en pantalla la siguiente información.

PROVINCIA & CAPITAL: Sí

DISTRITO && o bien

PROVINCIA & CAPITAL: No

DISTRITO &&& En caso de que el número no tenga exactamente cinco dígitos2, en lugar del

mensaje anterior, habrá que imprimir en pantalla el siguiente mensaje de error:

ERROR: CODIGO INVALIDO.

8. Realizar un programa que sume los n primeros números impares desde la unidad hasta n, contando cuántos múltiplos de 3 existen.

9. Realizar un programa que permita introducir una lista de números (para terminar se introduce el número 0) y nos calcule la media aritmética de todos los números pares.

10. Realizar un programa que pida por teclado un número y nos muestra su tabla de multiplicar.

4.7.2. Nivel intermedio 11. Modifica el ejercicio número 6, teniendo en cuenta los años bisiestos. 12. La constante pi (3.1415...) es muy utilizada en matemáticas. Un método

sencillo para calcular su valor es: Pi=4*(2/3)*(4/5)*(6/7)*...

Realizar un programa que pida por teclado un número de términos y efectúe dicho cálculo.

13. Con objeto de fomentar el ahorro energético, se desea realizar un programa que permita introducir los valores del contador del mes pasado y el del día de hoy y nos calcule el total de la factura, sabiendo que se elabora de la siguiente manera:

2.50 € de gastos fijos 0.20 € para los primeros 100 Kw 0.35 € para los siguientes 100 Kw 0.50 € para los siguientes 200 Kw 1 € para los siguientes Kw.

2 Obligatoriamente el primer dígito tiene que tener un valor entre 1 y 9.

Page 5: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 194

14. Realizar un programa que nos pida por teclado un año inferior a 2100 y nos dice la fecha exacta del domingo de Ramos y el domingo de Resurrección (ver sección 4.5.2).

15. Codifique un programa que se comporte como una calculadora simple

repetitiva. Para ello deberá tener las siguientes características: - Solo efectuará operaciones con dos operandos. - Operaciones permitidas: (+,-,*,/). - Se trabajará con operandos enteros. - Pedirá en primer lugar el operados, y a continuación los dos operandos.

Si el operador no se corresponde con alguno de los indicados se emitirá un mensaje de error a excepción del carácter & que servirá para finalizar el programa.

EJEMPLO: Operación : * Operando 1: 24 Operando 2: 3 Resultado : 72

Operación : / Operando 1: 24 Operando 2: 3 Resultado : 8

Operación : & FIN DEL PROGRAMA

16. El NIF está formado por el DNI y una letra. La utilidad de la letra es poder detectar errores al introducir un determinado DNI. La letra es simplemente un control de errores. El mecanismo es muy sencillo, se calcula el resto de dividir el DNI por 23. El resto que será un número entre 0 y 22 se le asigna respectivamente las siguientes letras: T, R, W, A, G, M, Y, U, P, D, X, B, N, J, Z, S, Q, V, H, L, C, K y E. Se escogió el 23 por ser el primo más grande que es menor que el número de letras. Codificar un programa que pida por teclado un DNI y su letra. El programa debe informar si el DNI introducido corresponde con esa letra y en caso de que no corresponda qué letra le corresponde.

17. Realizar un programa que pida por teclado dos números enteros y nos muestra en pantalla todos los números entre dicho intervalo cerrado. El programa no debe suponer que el primero será menor que el segundo. Además calcula cuántos múltiplos de seis existen en dicho intervalo.

18. Realizar un programa que lea de entrada un texto carácter a carácter hasta localizar un punto y dé como resultado el número de vocales introducidas y el número de caracteres leídos (lea los caracteres uno a uno utilizando un bucle).

Page 6: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 195

19. Confecciona un programa que pida por teclado un texto carácter a carácter y nos indique si se ha leído la cadena ‘abc’.

20. Efectuar un programa que lea los valores de n resistencias electrónicas (en Ohmnios) conectadas (el programa pide que informemos si están conectadas en paralelo o en serie) y muestre en pantalla el valor global.

4.7.3. Nivel avanzado 21. Escriba un programa que lea un número natural N y un carácter. La salida debe

ser un rombo compuesto del carácter y de la anchura que especifica el número N (diagonal horizontal). Por ejemplo, si N es 4 y el carácter es ‘A’, el rombo sería

AA A

A A A A A A A A A A A A A

22. Realizar un programa que lea un conjunto de caracteres terminando en punto.

El programa debe mostrar en pantalla la primera y última posición donde aparece la primera vocal, así como cuántas veces aparece dicha vocal. Por ejemplo, en la frase: esto es un ejemplo., mostraría en la pantalla primera posición que aparece vocal ‘e’ es 1 y la última 14 y el número de veces que aparece es 4.

23. Realizar un programa que permita calcular el combinatorio (m,n), es decir que calcule el número de partes de m elementos que se pueden tomar en un conjunto de n elementos. La expresión es n!/(m!(n-m)!)

24. Realizar un programa que lea un número natural N y nos indique todos sus divisores.

25. Diseñar un programa que encuentre el primer número perfecto mayor que 28. Un número es perfecto si coincide con la suma de sus divisores. Por ejemplo, 28 es perfecto porque 28=1+2+4+7+14. Posteriormente, modifica el programa para que muestre en pantalla los n primeros números perfectos. (No pongas un valor de n muy grande, prueba con 3, 4, etc.)

26. Diseñar un programa que pida por teclado un número natural N y muestre en pantalla su crápulo. El crápulo es el número que se obtiene de la siguiente forma: se suman los dígitos que lo componen. Si el valor de la suma es menor de 10, el crápulo es el valor obtenido; si no, el crápulo es el crápulo de la suma de los dígitos. Por ejemplo, el crápulo de 13 es 4, y el de 493 es 7.

Page 7: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 196

27. Diseñar un programa que pida por teclado una fecha (expresada en día, mes y año) y una hora (expresada en hora, minutos y segundos). El programa debe indicarnos la fecha y hora transcurrido un segundo.

28. Diseñar un programa que invierta los dígitos de un número positivo entero. Por ejemplo, si se introduce el 3456, debe mostrar el 6543.

29. Diseñar un programa que pida un número N en base 10 y una base B. El programa debe mostrar el número N en base B.

30. Diseñar un programa que pida por teclado un número K e imprima en pantalla los primeros K números primos. Por ejemplo si K es 5 mostraría 1,2,3,5,7. (Puede usar el ejercicio del apartado 4.5.5.)

31. El circuito eléctrico que se muestra en la Figura 4.8 es un filtro paso alto que atenúa las señales de baja frecuencia. La razón entre el voltaje de salida, Vout, con respecto al voltaje de entrada, Vin, puede ser expresado mediante la ecuación:

Vout/Vin=(XL)/(R+XL)

donde XL representa la reactancia inductiva del inductor L y puede ser calculada con la ecuación:

XL=2�fL

y f representa la frecuencia del voltaje suministrado Vin. Generar una tabla de valores mostrando cómo cambia Vout/Vin variando la frecuencia suministrada y observa cómo el voltaje de salida se incrementa cuando la frecuencia f aumenta. Si el inductor es reemplazado por un capacitor de valor C faradios, cuya reactancia capacitiva viene dada por la ecuación XC=1/XL, muestra que el circuito ahora se comporta como un filtro paso bajo, atenuando las señales de alta frecuencia. Realiza un programa que pida el valor de R, L, un valor de frecuencia inicial y otro final. Se mostrará por pantalla una tabla con el valor de frecuencia y el valor Vout/Vin correspondiente desde el valor de frecuencia inicial hasta el final. De esta forma se observa cómo varía el voltaje de salida con respecto a la frecuencia. Realiza el mismo programa reemplazando el inductor por el capacitor.

Figura 4.8. Filtro de paso alto que atenua señales de baja frecuencia

Page 8: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

 

Relación de Problemas 

 

del 

 

Capítulo 5 del libro 

Page 9: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

��87�9�����4�0������� ��������� ��:

��� ��������������������

7�������&�/���!�$��$�������#��,������!��$��������� !"����)5���*�� ! !��-���(�� $��)�� ��#���$�� ���� $���� ��$��!��+� 7��� #�&��#$�%� $���#� ��#� �*�� ! !�#� ��������#��,��#���#������������#�������� !"���!#$!�$�����main()+�

������� $��)�� -��� &��)������ ���� ��� !"�� !�$��$�� -��� #�����(� ,��#'$!�%� ��������-���#!�,��������#!$�� !"���'#�)�������&�#!���+�7��������%� $��)����� ���$�����#!)�!��$�4��

• ���$������������ !"���#�&�����!���%����)������%����������!��# �!�!��,�����#+�0�#�,�����#��� �#��!�#�&������&��,��!��&����!#$!�$�#�,;�#� 6��� #"��� ��� �� $�����(���#� ,�����#� ��� #��!��� &������ #��� ��-���!��#� &���� �$��#� �!��#� 6��� #"��� ����# �!$����+�

• ���!��� �!��� ��#� &��'��$��#� ��� ��$����� (� #��!��%� ��*����� �!��� ����� ��� -����� �#!$��(���,���,�������� !"�+�7!��#�� ��� �!��������$!&����� ������)����$��(�#��� �<����$���������������� ����! <�#�$!&�#+�

• �# �!��� ��� ����$��!�� ��$�#� ��� ���� ��� !"�� -��� !��!-��� ��� -��� <� �� ������ !"�� (� #�#� ,�����#� ��� ��$����=#��!��+� �# �!��� �#$�� ����$��!�� ����� ���&��)������������ !"�%�&��#������������!)��'�����$�������!������-���-�!����-���<�)�������� !"�+� ��!-��� �������$����� ���$!������ ������)����$��(�,����������$�������������� !"�+�

• ����#��,��!����#�)������#+��

�!�����*�� ! !����� ��#!���������#!�����!�; !�%�&��������<� ��������'#��' !�%��� �!��%� !�$��$�� #!�&�!�! ��� ��� �*�� ! !�� &���� ��#!������ #"��� ���#� ���$�#� ��� $��;#$! �#� ��� ��� ��� !"�� �� &��)����� 6��� $���#� ����#�+� ������� ��� &��)�������� !���� ��� �#�#� ��� $��;#$! �#� #!�&�!�! ���#%� ,�(�� �>��!����� ��� $��;#$! �#�<�#$�� ��#�)�!���+�� ����� ������������� �&�����$��� ��#� ��� !���#� -��� #!������ ��#� #!)�!��$�#� ��#� ��� !���#�

��$��'$! �#+� ?�)�� ��� &��)����� -��� &!��� ��#� �� �5����#� �����#� ��� ��#���)����$�#��������#���� !���#�(����#$�����#���#���#��$���#4

�6���@����A��B� 6�%���@��C�=����

� � ��� ��#� #!)�!��$�#� ��$��� ���)���$�#� ��� "�!)�%� ��$���!��� ��� ,����� ��� ��#�

,��!����#���������� !"��&�!� !&���6x���y��*�#$����$�#�����!���!/��+����&�����������#��$�����*� �$�������� "�!)����!�&�!�!����������#��$���4

Page 10: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

������������� ����� ������

!" int f (int a, int b) { while(a<b) a++; b--; return a+b; }

int main() { int x=1, y=3; x = f(x,y); }

#" void f (int a, int b){ { while(a<b) a++; b--; }

int main() { int x=10, y=12; f(y,x); }

��" int f (int a, int& b)

{ while(a<b) a++; b--; return a+b; }

int main() { int x=1, y=3; x = f(x,y); }

$" void f (int& a, int& b){ { while(a<b) a++; b--; }

int main() { int x=10, y=12; f(y,x); }

�� �# �!��� ���� ��� !"�� Linea(N,c)� ��� $!&�� void� ��� ��#� ��)����$�#4� ���

��$����N�(���� ��' $���c+�0����� !"���# �!�!�'�N�,� �#���� ��' $���c+���#��#�%�&��������#�#!)�!��$�#��������#�(���# ��������&��-�D����#�#���� $�#4

�� Linea(5,'X');��� Linea(3.9,'X'); /* Un número real */� � Linea('A',65); /* ¿Argumentos cambiados? */��� Linea(1E1,'P'); /* Notación científica */�

%� �# �!������� ��� !"��-��� $��)�� ������)����$�#� ��#�,�����#������ ��#!#$�� !�#�

��� $�"�! �#� 6��� <�!�#%� �+� 0�� ��� !"�� ��,��,��'� ��� ,����� ��� ����#���#!#$�� !�#�#!�#�� ��� $��������&�������%���� ����#�� �� ����&��4�:�=�6:=�:�A�:=���+����&��)�����&�!� !&���&��!�'����,������������#!#$�� !�#���!�'���#$���������,�������� ��� ��#!#$�� !�� )������ ���� #!� #�� ������� ��� $����� �! <�#� ��#!#$�� !�#� ��������,���#!�������;��#+��#��%����&��)�����&��!�'�&�!���������5������������#!#$�� !�#� �� ��� $��� ��� &�������+� ��#&�D#� &��!�'� ���� �� ���� ��#� ,�����#� ���

Page 11: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

��87�9�����4�0������� ��������� ���

$���#� ��#� ��#!#$�� !�#�(%���� ����&�#�%��&�! ����� ��� ��� !"���# �!$����#$���'������#��$������� ��� $��� ������,����#!#$�� !�����&�������� ��� $���#� ��#���$��!���#+����&��$�$!&���� ��� ��������#$����� !"��#��'4

float Paralelo (float r1, float r2);

� �# �!���������� !"��&����&������$!�!/�������&��������")! ��E��6��������������

����.&��#!���#+��#$���&��������!���!��#���,��5�� ����,������#!�����(�#"���������� #�#� ��#� �&������#� �#� ,�����+� ��� �#�� ��$���!�� #�� �,��5�� ���� ���#�+� 0����� !"��$����'���#���)����$�#���$���#�&����#�#��&������#�6��#!)�!�! �����#��(�:�#!)�!�! �� ,������� ��,��,!����� ��� ,����� ��� ,������ ��#��$��$�� ��� ��� �&��� !"��E�+��������$��)�������� !"�%�&��D����� ����.&��#!���#� �������#!)�!��$�4

if (XOR(a<0, b<0)) ...�� ��&��)��-���$�����#�&��)������#���#���� !���#� �����#�#!)�!��$�#�&��$�$!&�#%�

(� $�����#� ����'#� ��� #!)�!��$�� �� ���� !"�� ��� ,��!����#4� int a, b, c;����/����#!� ��#�#!)�!��$�#�#��$�� !�#�-����$!�!/����#�#���� !���#�#��� ���� $�#������#�#%� $��!����� ��� ���$�� -��� #��� ���� $�#� ��#� &�!����#� !� �� (� ���#�#� ��#�#!)�!��$�#+�?�)��&�-��>�#�&��)����#����&������&����,��!�! ����+

� void Primera (int Y, int& X); int Segunda (int X, int Z); float Tercera (float x, int& y, int z);

�� Primera(a,b);��� a=Segunda(5,6);� � Primera(Segunda(a,3),b);��� Tercera(4.3, b, Segunda(b,b));��� Tercera(2, b, c);��� Primera(a,6);�)� a=Segunda(3, Primera(b,c));�<� Tercera(3.4, Segunda(5,6), c);�!� Tercera(3.4, 5, Segunda(5,6));�*� Segunda(5, Tercera(3.14,b,c), a);�

&� �# �!�!�� ���&��)�����&���� ��,��$!�� ��#� ���������#� �� $��)�����#� 6�%��� ������

&��$�� �� ��� �����$�� &����� 6�%α�+� ����#� ��#� &�#! !���#� 6�%��� ��� ��� #!#$���� ��$�#!������� ���������#%�#������� �� ���������!#$�� !������#��������!)������#��&��$�%� (� ��� '�)���� α� ��#��� ��� �*�� E+� 0�#� ,�����#� 6�%α�� #��� ��#� ���������#�&�����#�����&��$�%�(�#�� �� ������#;4

Page 12: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

������������� ����� �����F

�.#!$��G :�� ≠���

���=+= −

����� α �

0��#!)�!��$����� !"�� �� ������#� ���������#�&�����#�6�%���&��$!�����6�%��4��

void polar(float x, float y, float& r, float& alfa) { float agrados = 180 / 3.141593; r = sqrt(x*x + y*y); alfa = atan(y/x) * agrados; }

�0��,��!�������������agrados�#���$!�!/��&���� ��,��$!�����)����#%���#����!���#���,���$�#�&��������� !"��atan()����math.h%�-��� �� ��������� ��$��)��$�+���� ?�)�����&��)��������&������&���������� !"�%�-���&!�����#���#�,�����#����

��#� ���������#� ��$�#!���#������%��������������� !"��(��# �!���&���&��$�������#� ���������#�&�����#+��

�� 0����� !"����� ��&������#!������� !"��atan()�#��&���������!/��%��#��� !�%�#!����#��!#$!�$����� ���+����!�!-��������� !"����$��!���&����-��� ��&������#!���,������(�����#�� �#����,���,��H��"��I��)����#���&���!���������#!)�������+�

'� �&�����$���������� !"�� �����#���)����$�#%�Digit(N,num)�-�����,���,��

����;)!$��NJD#!����������5�����num����$!&��long unsigned int%�$��!�������� ���$��-�������;)!$�����#�����;)!$���'#���������� <��6�������#�#!)�!�! �$!,��+�0����� !"����,��,��'�K:�#!�����5��������$!����#��! !��$�#��;)!$�#+��*��&��4�0��#!)�!��$������������,��,��'��4�Digit(2,12345)

(� �#����������� !"�������*�� ! !����$��!��%�&��)������$������ !"��-�����,���,�����

&�!���� (� ��� 5�$!��� �;)!$�� ��� ��� �5����� N� -��� #��'� #�� &�!���� ��)����$�+��#��,�� -��� $!���� -��� ��,��,��� ��#� ,�����#%� &���� ��� return� #"��� &�������,��,��#�� ���%� &��� ��� -��� $!���� -��� �$!�!/��� ��� &�#�� ��� ��)����$�#� &���������� !�+��# �!��������� !"�������#������#��!#$!�$�#4�� ��,��,��� ��� ,����� ��� return%� (� ��� �$��� �$!�!/����� ��� #�)�����

��)����$��6&���������� !��+��� ��,��,�������#�,�����#�������#�)�����(�$�� �����)����$����#&� $!,����$��

6����#�&���������� !��%����������-��������� !"��#��'����$!&��void+�7������ ����#� ��� !���#� (� ��$�� ��� �!����� !�� ��� ��� ������ ��� ������� �� ����#���� !���#�-���<�#$�� $!������!#$!�$���5�������� ��)����$�#4�0��&�!�����<������#��#����������.&��#!"��6&�����# �!�!�������#��$�������#!)���������#��$����������,��!�����%��!��$��#�-������#�)�����#���#��'� ��������#��$�� !��!��!,!����+�

Page 13: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

��87�9�����4�0������� ��������� ��C

�)� �# �!��� ���� ��� !"�� -��� �� ���� (� ��,���,�� ��� #���� ��� ��#� �;)!$�#� ��� ����5����� -��� #�� &�#��'� ���� 5�! �� ��)����$�+� 7��� �*��&��%� ��� #���� ��� ��#��;)!$�#������5�����:��F��#�:�%�(����#���������#��;)!$�#���������#�I+�?�)���#$����� !"�� �#����� ��� ��� !"�� Digit()� ��� ��� �*�� ! !�� ��$��!��� (� #!�� �#����!�)���� �$��� ��� !"�� � �#��!�+� �$��$�� ��# ���!�� ���� ��� �#$�#� ��#� ,��#!���#�����!/������#��&��� !���#+

���� ��������*+�$�,��� 0�#� ��#!#$�� !�#� ��� $�"�! �#� #������ !�� !���$!�! ���#� &��� ��� "�!)�� ��� �����#�

-��� &���!$�� ��� ��� ���� ��#!#$�� !�� ��� #�� ,����� 6��� <�!�#%� �� (� #�������� !��6���L�+��#$�� "�!)����� �����#�,!������&��#��$���������������C+F+

������� ���� � ���������� ���������� �!�)���� � ��L� 7��$�� �+�:� :�L� ��� �+:� CL�) ��)��� :� �� ����"�� :�� � ��*�� :��� �L�� �����*�� :��� �% ����!���� :�F� � 2����� :�C� �� �/��� :�M� �& 2!���$�� :�I� �' 9�!#� � �( 8��� �� � �

�!#�! �%���"�!)����� �����#�&������#���#!#$�� !�#��&������� ���#��,�����6���<�!�#%���(�#�������� !��6���L�

� ��� "�!)��-���#�������&����#�������#���#!#$�� !�#��#���� "�!)�����F� �����#%����������-��� ������#!#$�� !���#$'���� ���� ���F������#���� �����#+������������$!�������#!)�!�! ���%�-�����&�������� ���� ����4�

• 0�#�&�!����#��������#�!��! �������5�����������;)!$�#4��#�#���#��;)!$�#�,!���������#�&������ ���������#�#������#%�#�)5����� �������N�;)!$�N�������$����+�

• 0��$�� �����������#����,�����&������-���#�����$!&�! ��'�����5�������$��!���&�����#������#���$��!���#+�����,�/����$!&�! ���#�����#�,�����#%���$�����#����,�������������#!#$�� !�����<�!�#�6Ω�+�

• 0�� ���$��������!��! �����$������ !����������#!#$�� !��(%� ����&�����,��#��������$����%����&�����#������ ���-�!��� ����+�

�*��&��4� ���#� ��#!#$�� !�#� ��� ��#� #!)�!��$�#� �����#%� $!����� ��#� ,�����#� �����#!#$�� !��(�$������ !��-���#��!��! ��4�2����J�/��J����!���J��%�CM�OΩ%�CLG���*�J��)��J��*�J��*�%��OΩ%��LG���*�J��*�J����"�J7��$�%����Ω%�:�L+

Page 14: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

������������� ����� �����M

��)5�� $���� ��� ��$��!��%� !�&�����$�� ���� ��� !"�� -��� &���!$�� �� ����� �����#!#$�� !��(����$������ !�����������#!#$�� !�%�#��!�������#� "�!)�#���� �����#+����#��&��)�����$����'%� �����;�!��%�F���)����$�#%�-���#��'���5����#���$�����#%�(�-���!��! ��'����� ����������#������#�#�)5����� �������P�;)!$�Q+�0�#� �����#���%� 7��$�� (��!�)���� $����'�� ��#� ,�����#� :�%� ::� (� :�� ��#&� $!,����$�+� 7������ !�!$��������$����������$�#%� !�&�����$���$������ !"��-������#$���&���&��$���������;)!$��-������ ����#&������� ���� �����6!� ��(�������#��;)!$�#�:�%�::�(�:��+�

� � ����!/������� ��� !"��Fibonacci(n)� -��� �� ������� $D��!���nJD#!������ ���

#� �#!"�����-�#,!���%� ��� ������&!�/�������(�:%�(� �������,�� $D��!����#� ���#������� ��#���#���$��!���#4��%�:%�:%��%��%�C%�R%�:�%��:%��F%�CCS����������$��&�����#����!�!���#$��#� �#!"���#;4

fibonacci (0) = 0 fibonacci (1) = 1 fibonacci (i) = fibonacci (i-1) + fibonacci (i-2)

�!#�>���$���!D�����&��)�����-���� �&$��,�����#����n���#������$� ����%��$!�! �������� !"����$��!���(��# �!��������#��$����������&��$����+����&��)������!���!/��'� ������#��!�$����/ �����,�������)�$!,�+��

��� 7��)����� ���� ��� !"�� �������� MCD()� &���� �� ����� ��� �'.!��� ���5���!,!#��������#��5����#���$�����#�-��� #��'��#�#���#�5�! �#� ��)����$�#+��������������<� ������#�&��)����������� ���&������-��%��!��$��#�����#��5����#�#�����!#$!�$�#%������(��������#$����������+����$���!��������� ��%��������#��'�����5�������#��$��$������#�#���#$�#�#� �#!,�#+

�%� �# �!���������� !"��-��� �� ��������;�!������5���5�$!&���6������#��������

��� !"�� ��$��!��%� #��!����� -������6�%��� @����6�%��� =� 6�T��+� �# �!��� �$������ !"��-�����,���,������#�,�����#�6����(�����+

� � �# �!�!�� ���� ��� !"�� CuentaChars()-��� ���� ���� #� �#!"�� ��� ��� $���#�

6�����������<�#$����������&��$�+�0����� !"�� �� ����'����&�#! !"��������&�!�����(� ��� 5�$!��� � ����� !�� ��� ��� ��$���!����� ��' $��� ch+� 0�� ��� !"�� $����'� ����)����$�#4����&�!�����#��'���� ��' $���ch�(���#���#�#!)�!��$�#�#��'���$!�!/���#�&���� ��,��,��� ��#� ,�����#� !��! ���#� 6�#����� ��� &�#�� ��� &��'��$��#� &���������� !��+� ����#� ,�����#� #��'�� ���� #!� ch� ��� �&��� �� �!�)���� ,�/� ��� ��� ������ ��� ��� $���#� ��;��+� ����'#%� ��� ��� !"�� ��,��,��'� 6 ���return�� ����5��������,� �#�-����&��� ����� ��' $���ch+����&��)��������&������&�!� !&���#!�&�����$�� ����'� ��� ��' $���ch%� ������'� �� ��� ��� !"��CuentaChars()� (���#$���'���#���,�����#���#��$��$�#+�

Page 15: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

��87�9�����4�0������� ��������� ��I

��� �# �!�!�� ���� ��� !"�� sumanumeros()� -��� ���� ���� #� �#!"�� ��� �5����#�#�&�����#� &��� �#&� !�#� (� � ������ ��� ��� &��$�+� 0�� ��� !"�� ����� ��,��,��� ���#�������$���#���#��5����#�������#� �#!"�+��#$����� !"��$����'�$��#���)����$�#4���� &�!����� #��'� ��� ��' $��� -��� ��$!���� ��� �;)!$�� 6���� �� ��� H�%� ��� #�)�������)����$����,��,��'�����5��������,� �#�-����#���;)!$���&��� ����� ��� �����������$�����(����$�� �����)����$����,��,��'���� ��$!��������5����#�-���#��<���#������������ �����������$����+��#��,��-�����#���#�5�$!��#�&��'��$��#�������#��� &�#���#� &��� ������� !�+� 0�� ��� !"�� ����'� ��#� �5����#� ���� �� ���� ���� ��� $���#%���!�'�!���$!�! �����#��&�#! !"�� ������$!,����$�+���$� $��'�������,���5�����������������#&� !��(��!���!/��'������������&��$�+7����*��&��%���� �����������$�����&�����#��4���22 18 1122 8.��0����� !"��#��'��#�����#;4�

suma=sumanumeros('2',nveces_digito,total_numeros);

���$���!��������*� � !"���������!#���$�������#���#�#!)�!��$�#�,�����#4����suma�,����'�::I��6�#��� !����A:RA::��AR�%�nveces_digito�,����'�F%� 6�#��� !����� �� �&��� �� F� ,� �#�%� (� total_numeros� ,����'� F%� �#� �� !�� <�(� ��$����5����#���������$����+����)���� !�4� 7��)����� ��� ��� !"�� &� �� �� &� �%� ��$�'���#�� ��� ��� �#&� $�� ��� ����&�#�+

�&� �# �!�!�� ���� ��� !"�� -��� ������� $��#� �5����#+� 0�� ��� !"�� $����'� #�!#�

��)����$�#%���#�$��#�&�!����#�#��'����#��5����#����������%�(���#�$��#�#!)�!��$�#�#��'�������������� !"����,���,���#�#�$��#�,�����#������������������+

�'� ��$$�$��(��U�&��O���6:H�CJ:HRM�����������$��'$! ��!��!��-������ ���# �!�!"�

����������$���!,���(� #�#� $����*�#����<����������!)������!�)���� !�,�#$!)� !"���#&� !��� �!� $!����� �!�)���� �$!�!���� !�&��$��$�%� &���� #��� #��&������$�#� (���!)!����#+���$���#�#�$����*�#��#$'����#!)�!��$�4

• ���)!�� ��� �5����� ��� ��$��� !���#�A� 6��� $���#� !)����#� (� ��� ��� -��� ��#�&�!����#�&������#��� ���#�+��

• ������� ��#� !���#������5�����A���������� �� !��$��B�(� ���)������������� �� !��$��C+��

• ��#$�������#��5����#4�D = C - B+��• 2��,��� �� ��&�/��� &���� ��#!�������� �<���� ��� �5����� D� 6��� ,�/� ����

�5�����A�+��

0�� ��!�#���#�-���!���&���!��$����$�������5�����A����)!��%�����!����#!��&���#�����)������!#����5����+�?� ������&��)�����-����,��!)����#���5������!����6M:IF�+� ��)��!��#� �#$�#� ��#�#� &���� ��� &��)����4� 7�!����� <� ��� ���� ��� !"��

Page 16: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

������������� ����� �����R

KaprekarOrden(A)� -��� ����� ��� �5����� A� ���� 5�! �� ��)����$�%� ��#���,���,�� ��� �5����� D+� �#�� ��� !"�� #"��� ��� $���'� ��� ! ��+� ��� &��)�����&�!� !&��� &��!�'� ��� �5����� (� �&�! ��'� ��� ��� !"�� #� �#!,����$�� <�#$�� -��� �����#��$���� ��� ��� ��� !"�� #��� !)���� �� #�� ��)����$�%� �#� �� !�%� <�#$�� -��� (�� ���$��)��#��$!���#�)�!���&�! ����������� !"��&��-���#!��&�����$�����#�����!#����5����+� ��� �#�� �����$�� ��� &��)����� ��#$���'� �#�� �5����� (� $���!���'+���#$���� $���!D�� ��� �5����� ��� &�#�#� �� �#��!�#� &���� ��$����� �#�� �5����� ��&��$!�������5�������!)!���+�

�(� $���!�������U�&��O����#� �)�������5����������C� !���#�-����!,!�!��#������#�&��$�#%�����8� �����#���&�!����#� !���#�(��$����� �����#���5�$!��#+����#������������#��5����#�8�(��%���#&�� !��������� ������#!�#��#�&��������5�������� !���#�!�! !������8�(��+� �,��$!�� ��#���#��5����#�&��!����������$����������#� !���#%��8%� ��$��!����� ��� ���,�� �5����� ��� C� !���#+� �<���� ,��,��� �� ��&�/��%���&!$!����� ��� &�� �#�%� <�#$�� -��� ��$��)���#%� ��� ���,�%� ��� �5����� !�! !��%� ��$����� ��� �5����� ��� &�#�#� -��� ,���#� �����+� 7��� �*��&��4� �� &��$!�� �����5�����FC::�%�U�&��O�����# ���!"�-���#����$!��������5�����!�! !�������FCMR��$�&�#4�FC::�%�:CFC�%�CC:CM%�CRCC�+++

)� U�&��O��� $���!D�� ��# ���!"� -��� ��)���#� �5����#� ��� ���,����#� ��� �������� (�

&��$!�� ��� ��#��$���� ��� ��#� &��$�#� ��� �� �;)!$�#%� #!� #�� #����� �#�#� ��#� &��$�#� #����$!��������5�����!�! !��+�7����*��&��%��HI%� �(�� ���������#�RR��H%�#!��<�����!,!�!��#������#�&��$�#�(���#�#�����#���$�����#�-��4�RRA��H@�HI+��!����#�#��5����#� ��#� �������#� �5����#� ��� U�&��O��%� &��)����� ���� ��� !"�� -��� �� ����(����#$���$���#���#��5����#����U�&��O���������#����%����������#����,�������$�����-���#��!�$���� �� ����5�! ����)����$����������� !"�+

�� ����� �����!�!.!$,�� �� ����!/������&��)�����-���#!��������#!)�!��$��*��)�4����*�)�����$!�����#�����#+�

�!�������&�!�����$!��������#���������#���#��#�I���::����*�)�����)���+��!��#��%���"�:�� &!����+� �!� �#� ���-�!����$��� &��$�� !"�� ��� *�)����� ����� #�)�!�� $!������ ��#�����#�<�#$��-����!�����&!$�����&�!�����&��$�� !"����� �(�� �#��)�������&��$!��%����!���#��)�����I�(�&!����+�7���������������#������#!)�!��$����� !"��-���#!��������$!����������#�����#+

Page 17: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

��87�9�����4�0������� ��������� ��H

/* Función tirada: Simula la tirada de dos dados y devuelve la suma de ambos */

int tirada(void) { int dado1, dado2;

dado1 = 1 + (rand() % 6); dado2 = 1 + (rand() % 6); return dado1 + dado2; }

�����$��!�#���#&� $�������)����� !"������5����#�&#��������$��!�#%��.&�! ���#� �����(�����$�������������&;$����:�4�

• 0����� !"��rand()���,���,������5�����&#��������$��!����&��$!����� ����6��$�����(�RAND_MAX�+���� �� ������"�����M���$�����#�����5�����&#��������$��!����$�����(�C+����#�����:���$�����#�����5�����&#��������$��!����$���:�(�M%�-���&�����#!�����������#��$������������������*��)�+�

• �!����&������,��'�-������#� ��� !�����$!����#��#�#!��&�������!#��+������#���������-�������������������&�����)���������$D�$! �#��5����#�����$��!�#%�(��-����#������'-�!���&��)������� ���&�� !#!"�%�#!������$��!������!�)���+�7�����#�#!��������*��� ��#� �5����#� &#��������$��!�#%� <� !����� -��� ��&!� ��� ��� ��� ,����� -�����&����� ��� ��� <���� ���� #!#$���+� 7���� ����� �*� �$�� ��� #!)�!��$�� !�#$�� !"�� #"������� ,�/%� ��� &�!� !&!�� ���� &��)����� 6��� &�!����� !�#$�� !"��4�srand(time(NULL));� 6��4� ����� !� ��!�� ��� �! <���� time.h� ��� #��&��)�����+�

� ���!�!-��� ���� ��� !"�� &���� �� ����� ����;�!������5���5�$!&��� 6����� �����#��5����#���$�����#%���(��%�-���#��'��#�#���#�5�! �#���)����$�#%�#!�� �� �����&��,!����$�� ������+� ��� $��$�� ��� �� ��$���� ��� �5����� �'#� &�-��>�� -��� �#��5�$!&����������#+��#���5����%�#�)����-����.!#$��(��#$'����������)��V�'.6�%��%��T�W+� �#��,�� -��� ��� &���� $�� ��� ����#� �5����#� �#� ��� �5�$!&��� ��5�� ������#%�&����&��������#�������'#�&�-��>�+

�� ?� ��� ���� ��� !"�� -��� ��,���,�� ��� ������ �5����� ��$����� $��� -��4� �!,!�!���

��$�������������#$��:%��!,!�!�����$�������������#$���%��!,!�!�����$���F���������#$���%��!,!�!�����$���C���������#$��F%��!,!�!�����$���M���������#$��C%��!,!�!�����$���I���������#$��M%��!,!�!�����$���R���������#$��I�(��!,!�!�����$���H���������#$��R+

� %� �# �!���������� !"��Primo(N)�-�����,���,������5�����)�6���#���#!�����5�����

N� ��� #�� ��)����$������#�����5�����&�!��%�(� ��� �5������� 6,������� #!� �! <���5������#�&�!��+��!������$�%��,��!)X��(�&����������$!�!��������#!)�!��$���� ��%��# �!�!������$������ !"�� �(�#���)����$�#�#�����#���$���#�a�(�b4

Page 18: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

������������� ����� ����F�

for (i=a; i<=b; i++) if (Primo(i)) /* Equivalente a: if (Primo(i)==1) */ printf("\n- Encontrado primo: %i.",i);

� 0��#��!�����7���!�� ��!��/���#;4��%��%��%��%��%�C%�C%�I%�:�%�:�%�:I%���%��H%��HS�

�#$�#��5����#����7���!��#�����!����������#!)�!��$�������4 P(0)=3; P(1)=0; P(2)=2; P(i)=P(i-2)+P(i-3)% &��� i>2

����-�!����5�����&�!���p%��!,!�����P(p)+� �$��$���� ��$��������5�����&�!���-��� ��$���!)���#����)��+�

� �� 0�#� �5����#� ��� &�!��#� x%� $��� -��� x� �!,!��� �� P(p)� #�� ��� ��� ����

&#����&�!��#����7���!�%�#!�����P����#��!�����7���!�+�7��)������������ !"��&������ ��$���� ��������� �5����� ��� &�!���x%� $��� -���x� �!,!��� ��P(p)+� ���������&#����&�!������7���!���#��I:FF:%�-�������#�&�!���(��-����-�!,������C�:Y+

&� ��� )��!�� ��� ��#���$��'$! �#� !��!����!��,�#��������*��� 6:RRIJ:H���� $����*"�

��� �����!�)�� ��� #�� ���)�� !�)�D#� 9�����(� ?���(� 6:RIIJ:HFI�+� �������������*��� ������"%� ?���(� #��;�� ,!#!$����� ��� ��� <�#&!$��+� ��� �;�%� ?���(� ����$"���#����!)�4��P���$�.!�-������<��$��;���$��;������5�������#$��$��#�#�%����� ��� 3333ZZ+� ������*��� ��#&���!"4� P��� ?���(%� �#�� �#� ��� �5����� ��(�!�$���#��$�+��#�����'#�&�-��>�������#��5����#�-���#��&�������.&��#��� �������#��������� ���#%� �����#�������#��!#$!�$�#Q+�� #��%� 3333�@���A����@� ��A���+��# �!���������� !"��-��� �� ��������5���������$�.!����?���(%�#��!�����-�������5��������$��;���'#����F� !���#+��4����������������#��,������#��# �!�!�����F��� ��#���!����#�&������,�����#�,��!����#��%��%� �(��+�0��#��� !"���#4�:I�H+�

� '� ?�(��5����#���$�����#�-���������$!&�! ����#�#� �#!,����$��&���:%��%��%�F+++�#��

��$!������5����#�-���$!�������#��!#��#��;)!$�#�-��������!)!����&��������!#$!�$��������6#"���������$!&�! ���&���:�#����$!��������5����� �����#��!#��#��;)!$�#���� ��� �!#��� ������+� ��&��)���#� -��� &���� ��� �5����� �%� #�� ��&��� �#��&��&!����� ��� ���$!&�! ����� &��� :%� �%� �+++%� <�#$�� E+� ��$�� �#%� �� !��#� -��� ���P�'.!������$!&�! ����� ����;#$! �Q�������#�E+��*��&��4����6:F�RCI��@�MG��7��� �*��&��%�:F�RCITC@I:F�RC%�(�:F�RCITM@RCI:F�+����!�! ������� ��� !"��$���-������������5����%����#$���#�����+�

(� ���������� !"�������*�� ! !����$��!���#��'��'#��' !�� ��!�! ����$������ !"�� ���

��#� ��)����$�#�� (��%� $��� -������#$��� ��� ���)�� ����5����#� ��#� �$!,�#� (� ����������#���5����#%�$���-���$���#�����#�$!�����#��������(�����!)�������+�����!���%������� !"���������#$�������������� �����(����������$���#���#��5����#�����!/���#+

Page 19: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

 

Relación de Problemas 

 

del 

 

Capítulo 6 del libro 

Page 20: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 306

Para acceder a un elemento de un array, puede usarse como índice una expresión aritmética entera, tal como: array[5+4–3]Si un array tiene 15 elementos, no es obligatorio utilizar todos esos elementos dentro de un programa. Si una función tiene un argumento de tipo array unidimensional, es muy importante especificar su tamaño dentro de los corchetes de la definición de ese argumento. Una función puede devolver con return una estructura completa, pero no un array con todos sus elementos. Igual que los arrays, los registros siempre se pasan por referencia. La función strlen() devuelve la posición del carácter '\0' en la cadena de su argumento. Si a y b son dos cadenas de caracteres y sus valores respectivos son "x" e "y", entonces, tras la llamada strcat(a,b), la cadena a vale "x y".

6.10 EJERCICIOS PROPUESTOS

6.10.1 Nivel fácil

1. Dada la siguiente declaración:

float calif[10]= {4.55,8.20,3.56,1.34,6.75,2.25,7.45,8.90,5.34,3.89};

Escriba una lista de los elementos que mostrarán las siguientes secciones de código:

a) for (m=1; m<=5; m++) printf("%7f",calif[m-1]);

b) for(k=0; k<=9; k=k+2) printf("%.1f ",calif[k]);

c) for(j=3; j<10; j+=3) printf("%i\t",(int)calif[j]);

d) for(i=2; i<10; i=i+2) printf("%d ",calif[i]);

e) for(i=1; i<10; i=i+2) printf("%f ",calif[++i]);

Page 21: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

TIPOS DE DATOS ESTRUCTURADOS 307

En el último bucle se modifica la variable de control del bucle (i) dentro del bucle for, lo cual es desaconsejable.

2. Escriba un programa que declare tres arrays unidimensionales denominados voltios, corriente y resistencia. Cada array debe declararse en main() y debe ser capaz de almacenar diez números en doble precisión. El programa debe pasar estos tres arrays a la función denominada calcVoltios(), para calcular los elementos del array voltios, como el producto de los elementos correspondientes en los arrays corriente y resistencia (por ejemplo, voltios[1]=corriente[1] * resistencia[1]). Después de que calcVoltios()haya colocado los valores en el array voltios, han de ser mostrados los valores del array desde la función main().

3. Diseñar un programa que permita invertir el contenido de un array. No se trata de mostrar el array de forma inversa, sino de invertir los valores según su posición original. Ejemplo:

Vector Original: 12 45 90 7 9 15. Vector Invertido: 15 9 7 90 45 12.

Nota: El programa no podrá utilizar vectores auxiliares.

4. Diseñar un programa que permita traducir una cadena de caracteres que contenga un número real, al número que representa:

Cadena de Entrada: 7 8 . 0 5 \0 ...Número de Salida: 78.05

5. Escribir la función Reemplazar() que acepte 3 argumentos: una cadena de caracteres CAD y dos caracteres A y B. La función sustituirá todas las ocurrencias del carácter A en la cadena CAD por el carácter B. La función devolverá el número de caracteres sustituidos. Ejemplo: si CAD contiene la cadena "felicidad", tras la llamada Reemplazar(CAD, 'i', 'x'), la variable CAD tendrá la cadena "felxcxdad" y la función devolverá el valor 2.

6.10.2 Nivel intermedio

6. Diseñar un programa que lea una matriz 6×8 de enteros (fila a fila), la almacene en un array bidimensional a, y calcule los resultados de las

Page 22: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 308

sumas de los elementos de cada fila en un vector b y las sumas de los elementos de cada columna en un vector c. Finalmente se imprimirán los tres arrays con el siguiente formato:

a a a a a a a a b a a a a a a a a b a a a a a a a a b a a a a a a a a b a a a a a a a a b a a a a a a a a b c c c c c c c c c

7. Implementar una función que devolverá un dato de tipo cadena que corresponderá con las siglas de la cadena que toma como argumento. Las siglas estarán formadas por las letras en mayúsculas de todas las palabras, separadas por un punto. Ejemplo: Si la frase del argumento es “Alta Velocidad Española”, la frase que devolverá será “A.V.E.”.

8. Escriba un programa para efectuar la conversión de un número entero a base 10 a otra base menor a 10. La introducción del número se hará mediante una cadena de caracteres en este formato: "número/base". Por ejemplo, si la entrada al programa es "439/8", esto indica que deseamos cambiar el número 439 a base 8. Se aconseja hacer al menos una función para obtener los dos números de la cadena de entrada, y otra función distinta para efectuar la conversión de base.

9. Supongamos que deseamos evaluar a un determinado número de alumnos siguiendo el criterio de que aprobará aquel que supere la nota media de la clase.Escriba un programa que lea un número indeterminado de alumnos (como máximo 20, y las notas de tres evaluaciones, y como resultado emita un informe indicando, para cada alumno, las evaluaciones que tiene aprobadas y suspensas. Ejemplo de la salida que se debe obtener.

Alumno Nota-1 Nota-2 Nota-3 Juan Lopez Aprobado Suspenso Aprobado Luis Garcia Suspenso Aprobado Aprobado Pedro Ruiz Aprobado Aprobado Aprobado

Page 23: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

TIPOS DE DATOS ESTRUCTURADOS 309

10.Dadas las siguientes declaraciones:

struct fecha{ int dia, mes, anio; }; struct persona{ char nombre[50]; struct fecha fecha_nac; double altura; double peso; };

a) Implemente una función, escribir(), que muestre por pantalla todos los datos de todas las personas que hay almacenadas en un array de struct persona. La función debe tener dos argumentos, el primero un array de struct persona, y el segundo, un entero que indique el número de datos que hay en el array. La función no devuelve nada.

b) Escriba una función leer() para pedir por teclado todos los datos de una persona concreta. La función no tendrá argumentos y devolverá un struct persona con los datos leídos.

c) Suponga que tenemos la siguiente declaración de variables: struct persona Equipo[100];

Indique si las siguientes llamadas a la función implementada anteriormente son correctas o no y por qué:

1. Equipo=leer();2. Equipo[10]=leer();3. leer(Equipo[100]); 4. leer();5. leer(Equipo); 6. Equipo[100]=leer();

d) Escriba una función para buscar los datos de una persona en el array. La función buscará por el nombre de la persona y devolverá todos los datos y un valor entero (1 si ha encontrado a la persona y 0 si no lo ha encontrado). El prototipo de la función deberá ser el siguiente:

int buscar(struct persona P[], int t, char name[], struct persona& per);

e) Escriba una función en la que se utilice la función anterior. Declare las variables que sean necesarias,

Page 24: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 310

pida el nombre de la persona y llame adecuadamente a la función.

6.10.3 Nivel avanzado

11. Escriba un programa que lea por teclado dos matrices M×N y N×P, y devuelva como resultado la matriz producto M×P. Los valores M, N y P se introducirán por teclado antes de la lectura de las matrices. El tamaño máximo de M, N y P vendrá dado por constantes definidas en el programa. Nota: Son 3 bucles anidados de M, P y N iteraciones respectivamente.

12.Un cuadrado mágico es una matriz cuadrada con un número impar de filas y columnas, cuyas filas y columnas (e incluso sus diagonales) suman el mismo valor. Por ejemplo la matriz siguiente es un cuadrado mágico de 3×3 en el que los números en cada fila, cada columna y cada diagonal suman 15:

6 1 8 7 5 3 2 9 4

Hacer un programa que compruebe si una matriz es un cuadrado mágico o no. El tamaño máximo de la matriz será de 20×20. En primer lugar, el programa leerá el tamaño N de la matriz hasta que éste sea correcto (impar y menor que el tamaño máximo), y pedirá los datos de una matriz N×N. Una vez leídos y almacenados los datos se comprobará si la matriz es un cuadrado mágico o no y se mostrará el mensaje correspondiente. Nota: Realice el ejercicio implementando distintas funciones: para leer una matriz, escribir una matriz y comprobar si una matriz es cuadrado mágico.

13. Implementar la función SigCharPos() con 3 parámetros, devolviendo un unsigned int. El primer parámetro es una cadena de caracteres Cad, el segundo parámetro es un carácter Ch y el tercer parámetro un número natural N. La función devolverá la posición del siguiente carácter Ch en la cadena Cadempezando a mirar a partir de la posición N (inclusive). Si el carácter no es encontrado, la función devolverá el valor más grande posible que admita el tipo que se devuelve. Las llamadas siguientes devolverán los valores que se indican a la derecha:

SigCharPos("Aristóteles dijo que saber es acordarse",'t',5):6 SigCharPos("Aristóteles dijo que saber es acordarse",'A',0):0 SigCharPos("Aristóteles dijo que saber es acordarse",'s',0):3

Page 25: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

TIPOS DE DATOS ESTRUCTURADOS 311

Implementar esta función sin utilizar funciones de string.h y, como en la mayoría de las funciones, no se debe ni leer ni escribir datos. Implementar también un programa con un menú con las siguientes opciones:

a) Buscar siguiente carácter a partir de una posición. En esta opción se pedirán los datos necesarios para llamar a la función y se mostrará el resultado devuelto.

b) Buscar todas las ocurrencias de un carácter. En esta opción se pedirán también los datos (excepto la posición) y mostrará las posiciones de todas las ocurrencias de un carácter en una cadena.

c) Buscar todas las ocurrencias de un carácter a partir de una posición.

d) Salir. El menú debe repetirse hasta pulsar esta opción.

14. Programar una función en C de nombre InvierteCad() que tome un único argumento de tipo cadena de caracteres. La función debe invertir los caracteres de dicha cadena pero lo hará independientemente para cada frase. Supondremos que termina una frase cuando existe un punto (carácter '.') o si se llega al final de la cadena.Ejemplo: Si como argumento de InvierteCad() se introduce la cadena de la izquierda, dicha cadena se modificaría tomando el valor de la cadena de la derecha, quedando los puntos en la misma posición que en la cadena original:

"PAZ. PARA. KOSOVO" "ZAP.ARAP .OVOSOK" "reconocer" "reconocer" "HOLA TIO. Yo bien." "OIT ALOH.neib oY ." "Lee entero. El examen!" "oretne eeL.!nemaxe lE"

15. Declare dos estructuras para almacenar la siguiente información en cada una de ellas:a) Pacientes (3 campos): De cada paciente almacenamos su nombre, nombre

de la vacuna suministrada (coincide con el nombre de la enfermedad a la que se aplica) y número de la última dosis de dicha vacuna (1, 2...).

b) Vacuna (3 campos): De una vacuna nos interesa el nombre de la enfermedad a la que se aplica (Hepatitis A, Tétano, Malaria...), la dosis (1, 2...) y la duración (en meses) que tiene su protección. Por ejemplo, la Hepatitis A en la primera dosis dura 6 meses pero si se inyecta una segunda dosis a los 6 meses, esa segunda dosis hace que la duración sea de 10 años.

Supongamos que un programa principal maneja 2 arrays de estructuras correspondiendo cada uno a una de las 2 estructuras anteriores. Realice diferentes funciones independientes para las siguientes acciones:

Page 26: FUNDAMENTOS DE INFORMÁTICA - lcc.uma.esjanto/ftp/fundinf/Rel_libro.pdf · formado por más de una instrucción. El bucle do..while es quizás el bucle más versátil del lenguaje

FUNDAMENTOS DE INFORMÁTICA 312

a) Función BuscaVacuna(): La función imprimirá todos los datos de una vacuna en particular. El nombre de la vacuna se pasará como un argumento más de la función, aparte del array de vacunas y su tamaño. Tenga en cuenta que una vacuna puede aparecer varias veces (para distintas dosis).

b) Función ImprimeVacunas(): Dando como argumentos el nombre de un paciente, el array de pacientes y su tamaño, la función devolverá el número de vacunas que ese paciente tiene puestas y también mostrará por pantalla la información de esas vacunas (incluyendo la duración de la dosis administrada).