jueves, 14 de julio de 2011

ultima tarea arboles

este es el cogigo fuente de arboles modificado apara que tambien elimine nododos
pero tiene un error
(pero no compila)

#include "bool.h"
#include<stdio.h>

#define DEBUG 1

// NOTA: faltan implementar las rotaciones
// dobles; por ahora no balancea bien

// un nodo de ruteo no cuenta duplicados
#define NO_VALIDO -1

#ifdef DEBUG
int next = 0;
#endif

struct nodo_de_arbol {
char dato;
int altura;
int contador;
#ifdef DEBUG
int id;
#endif
struct nodo_de_arbol* padre;
struct nodo_de_arbol* izq; // hijo
struct nodo_de_arbol* der; // otro hijo
};
typedef struct nodo_de_arbol nodo;

void borra(nodo* n) {
if (n == NULL) {
return;
} else {
borra(n->izq);
borra(n->der);
free(n);
}
return;
}

void muestra(nodo* n) {
if (n == NULL) {
return; // caso base de recursion
} else {
muestra(n->izq);
#ifdef DEBUG
if (n->izq != NULL && n->der != NULL) {
printf("[%c, %d <%d / %d, %d>] ", 
n->dato, n->altura, n->id,
n->izq->id, n->der->id);
} else {
printf("(%c, %d <%d> #%d) ", 
n->dato, n->altura, n->id,
n->contador);
}
#else
if (n->izq == NULL && n->der == NULL) {
printf("%c[%d] ", n->dato, n->contador);
}
#endif
muestra(n->der);
}
return;
}

void balancea(nodo* n, nodo** raiz) {
int ai, ad, max, min, aalt, balt;
nodo* t = NULL;
nodo* u = NULL;
nodo* v = NULL;
nodo* a = NULL;
nodo* b = NULL;
nodo* p = NULL;
nodo* x1 = NULL;
nodo* x2 = NULL;

if (n == NULL) {
#ifdef DEBUG
printf("Ya topamos con la raiz.\n");
#endif
return;
}
if (n->izq == NULL ||
n->der == NULL) {
#ifdef DEBUG
printf("No se puede sin hijos.\n");
#endif
return;
}

t = n; // nodo actual
assert(t != NULL);

#ifdef DEBUG
printf("Checando balance en %c (alt. %d).\n",
t->dato, t->altura);
#endif

u = n->izq; // hijo izquierdo
assert(u != NULL);
v = n->der; // hijo derecho
assert(v != NULL);

ai = u->altura;
ad = v->altura;

#ifdef DEBUG
printf("Hijos %c (alt. %d) y %c (alt. %d).\n",
u->dato, ai, v->dato, ad);
#endif

max = (ai > ad) ? ai : ad;
min = (ai > ad) ? ad : ai;

if (max + 1 != t->altura) {
t->altura = max + 1; // actualizar altura
}

if (max - min > 1) { // balancear
p = t->padre; // padre del actual

#ifdef DEBUG
printf("%c a altura %d requiere balanceo.\n", 
t->dato, t->altura);
printf("Entrando tenemos:\n");
if (p != NULL) {
printf("p = %d, ", p->id);
} else {
printf("p = NULL, ");
}
printf("t = %d, \n", t->id);
printf("u = %d, v = %d, \n", 
u->id, v->id);
#endif

if (ai <= ad - 2) {        // si hay demasiada altura a la der       // => voltear "peso" hacia la izq.
a = v->izq;
b = v->der;
assert(a != NULL);
assert(b != NULL);
aalt = a->altura;
balt = b->altura;

#ifdef DEBUG
printf("a = %d, b = %d, \n", 
a->id, b->id);
#endif

if (aalt <= balt) { // rotacion simple izq  printf("Simple izquierda.\n");  if (p != NULL) {    // v debe reemplazar a t como hijo    if (p->izq == t) {
p->izq = v;
} else { // era derecho 
p->der = v;
}
} else {
// v es ahora raiz
*raiz = v;
}
// el padre de t sera padre de v
v->padre = p;
// printf("Arreglado hacia arriba.\n");

// v ahora es hijo izq de t
// t es padre de v
v->izq = t;
t->padre = v;
// el hijo der de t no cambia
// printf("Arreglado entre t y v.\n");

// a va a ser hijo derecho de t
// t va a ser padre de a
t->der = a;
a->padre = t;
// printf("Arreglado entre a y t.\n");

#ifdef DEBUG
if (p != NULL) {
printf("v = %d es hijo de p = %d,\n",
v->id, p->id);
}
printf("t = %d = %d es hijo de v = %d,\n",
t->id, v->izq->id, v->id);
printf("a = %d = %d es hijo de t = %d\n",
a->id, t->der->id, t->id);
printf("b = %d = %d es hijo de v = %d,\n",
b->id, v->der->id, v->id);
printf("u = %d = %d es hijo de t = %d.\n",
u->id, t->izq->id, t->id);
#endif
// para ni u ni b nada cambia
} else { 
printf("Simple derecha-izquierda.\n");
x1 = a->izq;
assert(x1 != NULL);
x2 = a->der;
assert(x2 != NULL);

if (p != NULL) {
if (p->izq == t) {
p->izq = a; // w
} else { // era der.
p->der = a;
}
} else { // t era raiz
*raiz = a; // avisar main
}
v->padre = a;
a->der = v;
t->padre = a;
a->izq = t;
v->izq = x2;
x2->padre = v;
t->der = x1;
x1->padre = t;
}
} else if (ai >= ad + 2) {
// voltear hacia la derecha
a = u->izq;
b = u->der;
assert(a != NULL);
assert(b != NULL);
aalt = a->altura;
balt = b->altura;
if (aalt >= balt) { 
printf("Simple derecha.\n");
if (p != NULL) {
if (p->izq == t) {
p->izq = u;
} else { // era derecho 
p->der = u;
}
} else {
// cambiando la raiz para ser u
*raiz = u;
}
u->padre = p;
// printf("Arreglado hacia arriba.\n");
u->der = t;
t->padre = u;
// printf("Arreglado entre t y u.\n");
t->izq = b;
b->padre = t;
// printf("Arreglado entre b y t.\n");
} else { // (aalt < balt)  printf("Doble izquierda derecha.\n");  x1 = b->izq;
assert(x1 != NULL);
x2 = b->der;
assert(x2 != NULL);

if (p != NULL) {
if (p->izq == t) {
p->izq = b; // w
} else { // era der.
p->der = b;
}
} else { // t era raiz
*raiz = b; // avisar main
}
u->padre = b;
b->izq = u;
t->padre = b;
b->der = t;
u->der = x1;
x1->padre = u;
t->izq = x2;
x2->padre = t;
}
}
if (p != NULL) {
balancea(p, raiz);
}
} else {
#ifdef DEBUG
printf("%c esta bien (%d vs. %d).\n", 
n->dato, ai, ad);
#endif
// siempre checa hasta la raiz
balancea(n->padre, raiz);
}
return;
}

bool agrega(char dato, nodo* arbol, nodo** n) {
nodo* nuevo;
nodo* reemplazo;
char ruteo;
if (arbol == NULL) {
// caso especial de no tener nada aun
nuevo = (nodo*)malloc(sizeof(nodo));
nuevo->contador = 1;
#ifdef DEBUG
nuevo->id = next++;
#endif
nuevo->altura = 1; // como hoja
nuevo->dato = dato;
nuevo->padre = NULL;
nuevo->izq = NULL;
nuevo->der = NULL;
*n = nuevo; // nueva raiz
return TRUE;
} else {
if (arbol->izq == NULL &&
arbol->der == NULL) { // si es hoja

if (arbol->dato == dato) {
// iguales; agregar duplicidad
arbol->contador++;
return FALSE;
}

#ifdef DEBUG
printf("Agregando %c en %c.\n",
dato, arbol->dato);
#endif

ruteo = (arbol->dato < dato ?          arbol->dato : dato);

nuevo = (nodo*)malloc(sizeof(nodo));
nuevo->contador = 1;
#ifdef DEBUG
nuevo->id = next++;
#endif
nuevo->altura = 1; // como hoja
nuevo->dato = dato;
nuevo->padre = arbol;
nuevo->izq = NULL;
nuevo->der = NULL;

reemplazo = (nodo*)malloc(sizeof(nodo));
reemplazo->contador = arbol->contador;
arbol->contador = NO_VALIDO;
#ifdef DEBUG
reemplazo->id = next++;
#endif
reemplazo->altura = 1; // como hoja
reemplazo->dato = arbol->dato;
reemplazo->padre = arbol;
reemplazo->izq = NULL;
reemplazo->der = NULL;

if (dato < arbol->dato) {
arbol->izq = nuevo;
arbol->der = reemplazo;
} else if (dato > arbol->dato) {
arbol->der = nuevo;
arbol->izq = reemplazo;
}

arbol->dato = ruteo;
arbol->altura = 2;
balancea(arbol->padre, n);
} else {
if (dato <= arbol->dato) {
agrega(dato, arbol->izq, n);
} else { // mayor
agrega(dato, arbol->der, n);
}
}
}
return TRUE;
}
printf("desea elimiar un nodo");
printf("dame al altura del nodo al que desea eliminar");
scanf("%d %d", nodos, alura);
dato = getchar();
if (!isspace(dato)) {
if (eliminar(dato, raiz, &raiz)) {
contador++;}
printf("eliminacion completada");
else {printf("el nodo seleccionado no existe");
if (raiz != NULL) {
printf("\nCon %d nodos, altura %d: \n",
contador, raiz->altura);

int main(int argc, char** args) {
nodo* raiz = NULL;
char dato;
int contador = 0;

do {
dato = getchar(); // lee un caracter
if (!isspace(dato)) {
if (agrega(dato, raiz, &raiz)) {
contador++;
}
if (raiz != NULL) {
printf("\nCon %d nodos, altura %d: \n",
contador, raiz->altura);
muestra(raiz);
printf("\n");
} else {
printf("No hay nada.\n");
}
}
} while (dato != '!'); // parar despues de !
borra(raiz);

return 1;
}
************************************************************************************************
PUNTOS EXTRAS
este es el codigo de funciones lo e modificado para que fuera un juego interactivo con el usuario
este es el codigo--->
#include 
#include 
#include "bool.h"
#include "entrada.h"

int suma(int a, int b) {
  return (a + b);
}

int resta(int a, int b) {
  return (a - b);
}

int multiplica(int a, int b) {
  return (a * b);
}

int divide(int a, int b) {
  return (a / b);
}

int residuo(int a, int b) {
  return (a % b);
}

// tipo de dato para apuntador a funcion
typedef int (*rutina)(int, int);
typedef void (*otracosa)(char, int);

int main(int argc, char** args) {
  rutina *r = NULL;
  otracosa* o = NULL;
  int x, y;
  char = juego
  int min = 1;
  int max = 10;
  
  if (argc > 2) {
    min = atoi(args[1]);
    max = atoi(args[2]);
    if (min > max) {
      printf("Pon primero el minimo.\n");
      return;
    } else if (min <= 0) {
      printf("Deben ser positivos. Sorry.\n");
      return;
    }
  }

  srand(time(0)); // semilla para rng

  r = (rutina*)malloc(sizeof(rutina)*5);
  r[0] = &suma;
  r[1] = &resta;
  r[2] = &multiplica;
  r[3] = ÷
  r[4] = &residuo;

  while (TRUE) {
        printf("dime que cres que va a salir suma, resta, multiplicacion, divison o residuo);
        printf("dame una opcion", juego);
        scanf("%d", juego);
        switch case(juego){
               case 0: printf("as elegido suma--- veamos cual es la respuesta")
               break;
               case 1: printf("as elegido resta---veamos cual es la respuesta");
               break;
               case 2: printf("as elegido multiplicacion---veamos cual es la respuesta");
               break;
               case 3: printf("as elegido divison---vemaos cual es la respuesta");
               break;
               case 4: printf("as elegido residuo");
               break;
               default: printf("opcion no valida");
               break;
               printf("cres poder ganar");
               printf("a jugar se a dicho");
               printf("\n);
               printf("Dame el primer valor:\n");
    x = pide_numero(min, max);
    printf("Dame el segundo valor:\n");
    y = pide_numero(min, max);
    printf("Salio %d.\n", r[rand()%5](x, y));
    if(juego = r[rand()%5](x, y)){
             printf("felisidades si era lo opcion que seleccionaste");}
             else {printf("lo sentimos pero perdiste vuelve a intentarlo");
    printf("Quieres mas? (s/n): ");
    if (pide_opcion("sn") == 'n') {
      break; // ya no
    }
  }
  free(r);
  // modificado del archivo orginal para que el programa se comvirtiera en un juego con el usuario//

  return 1;
}

lunes, 11 de julio de 2011

tarea pilas y colas

este es el codigo que isimos en clase pero modificado pero me marca un error
(no funciona)
// cabecera de la libreria de matrices

#ifndef final_H

#define final_H

#include <stdio.h> 
#include <stdlib.h> // malloc
#include <limits.h> 
#include <ctype.h> 
#include <string.h> 

#define LARGO_DE_NOMBRE 80
#define SIN_DEFINIR -1
#define LARGO_MAXIMO 12

char pide_opcion(char* permitidos);
int pide_numero(int minimo, int maximo);
void pide_cadena(char* final); 

#endif

#include "final.h"
#include "bool.h"

char pide_opcion(char* permitidos) {
  char actual;
  bool listo = FALSE;

  while (TRUE) {
    if (!listo) {
               actual = tolower(getchar());
               if (strchr(permitidos, actual) != NULL) {
    listo = TRUE;
      } 
    } else {if (getchar() == '\n') {
    if (listo) {
      break;
    }
      }
    }
  }
  return actual;
}

int pide_numero(int minimo, int maximo) {
if(pide_numero < maximo){
return;}
  int numero = SIN_DEFINIR;
  char* final = NULL;
  char actual = NULL;
  int pos;
  double temp;
  
  final = (char*)malloc(sizeof(char)*LARGO_MAXIMO - 1);
  if (final == NULL) {
    return SIN_DEFINIR;
  }
  do {
    printf("Dame un valor entre %d y %d: ",
if(numero > maximo){printf("valor no permitido");}
       minimo, maximo);
    // insistir
    pos = 0;
    do {
      actual = getchar();
      if (pos > LARGO_MAXIMO) {printf("valor no permitido");
    if (isdigit(actual)) {
      final[pos++] = actual;
    }
      }
    } while (actual != '\n'); // brincando enter
    final[pos] = '\0'; 
    temp = atof(final);
    if (temp > INT_MAX - 1) {
      continue;
    }
    numero = atoi(entrada);
  } while (numero < minimo || numero > maximo);
  printf("Gracias.\n");
  free(final);
  return numero;
}

void pide_cadena(char* final) {
  char actual;
  int pos;
  bool ignorar_resto;
  
  do {
    ignorar_resto = FALSE;
    pos = 0;
    actual = getchar();
    if (!isalpha(actual)) {
      ignorar_resto = TRUE;
    } else {
      entrada[pos++] = toupper(actual);}
    do {
      actual = getchar();
      if (pos > LARGO_MAXIMO) {
     {
      entrada[pos++] = toupper(actual)} else {
      if (actual == '\n') {
        break;
      }
      ignorar_resto = false;
    }
      }
    } while (false);
    if (ignorar_resto) {
      pos = 0;
    }
  } while (pos == 0);
  final[pos] = '\0'; 
  printf("Gracias: <%s>\n", final);
  return;
}






**********************************************************************************
PUNTOS EXTRAS:
por si ai algunas personas con la duda todavia de punteros
estos son unos ejemplos mios de como usar punteros espero y  les sean de ayuda->

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

main()
{
     int eco1=2, eco2=3, eco3=4;
     int *puntero1, *puntero2, *puntero3;
     printf("eco1 vale -> %d\n", eco1);
     puntero1 = &eco1;  //el puntero esta apuntando a la variable eco 1 y tratara de modificar su valor//
     *puntero1 = 5; // se le pone el nuevo valor asignado al puntero con direccion a la variable eco1//
     printf("aora eco1 vale-> %d\n", eco1);  /// aqui el valor ya fue cambiado aora "a" vale 5//
     printf("eco2 vale -> %d\n", eco2);
     puntero2 = &eco2;
     *puntero2 = 6;
     printf("aora eco2 vale -> %d\n", eco2);
     printf("eco3 vale -> %d\n", eco3);
     puntero3 = &eco3;
     *puntero3 = 8;
     printf("aora eco3 vale -> %d\n", eco3);
     printf("asi se trabaja con los punteros\n");
    getche();
   
    //esta es una pequeña demostracion de como trabaja un puntero//
              }


------------------------------------------------------------------------------------------------

este otro programa es un puntero apuntando en direccion a una tabla

#include<stdio.h>

main()
{
      int tabla[]={1,2,3,4,5},i;
      int *puntero=tabla; //definimos puntero y le damos la direccion
      for(i=0;i<5;i++)
      {
                      printf("%d",*puntero++);
                      }
                      getche();
                      }



********************************************************************************************************************************************************************
DEFINICION DE PILAS CON ALGUNOS EJEMPLOS 
PILAS:


La pila es una estructura de datos que permite almacenar datos en el orden LIFO (Last In First Out) en español, último en entrar, primero en salir). 
La recuperación de los datos es hecha en el orden inverso de su inserción. 

Para la implementación he elegido una lista enlazada simple, presentada sobre la vertical. 
Ya que la inserción es siempre hecha al inicio de la lista, el 1er elemento de la lista será el ultimo elemento ingresado, por lo tanto estará en la cabeza de la pila. 
No he utilizado un puntero fin, como lo hice en el caso de la lista enlazada simple, ya que el objetivo no es el de tratar una lista enlazada, sino una pila. 
Lo interesante es que el ultimo elemento ingresado, será el 1er elemento recuperado. 


III. La construcción del modelo de un elemento de la pila
Para definir un elemento de la pila será utilizado el tipo struct
El elemento de la pila contendrá un campo dato y un puntero siguiente. 
El puntero siguiente debe ser del mismo tipo que el elemento, de lo contrario no podrá apuntar hacia el elemento. 
El puntero siguiente permitirá el acceso al próximo elemento. 


typedef struct ElementoLista {
    char *dato;
    struct ElementoLista *siguiente;
}Elemento;


Para permitir las operaciones sobre la pila, vamos a guardar ciertos elementos:
·         el primer elemento
·         el numero de elementos


El 1er elemento, que se encuentra en la cabeza de la pila, nos permitirá realizar la operación de recuperación de los datos situados en la parte superior de la pila. 

Para ello, será utilizada otra estructura (no es obligatorio, pueden ser utilizadas variables). 


typedef struct ListaUbicación{
  Elemento *inicio;
  int tamaño;
} Pila;


El puntero inicio contendrá la dirección del 1er elemento de la lista. 
La variable tamaño contiene el numero de elementos. 

Nota: 
Esta vez no utilizamos un puntero fin (ver la lista enlazada simple), no lo necesitamos puesto que únicamente trabajamos al inicio de la lista. 

Cualquiera que sea la posición en la lista, el puntero inicio apunta siempre hacia el 1er elemento, que estará en la cabeza de la pila. 
El campo tamaño contendrá el numero de elementos de la pila, cualquiera que sea la operación efectuada sobre la pila. 

A. Inicialización

Modelo de la función: 


void inicialización (Pila *tas);


Esta operación debe ser hecha antes de cualquier otra operación sobre la pila. 
Esta inicializa el puntero inicio con el puntero NULL, y el tamaño con el valor 0. 

La función 


void inicialización (Pila * tas){
  tas->inicio = NULL;
  tas->tamaño = 0;
}

B. Inserción de un elemento en la pila

A continuación el algoritmo de inserción y registro de los elementos:
·         declaración del elemento a insertar
·         asignación de la memoria para el nuevo elemento
·         rellenar el contenido del campo de datos
·         actualizar el puntero inicio hacia el 1er elemento (la cabeza de la pila)
·         Actualizar el tamaño de la pila.


Modelo de la función: 


int apilar (Pila *tas, char *dato);


La primera imagen muestra el inicio de la inserción, por lo tanto la lista de tamaño 1 después de la inserción. La característica de la pila no es muy apreciada con un solo elemento, ya que es el único a recuperar. 

En cambio la 2da imagen nos permite observar el comportamiento de la pila. 
Lo que debemos retener es que la inserción siempre se hace en la parte superior de la pila (al inicio de la lista). 
La función 

/* apilar (añadir) un elemento en la pila */
int apilar (Pila * tas, char *dato){
  Elemento *nuevo_elemento;
  if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
    return -1;
  if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char)))
      == NULL)
    return -1;
  strcpy (nuevo_elemento->dato, dato);
  nuevo_elemento->siguiente = tas->inicio;
  tas->inicio = nuevo_elemento;
  tas->tamaño++;
}

C. Eliminar un elemento de la pila

Para eliminar un elemento de la pila, simplemente hay que eliminar el elemento hacia el cual apunta el puntero inicio. 
Esta operación no permite recuperar el dato en la cabeza de la pila, solo eliminarlo. 

jueves, 7 de julio de 2011

tarea 4(ciclos)

este es un programa que cree para que el usuario al momento de llegar a una tienda donde hay ofertas de verano puedo escoger entre varias opciones
para esto utlice un ciclo for
"este es el codigo por si lo quieren compilar fuciona a la perfeccion"

#include<stdio.h>
#define MAX 5
main(void){
           printf("creado por EMANUEL CONTRERAS ORTIZ 1444716 V4\n");
           printf("*****programa ofertas de verano*****\n");
           printf("estos son los articulos disponibles\n");
           int articulo, bisicleta, motosicleta, mp3, compu, lavadora;
int entrega = 1;
while(entrega <= MAX){
    printf("%i\n", entrega);
    switch(entrega){ /*aqui comienza el ciclo*/
                     case 1: printf("bisicleta\n", bisicleta);
                     break;
                     case 2: printf("motosicleta   ", motosicleta);
                     printf("si usted lleva este articulo se le dara un pakete de\nrefacciones gratis\n");
                     break;
                     case 3: printf("reproductor mp3\n", mp3);
                     break;
                     case 4: printf("computadora\n", compu);
                     break;
                     case 5: printf("lavadora\n", lavadora);
                     break;
                     default: if(entrega > 5){printf("esta opcion no es valida");}
                     break;}
    entrega++;}/*aqui termina el ciclo*/
    printf("\n***que articulo quieres llevar*****\n");
    printf("porfavor presione una opcion de las que aparesen en pantalla\n");
    scanf("%d", &entrega);
    switch(entrega){
                     case 1: printf("--grasias por comprar esta bisicleta--\n");
                     printf("vulva pronto");
                     break;
                     case 2: printf("--grasias por comprar esta motosicleta--\n");
                     printf("///ademas le damos estas refacciones junto con su moto///\n");
                     printf("vuelva pronto\n");
                     break;
                     case 3: printf("--grasias por comprar este mp3--\n");
                     printf("vuelva pronto");
                     break;
                     case 4: printf("--grasais por comprar esta computadora--\n");
                     printf("vuelva pronto");
                     break;
                     case 5: printf("--grasias por comprar esta lavadora--");
                     printf("vuelva pronto"); 
                     default: /*aqui se aplica una codision*/if(entrega > 5){printf("opcion no aseptada porfavor vuelva a introdusir una opcion\nde las que aparesen en pantalla------");}           
                     break;}
                     
    return 1;
}

espero y les guste
**********************************************************************************
este es otro programa que cree para que el usuario puedallegar a un restaurant y que le den a escoger entre los cinco diferentes combos diponibles
este es el codigo
#include
#define MAX 5

 int main(void)
{
     printf("programa para restaurante\n");
     printf("por EMANUEL CONTRERAS ORTIZ\n");
  int combo; /*combo1, combo2, combo3, combo4, especial, cambio;*/
  float cambio, precio, ingreso;
  cambio = ingreso - precio;
   while(combo <= MAX){
    printf("%i\n", combo);
  switch(combo){
    case 1: printf("usted va a llevar el combo 1\n");
      printf(" el valor de este combo es de 72.50", precio);
      break;
    case 2: printf("usted va a llevar el combo 2\n");
      printf("el valor de este combo es 80.93", precio);
      break;
    case 3: printf("usted va a llevar el combo 3\n");
      printf("el valor de este combo es 42.30\n", precio);
      break;
    case 4: printf("usted va  a llevar el combo4\n");
      printf("el valor de este combo es 125.60", precio);
      break;
    case 5: printf("usted va a lleavr el como especial\n");
      printf ("el valor de este combo es de 170.80\n", precio);
      break;
    default: printf("usted ingreso una orden no valida porfavor vuelva a ingresar unas de las opciones que aparecen en pantalla\n");
      break;
    }
     combo++;}
     printf("dime que combo desea ordenar\n");
  scanf("%d", &combo);
  switch(combo){
                case 1: printf("usted eligio el combo 1\n");
                break;
                case 2: printf("usted eligio el combo 2\n");
                break;
                case 3: printf("usted eligio el combo 4\n");
                break;
                case 5: printf("usted eligio el combo 5\n");
                break;
                default: if(combo > 5){printf("orden incorrecta porfavor vuelve a ingresar el pedido\n");}
                break;}
  printf("\npor favor deme en efectivo el valor del combo  ", ingreso);
  scanf("%f", &ingreso);
  if(ingreso > precio){printf("su cambio es de %f", cambio);} 
    else {printf("grasias por su visita");}
 
return 1; 
}
/* este stdio no deberia apareser*/
"estos programas fueron inventados por my y mis bases fueron los programas de tiendas a las que e ido y algunos programas de autosevicio de restaurantes
como RFC"
espero y les aigan gustado mis programas.

lunes, 4 de julio de 2011

tarea(programa de condiciones)

Este programa lo cree para que el usuario al momento de llegar a una aerolina puede ver cuantos vuelos hay y para que rumbo van y asi el poder seleccionar a traves del programa un vuelo y checar la informacion nesesaria para podera abordarlo espero y les guste el siguiente programa.

ESTE ES SU CODIGO POR SI LO QUIEREN COMPILAR EN SU ORDENADOR:
#include<stdio.h>
int main(void)
{
    printf("aerolinas\t\t----->\t\t****ECO******\n");
    printf("este programa sirve para para que el usuario verifique que avion quiere tomar.\n");
    printf("\t\tby for EMANUEL CONTRERAS ORTIZ\t1444716.\n");
    int ing, eua, mex, eur, avion;
    ing = 1;
    eua = 2;
    mex = 3;
    eur = 4;
    printf("dime que avion quieres tomar-> \n");
    printf("1--> inglaterra , 2--> estados unidos , 3--> mexico, 4--> europa\n");
    scanf("%d", &avion);
    switch(avion){
    case 1: 
    printf("este vuelo va para inglaterra\n", ing);
    break;
    case 2:
    printf("este avion va para estados unidos\n", eua);
    break;
    case 3: 
    printf("este avion va para mexico\n", mex);
    break;
    case 4:
    printf("este avion va para europa\n", eur);
    break;
    default: printf(" esta opcion no es valida por favor vuelva  a escojer un vuelo\n");
    break;
}
               switch(avion){
               case 1:
                    if(avion < 2){printf("por favor de llevar todas sus pertenencias avordo es indespensable que lleve todo lo nesesario para el viaje por que durara 2 dias en llegar a su destino\n");}
                      printf("gracias por volar con aerolinas **ECO**\n");
                      break;
                      } 
                      if(avion > 2){printf("este avion no tardara mas de 4 horas en llegar a asu destino\ngracias por volar en aerolinas ***ECO***\n");}
                      system("pause");
                      return 1;
                      }



asi es como queda el programa ya compilado:
dar clic en la imagen si quereis verla->



 " espero y les sea de su agrado"

**********************************************************************************
ESTE ES OTRO PROGRAMA QUE ISE SIRVE PARA CALCULAR EL PROMEDIO DE UN ALUMNO AL MOMENTO DE INGRESAR SUS CALIFICACIONES ESTE ME DA EL PROMEDIO Y TAMBIEN NOS DISE SI ESTE APROBO O REPROBO:

ESTE ES EL CODIGO:->

#include<stdio.h>
#include<conio.h>
#include<string.h>
main()
{
 printf("\n\t\t\tPrograma que calcule el promedio\n");
      printf("\n\t\t\tElaborado por Emanuel contreras ortiz\n\n");
     float PARCIAL1,PARCIAL2,PARCIAL3,PROMEDIO;
      printf("Dame la calificacion del primer parcial: ");
      scanf("%f",&PARCIAL1);
      printf("Dame la calificacion del segundo parcial: ");
      scanf("%f",&PARCIAL2);
      printf("Dame la calificacion de tercer parcial: ");
      scanf("%f",&PARCIAL3);
      PROMEDIO =(PARCIAL1*.25) + (PARCIAL2*.35) + (PARCIAL3*.40);
      if(PROMEDIO >= 70)
      {printf("El Alumno Esta Aprobado Con %f", PROMEDIO);}
      else {printf("El Alumno Esta Reprobado Con %f", PROMEDIO);}
        return 1;
           }


espero y les guste el programa si desean lo pueden compilar "si funciona a la perfeccion"

domingo, 3 de julio de 2011

puntos extra1

ESTOS SON ALGUNOS DE LOS METODOS PARA COMBERTIR UN NUMERO A BINARIO:
Este es un metodo donde exponen tres maneras, pero esta me parece la más sencilla de aplicar, asi que sin más preambulo les explico:
Consiste en un método parecido a la factorización en números primos. Es relativamente fácil dividir cualquier número entre 2. Este método consiste básicamente en divisiones sucesivas. Dependiendo de si el número es par o impar, colocaremos un cero o un uno en la columna de la derecha.
Si es impar, le restaremos uno y seguiremos dividiendo entre dos (y podremos un 1 en el lado derecho como anteriormente expongo), hasta llegar al resultado final que debe ser siempre 1.
Después, sólo nos queda tomar los resultados de la columna de la derecha y ordenar los dígitos de abajo para arriba, y tendremos nuestro número convertido en binario.
Ejemplo:
150|0
75|1*
37|1
18|0
9|1
4|0
2|0
1|1
El resultado para 150 en base decimal es: 10010110 en base binaria.
*Aquí ponemos 1 al lado derecho y restamos 1 de 75 para poder seguir dividiéndolo entre 2, el resultado lo ponemos debajo, y así sucesivamente.
Un número binario puede ser representado por cualquier secuencia de bits (dígitos binarios), que suelen representar cualquier mecanismo capaz de estar en dos estados mutuamente excluyentes. Las siguientes secuencias de símbolos podrían ser interpretadas como el mismo valor numérico binario:
1 0 1 0 0 1 1 0 1 0
| - | - - | | - | -
x o x o o x x o x o
y n y n n y y n y n
 
El valor numérico representado en cada caso depende del valor asignado a cada símbolo. En una computadora, los valores numéricos pueden representar dos voltajes diferentes; también pueden indicar polaridades magnéticas sobre un disco magnético. Un "positivo", "sí", o "sobre el estado" no es necesariamente el equivalente al valor numérico de uno; esto depende de la nomenclatura usada.
De acuerdo con la representación más habitual, que es usando números árabes, los números binarios comúnmente son escritos usando los símbolos 0 y 1. Los números binarios se escriben a menudo con subíndices, prefijos o sufijos para indicar su base. Las notaciones siguientes son equivalentes:
  • 100101 binario (declaración explícita de formato)
  • 100101b (un sufijo que indica formato binario)
  • 100101B (un sufijo que indica formato binario)
  • bin 100101 (un prefijo que indica formato binario)
  • 1001012 (un subíndice que indica base 2 (binaria) notación)
  •  %100101 (un prefijo que indica formato binario)
  • 0b100101 (un prefijo que indica formato binario, común en lenguajes de programación)

Conversión entre binario y decimal

Decimal a binario


Se divide el número del sistema decimal entre 2, cuyo resultado entero se vuelve a dividir entre 2, y así sucesivamente hasta que el dividendo sea menor que el divisor, 2. Es decir, cuando el número a dividir sea 1 finaliza la división.
A continuación se ordenan los restos empezando desde el último al primero, simplemente se colocan en orden inverso a como aparecen en la división, se les da la vuelta.

Éste será el número binario que buscamos.
Ejemplo
Transformar el número decimal 131 en binario. El método es muy simple
131 dividido entre 2 da 65 y el resto es igual a 1
 65 dividido entre 2 da 32 y el resto es igual a 1
 32 dividido entre 2 da 16 y el resto es igual a 0
 16 dividido entre 2 da 8  y el resto es igual a 0                   
  8 dividido entre 2 da 4  y el resto es igual a 0
  4 dividido entre 2 da 2  y el resto es igual a 0
  2 dividido entre 2 da 1  y el resto es igual a 0
  1 dividido entre 2 da 0  y el resto es igual a 1
             -> Ordenamos los restos, del último al primero: 10000011
Ejemplo
Transformar el número decimal 100 en binario.
Otra forma de conversión consiste en un método parecido a la factorización en números primos. Es relativamente fácil dividir cualquier número entre 2. Este método consiste también en divisiones sucesivas. Dependiendo de si el número es par o impar, colocaremos un cero o un uno en la columna de la derecha. Si es impar, le restaremos uno y seguiremos dividiendo entre dos, hasta llegar a 1. Después sólo nos queda tomar el último resultado de la columna izquierda (que siempre será 1) y todos los de la columna de la derecha y ordenar los dígitos de abajo a arriba.
Ejemplo:
100|0
 50|0
 25|1   --> 1, 25-1=24 y seguimos dividiendo por 2
 12|0
  6|0
  3|1
  1|1   -->  (100)10 = (1100100)2 
Existe un último método denominado de distribución. Consiste en  distribuir los unos necesarios entre las potencias sucesivas de 2 de  modo que su suma resulte ser el número decimal a convertir. Sea por  ejemplo el número 151, para el que se necesitarán las 8 primeras  potencias de 2, ya que la siguiente, 28=256, es superior al  número a convertir. Se comienza poniendo un 1 en 128, por lo que aún  faltarán 23, 151-128 = 23, para llegar al 151. Este valor se conseguirá  distribuyendo unos entre las potencias cuya suma dé el resultado buscado  y poniendo ceros en el resto. En el ejemplo resultan ser las potencias  4, 2, 1 y 0, esto es, 16, 4, 2 y 1, respectivamente.
Ejemplo:
20=   1|1
  21=   2|1
  22=   4|1
  23=   8|0
  24=  16|1
  25=  32|0
  26=  64|0
  27= 128|1           128 + 16 + 4 + 2 + 1 = (151)10 = (10010111)2

Decimal (con decimales) a binario

Para transformar un número del sistema decimal al sistema binario:
  1. Se transforma la parte entera a binario. (Si la parte entera es 0 en binario será 0, si la parte entera es 1 en binario será 1, si la parte entera es 5 en binario será 101 y así sucesivamente).
  2. Se sigue con la parte fraccionaria, multiplicando cada número por 2. Si el resultado obtenido es mayor o igual a 1 se anota como un uno (1) binario. Si es menor que 1 se anota como un 0 binario. (Por ejemplo, al multiplicar 0.6 por 2 obtenemos como resultado 1.2 lo cual indica que nuestro resultado es un uno (1) en binario, solo se toma la parte entera del resultado).
  3. Después de realizar cada multiplicación, se colocan los números obtenidos en el orden de su obtención.
  4. Algunos números se transforman en dígitos periódicos, por ejemplo: el 0.1
Ejemplo:
0,3125 (decimal)   => 0,0101 (binario).
Proceso:
0,3125 · 2 = 0,625 => 0
0,625  · 2 = 1,25  => 1
0,25   · 2 = 0,5   => 0
0,5    · 2 = 1     => 1 
En orden: 0101     -> 0,0101 (binario)
Ejemplo:
0,1 (decimal) => 0,0 0011 0011 ... (binario). 
Proceso: 
0,1 · 2 = 0,2 ==> 0
0,2 · 2 = 0,4 ==> 0
0,4 · 2 = 0,8 ==> 0
0,8 · 2 = 1,6 ==> 1
0,6 · 2 = 1,2 ==> 1
0,2 · 2 = 0,4 ==> 0  <--se repiten las cuatro cifras, periódicamente
0,4 · 2 = 0,8 ==> 0  <-
0,8 · 2 = 1,6 ==> 1  <-
0,6 · 2 = 1,2 ==> 1  <- ...
En orden: 0 0011 0011 ... => 0,0 0011 0011 ... (binario periódico)
 

Binario a decimal (con parte fraccionaria binaria)

1. Inicie por el lado izquierdo (la primera cifra a la derecha de la coma), cada número multiplíquelo por 2 elevado a la potencia consecutiva a la inversa (comenzando por la potencia -1, 2-1).
2.Después de realizar cada una de las multiplicaciones, sume todas y el número resultante será el equivalente al sistema decimal.
Ejemplos
  • 0,101001 (binario) = 0,640625(decimal). Proceso:
1 · 2 elevado a -1 = 0,5
0 · 2 elevado a -2 = 0
1 · 2 elevado a -3 = 0,125
0 · 2 elevado a -4 = 0
0 · 2 elevado a -5 = 0
1 · 2 elevado a -6 = 0,015625
La suma es: 0,640625
0.110111 (binario) = 0,859375(decimal). Proceso:
1 · 2 elevado a -1 = 0,5
1 · 2 elevado a -2 = 0,25
0 · 2 elevado a -3 = 0
1 · 2 elevado a -4 = 0,0625
1 · 2 elevado a -5 = 0,03125
1 · 2 elevado a -6 = 0,015625
La suma es: 0,859375
 
REFERENCIAS
www.wikipedia.com
www.webspag.com 
www.sistemas.com

puntos extras 2

PROGRAMA 1
este es un programa con el fin de que el usuario juege piedra pael o tijera
este es el codigo del programa:
#include <stdio.h>
#include <limits.h>                                        
#include <float.h>                                                                   
#include <stdlib.h>                                                     
#define MAXIMO 3
/*este es un programa que al momento de ejecuarlo juegas contra el ordenador al piedra papel o tijeras*/
  int main(int argc, char** args) {
    char piedra, papel, tijera, c;
    int respuesta, dato, puso;   
    piedra = 1;
    papel = 2;
    tijera = 3;
    printf("seras capas de ganarle al ordenador.\n");
    printf("intentalo.\n");
    printf("a jugar se a dicho.\n");
    /* scanf("%d", &dato);*/
    {for(puso = 0; puso < 4; puso++);
      printf("piedra = 1  *** papel = 2  *** tijeras = 3.\n");
      printf("dime que pones piedra, papel o tijera-->  ", respuesta);
      scanf("%d", &puso);
      srand(time(0));
      /*respuesta = rand()%MAXIMO;*/
      respuesta = puso;
      c = getchar();
      switch(respuesta){
    case 1:
      if(respuesta = 1){printf("yo puse papel y tu piedra asi que to gano", piedra);}
      {printf("sige intentando\n");}
 break;
    case 2:
      if(respuesta = 2){printf("yo puse tijera y tu papel asi que yo gano.\n", papel);}
      {printf("serca suerte a la proxima\n");}
    break;
    case 3:
      if(respuesta = 3){printf("yo puse piedra y tu papel asi que yo gano.\n", tijera);}
      {printf("ya casi suerte a la proxima\n");}
     break;
      default:
 printf("no tecleaste bien el caracter sugerido en pantalla.\n");
 break;
   }
    }
  return 1;
}

**********************************************************************************
PROGRAMA2
este es otro programa que ise donde el usuario pueda llegar a una tienda y escoger entre los diversos articulos que venden
el siguiente es el codigo del programa:
#include<stdio.h>
#define MAX 5
int main(void) {
  printf("estees un programa de opciones multiples para compras\n");
  printf("selecciona la opcion que quieres consultar\n");
  printf("1-> articulos de oficina, 2-> deportes, 3-> electronica\n");
  int eco;
  for(eco=0;eco<MAX;eco++) {
    switch(eco){
    case 1: 
      printf("que articulos de oficina quieres llevar \n");
      printf("1-> pizarron 2-> calculadora 3-> silla");
      break;
    case 2: 
      printf("que articulos de deportes desea llevar\n");
      printf("1-> camisa, 2-> chort, 3-> calsetines");
      break;
    case 3: 
      printf("que articulos de electronica deseas llevar\n");
      printf("1-> television lcd, 2-> celular, 3-> aipod");
      break;
    default: 
      printf("no tecleaste ningua opcion valida porfavor vuelve a intentarlo\n");
      break;
    }
}
    if(eco > 2){printf("por su preferencia al elegir mas de dos articulos diveros de nuestras lineas le damos un producto gratis");} 
  system("pause");
  return 1;
}
este es el programa ya compilado:




"espero y les aya sido de su agrado"

miércoles, 29 de junio de 2011

tarea 2 lo que aprendimos

Como vimos en clase la computadora trabaja en cierto lenguaje que es el “binario”(1,0).
asi que para que nosotros le podamos dar una instrucción a la computadora necesitamos de un compilador para que este tradusca de las instrucciones que nosotros le damos en un código aceptado por el mismo a lenguaje de computadora(“binario”) para que la computadora lo pueda entender.
Otra forma empleada de la que vimos en clase el martes de convertir un numero a forma binaria es realizar una serie de divisones sucesivas entre 2 y escribir los restos obtenidos en cada división en orden inverso al que han sido obtenidos.
Por ejemplo, para convertir al sistema binario el número 7710 haremos una serie de divisiones que arrojarán los restos siguientes:
77 : 2 = 38 Resto: 1
38 : 2 = 19 Resto: 0
19 : 2 = 9 Resto: 1
9 : 2 = 4 Resto: 1
4 : 2 = 2 Resto: 0
2 : 2 = 1 Resto: 0
1 : 2 = 0 Resto: 1
y, tomando los restos en orden inverso obtenemos la cifra binaria:

7710 = 10011012
esta pagina es en la que me base para ase lo anterior  
http://platea.pntic.mec.es/~lgonzale/tic/binarios/numeracion.html

en la siguiente tabla se muestra los operadores y sus significados


OPERADOR
SIGNIFICADO
EJEMPLO
&
(and) nivel bit
X & y
|
         OR
X | Y
    ˜
NEGACION O COMPLEMENTO
˜X
          ^
OR EXCLUSIVO
X ^ Y
 <<
DESPLAZAMIENTO A LA IZQUIERDA
X << 3
>>
DESPLAZAMIENTO A LA DERACHA
X >> 3



Algunos ejemplos:


1
1
0
1
1
0


         =a


0
0
1
0
0
1


       =˜a              


1
0
0
0
1
1


           =b
                             b >> 3  
                      0 0 0 1 0 0 |0 1 1
                             a<<3
                     1 1 0 | 1 1 0 0 0 0
"los ejemplos anteriores fueron echos por my
basados en my libreta de algoritmos computacionales"