Dado el siguiente programa determina qué hace exactamente funcion1() con la cadena s que se le pasa como argumento.
martes, 31 de mayo de 2011
Práctica con punteros y cadenas
Dado el siguiente programa determina qué hace exactamente funcion1() con la cadena s que se le pasa como argumento.
Práctica con punteros
- a -> 00FA0000
- b -> 00FA0002
- c -> 00FA0004
- p1 -> 00FA0006
- p2 -> 00FA000A
- p -> 00FA000E
jueves, 26 de mayo de 2011
Ejercicios.
(12345; 678) -> (1234; 6785)
(12345; 0) -> (1234; 5)
Utiliza la función anterior para crear otra que invierta un número (partiendo del propio número y de otro, con valor inicial cero), a base de repetir la operación PasaPasa cuantas veces sea preciso.
(12345; 0) -> (1234; 5) -> (123; 54) -> (12; 543) -> (1; 5432) -> (0; 54321)
Solución
2.- Escribe un programa que dibuje figuras como la mostrada, consistentes en n filas, donde la fila j es la secuencia de 2^j grupos formados cada uno por 2^(n-j) blancos y el mismo número de estrellas:
Solución
3.- Crea la siguientes funciones basándote en que para representar caracteres en C++ se utilizan variables del tipo char que almacenan el código ASCII del carácter. Asimismo, ten en cuenta que los grupos de letras minúsculas y mayúsculas tienen asignados códigos consecutivos:
(a) una letra minúscula
(b) una letra mayúscula
(c) una letra (haciendo uso de las dos funciones anteriores)
4.- Sabiendo que cero es par, es decir,
esPar(0) devuelve true
esImpar(0) devuelve false
y que la paridad de cualquier otro entero positivo es la opuesta que la del entero anterior, desarrolla las funciones lógicas, mutuamente recursivas, EsPar y EsImpar, que se complementen a la hora de averiguar la paridad de un entero positivo.
Solución
5.- Modifica el algoritmo de las Torres de Hanoi visto en clase de tal manera que no se permitan movimientos directos entre las picas de inicio y de destino, sino que todos los movimientos tengan que pasar necesariamente por la pica auxiliar.
Solución
6.- Desarrolla una función que visualice un triángulo de Tartaglia de n filas:
Para ello ten en cuenta la relación entre cada término del triángulo y los coeficientes binomiales:
Donde cada coeficiente binomial viene dado por la fórmula:
Solución conjunta ejercicios 6 y 7
7.- Basándote en el ejercicio 6, escribe un programa en C++ que calcule la potencia de 2 elevado a un número, sabiendo que la suma de los elementos de cualquier fila es el resultado de elevar 2 al número que representa esa fila. Así:
20 = 1
21 = 1+1 = 2
22 = 1+2+1 = 4
23 = 1+3+3+1 = 8
24 = 1+4+6+4+1 = 16
Solución conjunta ejercicios 6 y 7
Ejercicios. Creación de una aplicación con menú
Cálculo del número PI:
1.- Wallis
2.- Leibnitz
3.- Vieta
4.- Salir
Introduzca la opción deseada:
Las fórmulas a emplear son la siguientes:
-Fórmula de Wallis:
-Fórmula de Leibnitz:
-Fórmula de Vieta (observa que cada término del producto puede, en realidad, calcularse a partir del anterior):
miércoles, 25 de mayo de 2011
domingo, 22 de mayo de 2011
Ejercicios.
- Crea un programa en C++ que pida como entrada un entero positivo e imprima su tabla de multiplicar.
Solución - Analiza el algoritmo de la multiplicación a la rusa e impleméntalo en C++ utilizando los operadores de desplazamiento de bits (Textos auxiliares: artículo 1, artículo 2)
Solución - Crea un programa en C++ que tomando un número positivo de teclado indique si se trata de un número triangular. Un número es triangular si resulta de la suma de N números naturales consecutivos empezando en 1. Así, por ejemplo, uno, tres, seis o diez son números triangulares ya que 1=1; 3=1+2; 6=1+2+3, 10=1+2+3+4, etc.
Solución - Aplica el algoritmo de Euclides para determinar el Máximo Común Divisor (MCD) de dos números enteros positivos. Los pasos son:
- Se divide el número mayor entre el menor.
- Si:- La división es exacta, el divisor es el m.c.d.
- La división no es exacta, dividimos el divisor entre el resto obtenido y se continúa de esta forma hasta obtener una división exacta, siendo el último divisor el m.c.d.
m. c. d. (72, 16)
m. c. d. (72, 16) = 8
Solución - Amplía el programa anterior para que también calcule el Mínimo Común Múltiplo (MCM) sabiendo que el MCM de dos números es igual a su producto dividido entre el MCD.
Solución - Crea un programa que imprima la lista de interés producido y capital acumulado (monto) anualmente por un capital inicial C, con un rédito i durante t años a interés compuesto. El interés anual es I=(C*i)/100 y el monto corresponde a M=C*(1+i)^t, siendo t el número de años. La salida por pantalla debe presentar un aspecto tabular con tres columnas: Año, Interes y Capital Acumulado.
Solución - Escribe un programa en C++ que imprima los números primos entre 1 y N, siendo N un número positivo introducido por teclado:
Solución - Calcula el valor del número e mediante la siguiente suma, teniendo en cuenta que N es el número de términos de dicha suma, introducido previamente por teclado:Solución
- Escribe un programa en C++ que visualice la descomposición en factores primos de un número entero positivo. Nota: el método manual para proceder con dicha descomposición es el siguiente:
-Traza una línea vertical y coloca el número a descomponer en la parte superior izquierda.
-Divide el número por el menor primo que sea posible, 2, 3, 5,...
-Coloca el divisor (el número primo) en la parte superior derecha y el cociente debajo del primer número.
-Repite el proceso hasta que en la parte izquierda te aparezca un 1 con lo que la descomposición habrá terminado.
Solución
viernes, 20 de mayo de 2011
Ejercicio. Determinar si tres segmentos corresponden a los lados de un triángulo
EJERCICIO: Crea una función en C++ que dada la longitud de 3 segmentos en centímetros tomados como valores de entrada devuelva verdadero o falso en función de si podrían corresponder o no a los 3 lados de un triángulo.
NOTA: Relación entre los lados de un triángulo
Observamos este triángulo:
Se cumple que:
- El lado mayor es menor que la suma de los otros dos:
4 cm < 2 cm + 3 cm, es decir, a < b + c
- El lado menor es mayor que la diferencia de los otros dos:
2 cm > 4 cm - 3 cm, es decir, b > a - c
miércoles, 18 de mayo de 2011
Ejercicio. Crear un reloj simple
#include <ctime>
void wait(int seconds)
{
clock_t endwait;
endwait = clock() + seconds * CLOCKS_PER_SEC;
while (clock() < endwait) {}
}
Solución
miércoles, 11 de mayo de 2011
Ejemplos básicos de programas C++
- Diagramas de flujo
- Diagramas Nassi Shneiderman
- Pseudocódigo
Proceso de compilación
La compilación es el proceso de traducción de programas fuente a programas objeto. El programa objeto obtenido de la compilación ha sido traducido normalmente al código común del lenguaje de máquina.
Para conseguir el programa máquina real se debe utilizar un programa llamado montador o enlazador (linker). El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable.
Existen diversas fases de compilación o también llamadas etapas de la compilación que se ilustrarán en la siguiente imagen:
El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador tiene los siguientes pasos:
- 1. Escritura del programa fuente con un editor (programa que permite a una computadora actuar de modo similar a una máquina de escribir electrónica) y guardarlo en un dispositivo de almacenamiento (por ejemplo, un disco).
2. Introducir el programa fuente en memoria.
3. Compilar el programa con el compilador.
4. Verficar y corregir errores de compilación (listado de errores).
5. Obtención del programa objeto.
6. El enlazador o montador (linker) obtiene el programa ejecutable al vincular a nuestro programa objeto el código máquina de las librerías o servicios del sistema operativo que estemos usando en nuestro programa.
7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.
Y, el proceso de ejecución se ilustra en la siguiente imagen: