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.

Solución: funcion1() invierte la cadena que se le pasa como argumento. Así que en el programa principal, como se le pasa la variable s que vale "PROGRAMADOR", al visualizar s en pantalla se muestra RODAMARGORP

Práctica con punteros


Dado el siguiente programa, indica en cada paso qué es lo que ocurre en tiempo de ejecución. ¿Cuál es la salida por pantalla en los pasos 9 y 12? Además, crea una tabla donde las filas representen los distintos pasos y las columnas las variables del programa. Rellena cada celda con el valor que presenta cada variable en cada paso teniendo en cuenta que el tipo short ocupa 2 bytes y que las direcciones asignadas a las variables por el compilador son las siguientes (en hexadecimal):

  • a -> 00FA0000
  • b -> 00FA0002
  • c -> 00FA0004
  • p1 -> 00FA0006
  • p2 -> 00FA000A
  • p -> 00FA000E

Solución

jueves, 26 de mayo de 2011

Ejercicios.



1.- Escribe una función PasaPasa que manipule dos números enteros suprimiendo la última cifra del primero y añadiéndola al final del segundo.

(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)
Solución

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 man
era 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ú

Crea una aplicación que calcule una aproximación de N términos del número Pi siguiendo las fórmulas de Wallis, Leibnitz y Vieta. El programa debe presentar el siguiente aspecto:

Cálculo del número PI:

1.- Wallis
2.- Leibnitz
3.- Vieta
4.- Salir

Introduzca la opción deseada:


El programa insistirá en solicitar la opción deseada si el usuario introduce un número de opción no disponible en el menú. Una vez introducida una opción correcta distinta de la de salida, se solicitará al usuario que ingrese el número de términos de la serie que quiere incluir en el cálculo de la aproximación. Después de realizado el cálculo y tras mostrar el resultado, se volverá al menú inicial.

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):






domingo, 22 de mayo de 2011

Ejercicios.

  1. Crea un programa en C++ que pida como entrada un entero positivo e imprima su tabla de multiplicar.


    Solución

  2. 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

  3. 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

  4. 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)

    divisiones

    m. c. d. (72, 16) = 8

    Solución

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

Autoevaluación I



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

Utilizando la función wait() que te permite dejar en espera la ejecución del programa el número indicado de segundos, crea un reloj digital simple que visualice horas, minutos y segundos.


#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++

Diseño de los programas utilizando:
  • Diagramas de flujo
  • Diagramas Nassi Shneiderman
  • Pseudocódigo


Línea del tiempo de los lenguajes de programación

[Haz clic en la imagen para ampliarla]

Aprende a usar los ábacos chino y japonés



Representar:



Sumar y restar:



[Haz clic en las imágenes para acceder al contenido]


Deitel - Cómo programar en C/C++



Puedes descargarlo haciendo clic aquí


Fundamentos de diseño de programas mediante diagramas de flujo


Introducción al funcionamiento básico del ordenador

[Haz clic en la imagen para acceder al contenido]

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:

Fases de la compilación

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:

Proceso de ejecución de un programa

martes, 3 de mayo de 2011

Acertijo

PROBLEMA: En el bajo de una casa hay cuatro interruptores inicialmente apagados y en el piso de arriba hay cuatro bombillas, cada una accionada por un interruptor. Cuando encendemos un interruptor es imposible ver qué bombilla se ha encendido. Haciendo un solo viaje, ¿cómo podemos saber qué interruptor enciende cada luz?