Bienvenido

Bienvenido
Disfruta el contenido

domingo, 21 de diciembre de 2014

Programacion en C Ciclos


Uso de repeticion controlada por contador y por bandera o centinela


En este programa aprenderemos sobre el uso de ciclos. En particular el uso de la repeticion controlada por contador implementada a traves de la estructura for.


En el desarrollo de programas realizar la misma operacion muchas veces es una tarea muy comun por lo que en vez de repetir las instrucciones existen estructuras de control para realizar esta operacion y realizar la iteracion correspondiente las veces que sea necesaria.

En este programa se manejan dos tipos de iteraciones. La iteracion controlada por bandera o centinela y la repeticion controlada por contador. 

En la repeticion por centinela o bandera se encierra el bloque de codigo que queramos ciclar por medio de un while

while(valor bandera){
     
   leer el valor ingresado; si es el centinela se sale del ciclo en la proxima iteracion
     
      bloque de codigo a ciclar
  }

En la repeticion controlada por contador se controla la cantidad de iteraciones a traves de una variable tipo contador que sera la variable de control y salida del ciclo la cual debe estar inicializada antes de comenzar las iteraciones. Cada vez que se realizan las iteraciones la variable de control se evalua con una condicion definida por el programador. 

La variable de control debe estar forsozamente inicializada fuera del while ya que de lo contrario estariamos reinicializando la variable en cada iteracion y esto haria que nunca se cumpliera la condicion para salir del ciclo. Este error se le conoce comunemente copmo ciclo infinito. Si en la ejecucion de algun programa llegas a ver esto deten su ejecucion depura tu codigo y comienza de nuevo a probar tu codigo.

inicializa variable de control

while(condicion de ciclo){     
      bloque de codigo a ciclar

      incremento/decremento de la variable de control

  }

Seudocodigo para repeticion controlada por contador con un while

Como un extra se puede colocar un contador para contar la cantidad de ciclos y desplegarlo al momento ejecutar el ciclo; esto es util sobre todo en programas que solicitan datos de un usuario.

En cada ciclo la variable de control se realiza una operacion de incremento o decremento dependiendo de la implementacion del ciclo.

Errores comunes en ciclos

Error de diferencia por uno
La variable de control no se inicializa de forma correcta
Ciclo infinito
Se da cuando la condición del ciclo no se cumple
Manejo de la variable de control
Se recomienda que la variable de control siempre sea un valor entero. Verificar que la operacion de incremento o decremento segun sea el caso genere la cantidad de iteraciones que el ciclo requiera.


El siguiente programa fue ejecutado en plataforma Windows con el compilador Dev C++.
Para poder ejecutarse en Visual Studio 2013 les dejo la siguiente liga

https://msdn.microsoft.com/en-us/library/bb384838.aspx

En este programa que tiene como proposito imprimir las tablas de multiplicar a traves de una repeticion controlada por contador. Las caracteristicas de este tipo de repeticion se encuentran ya definidas en la estructura for siendo 'contador' la variable de control. El ciclo comienza de 1 hasta 10 en el que durante cada ciclo se multiplica el valor de contador con la entrada del usuario e imprime el resultado de la operacion en pantalla. El ciclo continua a lo a lo largo de las 10 iteraciones con el incremento de +1 en cada uno hasta completar los 10 ciclos controlados a traves de la condicion contador <= 10.





Ejecucion del programa


La ejecucion del ciclo for esta dentro de un while el cual a traves del valor -1 funciona como el valor bandera para salir de la ejecucion del programa. 


/*Tabla de multiplicar

 Juan carlos lopez Nuñez
*/

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


int main(int argc, char *argv[])
{
  int tabla, contador, respuesta;
 
  printf("Tablas de multiplicar\n\n");
 
  printf("¿Que tabla deseas calcular?: ");
  scanf("%d", &tabla);
 
  while(tabla != -1){
     
      printf("\nTabla del %d.\n", tabla);
     
      for(contador = 1; contador <= 10; contador++)
      {
          respuesta = tabla * contador;
          printf("%d * %d = %d\n", tabla, contador, respuesta);
      }
     
      printf("¿Que tabla deseas calcular?: ");
      scanf("%d", &tabla);
     
      system("cls");
      printf("Tablas de multiplicar\n\n");    
  }
 
  printf("\nCreditos.\nHecho por Juan  lopez\nVuelve pronto\n\n");
   
  system("PAUSE");   
  return 0;
}

Programacion en C Estructuras

 Uso de estructuras en C

En este articulo les muestro un programa para poder aprender el uso de estructuras en el lenguaje C y como podemos aplicarlo de manera practica. El programa muestra la declaracion de estructuras y como tener acceso a los miembros.

Aqui el usuario debe colocar los datos del cliente dependiendo si este  es deudor o no de un almacen. Se declara un arreglo de datos tipo cliente definidos en la estructura 'cliente'.


 Al final de la ejecucion el programa muestra un reporte de los datos de las personas ingresadas a modo de lista mostrando si son deudores o si ya han pagado dependiendo del status ingresado durante la ejecucion del programa.

 Un poco sobre estructuras
Las estructuras son un conjunto de variables relacionadas, las cuales tienen varios tipos de datos en ocasiones  teniendo un nombre comun.  Es por este motivo que las estructuras se les considera tipos de datos derivados.

Al final de la ejecucion el programa muestra un reporte de los datos
de las personas ingresadas a modo de lista mostrando si son deudores o si
ya han pagado dependiendo del status. 

Una estructura tiene la siguiente forma

struct alumno{
       char nombre[100];
       char apellido[100];
       float calificacion;     
};

La palabra reservada struct sirve para la definicion de la estructura. Cada estructura lleva tambien un identificador, en este caso alumno. Ahi que tomar en cuenta que el identificador debe ser unico en nuestro programa para cada estructura que declaremos.El identificador servira tambien mas adelante para referirse a los miembros de la estructura. Los miembros son los tipos de datos relacionados a la estructura.

Los miembros de la estructura pueden ser de tipo basico ya sean float, int, etc o bien otras estructuras.

El acceso a los miembros de la estructura se realiza por medio de dos operadores, ya sea un operador punto o un operador de apuntador de apuntador a estructura. 

En el caso del operador punto se tiene acceso a los miembros de la estructura a traves del identificador de la estructura. En este programa se tendra acceso a los miembros de esta forma.

Ejecucion del programa y codigo 
 Aqui les dejo unas capturas de pantalla sobre el funcionamiento del programa. Este codigo como todos los demas que les muestro fue probado con Dev C++ y ejecutado en plataforma Windows.




Ejecucion del programa para colocar los datos del cliente. En este momento el programa tiene acceso a los miembros del tipo de dato definido en la estructura.



Informe del programa del estado de pago con los clientes.



/*PROGRAMA DE CLIENTES BASICO  
Juan Lopez

El programa muestra la declaracion de estructuras y como tener acceso a los
miembros.

Aqui el usuario debe colocar los datos del cliente dependiendo si este
es deudor o no de un almacen. Se declara un arreglo de datos tipo cliente
definidos en la estructura 'cliente'

La constante simbolica CLIENTES define la cantidad de entradas que
pueden ingresarse para el usuario. Solo cambia este valor para seleccionar
la cantidad de entradas.

Al final de la ejecucion el programa muestra un reporte de los datos
de las personas ingresadas a modo de lista mostrando si son deudores o si
ya han pagado dependiendo del status.

Opciones para el usuario
d.-  deudas
p.-  facturas pagadas

*/

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

#define CLIENTES 2 //esta constante simbolica define la cantidadd de clientes que pueden ingresarse

enum meses {ENERO = 1, FEB, MAR, MAY, JUN, JUL, AGOS,
             SEP, OCT, NOV, DIC };

//Definicion de la estructura del dato tipo cliente

struct cliente{
       char nombre[100];
       char apellido[100];
       int numUnidades;
       float precio;
       char estado;
};




int main(int argc, char *argv[])
{
    struct cliente listado[CLIENTES];
    int i, j;
    int maximo = 100;
    enum meses mes;
    char *nombreMes = { "Enero", "Febrero", "Marzo", "Abril",
                       "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "octubre", "Noviembre", "Diciembre"};
       
   
    printf("Programa de clientes basico.\n\n");   
    for(i = 0; i  <= CLIENTES -1; i++ )
    {
          system("cls");
          printf("Programa de clientes basico.\n");
          printf(" INGRESO DE DATOS %d.\n\n", i );
         
          for(j = 0; j <= 10; j++)
            printf("-");          
                   
          printf("\n Ingrese el nombre del cliente: ");
          scanf("%s", &listado[i].nombre);
         
          printf("\n Ingrese el apellido del cliente: ");
          scanf("%s", &listado[i].apellido);
         
          printf(" Ingrese la cantidad de unidades solicitadas: ");
          scanf("%d", &listado[i].numUnidades );
         
          printf(" Ingrese el precio de cada unidad: ");
          scanf("%f", &listado[i].precio);
         
          printf(" Ingrese el estado del cliente (d DEUDOR/p PAGADO): ");
          scanf("%s", &listado[i].estado);         
         
                   
    } 
   
 
    system("cls");
    printf("\n-.Reporte de Clientes.-\n\n");   
    printf("\n-Cliente       Estado-\n\n");
    for(i = 0; i  <= CLIENTES -1; i++ )
    {
          if(listado[i].estado == 'd')
            printf("%d.- %s %s DEUDOR\n", i+1,listado[i].nombre, listado[i].apellido);
         
          if(listado[i].estado == 'p')
          {
      //     if( listado[i].precio * listado[i].numUnidades > maximo)
            printf("%d.- %s %s PAGADO\n", i+1,listado[i].nombre, listado[i].apellido);
          }
    }  
   
    //Impresion de calendario por enumeracion
  //for(mes = ENERO; mes <= DIC; mes++)
    //  printf("%2d%11s\n", mes, nombreMes[mes]);  
  
 
  system("PAUSE");   
  return 0;
}






viernes, 19 de diciembre de 2014

Programacion en C Comparador de valores


Una parte importante de la programacion ya sea de manera secuencial en lenguajes tales como C o bien orientados a objetos tales como C++ o C# la realizacion de un algoritmo adecuado para resolver tareas determinadas es de gran importancia para que el programa logre su objetivo.





Aqui le dejo este comparador de valores que probe en Dev C++ el cual consiste en encontrar el valor mayor y menor del una serie de valores que deseemos ingresar. Este programa puede ampliarse  por medio de arreglos para llevar un registro de los valores ingresados y con estos valores realizar calculos estadisticos con ellos.


Prueba del comparador de valores con 20 numeros.

El programa esta escrito por completo dentro de main pero les recomiendo pasarlo a una funcion que puedan llamar en cualquier ocasion para otras secciones de codigo que necesiten en sus programas.

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


int main(int argc, char *argv[])
{
  int counter, number, valores, respuesta;
  int largest, smallest;
 
  printf("\tComparador de valores \n\n");
 
  do{
                     
      printf("*.-Ingresa la cantidad de valores que deseas comparar: ");
      scanf("%d", &valores);
    
      if(valores >= 2){
    
          printf("\n-Lectura de valores.-\n\n");
        
          counter = 1;
        
          printf("%d.-Ingresa tu numero: ", counter);
          scanf("%d", &largest);
        
          counter++;
        
          printf("%d.-Ingresa tu numero: ", counter);
          scanf("%d", &number);
        
          if(number > largest)
          {
              smallest = largest;
              largest = number;
          }
          else if(number <= largest)
            smallest = number;
          
          for(counter = 3; counter <= valores; counter++)
          {
              printf("%d.-Ingresa tu numero: ", counter);
              scanf("%d", &number);
            
              if(number > largest)
                largest = number;
              else if(number < smallest)
                smallest = number;   
          }
        
          if(largest == smallest)
          {
              printf("\n\n-Reporte de comparacion.-");
              printf("\nNo se puede realizar una comparacion, ya que todos los numeros son iguales.");
    
          }
          else
          {
              printf("\n\nReporte de la comparacion.-\n");
              printf("\nSe compararon %d valores", valores);
              printf("\nEl numero mas grande es: %d\n", largest);
              printf("*El  numero mas pequeño es: %d", smallest);            
          }      
               
      }
      else
        printf("Se necesitan al menos 2 valores para hacer una comparacion.");
            
        printf("\n\n¿Desea una nueva compararacion?\n\1 para aceptar, 0 para salir: ");
        scanf("%d", &respuesta);
      
      
        smallest = 0;
      
        system("PAUSE");
        system("cls");     
      
        printf("\tComparador de valores \nJuan Lopez\n");         
    
  }while(respuesta == 1);
 
 
  system("PAUSE");  
  return 0;
}