domingo, 5 de junio de 2011

5. En una Universidad el pago de matricula de los alumnos se determina según el número de materias que cursan.

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripcion: 5.  En una Universidad el pago de matricula de los alumnos
 se determina según el número de materias que cursan. El
costo de todas las materias es el mismo.
Se ha establecido un programa para estimular a los alumnos, el cual
consiste en lo siguiente: si el promedio
obtenido por un alumno en el ultimo periodo es mayor o igual que 4.3,
se le hará un descuento del 30% sobre
la matricula y no se le cobrara el Uso de Internet; si el promedio
obtenido es menor que 4.3 deberá pagar la
colegiatura completa, la cual tiene un valor de $30.000.
 Obtener cuanto debe pagar un alumno.*/

#include<stdio.h>//biblioteca
#include<stdlib.h>//biblioteca

void main(void){
     int numMateria;
     float promedio, descuento, colegiatura, pagoTotal, costoMateria;
   
     printf("\n\n\t Por favor proporcione el promedio del alumno:   ");
     scanf("%f", &promedio);
     if(promedio>=4.3){
                      printf("\n\n\t Indique el costo de cada materia:  ");
                      scanf("%f", &costoMateria);
                      printf("\n\n\t Indique el numero de materias que va a cursar el alumno:   ");
                      scanf("%d", &numMateria);
                      colegiatura=costoMateria*(numMateria);
                      descuento=(.30)*(colegiatura);
                      pagoTotal=colegiatura-descuento;
                      printf("\n\n\t El precio de la matricula es de: %.2f", pagoTotal);
                      }//if
     if(promedio<4.3){
                      colegiatura=30.00;
                      printf("\n\n\t El precio de la matricula es de: %.2f", colegiatura);
                      }//if
     printf("\n\n\t Que tenga un buen dia :D  \n\n\t");
     system("pause");
}//main

Una compañía de seguros esta abriendo un departamento. de finanzas y estableció un programa para captar clientes,

/*Autora: Camacho Bolaños Angelica Miriam 2293.
Descripcion: 4.  Una  compañía  de  seguros  esta  abriendo  un  departamento. 
de  finanzas  y  estableció  un  programa  para  captar
clientes, que  consiste  en  lo  siguiente: Si  el monto por  el que  se
 efectúa  el préstamo  es menor que $500.000  la
cuota a pagar  será por el 3% del monto, y  si el monto es mayor que
$500.000  la cuota a pagar  será el 2% de
monto. La compañía desea determinar cual será la cuota que debe pagar un cliente.*/

#include<stdio.h>//biblioteca
#include<conio.h>//biblioteca

void main(void){
     float monto, cuotaMenor, cuotaMayor, pagoMenor, pagoMayor;
     printf("\n\n\t Por favor proporcione el monto del prestamo:  ");
     scanf("%f", &monto);
     if(monto<500.00){
                      cuotaMenor=.03*monto;
                      pagoMenor=cuotaMenor+monto;
                      printf("\n\n\t El pago a realizar es de: %.2f", pagoMenor);
                      }//if
     if(monto>=500.00){
                       cuotaMayor=.02*monto;
                       pagoMayor=cuotaMayor+monto;
                       printf("\n\n\t El pago a realizar es de: %.2f", pagoMayor);
                       }//if
     printf("\n\n\t Que tenga un buen dia :) \n\n\t");
     system("pause");
}//main

3. Calcular el número de pulsaciones que debe tener una persona por cada 10 segundos de ejercicio aeróbico; la formula que se aplica cuando el sexo es femenino es:

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripcion: 3.  Calcular  el número de pulsaciones
que debe  tener una persona por  cada 10  segundos de  ejercicio  aeróbico;  la
formula que se aplica cuando el sexo es femenino es:
    num. pulsaciones = (220 - edad)/10
y si el sexo es masculino:
    num. pulsaciones = (210 - edad)/10 */
#include<stdio.h>//biblioteca
#include<conio.h>//biblioteca
void main(void){
     int sexo, edad;
     float pulsacionesM, pulsacionesH;
           printf("\n\n\t Proporcione su sexo: Si es femenino presione 1 si no presione 2:   ");
           scanf("%d", &sexo);
           printf("\n\n\t Proporcione su edad:    ");
           scanf("%d", &edad);
           if(sexo=1){
               pulsacionesM=(220-edad)/10;
               printf("\n\n\t Por cada 10 segundos de ejercicio aerobico tiene: %.2f pulsaciones\n\n\t", pulsacionesM);
               }
           else{
                if(sexo=2){
                             pulsacionesH=(210-edad)/10;
                             printf("\n\n\t Por cada 10 segundos de ejercicio aerobico tiene: %.2f pulsaciones\n\n\t", pulsacionesH);
                             }//if
                             }//else
                            
           system("pause");
}//main

2. En un supermercado se hace una promoción, mediante la cual el cliente obtiene un descuento dependiendo de un número que se escoge al azar. Si el número escogido es menor que 50 el descuento es del 15% sobre el total de la compra, si es mayor o igual a 50 el descuento es del 20%. Obtener cuanto dinero se le descuenta.

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripcion: 2.  En un supermercado se hace una promoción, mediante
 la cual el cliente obtiene un descuento dependiendo de un
número que se escoge al azar. Si el número escogido es menor
que 50 el descuento es del 15% sobre
el total de la
compra, si es mayor o igual a 50 el descuento es del 20%.
Obtener cuanto dinero se le descuenta. */

#include<stdio.h>//biblioteca
#include<conio.h>//bibloteca

void main(void){
     int numero;
     float descuentoMenor=.15, descuentoMayor=.20, totalCompra, descuentoCompra, compra;
     printf("\n\n\t Por favor ingrese la compra:    ");
     scanf("%f", &compra);
     printf("\n\n\t Por favor ingrese el numero que le toco:    ");
     scanf("%d", &numero);
     if(numero<50){
                   descuentoCompra=compra*descuentoMenor;
                   totalCompra=compra-descuentoCompra;
                   printf("\n\n\t El descuento es de: %.2f", totalCompra);
                   }//if
     if(numero>=50){
                    descuentoCompra=compra*descuentoMayor;
                    totalCompra=compra-descuentoCompra;
                   printf("\n\n\t El descuento es de: %.2f", totalCompra);
                   }//if 
     printf("\n\n\n ___________________________________________ \n\n\n\t");                
     system("pause");
}//main
                   

structuras condicionales: 1. Calcular el total que una persona debe pagar en un llanta, si el precio por unidad es de $80.000 si se compran menos de 5 llantas y de $70.000 si se compran 5 o más.

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripcion: Estructuras condicionales: 1.  Calcular el  total que
una persona debe pagar en un  llanta,  si el precio por unidad es de $80.000
   si se compran menos de 5 llantas y de $70.000 si se compran 5 o más.*/
#include<stdio.h>//biblioteca
#include<conio.h>//biblioteca

void main(void){
     float totalNormal, totalPromocion;
     int numLlantas;
    
     printf("\n\n\t Por favor ingrese la cantidad de llantas que desea comprar:     ");
     scanf("%d", &numLlantas);
     if(numLlantas<5){
                 totalNormal=numLlantas*80.00;
                 printf("\n\n\t El precio que tiene que pagar es de: %.2f",totalNormal);
                 }//while
     if(numLlantas>=5){
          totalPromocion=(numLlantas)*70.00;
           printf("\n\n\t El precio que tiene que pagar es de: %.2f",totalPromocion);
           }//if
      
          
     printf("\n\n\t Que tenga un buen dia :) \n\n\t");
     system("pause");
}//main

sábado, 4 de junio de 2011

10. Un alumno desea saber cual será su promedio general en las tres materias mas fáciles que cursa y cual será el promedio que obtendrá en cada una de ellas. Estas materias se evalúan como se muestra a continuación: La calificación de Calculo se obtiene de la siguiente manera: Examen 90% Promedio de trabajos 10% En esta materia se pidió un total de tres trabajos. La calificación de Programación se obtiene de la siguiente manera: Examen 80% Promedio de trabajos 20% En esta materia se pidió un total de dos trabajos. La calificación de Introducción a la Ingeniería se obtiene de la siguiente manera: Examen 85% Promedio de trabajos 15% En esta materia se pidió un promedio de tres trabajos. La calificación de Física se obtiene de la siguiente manera: Primer Parcial 15% Trabajo 5% Segundo Parcial 15% Trabajo 5% Tercer Parcial 20% Trabajo 10% Exámen Final 20% Trabajos 10%

/*Autora: Camacho Bolaños Angelica Miram
Descripcion: 10.  Un alumno desea  saber cual  será  su promedio general en  las 
tres materias mas  fáciles que cursa y cual  será el
promedio que obtendrá en cada una de ellas. Estas materias se evalúan como
se muestra a continuación:

La calificación de Calculo se obtiene de la siguiente manera:
Examen 90%
Promedio de trabajos 10%
En esta materia se pidió un total de tres trabajos.

La calificación de Programación se obtiene de la siguiente manera:
Examen 80%
Promedio de trabajos 20%
En esta materia se pidió un total de dos trabajos.

La calificación de Introducción a la Ingeniería se obtiene de la siguiente manera:
Examen 85%
Promedio de trabajos 15%
En esta materia se pidió un promedio de tres trabajos.

La calificación de Física  se obtiene de la siguiente manera:
Primer Parcial 15%
Trabajo 5%
Segundo Parcial 15%
Trabajo 5%
Tercer  Parcial 20%
Trabajo 10%
Exámen Final 20%
Trabajos 10%*/

void main(void){
     float promedioGeneral, calculo, examenCalculo, trabajosCalculo, trabajo1Calculo;
     float trabajo2Calculo, trabajo3Calculo, promedioTrabajos, programacion, examenProgramacion;
     float trabajosProgramacion, trabajo1Progra, trabajo2Progra, promedioTrabPro, introInge;
     float examenIntroInge, trabajosIntroInge, trabajo1IntroInge, trabajo2IntroInge;
     float trabajo3IntroInge, promedioIntroInge, fisica, parcial1Fisica, trabajo1Fisica, parcial2Fisica;
     float trabajo2Fisica, parcial3Fisica, trabajo3Fisica, examenFisica, trabajosFisica;
     printf("\n\n\t Por favor ingrese la calificacion del examen de calculo:    ");
     scanf("%f", &examenCalculo);
     printf("\n\n\t Por favor ingrese la calificacion del primer trabajo de calculo:   ");
     scanf("%f", &trabajo1Calculo);
     printf("\n\n\t Por favor ingrese la calificacion del segundo trabajo de calculo:   ");
     scanf("%f", &trabajo2Calculo);
     printf("\n\n\t Por favor ingrese la calificacion del tercer trabajo de calculo:   ");
     scanf("%f", &trabajo3Calculo);
     promedioTrabajos=(trabajo1Calculo+trabajo2Calculo+trabajo3Calculo)/3;
     calculo=(examenCalculo*.90)+(promedioTrabajos*.10);
     printf("\n\n\t La calificacion de calculo es: %.2f", calculo);
     printf("\n\n\t Por favor ingrese la calificacion del examen de Programacion:    ");
     scanf("%f", &examenProgramacion);
     printf("\n\n\t Por favor ingrese la calificacion del primer trabajo de Programacion:   ");
     scanf("%f", &trabajo1Progra);
     printf("\n\n\t Por favor ingrese la calificacion del segundo trabajo de Programacion:   ");
     scanf("%f", &trabajo2Progra);
     promedioTrabPro=(trabajo1Progra+trabajo2Progra)/2;
     programacion=(examenProgramacion*.80)+(promedioTrabPro*.20);
     printf("\n\n\t La calificacion de Programacion es: %.2f", programacion);
      printf("\n\n\t Por favor ingrese la calificacion del examen de Introduccion a la Ingenieria:    ");
     scanf("%f", &examenIntroInge);
     printf("\n\n\t Por favor ingrese la calificacion del primer trabajo de Introduccion a la Ingenieria:   ");
     scanf("%f", &trabajo1IntroInge);
     printf("\n\n\t Por favor ingrese la calificacion del segundo trabajo de Introduccion a la Ingenieria:   ");
     scanf("%f", &trabajo2IntroInge);
     printf("\n\n\t Por favor ingrese la calificacion del tercer trabajo de Introduccion a la Ingenieria:   ");
     scanf("%f", &trabajo3IntroInge);
     promedioIntroInge=(trabajo1IntroInge+trabajo2IntroInge+trabajo3IntroInge)/3;
     introInge=(examenIntroInge*.85)+(promedioTrabajos*.15);
     printf("\n\n\t La calificacion de Introduccion a la Ingenieria es: %.2f", introInge);
     printf("\n\n\t Por favor ingrese la calificacion del primer parcial de Fisica:    ");
     scanf("%f", &parcial1Fisica);
     printf("\n\n\t Por favor ingrese la calificacion del primer trabajo de Fisica:   ");
     scanf("%f", &trabajo1Fisica);
     printf("\n\n\t Por favor ingrese la calificacion del segundo parcial de Fisica:    ");
     scanf("%f", &parcial2Fisica);
     printf("\n\n\t Por favor ingrese la calificacion del segundo trabajo de Fisica:   ");
     scanf("%f", &trabajo2Fisica);
     printf("\n\n\t Por favor ingrese la calificacion del tercer parcial de Fisica:    ");
     scanf("%f", &parcial3Fisica);
     printf("\n\n\t Por favor ingrese la calificacion del tercer trabajo de Fisica:   ");
     scanf("%f", &trabajo3Fisica);
     printf("\n\n\t Por favor ingrese la calificacion del examen final de Fisica:   ");
     scanf("%f", &examenFisica);
     printf("\n\n\t Por favor ingrese la calificacion de los trabajos de Fisica:   ");
     scanf("%f", &trabajosFisica);
     fisica=(parcial1Fisica*.15)+(trabajo1Fisica*.05)+(parcial2Fisica*.15)+(trabajo2Fisica*.05)+(parcial3Fisica*.20)+(trabajo3Fisica*.10)+(examenFisica*.20)+(trabajosFisica*.10);
     printf("\n\n\t La calificacion de Fisica es: %.2f", fisica);
     promedioGeneral=(fisica+introInge+programacion+calculo)/4;
     printf("\n\n\t El promedio General es de: %.2f", promedioGeneral);
     printf("\n\n\t Que tenga un buen dia :) \n\n\t");
     system("pause");
}//main

9. Tres personas deciden invertir su dinero para fundar una empresa. Cada una de ellas invierte una cantidad distinta. Obtener el porcentaje que cada quien invierte con respecto a la cantidad total invertida.

/*Autora: Camacho Bolaños Angelica Miriam 2293.
Descripcion: 9.  Tres  personas  deciden  invertir  su  dinero  para  fundar  una  empresa. 
Cada  una  de  ellas  invierte  una  cantidad
distinta. Obtener el porcentaje que cada quien invierte con respecto a la cantidad total invertida. */
#include<stdio.h>//biblioteca

void main (void){
     float inversionista1, inversionista2, inversionista3, porcentaje1, porcentaje2, porcentaje3, total;
    
     printf("\n\n\t Por favor ingrese la cantidad del primer inversionista:        ");
     scanf("%f", &inversionista1);
     printf("\n\n\t Por favor ingrese la cantidad del segundo inversionista:        ");
     scanf("%f", &inversionista2);
     printf("\n\n\t Por favor ingrese la cantidad del tercer inversionista:        ");
     scanf("%f", &inversionista3);
     total=inversionista1+inversionista2+inversionista3;
     printf("\n\n\t La inversion total es de: %.2f", total);
     porcentaje1=(100*inversionista1)/total;
     porcentaje2=(100*inversionista2)/total;
     porcentaje3=(100*inversionista3)/total;
     printf("\n\n\t El porcentaje del primer inversionista es de: %.2f", porcentaje1);
     printf("\n\n\t El porcentaje del segundo inversionista es de: %.2f", porcentaje2);
     printf("\n\n\t El porcentaje del tercer inversionista es de: %.2f", porcentaje3);
     printf("\n\n\t Que tenga buen dia \n\n\t ");
     system("pause");
}//main

8. Todos los lunes, miércoles y viernes, una persona corre la misma ruta y cronometra los tiempos obtenidos. Determinar el tiempo promedio que la persona tarda en recorrer la ruta en una semana cualquiera.

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripción: 8.  Todos  los  lunes,  miércoles  y  viernes,
 una  persona  corre  la  misma  ruta  y  cronometra  los  tiempos  obtenidos.
Determinar el tiempo promedio que la persona tarda en recorrer la ruta en una semana cualquiera. */
#include<stdio.h>//biblioteca

void main(void){
     int horas, minutos, segundos, lunes, miercoles, viernes;
     float promedio;
     printf("\n\n\t Por favor ingrese el tiempo recorrido el dia lunes:    ");
     scanf("%d", &lunes);
     printf("\n\n\t Por favor ingrese el tiempo recorrido el dia miercoles:    ");
     scanf("%d", &miercoles);
     printf("\n\n\t Por favor ingrese el tiempo recorrido el dia viernes:    ");
     scanf("%d", &viernes);
    promedio=((lunes+miercoles+viernes)/3);
     printf("\n\n\n\t El promedio del recorrido de la misma ruta semanal es: %.2f", promedio);
     printf("\n\n\t Que tenga un buen dia :)\n\n\n\t");
     system("pause");
}//main

7. El dueño de una tienda compra un articulo a un precio determinado. Obtener el precio en que lo debe vender para obtener una ganancia del 30%.

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripción: 7.  El dueño de una tienda compra un articulo a un precio determinado.
Obtener el precio en que lo debe vender para
obtener una ganancia del 30%. */
#include<stdio.h>//biblioteca

void main(void){
     float precioGanancia, articulo, ganancia;
     printf("\n\n\t Por favor ingrese el precio de compra del articulo:    ");
     scanf("%f", &articulo);
     ganancia=(.30)*(articulo);
     precioGanancia=articulo+ganancia;
     printf("\n\n\t El precio para obtener una ganancia es: %.2f", precioGanancia);
     printf("\n\n\t Que tenga un buen dia :)\n\n\n\t");
     system("pause");
}//main

6. En un hospital existen tres áreas: Ginecología, Pediatría, Traumatología. El presupuesto anual del hospital se reparte conforme a la siguiente. tabla: Área Porcentaje del presupuesto Ginecología 40% Traumatología 30% Pediatría 30% Obtener la cantidad de dinero que recibirá cada área, para cualquier monto presupuestal.

/*Autora: Camacho Bolaños Angélica Miriam 2293
Descripción: 6.  En  un  hospital  existen  tres  áreas: Ginecología,  Pediatría, Traumatología.
 El  presupuesto  anual  del  hospital  se
reparte conforme a la siguiente. tabla:
    Área      Porcentaje del presupuesto
    Ginecología    40%
    Traumatología    30%
    Pediatría    30%
Obtener la cantidad de dinero que recibirá cada área, para cualquier monto presupuestal. */
#include<stdio.h>//biblioteca


void main(void){
     float presupuesto, ginecologia, traumatologia, pediatria;
     printf("\n\t Por favor ingrese la cantidad del presupuesto disponible:      ");
     scanf("%f", &presupuesto);
     ginecologia=(presupuesto)*(.40);
     traumatologia=(presupuesto)*(.30);
     pediatria=(presupuesto)*(.30);
     printf("\n\t El presupuesto para el area de ginecologia es: %0.2f", ginecologia);
     printf("\n\t El presupuesto para  el area de traumatologia es: %0.2f", traumatologia);
     printf("\n\t El presupuesto para el area de pediatria es: %0.2f", pediatria);
     printf("\n\n\t Que tenga un buen dia :)\n\n\t");
     system("pause");
}//main

5. Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre su salario anterior.

/* Autora: Camacho Bolaños Angélica Miriam 2293
Descripción:5.  Calcular el nuevo salario de un obrero si obtuvo un incremento
del 25% sobre su salario anterior. */
#include<stdio.h>//biblioteca
#include<conio.h>//biblioteca
void main (void){
      float salario, incremento, total;
      printf("\n\n\t Ingrese el salario normal del obrero:    ");
      scanf("%f", &salario);
      incremento=.25*salario;
      total=incremento+salario;
      printf("\n\n\n\t El incremento del salario del obrero es de: %.2f", total);
      printf("\n\t Que tenga un buen dia :D\n\n\t");
      system("pause");
}//main

4. Calcular el número de pulsaciones que una persona debe tener por cada 10 segundos de ejercicio, si la formula es: Num_ pulsaciones = (220 - edad)/10 *

/*Autora: Camacho Bolaños Angélica Miriam 2293
Descripción: 4.  Calcular el número de pulsaciones que una persona debe tener por cada 10 segundos de ejercicio, si la formula es:
    Num_ pulsaciones = (220 - edad)/10 */
   
#include<stdio.h>//biblioteca
#include<stdlib.h>//biblioteca

int main (void){
    int numPul, edad, segundos=10;
    printf("\n\t Proporcione la edad de la persona:    ");
    scanf("%d", &edad);
    numPul=(220-edad)/10;
    printf("\n\t El numero de pulsaciones son: %d por cada 10 segundos", numPul);
    printf("\n\n\t Que tenga un buen dia :)\n\t ");
    system("pause");
}//main

3. La presión, el volumen y la temperatura de una masa de aire se relacionan por la formula masa = (presión * volumen)/(0.37 * (temperatura + 460))

/*Autora: Camacho Bolaños Angélica Miriam 2293
Descripción: 
3.  La presión, el volumen y la temperatura de una masa de aire se relacionan por la formula
  masa = (presión * volumen)/(0.37 * (temperatura + 460)) */
 
#include<stdio.h>//biblioteca

void main(void){
      float masa, presion, volumen, temperatura;
      printf("\n\t Proporcione la presion de aire que desea calcular:    ");
      scanf("%f",&presion);
      printf("\n\t Proporcione el volumen  del aire que desea calcular:    ");
      scanf("%f",&volumen);
      printf("\n\t Proporcione la temperatura de aire que desea calcular:   ");
      scanf("%f",&temperatura);
      masa=(presion*volumen)/(.37*(temperatura + 460));
      printf("\n\t La masa total es: %f", masa);
      printf("\n\t Que tenga un buen dia");
      printf("\n\t Presione enter para terminar");
      getche();
}//main                  

Programa #2 Leer un número y escribir el valor absoluto del mismo.

2.  Leer un número y escribir el valor absoluto del mismo.
/*Autora: Camacho Bolaños Angélica Miriam 2293
Descripción: 2.  Leer un número y escribir el valor absoluto del mismo. */
#include<stdio.h>//biblioteca

void main (void){
       int valor, numero;
  
          printf("\n\t Proporcione el numero:   ");
          scanf("%d", &numero);
          if(numero>=0){
             printf("\n\t El valor absoluto es %d", numero);
          }//if
            if(numero<0){
               valor=numero*(-1);
                printf("\n\t El valor absoluto es %d\n", valor);
                }//if
                getche();       
            printf("\n\t Que tenga un buen dia");
            fflush(stdin);
            printf("\n\t Presione enter para terminar");
            getchar();
}//main                                        

miércoles, 1 de junio de 2011

Piramide de asteriscos

#include<stdio.h>

void main(void){

    int b,a,d,m,n;

    printf("Programa que imprime una piramide\n");
    printf("Dame el tamaño de la piramide: ");
    scanf("%i",&n);

    //Imprime los renglones de la piramide
    for(m=0; m<n; m++){

    // Imprime los caracteres en blanco necesarios
        for(b=0; b<n-m-1; b++){
            printf(" ");
        }
    // Imprime los numeros ascendentes
        for(a=0; a<m+1; a++){
            printf("*");
        }

    // Imprime los numeros descendentes
        for(d=a; d>1; d--){
            printf("*");
        }

        printf("\n");
    }
    getch();
}

EXAMEN

/*Autora: Camacho Bolaños Angélica Miriam.
Descripción: Programa que simula la maquina de apuestas para el  Casino de las Vegas.*/

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>
 
void difMoneda(void);
void jugada(void);
void pregunta(void);
void incremento(void);

int main(void){
    int moneda, pozo, premio, respuesta;//declaración de variables.
    char simbolos[3],indice=0;//Declaracion del arreglo
      printf("\n\n\n\t\t:::::::Bienvenido al casino de las vegas:::::::\n");
       jugada();
      difMoneda();
      pregunta();
      getch();                            
}//fin de main


void difMoneda(void){
    int moneda, pozo=0, premio=0, respuesta;//declaración de variables.
    char simbolos[3],indice=0;//Declaracion del arreglo
    printf("\n\t\a Moneda incorrecta\n\t");
    jugada();
    getch();        
}//difMoneda

void jugada(void){
    int moneda, ganador, pozo=0, premio=0, respuesta ;//declaración de variables.
    char simbolos[3],indice=0;//Declaracion del arreglo
    srand(time(0));
    printf("\n\t\t====Por favor inserte una moneda de 10 pesos====\n\n\n\t\t\t\t");
    scanf("%d",&moneda);
    if(moneda==10) {
              pozo=pozo+moneda;
              premio=pozo/2;
           if(pozo==10){
            printf("\n\n\t\t\tEl monto acumulado es de: %d ", pozo);
            printf("\n\n\t\t\t :: Buena suerte :D ::\n\n\t\t");
            for(indice=0;indice<=3;indice++){                      
                simbolos[indice]= rand()%4+3;
                printf("\t%c",simbolos[indice]);
               
                }//for
                }//if
            if(simbolos[0]==simbolos[1]==simbolos[2]==simbolos[3]){
               
                printf("\n\n\n\t\t\a Muchas felicidades eres el ganador!!!!!");
                             
                printf("\n\n\t\t\a El jugoso premio es de   %d ", premio);
                pozo=0;
                printf("\n\n\n\n\t\t\tEl monto acumulado es de: %d ", pozo);
                }//if
            else if(simbolos[0]!=simbolos[1]!=simbolos[2]!=simbolos[3]){
                printf("\n\n\t\t Perdiste, suerte para la proxima...");
                printf("\n\n\t\t\tEl monto acumulado es de: %d ", pozo);
            }//else
        pregunta();
       
        }//if

   
          if(moneda!=10){
                        difMoneda();
                    }//if
    getch();
}//jugada
    
void pregunta(void){
    int moneda, pozo=0, premio=0, respuesta;//declaración de variables.
    char simbolos[3],indice=0;//Declaracion del arreglo                               
    printf("\n\n\n\t\t\t\t\a Desea jugar otra vez? \n\n Presione 1 si quiere seguir jugando y 2 si ya no quiere jugar por favor\n\n\n\t\t\t\t");
    scanf("%d",&respuesta);
        if(respuesta==1){                                                   
        jugada();
        }//if
        if(respuesta==2){
            exit (0);
        }//if
        else{
            printf("\n\n\t\t\t Por favor presione el numero 1 o 2\n\n\n");
            pregunta();            
            }//if            
    getch();             
}// pregunta

CRIBA DE ERASTOTENES

/* programa para imprimir la criba de eratostenes */
#include<stdio.h>


void cribaEra(int);
int prueba(int);

int main(void){
    int tope;

    printf("Dame el tope: ");
    scanf("%i",&tope);

    cribaEra(tope);
    getch();
}

void cribaEra(int tope){
    int x;

    for (x=2; x<= tope;x++){
        if(prueba(x)){
            printf("%i ",x);
           
        }
    }
}

int prueba(int i){
    int x;
    for(x=i-1; x>= 2;x--)
        if((i % x) == 0)
            return 0;
   return 1;
    getch();
}

piramide de pascal

#include<stdio.h>
#include<conio.h>
int main(void){
    int renglon,espacio,a,suma,m;
    printf("\n\t::Bienvenido al programa de la piramide de Pascal::\n");
    printf("\n\tDame el tamano de la piramide: ");
    scanf("%i",&renglon);
    printf("\n");
                   //Imprime los renglones de la piramide
        for(m=0; m<renglon; m++){
             // Imprime los caracteres en blanco necesarios
            for(espacio=0; espacio<renglon-m-1; espacio++){
            printf(" ");
        }
        // Imprime los numeros ascendentes
        for(a=0; a<m+1; a++){
            printf("%i",a+1);
        }

       // Imprime los numeros descendentes
               for(suma=a; suma>1; suma--){
            
             printf("%i",suma+m);
        }

        printf("\n");
        }
      getch();
     
}

APUNTE ARBOL

/*    Arbol.c   */ 

#include <stdio.h> // esta biblioteca sirve para gestionar memoria
#include <malloc.h> // esta biblioteca sirve para gestionar memoria
#ifndef Elem                  
#define Elem int            
#endif                     
#include "errores.c"

/* Definicion de los tipos -las estructuras- de la ArbolBin */
//typedef Elem int;
typedef struct nodo * ArbolBin;

    struct nodo {
      Elem dato;
      ArbolBin izq;
      ArbolBin der;
    };

/* Definicion de las funciones de la ArbolBin */
ArbolBin nuevoAB();
ArbolBin insertaAB(int,Elem,ArbolBin);
ArbolBin insertaABx(int,Elem,ArbolBin);
ArbolBin insertaABr(Elem,ArbolBin);
ArbolBin buscaAB(Elem,ArbolBin);
int esVacioAB(ArbolBin);
ArbolBin recorreABp(ArbolBin);
void imprimeABp(ArbolBin);

/* CUERPOS DE LAS FUNCIONES   */

ArbolBin nuevoAB(){
    return(NULL);
}

ArbolBin insertaAB(int n,Elem elem,ArbolBin arbol){
    if(arbol == NULL)
        return(insertaABr(elem,arbol));
    else
        return(insertaABx(n,elem,arbol));
   
}


ArbolBin insertaABx(int n, Elem elem,ArbolBin arbol){
    ArbolBin tempo,x;

    /*Verifica que la aizqnacion de nueva memoria a tempo sea exitosa
     * (ArbolBin) es una promocion de tipos de lo que regresa malloc
     * malloc gestiona memoria suficiente para un dato de tipo struct nodo */
    if(arbol == NULL)
        error(1);
    else
    if(tempo = (ArbolBin)malloc(sizeof(struct nodo))){
        tempo->dato=elem;
        if(n == 0){
            printf("\t\tinsertando en lado izquierdo...\n");
            tempo->izq=arbol->izq; // Se conecta con el subarbol izquierdo
            tempo->der=nuevoAB(); // Se conecta con el subarbol derecho
            arbol->izq=tempo;
        }
        else{
            printf("\t\tinsertando en lado derecho...\n");
            tempo->der=arbol->der; // Se conecta con el subarbol izquierdo
            tempo->izq=nuevoAB();
            arbol->der=tempo;
        }
    }
    return arbol;
}


ArbolBin insertaABr(Elem elem,ArbolBin arbol){
    ArbolBin tempo,i,d;

    /*Verifica que la aizqnacion de nueva memoria a tempo sea exitosa
     * (ArbolBin) es una promocion de tipos de lo que regresa malloc
     * malloc gestiona memoria suficiente para un dato de tipo struct nodo */
    if(tempo = (ArbolBin)malloc(sizeof(struct nodo))){
        if(arbol == NULL){
            i = nuevoAB();
            d = nuevoAB();
            tempo->dato=elem; // Al campo dato de la nueva estructura se le asigna elem
            tempo->izq=i;  // Al puntero izq de la nueva estructura se le hace apuntar al puntero de la arbol -lo conecta al arbol recibido
            tempo->der=d;  // Al puntero der de la nueva estructura se le hace apuntar al puntero de la arbol -lo conecta al arbol recibido
            arbol=tempo;      // Al puntero de la arbol, se le hace apuntar a la nueva memoria creada, con lo que se actualiza y se adiciona la nueva estructura creada
        }
        else
            error(2);
    }
    else
        error(1);
    return arbol;
}



ArbolBin buscaAB(Elem elem,ArbolBin arbol){
    ArbolBin tempo;

    printf("-");
    if(esVacioAB(arbol)) //error(5);
        return(arbol);
    else{
    printf(".%i.",arbol->dato);
        if(arbol->dato == elem){
            tempo = arbol;
            printf("Dato encontrado %i",elem);
            return(tempo);
        }
        else{
            if((tempo=buscaAB(elem,arbol->izq)) != NULL){
                return(tempo);
            }
            else{
                printf(".°.");
                return(tempo=buscaAB(elem,arbol->der));
            }
        }
    }
    return(tempo);
 }

void imprimeABp(ArbolBin arbol){
    if(!esVacioAB(arbol))
    {
    printf("[ ");
        printf(" {%i} ",arbol->dato);
        printf(" <- ");
        imprimeABp(arbol->izq);
        printf(" -> ");
        imprimeABp(arbol->der);
    printf("]");

    }
    else{
    printf("[ º ]");
    }
}

int esVacioAB(ArbolBin arbol) {
    return(!arbol);
}

ArbolBin recorreAB(ArbolBin arbol)
{
    if(esVacioAB(arbol))
        error(5);
    return(arbol);
}

viernes, 27 de mayo de 2011

EJERCICIO #1

/*Autora: Camacho Bolaños Angélica Miriam 2293
Descripción del programa: 1. Dada un cantidad en pesos, obtener la equivalencia en dólares, asumiendo que
la unidad cambiaría es un dato desconocido.*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

float main(void){
    float val_dolar, pesos, valor_total;
    printf("\n\t ::Bienvenido al programa de equivalencia de pesos en dolares::");
    printf("\n\n\t Ingrese el valor del dolar:   ");
    scanf("%2f", &val_dolar);
   
    printf("\n\t Ingrese la cantidad de pesos:  ");
    scanf("%2f", &pesos);
   
    printf("_____________________________________");
   
    valor_total = val_dolar*pesos;
   
    printf("\n\t Pesos= %.2f, su equivalencia en dolares= %.2f", pesos, valor_total);
  }

sábado, 21 de mayo de 2011

CIFRADO DE CESAR

/*Autora: Camacho Bolaños Angelica Miriam 2293
Descripcion: cifrado de cesar*/
#include <stdio.h>
#include <string.h>


// cadenas referenciadoras para el mensaje original y cifrado
char *alfabeto="abcdefghijklmnñopqrstuvwxyz";
char *cifrado ="DEFGHIJKLMNÑOPQRSTUVWXYZABC";

//Prototipo de funciones para cifrar y decibrar el texto
char* cifra(char*);
char* descifra(char*);

//Funcion principal para probar el uso de las funciones
int main(void)
{
  char cadena[300];
  char *res;
  printf("\n\t Bienvenido al programa de cifrado\n\t");
  fprintf(stdout,"\n\t Ingrese texto a cifrar\t:  ");
  fscanf(stdin,"%s",cadena);
  res=cifra(cadena);
  fprintf(stdout,"\n\t La cadena Cifrada es\t:%s\n\n", res);
  res=descifra(res);
  fprintf(stdout,"\n\t La cadena Descifrada es: %s ",res);
  getchar();
  getchar();
  return 0;
}

//Funcion que cifra el mensaje
char* cifra(char *text)
{
    int i,j;
    for(j=0;j<strlen(text);j++)
    {
      for(i=0;i<strlen(alfabeto);i++)
      {
         if(*(text+j)==*(alfabeto+i))
         {
         *(text+j)=*(cifrado+i);
         }
      }
    }
    return text;
}

//Funcion que descifra el mensaje
char* descifra(char *text)
{
    int i,j;
    for(j=0;j<strlen(text);j++)
    {
      for(i=0;i<strlen(alfabeto);i++)
      {
         if((*(text+j))==*(cifrado+i))
         {
         *(text+j)=*(alfabeto+i);
         }
      }
    }
    return text;
}

ALGORITMOS DE GRAFOS


El algoritmo de Dijkstra, también llamado algoritmo de caminos mínimos, es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vértices en un grafo con pesos en cada arista. Su nombre se refiere a Edsger Dijkstra, quien lo describió por primera vez en 1959.
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten del vértice origen y que llevan a todos los demás vértices; cuando se obtiene el camino más corto desde el vértice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. El algoritmo es una especialización de la búsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos que en próximas iteraciones bajarían el costo general del camino al pasar por una arista con costo negativo).
Algoritmo
Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un vector D de tamaño N guardará al final del algoritmo las distancias desde x al resto de los nodos.
1.     Inicializar todas las distancias en D con un valor infinito relativo ya que son desconocidas al principio, exceptuando la de x que se debe colocar en 0 debido a que la distancia de x a x sería 0.
2.     Sea a = x (tomamos a como nodo actual).
3.     Recorremos todos los nodos adyacentes de a, excepto los nodos marcados, llamaremos a estos vi.
4.     Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde x hasta a sumada a la distancia desde a hasta vi; esta se sustituye con la segunda nombrada, esto es:
si (Di > Da + d(a, vi)) entonces Di = Da + d(a, vi)
5.     Marcamos como completo el nodo a.
6.     Tomamos como próximo nodo actual el de menor valor en D (puede hacerse almacenando los valores en una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados.
Una vez terminado al algoritmo, D estará completamente lleno.
Complejidad
Orden de complejidad del algoritmo: O(|V|2+|E|) = O(|V|2) sin utilizar cola de prioridad, O((|E|+|V|) log |V|) utilizando cola de prioridad (por ejemplo un montículo).
Podemos estimar la complejidad computacional del algoritmo de Dijkstra (en términos de sumas y comparaciones). El algoritmo realiza a lo más n-1 iteraciones, ya que en cada iteración se añade un vértice al conjunto distinguido. Para estimar el número total de operaciones basta estimar el número de operaciones que se llevan a cabo en cada iteración. Podemos identificar el vértice con la menor etiqueta entre los que no están en Sk realizando n-1 comparaciones o menos. Después hacemos una suma y una comparación para actualizar la etiqueta de cada uno de los vértices que no están en Sk. Por tanto, en cada iteración se realizan a lo sumo 2(n-1) operaciones, ya que no puede haber más de n-1 etiquetas por actualizar en cada iteración. Como no se realizan más de n-1 iteraciones, cada una de las cuales supone a lo más 2(n-1) operaciones, llegamos al siguiente teorema.
TEOREMA: El Algoritmo de Dijkstra realiza O(n2) operaciones (sumas y comparaciones) para determinar la longitud del camino más corto entre dos vértices de un grafo ponderado simple, conexo y no dirigido con n vértices.
Pseudocódigo
   DIJKSTRA (Grafo G, nodo_fuente s)      
       para u V[G] hacer
           distancia[u] = INFINITO
           padre[u] = NULL
       distancia[s] = 0
       Encolar (cola, grafo)
       mientras que cola no es vacía hacer
           u = extraer_minimo(cola)
           para v adyacencia[u] hacer
               si distancia[v] > distancia[u] + peso (u, v) hacer
                   distancia[v] = distancia[u] + peso (u, v)
                   padre[v] = u
                   Actualizar(cola,distancia,v)
Otra versión en pseudocódigo sin cola de prioridad
función Dijkstra (Grafo G, nodo_salida s)
  //Usaremos un vector para guardar las distancias del nodo salida al resto
  entero distancia[n] //Inicializamos el vector con distancias iniciales
  booleano visto[n] //vector de boleanos para controlar los vertices de los que ya tenemos la distancia mínima
  para cada w V[G] hacer
     Si (no existe arista entre s y w) entonces
         distancia[w] = Infinito //puedes marcar la casilla con un -1 por ejemplo
     Si_no
         distancia[w] = peso (s, w)
     fin si
  fin para
  distancia[s] = 0
  visto[s] = cierto
  //n es el número de vertices que tiene el Grafo
  mientras que (no_esten_vistos_todos) hacer
     vertice = coger_el_minimo_del_vector distancia y que no este visto;
     visto[vertice] = cierto;
     para cada w sucesores (G, vertice) hacer
         si distancia[w]>distancia[vertice]+peso (vertice, w) entonces
            distancia[w] = distancia[vertice]+peso (vertice, w)
         fin si
     fin para
  fin mientras
fin función

Ciclo euleriano

Un ciclo euleriano es aquel camino que recorre todas las aristas de un grafo pasando una y sólo una vez por cada arco (arista) del grafo, siendo condición necesaria que regrese al vértice inicial de salida (ciclo = camino en un grafo donde coinciden vértice inicial o de salida y vértice final o meta). Una definición más formal lo define como: "aquel ciclo que contiene todas las aristas de un grafo solamente una vez".
En relación con los ciclos eulerianos Carl Hierholzer publicó la primera caracterización completa de los grafos eulerianos en 1873, probando matemáticamente que de hecho los grafos eulerianos son exactamente aquellos grafos que están conectados con todos y donde cada uno de los vértices tienen grado par.
En la imagen,  C=\{ 1,2,3,4,6,3,5,4,1\}\,es un ciclo euleriano, luego es un grafo euleriano.
Un grafo es una representación, un modelo, compuesto por un número determinado de vértices (nodos) y un número de arcos (aristas) que los relacionan, cada arista o arco tiene la capacidad de relacionar dos nodos. La palabra ciclo se emplea en teoría de grafos para indicar un camino cerrado en un grafo, es decir, en que el nodo de inicio y el nodo final son el mismo, como contrapartida un camino hamiltoniano es un camino que recorre todos los vértices de un grafo sin pasar dos veces por el mismo vértice. Si el camino es cerrado se dice un ciclo hamiltoniano.
Si un grafo admite un ciclo euleriano, se denomina grafo euleriano.
Historia
El origen de la teoría de los ciclos eulerianos fue planteado y resuelto por el propio Leonhard Euler en 1736 en un problema que tiene el nombre de Siete puentes de la ciudad de Königsberg (Prusia oriental en el siglo XVIII y actualmente, Kaliningrado, provincia rusa) dando origen a la Teoría de los grafos.
Puentes Konigsberg.jpgEl problema se enuncia de la siguiente forma: Dos islas en el río Pregel, en Königsberg se unen entre ellas y con la tierra firme mediante siete puentes. ¿Es posible dar un paseo empezando por una cualquiera de las cuatro partes de tierra firme, cruzando cada puente una sola vez y volviendo al punto de partida?

Euler enfocó el problema representando cada parte de tierra por un punto y cada puente, por una línea, uniendo los puntos que se corresponden. Entonces, el problema anterior se puede trasladar a la siguiente pregunta: ¿se puede recorrer el dibujo sin repetir las líneas?
Konigsburg graph.svgEuler demostró que no era posible puesto que el número de líneas que inciden en cada punto no es par (condición necesaria para entrar y salir de cada punto, y para regresar al punto de partida, por caminos distintos en todo momento).
Teorema
Dado G(V,E\,)no orientado y conexo (no existen nodos aislados) valen las siguientes expresiones.
1) G\,es euleriano;
2)  \forall v\in\ Vcon grado (v) \ge 2y par.
3) G=\coprod_{i=1}^n C_itodos disjuntos en los arcos, es decir  C^E_i \cap \; C^E_j =  \emptyset\;con {i \not\ne \; j}
Propiedades
  • Un grafo conexo y no dirigido se dice que es euleriano si cada vértice tiene un grado par.
  • Un grafo no dirigido es euleriano si es conexo y si se puede descomponer en uno con los vértices disjuntos.
  • Si un grafo no dirigido G es euleriano entonces su gráfo-línea L(G) se dice que es también euleriano.
  • Un grafo dirigido es euleriano si es conexo y cada vértice tiene grados internos iguales a los externos.
  • Un grafo no dirigido se dice que es susceptible de ser recorrido (en inglés: traversable) si es conexo y al menos dos vértices en el grafo tienen grado impar.
Contando circuitos eulerianos en digrafos
El número de circuitos euleriano en los digrafos puede ser calculado mediante el teorema denominado en Inglés: BEST-theorem, procedente de los nombres de sus fundadores: de Bruijn, van Aardenne-Ehrenfest, Smith y Tutte.
En dicho teorema se menciona que dado un dígrafo euleriano G := (VE), el número ciclos eulerianos no-equivalentes en el grafo es
C \prod_{v \in V}(\deg^+(v)-1)!   o equivalentemente C \prod_{v \in V}(\deg^-(v)-1)!
siendo C cualquier cofactor de la matriz laplaciana de G.
Camino hamiltoniano
En el campo matemático de la teoría de grafos, un camino hamiltoniano en un grafo es un camino, una sucesión de aristas adyacentes, que visita todos los vértices del grafo una sola vez. Si además el último vértice visitado es adyacente al primero, el camino es un ciclo hamiltoniano.
El problema de encontrar un ciclo (o camino) hamiltoniano en un grafo arbitrario se sabe que es NP-completo. Los caminos y ciclos hamiltonianos fueron nombrados después que William Rowan Hamilton, inventor del juego de Hamilton, lanzara un juguete que involucraba encontrar un ciclo hamiltoniano en las aristas de un grafo de un dodecaedro. Hamilton resolvió este problema usando cuaterniones, pero esta solución no se generaliza a todos los grafos.
Definición
Un camino hamiltoniano es un camino que pasa por cada vértice exactamente una vez. Un grafo que contiene un camino hamiltoniano se denomina un ciclo hamiltoniano o circuito hamiltoniano si es un ciclo que pasa por cada vértice exactamente una vez (excepto el vértice del que parte y al cual llega). Un grafo que contiene un ciclo hamiltoniano se dice grafo hamiltoniano.
Estos conceptos se pueden extender para los grafos dirigidos.
Ejemplos
 Notas
Cualquier ciclo hamiltoniano puede ser convertido en un camino hamiltoniano si se remueve cualquiera de sus aristas, pero un camino hamiltoniano puede ser extendido en ciclo sólo si los vértices de los extremos son adyacentes.
Teorema de Bondy-Chvátal
La mejor caracterización de los grafos hamiltonianos fue dada en 1972 por el teorema de Bondy-Chvátal que generalizaba los resultados anteriormente encontrados por G. A. Dirac. Básicamente dice que un grafo es hamiltoniano si existen suficientes aristas. Primero debemos definir lo que es la cerradura de un grafo.
Dado un grafo G con n vértices, la cerradura (cl(G)) es construida de manera única a partir de G agregando toda arista u-v si el par no adyacente de vértices u y v cumple que grado(v) + grado(u) ≥ n
Un grafo es hamiltoniano si y sólo si su grafo cerradura es hamiltoniano.

Como todos los grafos completos son hamiltonianos, todos los grafos cuya cerradura sea completa son hamiltonianos. Este resultado se basa en los teoremas de Dirac y Ore.
Un grafo con n vértices (n > 3) es hamiltoniano si cada vértice tiene grado mayor o igual a n/2.

Dirac (1952)

Un grafo con n vértices (n > 3) es hamiltoniano si la suma de los grados de 2 vértices no adyacentes es mayor o igual que n.

Ore (1960)
Sin embargo, existe un resultado anterior a todos estos teoremas.
Un grafo con n vértices (n ≥ 2) es hamiltoniano si la suma de los grados de 2 vértices es mayor o igual que n-1.

L.Redei (1934)
Como puede verse, este teorema pide más hipótesis que los anteriores ya que la propiedad de los grados debe cumplirse para todo vértice en el grafo.
4.7 ISOMORFISMO DE GRAFOS
Comparación de grafos: Dados dos grafos G=(Vg, Ag) y F=(VF, AF), determinar si son iguales o no.
  • La comparación se puede realizar fácilmente, comprobando si se cumple que Vg= VF y Ag= AF.
  • Isomorfismo de grafos: Dos grafos G=(Vg, Ag) y F=(VF, AF) se dice que son isomorfos si existe una asignación de los nodos de Vg con los nodos de VF tal que se respetan las aristas.
  • El isomorfismo de grafos es también un problema NP-completo, la solución consistiría básicamente en comprobar todas las posibles asignaciones.

Dos Grafos son Isomorfos si existe una correspondencia biunívoca entre sus vértices tal que dos vértices quedan unidos por una arista en uno de los grafos, si y solo si, los vértices correspondientes del otro grafo quedan unidos por una arista.

Dados los Grafos G = { A; V; j } y G’ = { A’; V’; j’} es necesario que cumpla con las siguientes condiciones:
 Si el número de elementos de G = G’     |V| = |V'|
  • Si hay una correspondencia biyectiva    |A| = |A'|
 
  • Si conserva la relación de incidencia y adyacencia entre los elementos de los conjuntos V y A.

Se dice que dos grafos G1 y G2 son isomorfos si existe una correspondencia biunívoca entre los vértices de G1 y los de G2, con la propiedad de que el número de aristas que unen cada dos vértices de G1 es igual al número de aristas que unen los vértices correspondientes de G2.Los grafos son como granos de arena en la playa. Experimentando un poco nos damos cuenta de que el número de gráficas distintas que podemos construir con sólo algunos vértices y aristas es enorme y de hecho este número se transforma en un número enorme , rápidamente incrementamos el número de vértices y de aristas permitidas . Si½ V(G)½ = n y ½ A(G)½ = m , entonces ½ V(G) z V(G) ½ y hay funciones g de A(G) a V(G) x V(G) cada una de las cuales determina una digráfica. Para n=4 y m=5 este número ya es mayor que un millón .
Si tuviéramos alguna manera de elegir de entre más de un millón de digráficas que obtenemos de nuestras y pudiéramos eliminar las que son esencialmente duplicados , esperaríamos llegar a una lista más manejable que tuviera un ejemplo de cada uno de los tipos de digráficas con 4 vértices y 5 aristas . De una manera mucho mas práctica este plan no resultará , si no para 4 y 5 entonces para números más grandes , pero sigue siendo un enfoque práctico cuando buscamos digráficas con propiedades especiales.
Decimos que dos grafos son isomorfos y escribimos G ~ H si hay correspondencias uno a uno a :V(G) ® V(H) y b :A(G)® A(H) tales que siempre que una arista e en A(G) una los vértices u y v en V(G) , la arista correspondiente b (e) una los puntos correspondientes a (u) y a (v) en V(H) . La figura 1 ilustra el concepto .  El lado izquierdo de la flecha es parte del dibujo de G si y sólo si el correspondiente lado derecho de la flecha es parte del dibujo de H. En símbolos , si G y H están descritas por g 1 y g 2 respectivamente , y si entonces Dos gráficas isomorfas son esencialmente la misma excepto por las etiquetas de sus vértices y aristas .
 Hablando en general , se dice que dos conjuntos con alguna escritura matemática son isomorfos si existe una correspondencia uno a uno entre ellos que preserve [ es decir, se compatible con ] la estructura . Ahora bien las clase de equivalencia son llamadas también clases de isomorfismo.
 Si G y H no tienes aristas paralelas , hemos visto que si podemos considerar a A(G) como un subconjunto de V(G) x V(G) , y A(H) es un subconjunto de V(H) x V(H) . En esta situación la condición de isomorfismo es particularmente sencilla : G es isomorfa a H si hay una correspondencia uno a uno a :V(G) ® V(H) tal que á u,v ñ está en A(G) si y sólo si á a (u) y a (v) ñ está en A(H) . Una a que cumpla con esto se llama un isomorfismo de G sobre H.
Ahora , dadas dos digráficas , ¿ Como determinar cuándo son isomorfas ?, bueno , en general, buscaremos probablemente primero las diferencias obvias o las semejanzas obvias , pero el problema puede no ser de fácil solución . La figura 2 muestra dibujos de 4 digráficas . Todos los dibujos parecen muy diferentes , por lo que intentaríamos encontrar en que son esencialmente distintas las digráficas mismas . Nosotros podemos atacar el problema de muchas maneras distintas y cambiar de un enfoque a otro ; en cambio , un programa de computación o un algoritmo debe descifrar instrucciones anticipadamente y no puede ser tan flexible .
 Hasta el momento no hay ningún algoritmo detector de isomorfismos que sea cualitativamente mucho más rápido que el esquema sencillo que se ha considerado . El trabajo en teoría de complejidad ha mostrado , que la existencia de algoritmos con tiempo polinomial para isomorfismos de digráficas es equivalente a la existencia de algoritmos a tiempo polinomial para resolver otros tipos importantes de problemas , por lo que buscar algoritmos para isomorfismos de digráficas es algo muy activo.
Una cantidad , como el número de vértices o de aristas se llama invariante bajo isomorfismos si su valor es el mismo para cualesquiera dos digráficas isomorfas . Un conjunto de invariantes son de especial utilidad para demostrar que dos digráficas no son isomorfas. Un conjunto de invariantes es completo si siempre que dos digráficas no sean isomorfas al menos hay un invariante en el conjunto , cuyos valores sean distintos para las dos digráficas. Un conjunto completo de invariantes nos mostraría que dos digráficas son isomorfas mostrándonos que cada invariante es el mismo valor para las dos digráficas .
Todas las digráficas de la figura 2 tienen 8 vértices y 12 aristas , así que los invariantes ½ V(G)½ y ½ A(G)½ no son una buena ayuda en este caso , por lo que se necesitaría hacer un análisis más profundo.
 EJEMPLO
a.     Para las digráficas de la figura 3 estos invariantes son como mostraremos a continuación [ omitiremos los pares para los cuales es vacío para toda G que consideremos ]

Podemos ver de un solo golpe que las únicas digráficas que pueden ser isomorfas son y De hecho , basta revisar alguno de los tres siguientes números , para tener toda esa información .
La tabla de valores de ½ ½ no nos dice que y sean isomorfas . Para mostrar isomorfismos seguimos necesitando dar una función a .
Ahora consideremos las digráficas de la figura 2 , dibujadas de nuevo en la figura 4 . Sus invariantes ½ ½ son los siguientes .
Resulta que y son isomorfas , pero podemos demostrar que y no son isomorfas examinando estas digráficas cerca de sus fuentes . También la misma idea nos mostrará que no es isomorfa a ninguna de las otras 3 , por lo que de las 4 las únicas isomorfas son y .
Otra manera de separar a de las demás es observar que cada una de las otras digráficas tienen 3 aristas e,¦ ,g tales que el camino e ¦ va del vértice inicial de g a su vértice terminal. [ Por ejemplo en sea e = yz,¦ = zx y g = yx ] . La digráfica no tiene tales aristas .
Resulta que y serían isomorfas si invirtiéramos todas las de una de ellas . Las digráficas que están relacionadas de esta manera se llaman anti-isomorfas .
La idea de isomorfismo es también útil como una manera de describir la simetría de una digráfica dada.

DIGIOGRAFÍA: