Sei sulla pagina 1di 13

10.

Realizar un programa que pida un número entero y positivo por pantalla y muestre por pantalla su
codificación en binario, octal y hexadecimal.

octal %o ni
NOTA ACLARATORIA: A la hora de imprimir en pantalla no tenemos problemas con el
con el hexadecimal %x ya que el calculo es directo. No existe para el binario, por lo que
habrá que calcularlo mediante divisiones progresivas.

• Como hay que ir dividiendo progresivamente el número, habrá que crear un ciclo o bucle.
Además, habrá que controlar los cocientes y los restos producidos en la división.
• Por otro lado, habrá que ir almacenando los resultados para así lograr el número binario
deseado.

EXPLICACIÓN:
• Para poder ir almacenando los resultados, la solución es tratarlo como si fuera un carácter de
tamaño 100 (línea 6).
• Para realizar las sucesivas divisiones habrá que crear un bucle, en este caso utilizamos WHILE
(podría haber sido también el FOR, pero es para saber controlar los dos). El bucle va desde la
línea 14 hasta la línea 21 y se ejecutará mientras el valor del cociente sea mayor que 1.
o Para llevar bien las sucesivas divisiones necesitamos tres variables: el número a
convertir a binario (num), el resto que van a ser los valores a guardar en el arrray o
vector y el cociente con el que se irán haciendo las sucesivas divisiones.
o En la línea 15 se obtiene el cociente.
o En la línea 16 se obtiene el resto. Recordar que la operación % obtiene el resto.
o En la línea 17 nos preguntamos si el resto es 0. Si fuera 0, entonces en el vector o array
binario[ ] en la posición que tenga n_bin almacenará 0. Lógicamente el primer resto se
almacenará en la posición 0 y su valor será 0 en este caso. Esto es, en binario[0] se
almacenará 0. Luego irá a la línea 19.
o En la línea 18 se ejecutará cuando en la pregunta de la línea 17 la respuesta sea que el
resto no es 0. Entonces en el vector o array binario[ ] en la posición que tenga n_bin
almacenará 1. Lógicamente el primer resto se almacenará en la posición 0 y su valor
será 1 en este caso. Esto es, en binario[0] se almacenará 1. Luego irá a la línea 19.
o En la línea 19 lo que se hace es que como la casilla del array donde se almacena el
valor obtenido ya está ocupada por lo calculado ahora, hay que sumarle 1 para el
próximo valor que vayamos a obtener.
o Luego irá a la línea 21 y volverá a la línea 14. Así sucesivamente mientras el cociente
sea mayor que 1.
o Vamos a obtener el número decimal 11 en binario:

11 2
1 5 2
El número binario obtenido es 1011
1 2 2
0 1

Así quedará almacenada en el array o vector binario[ ] la información obtenida:

binario[ ] 0 1 2 3 4 5 … 98 99 100
Información 1 1 0 1 …

• Cuando se termine de obtener el número binario se irá a la línea 22 y lo que se hace a partir de
ahora es tener en cuenta la última división. Si el cociente es 0 (línea 22) se almacenará en el
array un 0 y en caso contrario (línea 23) se almacenará un 1.
• En la línea 24, el \0 es para decirle que como está definido como carácter ya ha terminado.
• Ahora lo que hay que hacer es imprimir el valor binario obtenido, pero la información hay que
sacarla al revés, es decir el último valor ha de ser el primero. Para lograrlo hay que hacerlo
mediante otro ciclo. En este caso FOR. El bucle funcionará desde la longitud dada menos 1 (es
que el último valor almacenado no vale para nada \0 ya que es para indicarle que termina la
información almacenada) hasta que el valor de i sea mayor o igual a 1 y cada vez que pase por
el bucle irá disminuyendo el valor de i (es debido a que empezaremos a imprimir desde el
último valor hasta el primero, si fuera al revés comenzaría en 0 y terminaría en la longitud
obtenida menos uno). Se imprimiría como carácter de ahí el %c.
11. Diseñar un programa que pida 4 números por teclado y nos indique si alguno de ellos es la suma de los
otros 3.

NOTA ACLARATORIA: Cuando nos encontremos con un caso de estos hay que saber cuántas opciones
hay para así saber la cantidad de preguntas que hay que hacer. En este ejercicio según lo que nos
piden tenemos 4 números n1, n2, n3 y n4:
• Que n1 sea la suma de n2+n3+n4
• Que n2 sea la suma de n1+n3+n4
• Que n3 sea la suma de n1+n2+n4
• Que n4 sea la suma de n1+n2+n3
• Que no sea la suma.
Por tanto, como tenemos 5 posibles casos, habrá que preguntarse 4 veces (siempre una menos ya
que al utilizar el IF xxx ELSE xxx tenemos implícita otra posibilidad.

EXPLICACIÓN:
• Para que quede más claro he estructurado mejor los IF xxx ELSE xxx. Habrás visto que he
utilizado las llaves { } para saber cuándo empiezan y cuando terminan los IF y los ELSE. En este
caso como solo tienen una instrucción que ejecutar se podrían quitar, pero si dentro de un IF o
de un ELSE quieres que ejecute más de una instrucción son OBLIGATORIAS las llaves para
que te lo haga bien. Lo mismo ocurre con FOR y con WHILE.
• Como te he explicado antes, hay cinco posibilidades por lo que con 4 IF xxx ELSE xxx
valdrían ya que la 5ª opción sale del último ELSE.
• Las preguntas de los IF xxx ELSE xxx no tienes por qué hacerlas en ese orden. Esa es la
ventaja de los IF ya que de las 5 posibilidades puedes hacerlas como te plazcan. Puedes utilizar
todas las combinaciones posibles a la hora de preguntarte.
• Podrías empezar preguntando cuando ninguna es la suma de las otras y luego seguir
preguntando las otras opciones. Para este caso, el DISTINTO es !=

CONCLUSIÓN: si vas a utilizar IF xxx ELSE xxx ten en cuenta las posibilidades que se pueden
producir y utilizarás SIEMPRE una pregunta menos ya que el último ELSE lo contemplará. Ya
veremos más delante otra sentencia (SWITCH junto con CASE) para cuando te encuentres con
muchas posibilidades.

Otra forma de hacerlo pero es más complicada. El objetivo es hacerlo bien y no que quede más bonito
o que se note que dominas más o menos la herramienta. No vas a ser un profesional.
Determinar si un número entero introducido por el usuario es primo. Nota: un número es primo si sólo
es divisible por él mismo y por la unidad.
18. Escribir un programa que nos pida por pantalla dos números enteros y nos muestre los números
primos que hay entre ellos.

NOTA ACLARATORIA: Un número primo es aquel que solo es divisible por sí mismo y por 1 (que
no nos interesa) ¿Cómo lo haremos? Con dos bucles o ciclos.
• El primer bucle será para que vaya del primer al segundo número introducidos.
• El segundo bucle es aquel que tendrá que determinar si al dividir un número desde 2 (ya que
el 1 se da por seguro) hasta el número anterior hay algún resto cero. Si lo hubiere es que no
es primo ya que solo lo puede ser por sí mismo (además de 1). Si no lo hubiere quiere decir
que ese número es primo.

EXPLICACIÓN:
• En la línea 17 lo que quiere decir IF(PRIMO) es lo mismo que poner IF(PRIMO ==1), es decir que
si en el segundo bucle no hay ningún número que vaya desde 2 hasta el valor de i del primer
bucle entonces PRIMO=1 (línea 10) ya que si hubiera alguna división con resto 0 tendría
PRIMO=0 (línea 13).
19. Escribir un programa que pida un carácter y una cadena de caracteres por pantalla y nos diga cuantas
veces aparece la letra en la cadena.

NOTA ACLARATORIA:
• Para poder saber la cantidad de caracteres podemos utilizar la sentencia STRLEN() pero
para ello necesitas incluir la biblioteca <STRING.H>.
• Una vez que sabemos el tamaño del vector llamado FRASE lo que debemos hacer es ir
comprobando letra a letra si es el carácter a contar. Esto lo haremos mediante un bucle.
• Cuando tengamos que introducir un texto con espacios en blanco NO PODEMOS utilizar
SCANF, de ahí que utilicemos GETS que está incluida en la librería STDIO.H
19. Escribir un programa que pida un carácter y una cadena de caracteres por pantalla y nos diga cuantas
veces aparece la letra en la cadena.

NOTA ACLARATORIA:
• Para poder saber la cantidad de caracteres podemos utilizar la sentencia STRLEN() pero
para ello necesitas incluir la biblioteca <STRING.H>.
• Una vez que sabemos el tamaño del vector llamado FRASE lo que debemos hacer es ir
comprobando letra a letra si es el carácter a contar. Esto lo haremos mediante un bucle.
• Cuando tengamos que introducir un texto con espacios en blanco NO PODEMOS utilizar
SCANF, de ahí que utilicemos GETS que está incluida en la librería STDIO.H
20. Escribir un programa que pida una cadena de caracteres por pantalla y nos diga que letras contiene sin
distinguir entre mayúsculas y minúsculas y cuántas veces aparece cada una. Formato de salida:
A:12,C:3,H:7,M:2.

NOTA ACLARATORIA:
• Para poder saber la cantidad de caracteres podemos utilizar la sentencia STRLEN() pero
para ello necesitas incluir la biblioteca <STRING.H>.
• Para poder obtener un texto desde la pantalla podemos utilizar la sentencia GETS() pero
para ello necesitas incluir la biblioteca <STDIO.H>. Cuando tengamos que introducir un
texto con espacios en blanco NO PODEMOS utilizar SCANF, de ahí que utilicemos GETS
que está incluida en la librería STDIO.H
• Para poder convertir los caracteres a mayúsculas podemos utilizar la sentencia TOUPPER()
pero para ello necesitas incluir la librería <CTYPE.H>. En ASCII la A mayúscula es el 65 y la Z
es la 90 sin tener en cuenta la Ñ que es la 165 mientras que ñ es la 164. No introduciremos la
ñ ya que no lo tendría en cuenta en este programa.
EXPLICACIÓN:
• En la línea 8 lo que se va a almacenar es en cada posición del vector n_caracteres la cantidad
de veces que se repite en cada frase una letra. Hemos definido 40 huecos para el alfabeto.
• Desde la línea 12 a la 15 lo que hacemos es convertir la frase a mayúsculas.
• Desde la línea 17 a la línea 23 hemos creado dos bucles:
o El primer bucle se repetirá tantas veces como sea la longitud de la frase introducida
gracias a STRLEN().
o El segundo bucle es para ir sumando las veces que se repiten cada letra desde la A
hasta la Z.
• Desde la línea 24 a la línea 27 se imprimen las letras que aparecen en l frase así como el
número de veces que aparece.
21. Escribir un programa que pida una cadena de caracteres CON O SIN espacios por pantalla e invierta el
orden de los caracteres.

Escribir un programa que pida una cadena de caracteres sin espacios por pantalla e invierta el orden
de los caracteres. También deberá convertir TODO A MINÚSCULAS. Ejemplo: CadenaOriginal 
LANIGIROANEDAC.
PARA CONVERTIRLO A MAYÚSCULAS LA FUNCIÓN ES: TOUPPER

Escribir un programa que pida una cadena de caracteres sin espacios por pantalla e invierta el orden
de los caracteres. También deberá convertir las MAYÚSCULAS A MINÚSCULAS y las MINÚSCULAS A
MAYÚSCULAS.
22. Escribe un programa que pida una cadena de caracteres por pantalla, elimine los espacios en blanco y
nos diga si es un palíndromo.

Potrebbero piacerti anche