Scripts de c

Veamos este programita que nos ilustra en manejar macros o funciones para tener una programación mas estructurada.

#include <stdio.h>
 
/* Una macro es simplemente una substitucion de texto */
 
#define cuadrado(i) ((i)*(i))
#define cubo(i) cuadrado(i)*(i)
 
main()
{
 
int i=3;
 
printf("\n%d al cuadrado es %d\n",i,cuadrado(i));
 
printf("%d al cubo es %d\n",i,cubo(i));
 
}

 

Autor: elgame

Programa que crea una matriz de 7 filas por 10 columnas y que la rellena de la siguiente forma: en la 1 columna pone el factorial de la fila y en las demas rellana con números primos.

 /* Librerias utilizadas */
#include <stdio.h> /* Libreria estandar */
#include <math.h> /* Libreria matematica */
 
#define filas 7 /* Dos constantes */
#define columnas 10
 
int factorial (numero)
/* Usamos una funcion recursiva para calcular el factorial */
{
if (numero > 0)
/* si el numero pasado es mayor que cero calcula el factorial del numero anterior */
{
numero = numero * factorial(numero-1);
}
if (numero == 0) /* Y si es igual a cero, el factorial de cero es igual a uno */
{
numero = 1;
}
return(numero); /* Devuelve el valor del factorial */
}
 
int numprimo(int *i,int *ptr) /* Calcula los numeros primos */
/* Se le pasan dos punteros */
{
long int resto,esprimo,a,num; /* Declaramos las variables locales */
num = *i;
/* Asignamos el valor del puntero a una de las variables */
esprimo = 0;
while (esprimo==0)
{
a=sqrt(num);
/* Euclides dijo que para saber si un numero es primo hab¡a que comprobarlo
unicamente con los numeros inferiores a su raiz cuadrada, lo que hacemos es
cuadrada, lo que aligera bastante el calculo. */

 
while (a != 1)
/* Divide el numero entre los menores a su raiz cuadrada (a), hasta 1 */
{
resto=num%a;
a--;
if (resto == 0)
/* Si el resto es cero, no es rpimo y deja de calcular */
{
a = 1;
}
}
if (resto != 0)
/* Pero si nunca ha sido cero, es un numero primo */
{
if (a == 1)
{
esprimo = 1;
}
else {esprimo = 0;}
}
num++;
}
*ptr = num; /* Modificamos el valor al que apunta el puntero */
}
 
 
void main()
{
int primo,i=2,numero,compara=1,n=0;
/* Declaramos variables */
int tabla [7][10];
/* Declaramos una matriz de 7x10 */
int fil,col;
 
for (fil=0;fil<filas;fil++)
{
/* Rellenamos la primera */
for (col=0;col<columnas;col++)
/* columna con los factoriales */
{
if (col == 0)
{
numero = fil;
tabla [fil][col] = factorial(numero+1);
/* Llamada a la funcion por recursividad */
}
}
}
 
fil = 0;
col = 1;
 
do{
numprimo(&i,&primo); /* Aqui rellenamos con los numeros primos */
{
tabla [fil][col] = primo - 1;
col++;
if (col == 10)
/* Ademas, se evita que salgan dos numeros iguales */
{
fil++;
col = 1;
}
n++;
}
compara = primo-1;
i++;
}
while (n<63);
 
for (fil=0;fil<filas;fil++) /* Sacamos a pantalla */
{
printf("(");
for (col=0;col<columnas;col++)
{
printf("%6d",tabla[fil][col]);
}
printf(" )\n");
}
printf("\n\n");
}

 

Autor: S/A

Ejemplo de lógica con bits.

#include<stdio.h>
 
main()
{
 
int i,j,k;
 
i=5; /* Inicializamos la variable i */
 
j=i<<2; /* Movemos los bits 2 lugares a la izquierda */
 
k=j>>2; /* Los movemos a la derecha */
 
printf("\ni = %d j = %d k = %d\n",i,j,k); /* Imprimimos */
 
}

 

Autor: elgame

En este ejemplo se muestra las diferentes formas de incrementar variables en el lenguaje de c.

/* http://www.pro-gramas.com */
/*Este programa trata sobre las distintas formas de incrementar
una variable, y como operar con ella*/

 
#include <stdio.h>
 
main()
{
 
int i; /*Declaramos la variable*/
 
i = 0; /*La inicializamos, con el valor 0*/
 
i = i + 1; /*Esta es la forma habitual de incrementar una variable
pero c permite otras formas mas eficaces*/

 
i++; /* Estas instrucciones incrementa en uno el valor de la*/
++i; /* varible i, la diferencia entre las dos reside en que*/
/* en un bucle (for, while...), ++i incrementa y luego
ejecuta el bucle, e i++ ejecuta el bucle y luego incrementa*/

i--;
--i; /*Tambien existe en la resta*/
 
i += 1; /* Esta es otra forma de incrementar i, se permite con otras
operaciones (- , * , /,..)*/

 
printf ("i = %d\n",i); /*Esto debe dar como resultado i = 2*/
 
}

 

Autor: elgame

Veremos un programita que permite realizar conversiones monetarias, pero solo convierte de pesetas a euros.

/* http://www.pro-gramas.com */
#include<stdio.h>
 
void main()
{
float pesetas,euros;
 
printf("\nIntroduzca la cantidad en pesetas -> ");
scanf("%f",&pesetas);
 
euros=pesetas/166.386;
 
/* Nota: al poner en el printf .2 redondea solo */
 
printf("\n\n%f pesetas son %.2f euros",pesetas,euros);
 
}

 

Autor: elgame

Programa que hace una copia de un fichero, las rutas se pasan a la función main, controla el número de argumentos de main, la apertura de los ficheros, y la sobre escritura en un archivo existente, similar al copy de MS-DOS.

/* http://www.pro-gramas.com */
#include<stdio.h>

void main(int argc,char *argv[])
{
char sino,car;
FILE *f1,*f2;

/* Control del paso de los argumentos de main */
if(argc!=3)
     {
        printf("\nSintaxis correcta: copia origen destino\n");
        exit(-1);
             }

     /* Control de apertura del fichero origen */
     f1=fopen(argv[1],"r");
     if (f1==NULL)
             {
        printf("\nError abriendo archivo origen\n");
        exit(-1);
             }

     /* Control de apertura del fichero destino */
     f2=fopen(argv[2],"r");
     if (f2==NULL)
             {
        printf("\nError abriendo archivo destino\n");
        exit(-1);
             }

     /* Control de sobrescritura del archivo destino */
     if(fgetc(f2)!=EOF)
             {
        fclose(f2);
        printf("\nEl archivo ya existe, ¨desea sobrescribir? (S/N)\n");
        scanf("%c",&sino); if ((sino=='N')||(sino=='n')) exit(-1);
             }

     f2=fopen(argv[2],"w");

     /* Bucle que copia caracter a caracter los ficheros */
     do
     {
             car=fgetc(f1);
             fputc(car,f2);
     }
     while(car!=EOF);

}

 

Autor: elgame
Vamos a ver este programa que ilustra el tratamiento de cadenas de caracteres en Lenguaje C. Cada instrucción 
lleva un ejemplo.
/* Programa que ilustra el manejo de cadenas, con un
ejemplo de cada sentencia */
/* http://www.pro-gramas.com */
#include <stdio.h>
#include <string.h>

#define salto printf("\n");

main()
{
    int p;
    char cadena[1000]="",nombre[8]="Manolo",*c;

    gets(cadena);     /* Lee una cadena */ salto;

    puts(cadena);     /* Escribe la cadena */     salto;

    strcat(cadena,nombre);     /* Copia nombre al final de cadena */
    puts(cadena);

    strncat(cadena,nombre,3); /* Copia 3 caracteres de nombre al final de cadena */
    puts(cadena);     salto;

    strcpy(cadena,"Hola, amiguitos");
    puts(cadena);

    strncpy(cadena,"Hola mundo",8);
    puts(cadena);         salto;

    c=strtok(cadena,"sin");

    if(c) puts(c);

    printf("%d\n",strlen(cadena));     salto;

    strcpy(cadena,"Manola"); /* Compara dos cadenas y devuelve un entero */
    p=strcmp(cadena,nombre); /* El valor del entero indica cual es mayor */

    getchar();

    if (p<0) puts("cadena es menor que nombre");
     else if (p>0) puts("cadena es mayor que nombre");
     else if (!p) puts("Son iguales");
    salto;

    strcpy(cadena,"Manola");    /* Compara a las dos cadenas 5 caracteres */
    p=strncmp(cadena,nombre,5); /* Lo demas es similar a lo anterior */

    if (p<0) puts("cadena es menor que nombre");
     else if (p>0) puts("cadena es mayor que nombre");
     else if (!p) puts("Son iguales");
    salto;

    /* Compara las cadenas hasta el caracter que difieren */
    p=strspn(cadena,nombre);
    printf("Cadena y nombre difieren en el caracter %d\n",p);

    /* Compra las cadenas hasta encontrar un caracter igual */
    strcpy(cadena,"Veo y subo");
    p=strcspn(cadena,nombre);
    printf("El primer caracter que coinciden es el %d\n",++p);

    c=strpbrk(cadena,nombre);    /* Encuentra un caracter comun */
    printf("%s\n",c);    salto;

    /* Devuelve un puntero a la primera 'd' en cadena */
    strcpy(cadena,"En un lugar de la mancha...");
    c=strchr(cadena,'d');
    p=c-cadena;
    printf("La primera -d- esta en la posicion %d\n",p);
    printf("%s\n",c);     salto;

    /* Devuelve un puntero a la ultima 'n' en cadena */
    c=strrchr(cadena,'n');
    p=c-cadena;
    printf("La ultima -n- esta en la posicion %d\n",p);
    printf("%s\n",c);     salto;

    /* Devuelve el puntero a la primera ocurrencia de nombre en cadena */
    c=strstr(cadena,"lugar");
    printf("%s\n",c);     salto;

    /* Cuando una sentencia no ha funcionado devuelve null */
    c=strstr(cadena,nombre);
    printf("%s\n",c);     salto;

    getchar();
    printf("***************************************************\n");
    printf("***************************************************\n");
    printf("***************************************************\n\n\n");

}
Autor: elgame