Professional Documents
Culture Documents
SESION 1
Para asignar un valor a una variable se utiliza En C++ se puede usar el flujo cout para imprimir
el operador = informacin en la pantalla, utilizando el operador de
Es posible asignar valores al momento de salida de flujo <<
declarar las variables;
Ejemplos: La constante endl imprime un retorno de carro
x = 10; Ejemplos:
float a = 3.4, b = 5.6; c = -1.7;
cout << El valor de x es << x << endl;
cout << El rea del circulo es << 3.14159 * r * r;
cout << endl << endl << endl;
Ejemplo de salida:
Modificadores: signed / unsigned / long
Clculo de las races de una cuadrtica
Coeficientes: a = 1, b = -1, c = -2
Races: x1 = 2, x2 = -1
En C/C++ se pueden formar expresiones El flujo de entrada cin permite introducir datos
aritmticas con los operadores comunes: desde el teclado y almacenarlos en variables.
+, -, *, /
if (expresin) {
SESION 2
// cdigo a ejecutar si la
// expresin es verdadera
} else {
// cdigo a ejecutar si la
// expresin es falsa
}
19/10/2016
switch (expresin) {
case c1: // cdigo a ejecutar en caso de que expresin Considere el siguiente problema: 3 misioneros y 3
== c1 canbales desean cruzar un ro usando una balsa
break;
para 2 pasajeros. En ningn momento puede haber
case c2: // cdigo a ejecutar en caso de que expresin ==
mas canbales que misioneros en cualquier orilla
c2 del ro. Los movimientos vlidos consisten en
break; trasladar uno o dos personajes de una orilla a otra,
alternando en cada movimiento el origen y destino.
* Es importante recordar que c1, c2, etc.. deben ser constantes enteras!
En la msica occidental, las notas Do, Re, Mi, Fa, Las estructuras de iteracin se utilizan cuando es
Sol, La, y Si suelen representarse mediante las necesario repetir un cierto bloque de cdigo un
letras C, D, E, F, G, A, y B, respectivamente. nmero determinado o indeterminado de veces.
Elabore un programa que tome como entrada la Todas las estructuras de iteracin se basan en la
letra (mayscula o minscula) correspondiente a ejecucin de un bloque de cdigo de manera
una nota e imprima su nombre. Si la letra dada no repetida mientras el valor de una expresin
corresponde a una nota, el programa debe booleana de control sea verdadero.
indicarlo mediante un mensaje de error.
Por lo tanto, es muy importante asegurarse de
Sugerencia: utilice el tipo char para almacenar
caracteres y recuerde que las constantes de este que la condicin se vuelve falsa en algn
tipo se escriben entre apstrofos (e.g., a, z, *, momento, de manera que el programa no quede
etc..). atascado en un ciclo infinito.
19/10/2016
do {
// bloque de cdigo a ejecutar al menos una vez
} while (expresin);
El siguiente programa calcula el factorial de n, donde n es dado por el Realice un programa que pida al usuario una serie de nmeros
usuario: enteros no negativos utilizando un ciclo dowhile. Una vez
que el usuario introduzca un nmero negativo, el ciclo deber
int main() { terminar y el programa deber imprimir el mayor, menor, y
int i, n, factorial; promedio de todos los nmeros ingresados (excepto el ltimo).
cout << Dame el valor de n: ;
cin >> n;
factorial = 1; Elabore un programa que elija un nmero aleatorio n entre 1 y
i = 1; 100 (usar funciones rand() y srand() de stdlib.h). El programa
while (i <= n) { dar al usuario 5 oportunidades para adivinar el nmero: en
factorial = factorial * i; cada oportunidad, el usuario ingresar su respuesta y el
i = i + 1; programa indicar si la respuesta es menor, mayor, o igual a n
} (en cuyo caso el usuario habr ganado). Si despus de 5
cout << El factorial de << n << es << factorial intentos el usuario no ha adivinado, entonces habr perdido el
<< endl; juego.
}
Algoritmo de biseccin:
La otra estructura en C/C++ para la realizacin de ciclos es En muchas aplicaciones se requiere utilizar
proporcionada por la instruccin for, cuya sintaxis es: dos o ms ciclos anidados, de manera que un
ciclo exterior no complete una iteracin hasta
for (inicializacin; condicin; incremento) { que los ciclos interiores hayan finalizado.
// bloque de instrucciones
}
Una manera de entender el funcionamiento
Donde inicializacin es una expresin que se ejecuta de los ciclos anidados es comparndolos con
antes de iniciar el ciclo. El ciclo se ejecuta mientras la el odmetro de un coche:
condicin sea verdadera, y en cada iteracin (despus de
ejecutar el bloque de instrucciones) se evala la expresin
incremento.
19/10/2016
#include <iostream>
#include <cstdlib>
#include <time.h>
tipo nombre (argumento1, argumento2, b) Implemente una funcin llamada biseccin que tome por
) { parmetros a y b, y encuentre la raz de la funcin f(x) en
el intervalo [a,b]. En caso de no existir una raz, la
// instrucciones a realizar funcin deber devolver el valor de a.
}
Ninguna de las dos funciones anteriores debe pedir datos al
usuario o imprimir informacin en la pantalla.
donde tipo representa el tipo de datos del
Dentro de la funcin main(), pida al usuario los valores de
valor devuelto por la funcin, y los argumentos
c)
a y b, y llame a la funcin de biseccin para encontrar e
son variables (con especificacin de tipo) donde imprimir la raz de f(x) en [a,b]. En caso de no existir una raz,
el programa deber actuar de manera acorde.
se guardan los parmetros de la funcin.
1. Escriba una funcin llamada car2pol que tome como argumentos las
coordenadas de un punto (x,y) en el plano cartesiano, as como las
coordenadas polares (r,a) por referencia. La funcin deber calcular r y
a a partir de x y y. De manera similar, escriba una funcin
La programacin procedural es un paradigma
pol2car(r,a,x,y) que realice la operacin inversa. Para probar ambas derivado de la programacin estructurada en
funciones, pida al usuario (dentro de la funcin main) las coordenadas
cartesianas de un punto, convirtalas a polares y nuevamente a el cual un programa se divide en
cartesianas, e imprima el resultado.
procedimientos, subrutinas, o funciones, los
2. Escriba funciones llamadas mcd(a,b) y mcm(a,b) que calculen y cuales simplemente consisten de una serie de
devuelvan, respectivamente, el mximo comn divisor y el mnimo
comn mltiplo de sus dos argumentos enteros. Use estas funciones instrucciones a ser ejecutadas.
dentro de la funcin main() para imprimir el mcd y mcm de dos
nmeros dados por el usuario.
Reusabilidad: Los procedimientos escritos para un programa En caso de ambigedad (variables con mismo
pueden reutilizarse en otros programas que requieran la misma
tarea. nombre pero distinto alcance), el lenguaje
Fcil depuracin: Ya que cada procedimiento realiza una tarea
C/C++ elegir la variable declarada en el
especializada, es posible depurar cada procedimiento de manera contexto mas cercano.
individual.
int x = 1;
En programacin, el diseo descendente
int f() {
consiste en dividir una tarea compleja en return x;
sub-tareas, y resolver cada sub-tarea de }
manera independiente hasta que cada paso
int main() {
pueda implementarse fcilmente.
int x = 2;
{ Qu imprime este programa?
int x = 3;
cout << x << endl;
}
cout << x << endl;
cout << f() << endl;
}
tipo_datos nombre_arreglo[numero_elementos];
19/10/2016
void histo(float x[], int nx, int h[], float a, float b, int nbins) {
int main() { int i, j;
int h[6]; float binsize = (b a) / nbins;
int i, x, N = 1000; for (i = 0; i < nbins; i++) { h[i] = 0; }
for (i = 0; i < nx; i++) {
for (i = 0; i < 6; i++) { h[i] = 0; }
j = (x[i] a) / binsize);
for (i = 0; i < N; i++) { if ((j >= 0) && (j < nbins)) h[j]++;
x = rand() % 6 + 1; }
h[x 1]++; }
}
int main() {
const int N = 1000;
cout << Tabla de frecuencias << endl; float x[N];
for (i = 0; i < 6; i++) { int i, h[6];
cout << h( << i+1 << ) = << h[i] << endl; for (i = 0; i < N; i++) { x[i] = rand() % 6 + 1; }
} histo(x, N, h, 1, 6.1, 6);
for (i = 0; i < 6; i++) { cout << h( << i << ) = << h[i] <<
return 0; endl;}
} return 0;
}
int main() {
int a[10], x[10];
a[0] = 1; 3. Escriba un programa para probar las dos funciones anteriores,
x[10] = 2; utilizando como datos de ejemplo un arreglo de nmeros
aleatorios entre -10 y 10.
cout << a[0] << endl;
return 0;
}
19/10/2016
1. Escriba una funcin que tome tres arreglos como entrada: x[], h[], y[],
junto con sus respectivos tamaos nx, nh, ny. La funcin debe calcular la
convolucin de x y h, definida como:
Supongamos que nuestra aplicacin requiere
asumiendo que h[] vale cero fuera de sus lmites. Escriba un programa de de arreglos organizados en forma de matriz,
prueba que calcule la convolucin de las seales [3, -1, 2, 4] y [-3, 1, 3, -
1], considerando ny = nx + nh 1. Verifique la conmutatividad de la de manera que se haga referencia a cada
convolucin. elemento mediante dos subndices.
2. Escriba una funcin que tome como parmetros un arreglo de enteros y su
tamao. La funcin debe ordenar el arreglo de manera ascendente. Luego
escriba otra funcin que utilice la anterior para encontrar la mediana de un En C/C++ existen dos tcnicas para
arreglo de enteros. Escriba un programa para probar ambas funciones.
implementar este tipo de arreglos:
3. La entropa de un arreglo X[] se puede definir como:
int x[M][N];
x[0] x[0][ x[0][ x[0]
0] 1] [N-
1]
x[1]
x[1][ x[1][ x[1]
0] 1] [N-
SESION 9 1]
int x[M*N];
Arreglos de arreglos Orden lexicogrfico
x 0 1 N-1
-Fcil acceso a -Pueden ser muy eficientes
elementos si se programa de manera
N+0 N+1 N+(N- adecuada.
1)
-Fcil acceso a
Ventajas
renglones -Es posible pasar arreglos
2N+0 2N+1 2N+
(N+1)
de dimensin y tamao
-Fcil extensin al caso arbitrarios como argumentos
multidimensional de una funcin.
-Uso limitado como -El acceso a elementos
argumentos de una requiere mayor cuidado y el
funcin: solo para clculo de la posicin del
Desventajas
arreglos cuyas elemento dentro del arreglo
dimensiones (excepto la lineal.
(M- (M- (M- primera) estn fijas.
1)N+ 1)N+ 1)N+
0 1 (N-1)
1. Elabore una funcin que realice el producto C = AB de dos matrices La memoria puede verse como un conjunto
A de m x n y B de n x p. La funcin debe tomar como parmetros A,
B, C, m, n y p.
de celdas numeradas y ordenadas, cada una
de las cuales puede almacenar un byte de
2. Elabore una funcin que, dado el arreglo x[] de tamao N, calcule el informacin. El nmero correspondiente a
arreglo X[k] para k = 0,,N-1, dado por:
cada celda se conoce como su direccin.
X[k] se conoce como la transformada discreta de Fourier (TDF) de
x[n], y es una seal compleja la cual puede representarse como un Cuando se crea una variable, el compilador
arreglo de N x 2. Dada X[k], es posible recuperar x[n] mediante la
transformada discreta inversa de Fourier (TDIF):
reserva el nmero suficiente de celdas de
memoria (bytes) requeridos para almacenar la
variable, y se encarga de que los espacios
Elabore una funcin que implemente la (TDIF) y verifique que ambas reservados no se traslapen.
funciones son una inversa de la otra calculando el error cuadrtico
medio entre una seal de ruido aleatorio x[n], y la versin
recuperada a partir de la TDIF de la TDF de x[n].
3. Considere dos variables aleatorias X y Y, que pueden tomar valores entre En C/C++ es posible obtener la direccin de
0 y K-1. El histograma conjunto hij de X y Y es una matriz que
representa el nmero de veces que se observa simultneamente X=i y memoria donde se encuentra almacenada una
Y=j en una muestra. Escriba una funcin que tome como argumentos los variable mediante el operador de referencia &
arreglos X y Y, ambos de tamao N y con valores entre 0 y K-1, y calcule
el histograma conjunto (de tamao K x K).
Ejemplo:
4. La informacin mutua de dos variables aleatorias X y Y es una medida de
qu tan fcil es predecir X cuando se conoce Y, y se calcula como
int main() {
I(X,Y) = H(X) + H(Y) H(X,Y), int a = 10, b = 20;
donde H(X) es la entropa de X, y H(X,Y) es la entropa conjunta de X y Y, cout << &a << endl;
la cual puede calcularse a partir del histograma conjunto de X y Y como: cout << &b << endl;
return 0;
}
donde pij = hij / N. Escriba una funcin que calcule la informacin mutua
de dos arreglos.
19/10/2016
Podemos tambin obtener la cantidad de memoria que Cuando se declara un arreglo, se reserva un solo
ocupa una variable (en bytes) mediante el operador bloque contiguo de memoria para almacenar
sizeof: todos sus elementos, y stos se almacenan en la
memoria en el mismo orden que ocupan en el
int main() { arreglo:
int a = 10;
cout << Valor de a: << a << endl;
cout << Direccin de a: << &a << endl; int main() {
cout << Tamao de a: << sizeof(a) << endl; int i, a[10];
return 0; for (i = 0; i < 10; i++) {
} cout << &a[i] << endl;
}
return 0; Verificar que &a[i] es igual
} a &a[0] + i *
sizeof(int)
Un apuntador es una variable que contiene una direccin En C/C++, el nombre de un arreglo es tambin un apuntador al
de memoria (donde posiblemente se almacene el valor de primer elemento del arreglo.
otra variable). De hecho, el lenguaje C no puede distinguir entre un arreglo y
un apuntador: ambos son completamente intercambiables.
Para crear apuntadores, se utiliza el operador * como se
muestra a continuacin: int main() {
int i, a[10], *p;
int main() {
int a = 10; for (i = 0; i < 10; i++) { a[i] = i; };
int *p; p = a;
p = &a; for (i = 0; i < 10; i++) {
cout << Valor de p: << p << endl;
cout << Valor en p: << *p << endl; cout << p[i] << endl;
cout << Direccin de p: << &p << endl; }
}
return 0;
}
int main() { Considere el problema de regresin lineal simple, donde uno desea
int i, n = 1024 * 1024; encontrar una funcin de la forma y(x) = mx + b, dado un conjunto
de n datos (xi , yi). Se puede demostrar que los parmetros de la recta
int *a = new int[n]; que mejor se ajusta a los datos estn datos por:
if (a != NULL) {
for (i = 0; i < n; i++) { a[i] = i; }
delete[] a; _
donde representa el producto punto, y x denota el promedio de x.
}
return 0; Escriba una funcin que tome x, y, n como argumentos y que calcule
} y devuelva m y b. Escriba un programa que genere un conjunto de
1,000,000 de datos de prueba con el modelo yi = 3xi 5 + ei, donde
Es importante siempre liberar la memoria reservada xi ~ U(-100,100) y ei ~ U(-10,10), y luego utilice la funcin anterior
para recuperar m y b a partir de los datos de prueba.
mediante el operador delete[] una vez que ya no se
utiliza.
19/10/2016
Escriba una funcin llamada genera(F, m, n, p) que genere una matriz binaria
aleatoria F de tamao m x n donde cada elemento sea igual a 1 con probabilidad p.
La librera <fstream> define los elementos
Escriba una funcin llamada imprime(F, m, n) que borre la pantalla (usando
necesarias para el manejo de archivos. Los
ofstream of;
of.open(archivo.txt, ios::out);
of << Hola mundo! << endl;
of.close();
of.close(); -4
-6
graficarse en Excel fcilmente
-7
} 0
Espectro de frecuencias de la seal
19/10/2016
n).
int main() {
Para detectar si se ha llegado al final del muestra_archivo(ejemplo.cpp);
return 0;
archivo, se puede utilizar la funcin eof(). }
// Esta funcin imprime el contenido de un archivo Haga un programa que lea una serie de nmeros enteros
void muestra_archivo(char *s) { desde un archivo de texto. El primer nmero en el archivo
int n = 65536; indica cuntos datos ms hay en el archivo. El programa
char temp[n];
debe almacenar todos los datos (excepto el primero) en un
ifstream in(s); Verifica la apertura del archivo arreglo X de tamao adecuado.
if (!in) return;
while (!in.eof()) {
in.getline(temp, n); Luego, el programa debe generar otro arreglo Y que
if (!in.eof()) { cout << temp << endl; } contenga los mismos datos que X, pero sin repetirse; es
} decir, si un nmero aparece mltiples veces en X,
in.close(); aparecer solo una vez en Y.
}
Ejemplo de ejecucin:
Picos de frecuencia
Archivo de entrada Archivo de salida
12 7
5 5
8 8
Frecuencia
7 7
8 9
9 2
2 3
3 4
4
5
4
5
8
Valor de intensidad
Histograma de mri.txt
Una imagen digital puede verse como una matriz donde cada elemento
representa el nivel de intensidad o brillo del pixel correspondiente.