viernes, 4 de octubre de 2013

Pilas

*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

struct pilanodo {
       int clave;
       char descrip[20];
       struct pilanodo *sigptr;
      };

typedef struct pilanodo PILANODO;
typedef PILANODO *PILANODOPTR;

void push(PILANODOPTR *, int, char[]);//declaración o prototipo de función
void instrucciones(void);//declaración o prototipo de función
void listar (PILANODOPTR);
int pop (PILANODOPTR *);

main()
{ PILANODOPTR pilaptr = NULL;//apuntador con valor nulo
  int opcion/*para el menu*/, cve;
  char desc[20];
  instrucciones();//llamado a función instrucciones que despliegan el menu
  printf("\n                Elige opcion: ");
  scanf("%d", &opcion);

  while (opcion != 4)
       { switch(opcion)
         { case 1: printf("\n         Escribe la clave del articulo (entero): ");
                   scanf("%d", &cve);
                   fflush(stdin);//funcion para limpiar el buffer de captura
                   printf("\n             Escribe la descripcon del articulo: ");
                   gets(desc);//capturar un string          
                   push(&pilaptr, cve, desc);
                   break;
           case 2:
                       pop(&pilaptr);
                       break;
           case 3:
                      listar (pilaptr);
                   break;
           default : printf("\n                Opcion no permitida. \n\n");
                     printf("\n                Enter para continuar...");
                     getch();
                     instrucciones();
         }
         instrucciones();
         printf("\n                Elige opcion: ");
         scanf("%d", &opcion);
       }
  printf("\n                Fin del programa.\n\n");
  printf("                Enter para salir...");
  getch();
}

void push(PILANODOPTR *topeptr, int cve, char des[20])//lista de parametros con declaración de variables
{ PILANODOPTR nuevoptr;//declaración de apuntador nuevoptr
  nuevoptr = (PILANODOPTR) malloc(sizeof(PILANODO));//al apuntador nuevoptr le asignamos el tamaño de la estructura PILANODO
  if (nuevoptr != NULL)//si nuevoptr encontro espacio en memoria
     { nuevoptr->clave = cve;//nuevoptr que apunta a clave le asignamos el valor de cve
       strcpy(nuevoptr->descrip, des);/*función de copiado de cadenas, al miembro descrip que esta siendo apuntado por nuevoptr
       le copiamos la cadena con nombre des*/
       nuevoptr->sigptr = *topeptr;/*sigptr que esta siendo apuntado por nuevoptr le asignamos el valor de topeptr, el cual apunta
       al tope de la pila*/
       *topeptr = nuevoptr;//al apuntador topeptr le asignamos el valor de nuevoptr
     }
     else
     { printf("\n                %d %s, no fue insertado."
              "\n                No hay memoria disponible. \n", cve, des);
       printf("\n                Enter para continuar...");
       getch();
     }
}

void instrucciones(void)
{ system("cls");
  printf(" \n\n\n\n"
     "                OPERACIONES DISPONIBLES CON LA PILA: \n\n\n\n"
     "                1 (push) INSERTAR UN VALOR EN LA PILA \n"
     "                2 (pop)  EXTRAER UN VALOR DE LA PILA \n"
     "                3 IMPRIMIR LA PILA \n"
     "                4 SALIR DEL PROGRAMA \n");
}
void listar (PILANODOPTR auxptr)
{
    if (auxptr==NULL)
    printf("\n\nla pila esta vacia");
    else
    { while(auxptr!=NULL)
        {
             printf("\n %d %s", auxptr->clave, auxptr->descrip);
             auxptr= auxptr->sigptr;
        }
     printf("\n fondo de la pila\n");
   
    }
    getch();
}
int pop (PILANODOPTR *topeptr)
{
    PILANODOPTR auxptr;
    auxptr=*topeptr;
    if(auxptr==NULL)
    {
        printf("\nno hay elementos en la pila");
    }
    else
        {
            if(auxptr!=NULL)
            {
                printf("%i--%s", auxptr->clave, auxptr->descrip);
                (*topeptr)=auxptr->sigptr;
                free(auxptr);
            }
        }
    getch();
}

Arreglos, Suma de Matrices

#include<stdio.h>
main()
{
    int matriz1 [3][3], x, y, matriz2[3][3], matriz3[3][3];
    for(x=0;x<=2;x++)
        for(y=0;y<=2;y++)
        {
            printf("\nDame el valor del elemento %i %i de la matriz1\n", x,y);
            scanf("%i", &matriz1 [x][y]);
        }
    for(x=0;x<=2;x++)
        for(y=0;y<=2;y++)
        {
            printf("\nDame el valor del elemento %i %i de la matriz2\n", x,y);
            scanf("%i", &matriz2 [x][y]);
        }
    printf("valor de la matriz 3:");
    for(x=0;x<=2;x++)
        {
        printf("\n");
        for(y=0;y<=2;y++)
        printf("%i", matriz3[x][y]=matriz1[x][y]+matriz2[x][y]);
        }
    return 0;
    getch();
}