miércoles, 26 de septiembre de 2007

Programa de Tickets

#include
#include

using namespace std;

int Venta(int sits[],int precio[], int x, int& venta)
{
int cantidad, total;
cout<<”\n Cantidad de taquillas: “; cin>>cantidad;
if ( cantidad > sits[x])
{ cout<<”\n ** No hay suficientes taquillas **\n”; return -1; } sits[x] -= cantidad; total = cantidad * precio[x]; venta += total; return cantidad; } int main(int argc, char *argv[]) { int sits[4]; int precio[4]; int e, ventas = 0; int x; sits[0] = 50; sits[1] = 100; sits[2] = 250; sits[3] = 65; precio[0] = 1500; precio[1] = 900; precio[2] = 500; precio[3] = 100; while(!0){ cout<<”\n Asientos Disponibles/Precios\n\n”; cout<<” V.I.P.:\t”<<>”;
cin >> x;

if(x == 0)
break;

switch(x){
case (1):
e=Venta(sits, precio, 0, ventas);
if (e==-1)
break;
cout<<”\n “<break;
case (2):
e=Venta(sits, precio, 1, ventas);
if (e==-1)
break;
cout<<”\n “<break;
case (3):
e=Venta(sits, precio, 2, ventas);
if ( e==-1)
break;
cout<<”\n “<break;
case (4):
e=Venta(sits, precio, 3, ventas);
if ( e == -1)
break;
cout<<”\n “<break;
default:
cout<<”\n\n Opcion No Valida\n”;
break; }
}
return EXIT_SUCCESS;
}

martes, 25 de septiembre de 2007

Programa de Calificaciones

#include
#include
#include
using namespace std;
typedef struct {string nombre; string apellido; int Esp; int Mat; int Soc; int Cn; int Ing; int Prog;} Alumno;int Buscar (string nombre, string apellido, Alumno Est[], int y ) {while(y>=0){if (Est[y].nombre==nombre && Est[y].apellido==apellido){return y;}y–;}return -1;}int RegAlum (Alumno Est[], int& y){int e;string nombre, apellido;cout<<”\n Nombre:\t”;cin>>nombre;cout<<” Apellido:\t”;cin>>apellido;e=Buscar(nombre, apellido, Est, y);if(e>=0){cout<<”\n ** Este alumno ya existe **\n”;return 0;}Est[y].nombre = nombre;Est[y].apellido = apellido;y++;return 1;}
int InsNota (string nombre, string apellido, Alumno Est[], int y){int e;e=Buscar(nombre,apellido,Est,y);if (e==-1){cout<<”\n** No se encuentra el estudiante. **\n\n\n”;return 1;}cout<<”\nInserte la nota de Espanol:”;cin>>Est[e].Esp;cout<<”Inserte la nota de Matematicas:”;cin>>Est[e].Mat;cout<<”Inserte la nota de Ciencias Sociales:”;cin>>Est[e].Soc;cout<<”Inserte la nota de Ciencias Naturales:”;cin>>Est[e].Cn;cout<<”Inserte la nota de Ingles:”;cin>>Est[e].Ing;cout<<”Inserte la nota de Programacion:”;cin>>Est[e].Prog;return 0;}int Imp (string nombre, string apellido, Alumno Est[], int y){int e;e=Buscar(nombre,apellido,Est,y);if (e==-1){cout<<”\n ** No se encuentra el estudiante. **\n”;return 1;}//cout<<”\nNombre: “<int main(int argc, char *argv[]){Alumno Est[1000];
string nombre,apellido;int x=!0,y=0;while (x!=0){cout<<”\n\n Elija la opcion deseada:\n\n\t1)Nuevo Alumno\n\t2)Buscar Alumno\n\t3)Ingreso de notas\n\t0)Salir\n”;cout<<”>”;cin>>x;
switch(x){case (1):RegAlum(Est, y);break;case (2):cout<<”Ingrese el Nombre del Estudiante:”;cin>>nombre;cout<<”Ingrese el Apellido del Estudiante:”;cin>>apellido;Imp (nombre,apellido,Est,y);break;case (3):cout<<”Ingrese el Nombre del Estudiante:”;cin>>nombre;cout<<”Ingrese el Apellido del Estudiante:”;cin>>apellido;InsNota (nombre,apellido,Est,y);break;default: cout<<”** Opcion Incorrecta **”;break;
}}return EXIT_SUCCESS;}

jueves, 20 de septiembre de 2007

1ER PRUEBIN

DISEÑE ALGORITMO PARA LA SOLUCION DE CADA UNO DE LOS SIGUIENTES PROBLEMAS:

FACTORIAL:

int i, num;
long fac;
printf("\n INgrese numero: ");
scanf("%d", &num);

{ fac = 1;
for (i=1; i<=num; i++)
fac *= i;
printf ("factorial es: %d",fac);

POTENCIACION:

int x,n,R;
printf("escriba el numero k kiere elevar\n");
scanf("%d",&x);
printf("escriba la potencia\n");
scanf("%d",&n);
R= pow(x,n);
printf("\n\t%d\n",R);

SUMA DE UNA SERIE DE NUMEROS

int i,n,s;
s=0;
printf("dame n:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
s=s+i; }
printf("la sumatoria es:%d\n",s);

MINIMO COMUN MULTIPLO

int a, b, p, q, r, mcd, mcm;
printf("\nDigite dos números enteros y positivos: ");
scanf("%d %d", &a, &b);
if (a < b){ p = b;q = a; }
else{ p = a;q = b; }
r = p%q;
while ( r != 0 )
{ p = q;q = r;r = p%q; }
mcd = q;mcm = a*b/mcd;
printf("\n\tmcm( %d, %d) = %d", a, b, mcm);

ETAPAS PROCESO DE COMPILACION



ABSTRACTO
Este documento contiene información acerca del proceso de compilación y sus diferentes fases en el proceso de paso del código fuente al código maquina entendible y ejecutable por el computador. Podrán ver gráficos ilustrativos de las fases para mayor entendimiento. Palabras Claves Programa, código fuente, código maquina, compilación, linkado.

1. INTRODUCCION
Programa: Algoritmo (secuencia no ambigua, finita y ordenada de instrucciones para la resolución de un determinado problema) traducido a un lenguaje de programación, de modo que un ordenador es capaz de ejecutarlo. Programación: Elaboración de un programa de manera que éste sea: − Correcto Un programa será correcto si hace lo que debe hacer, de modo que se deben especificar de manera muy clara cuáles son los datos sobre los que se trabajarán y lo que se debe hacer con ellos. Todo debe ser documentado y probado antes de desarrollarlo. − Eficiente Debe consumir la menor cantidad de recursos (tiempo y/o memoria) posible. − Claro Es muy importante la claridad y legibilidad de todo programa, ya que facilitará al máximo la tarea de mantenimiento posterior del software. − Modular Los programas suelen subdividirse en subprogramas (módulos), para reducir la complejidad de aquella parte que se está implementando y facilitar la reutilización de código. Para la elaboración de un programa hay que distinguir entre las siguientes dos fases: − Fase de compilación y linkado (link, montado o enlace) − Fase de ejecución de un programa

2. FASE DE COMPILACIÓN Y LINKADO (LINK, MONTADO O ENLACE) Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado directamente por un ordenador, sino que debe ser traducido a lenguaje máquina. Las etapas por las que debe pasar un programa escrito en un lenguaje de programación, hasta poder ser ejecutable son:




Figura 1. Proceso de transformación de un programa fuente a un programa ejecutable.

Programa fuente: Programa escrito en un lenguaje de alto nivel (texto ordinario que contiene las sentencias del programa en un lenguaje de programación). Necesita ser traducido a código máquina para poder ser ejecutado.

Compilador: Programa encargado de traducir los programas fuentes escritos en un lenguaje de alto nivel a lenguaje máquina y de comprobar que las llamadas a las funciones de librería se realizan correctamente.

Programa (o código) objeto: Es el programa fuente traducido (por el compilador) a código máquina. Aún no es directamente ejecutable.

Programa Ejecutable: Traducción completa a código máquina, realizada por el enlazador, del programa fuente
y que ya es directamente ejecutable.

Linker (montador o enlazador): Es el programa encargado de insertar al programa objeto el código máquina de las funciones de las librerías (archivos de biblioteca) usadas en el programa y realizar el proceso de montaje, que producirá un programa ejecutable .exe. Las librerias son una colección de código (funciones) ya programado y traducido a código máquina, listo para utilizar en un programa y que facilita la labor del programador.

Como cada lenguaje de programación tiene unas reglas especiales (sintaxis) debe existir un compilador específico para cada lenguaje de programación.

Si el programa fuente es sintácticamente correcto, el compilador generará el código objeto, en caso contrario mostrará una lista con los errores encontrados, no generándose ningún programa objeto, para que procedamos a su depuración Los compiladores emiten mensajes de error o de advertencia durante las fases de compilación, de enlace o de ejecución de un programa:

• Los errores en tiempo de compilación son los que se producen antes de la ejecución del programa, durante el proceso de compilación del programa.

• Los errores en tiempo de ejecución son los que se producen durante la ejecución del programa. Son los más difíciles de encontrar, no son detectados por el compilador, ya que son errores de lógica, no de sintaxis.

Aunque al compilar un programa no de errores, el programa puede funcionar incorrectamente y/o a dar errores durante su ejecución. Por ejemplo:

• Un programa puede producir resultados erróneos, al equivocarnos (errores lógicos) al programar el algoritmo (sumar en vez de restar, etc.).

• Un programa puede interrumpirse bruscamente, por ejemplo si tenemos que hacer una división y el divisor es cero, etc.

Los errores que se pueden producir en la fase de compilación son:
− Errores fatales: Son raros. Indican errores internos del compilador.
Cuando ocurren la compilación se detiene inmediatamente.

− Errores de sintaxis: Son los errores típicos de sintaxis. No detienen la compilación sino que al finalizar ésta se mostrará la lista con todos los errores encontrados. Algunos errores suelen ser consecuencia de otros cometidos con anterioridad. Con este tipo de errores no se puede obtener un programa objeto y por lo tanto tampoco el ejecutable.

− Advertencias o avisos (warnings): Indican que hay líneas de código sospechosas que a pesar de no infringir ninguna regla sintáctica, el compilador las encuentra susceptibles de provocar un error. Cuando se detecta un warning la compilación no se detiene. Si en un programa fuente sólo se detectan warnings sí que se podrá obtener un programa objeto, que tras el linkado dará lugar a un programa ejecutable.

Con respecto a los errores en tiempo de ejecución, encontrar la causa que los provoca es una labor en ocasiones complicada, razón por la cual los EID
(Entornos Integrados de Desarrollo, p.ej. DevC++) nos proporcionan una herramienta llamada Depurador que nos ayuda a encontrar los errores lógicos y demás errores producidos en tiempo de ejecución.

Un depurador (debugger), es un programa diseñado específicamente para la detección, verificación y corrección de errores. Los depuradores nos permiten trazar el programa (ejecutarlo sentencia a sentencia) y visualizar el contenido de las variables y direcciones de memoria durante la ejecución del programa.

Además permiten alterar el flujo de ejecución del mismo, cambiar los valores de las variables e introducir puntos de parada.
1. EL COMPILADOR DE C. CARACTERÍSTICAS GENERALES
El lenguaje C es un lenguaje muy potente y eficiente de nivel medio: combina elementos de lenguajes de alto nivel con la funcionalidad del lenguaje ensamblador. Es adecuado para la programación de sistemas.

♦ Es un lenguaje de propósito general (puede utilizarse para desarrollar sistemas operativos, gestores de bases de datos, etc).

♦ El código de C es muy portable: se puede adaptar el software escrito para un tipo de computadora a otra computadora sin hacer muchos cambios.

♦ El lenguaje C es un lenguaje estructurado: permite seccionar y esconder (mediante subrutinas y variables locales) del resto del programa toda la información e instrucciones necesarias para realizar una determinada tarea.

♦ El lenguaje C sólo tiene 32 palabras clave, (BASIC por ejemplo tiene 159).

♦ Suele incluir potentes librerías de funciones que aumentan su potencia.

♦ El lenguaje C es compilado, no interpretado. Un intérprete lee el código fuente de un programa línea a línea y las traduce online para que la CPU las pueda interpretar, pero no genera ningún programa objeto. Un compilador lee el programa entero, lo traduce y genera un código objeto directamente ejecutable y entendible por el microprocesador.


2. REFERENCIAS
[1] http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node87.html
[2] http://www.uhu.es/04004/material/Transparencias3.pdf

PERMUTACIONES

1. INTRODUCCION
Antiguamente, se definía una permutación así:
Sea un número n de objetos, (n>1), alineados en
una mesa con el fin de poder atribuir a cada cual
su rango: el objeto más a la izquierda es el
primero, el que sigue el segundo y así
sucesivamente. Ahora se mezclan los objetos y se
les vuelven a colocar en una fila, en cualquier
orden. Se dice que se han permutado los objetos,
o, lo que viene a ser lo mismo, los números de 1 a
n.
Si el objeto que se encuentra actualmente a la
izquierda era antes el quinto de la fila, si el que se
encuentra a su derecha era el séptimo ... y el que
está al final era el segundo ... entonces la actual
permutación está caracterizada por los serie de
números ( 5, 7, ..., 2).
La definición moderna de una permutación ya no
hace referencia al mundo real, y prescinde de los
objetos.
Para conocer la permutación, sólo se necesita
conocer la serie de números (5, 7, ..., 2) en el
ejemplo. Se dice que 5 es la imagen de 1 por la
permutación, 7 es la imagen de 2, ...y 2 es la
imagen de n. De este punto de vista, una
permutación es una aplicación biyectiva de
{1,...,n} hacia {1,...,n}. Es biyectiva porque a cada
posición anterior de un objeto corresponde una
única posición actual.
Las Técnicas de conteo son importantes en matemáticas y las
ciencias de la computación, particularmente en el análisis de
algoritmos.
Una permutación del conjunto {1, . . . , n} es una lista de
longitud n sin repetición formada por sus elementos; el conjunto
de todas ellas lo llamaremos
Perm({1, . . . , n}) = { n-listas sin repetición formadas con los
símbolos {1, . . . , n}} .
Sabemos, por supuesto, que hay n! de ellas. En los términos en
que las estamos definiendo, cada permutación es una
(re)ordenación de los elementos de
{1, . . . , n}.
Ya vimos, en el ejemplo 2.2.5, que podemos entender también
una permutación de un conjunto finito X como una aplicación
biyectiva de X en X. Como siempre, para simplificar la notación,
supondremos que X = {1, . . . , n}.
Para exhibir una permutación podemos escribir la lista
correspondiente,
(2, 7, 5, 1, . . . , 6) (permutación como lista) o bien utilizar la
siguiente notación:
)
1 2 3 4 . . . n
2 7 5 1 . . . 6



(permutación como aplicación biyectiva) que nos permite
reconocer rápidamente la imagen de cada elemento de {1, . . . ,
n} por la permutación. Es decir, identificamos la lista (2, 7, 5, 1,
. . . , 6) con la aplicación biyectiva que lleva el 1 en el 2, el 2 en
el 7, el 3 en el 5, etc.
Unas permutaciones especiales son los desbarajustes, las
aplicaciones biyectivas que no fijan elemento alguno (el símbolo
j nunca va al j, para cada j = 1, . . . , n). En términos de listas,
son las n-listas tales que, para cada j = 1, . . . , n, el símbolo j no
ocupa la posición j de la lista. Pronto calcularemos cuantos de
estos desbarajustes hay. Otras permutaciones que aparecerán mas
adelante son las trasposiciones, cuyo efecto es el de
intercambiar las posiciones de dos elementos (y fijar los n − 2
restantes).
Para lo que sigue, es conveniente tener presente la definición de
permutación como aplicación biyectiva del conjunto en si mismo.
Sean, por ejemplo, las dos siguientes permutaciones del conjunto
X = {1, 2, 3, 4, 5}:
f : (1, 3, 2, 5, 4) =
)
1 2 3 4 5
1 3 2 5 4
g : (2, 1, 3, 5, 4) =
)
1 2 3 4 5
2 1 3 5 4
.
La permutación g es una aplicación del conjunto {1, 2, 3, 4, 5} en
si mismo que lleva, por ejemplo, el elemento 1 en el 2: g(1) = 2.
Pero también f lo es, y observemos que lleva el 2 en el 3, f(2) =
3. Así que si primero hacemos actuar g y luego f, entonces, por
ejemplo, el elemento 1 acaba yendo al 3.
2. PERMUTACIONES SIN REPETICIÓN
Las permutaciones sin repetición de n elementos se definen
como las distintas formas de ordenar todos esos elementos
distintos, por lo que la única diferencia entre ellas es el orden de
colocación de sus elementos.
El número de estas permutaciones
será:
Ponemos como ejemplo las siguientes letras: aei
2.1.1 El número de permutaciones sin
repetición de esos 3 elementos es 6 y esas
permutaciones son:
aei
aie
eai
eia
iae
iea
3. PERMUTACIONES CON REPETICIÓN
Llamamos a las permutaciones con repetición de n elementos
tomados de a en a, de b en b, de c en c, etc, cuando en los n
elementos existen elementos repetidos (un elemento aparece a
veces, otro b veces, otro c veces, etc) verificándose que
a+b+c+...=n.
El número de estas permutaciones será:
Ahora ponemos como ejemplo las siguientes letras: aea
3.1.1 El número de permutaciones con
repetición de esos 3 elementos tomados de
2 en 2 y de 1 en 1 es 3 y esas permutaciones
son:
aea
aae
eaa



4. REFERENCIAS
[1] Estructuras de las Matematicas Discretas para la
Computacion. Kolman, Busby, Ross.. Pag. 75
[2] http://club.telepolis.com/ildearanda/combina/per_marco.htm
[3] http://www.uam.es/personal_pdi/ciencias/gallardo/capitulo3
b_2004_2005.pdf

TIPOS DE VARIABLES POR SU ARQUITECTURA

data type ------------32 size (bits)--------- 64 size (bits)

char ---------------------8---------------------- 8

short-------------------- 16-------------------- 16

int ----------------------32-------------------- 32

long --------------------32--------------------- 64

float --------------------32--------------------- 32

double -----------------64---------------------- 64

long double ------------128 ---------------------128