Esta entrada es parte no. 1 de 10 en la serie Practicas C

Un ejercicio nuevo de c sobre ficheros, para complementar tu formacion en nuestro portal de cursos online y de teleformacion.

El planteamiento de ejercicio es que se soliciten utilizando la linea de comandos tres ficheros de formas que se lean los datos de los dos primeros archivos y se concatenen en el tercer archivo indicado.

// Inclusion de librerias

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

// Predefinicion de funciones

// funcion para saber si existe o no un fichero

int Existe(char *);

// Funcion principal

int main(int argc,char *argv[])
{

    // Control de los parametros obtenidos desde el sistema
    // El planteamiento de ejecucion de la orden es el siguiente
    // unir fichero1 fichero2 ficheronuevo
    if(argc!=4)
    {
        printf("\n¡parametros incorrectos...\n");
        printf("\nEl formato de la orden es orden fichero1 fichero2 ficherodestino\n");
        exit(1);
    }

    // Comprobacion de si existen los ficheros que se van a leer
    if(Existe(argv[1])==0)
    {
        printf("\nError: El primer archivo no existe o no se ha encontrado...\n");
        exit(1);
    }

    if(Existe(argv[2])==0)
    {
        printf("\nError: El segundo archivo no existe o no se ha encontrado...\n");
        exit(1);
    }

    if(Existe(argv[3])==0)
    {
        printf("\nEl archivo destino se creara automaticamente.\n");
    }
    else
    {
        printf("\nEl archivo destino ya existe y se sobreescribira automaticamente.\n");
    }

    // Apertura de los archivos

    FILE *fichero1;
    FILE *fichero2;
    FILE *fichero3;
    char caracter;

    fichero1=fopen(argv[1],"rt");
    if(fichero1==NULL)
    {
        printf("\nHa ocurrido un error en la apertura del archivo %s",argv[1]);
        exit(1);
    }

    fichero2=fopen(argv[2],"rt");
    if(fichero2==NULL)
    {
        printf("\nHa ocurrido un error en la apertura del archivo %s",argv[2]);
        exit(1);
    }

    fichero3=fopen(argv[3],"wt");
    printf("\nSe ha creado el archivo %s",argv[3]);
    printf("\nConcatenando archivos");

    // Lectura de los archivos y grabacion en el archivo destino
    // se realiza una prelectura para evitar errores de archivos
    // vacios.

    fread(&caracter,sizeof(char),1,fichero1);
    while(!feof(fichero1))
    {
        fwrite(&caracter,sizeof(char),1,fichero3);
        fread(&caracter,sizeof(char),1,fichero1);
        printf(".");
    }

    fread(&caracter,sizeof(char),1,fichero2);
    while(!feof(fichero2))
    {
        fwrite(&caracter,sizeof(char),1,fichero3);
        fread(&caracter,sizeof(char),1,fichero2);
        printf(".");
    }

    // Cierre de archivos

    fclose(fichero1);
    fclose(fichero2);
    fclose(fichero3);

    printf("\nFichero concatenado Ok.\n");

    return 0;
}

// Funcion Existe

int Existe(char *Nombre)
{
    int resultado;
    FILE *fichero;
    if((fichero=fopen(Nombre,"r"))==NULL) resultado=0;
    else {
        resultado=1;
        fclose(fichero);
    }
    return resultado;
}




Oct
12

Ejercicios y Practicas de C (1)

Posted by: admin | Comments (0)
Esta entrada es parte no. 2 de 10 en la serie Practicas C

Bien, de nuevo aqui, y despues de algunos problemillas con un plugin para visualizar codigo, que aun asi esta todavia por retocar, voy a seguir con las practicas y ejercicios resueltos de c y c++, pero en este caso en formato de post y no de pagina.

Ejercicio y practica planteada

Algoritmo que lee una calificación numérica entre 0 y 10 y la transforma en calificación alfabética, escribiendo el resultado por pantalla.

// librerias de cabecera
#include <stdio.h>
#include <stdlib.h>

// Funcion principal

int main(int argc,char *argv[])
{
   // Declaracion de variables

   int calificacion;

   // Peticion por consola de la nota o calificacion
   printf("Teclee la calificación del alumno...: ");
   scanf(" %d",&calificacion);

   // Visualizacion de la nota de forma alfabetica

   if ( calificacion >=10 )
       printf("Matricula de honor");
   if ( calificacion >= 8 && calificacion <10 )
          printf("Notable - Sobresaliente");
   if ( calificacion >= 6 && calificacion < 8 )
         printf("Bien - Notable");
   if  ( calificacion >= 5 && calificacion < 6 )
        printf("Aprobado");
   if ( calificacion < 5 )
     printf("Suspendido");
}

Para visualizar la explicacion de las ordenes utilizadas pulsa sobre seguir leyendo, para ver el resto del articulo.



Read More→

Categories : Uncategorized
Comments (0)
Esta entrada es parte no. 3 de 10 en la serie Practicas C

Otro nuevo ejercicio de c para seguir el curso de teleformacion y así poder practicas con ejemplos uno de tus lenguajes de programación favorito.


Enunciado del ejercicio:

Realizar un programa que invierta un fichero de texto creando uno nuevo ( es decir el fichero de destino o final ha de tener el contenido del primero u origen pero al revés ), en vez de solicitar los nombres de archivos en el programa se utiliza la línea de parámetros como si de una orden de linux o ms-dos se tratara. Se utiliza para leer y grabar las funciones fread y fwrite, realizando una reserva de memoria dinámica con la función malloc, y la función free para liberar la memoria utilizada. El ejercicio se ha realizado utilizando el editor Code Blocks bajo Windows 7 y probado en la consola de comandos de Windows 7.






El ejercicio resuelto es el siguiente:

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

// Predefinición de funciones

int Existe(char *);
long int Tamanyo(char *);

// Función principal

int main(int argc,char *argv[])
{
    // Comprobación del numero de parámetros recibido
    if(argc!=3) {
        printf("\n¡Faltan parámetros");
        printf("\nFormato: comando fichero_origen fichero_destino");
        exit(1);
    }

    // Comprobación de ficheros
    if(Existe(argv[1])==1) {
        printf("\nEl fichero de origen no se ha encontrado o no existe...");
        exit(1);
    }

    // Declaración de variables necesarias
    FILE *fichero;
    long int cuantos;
    char *reserva=NULL;
    int contador;

    // Abrir archivo en modo lectura
    fichero=fopen(argv[1],"rt");
    // Averiguar el tamaño del archivo
    cuantos=Tamanyo(argv[1]);
    // Realizar la reserva de memoria correspondiente al tamanyo del fichero
    reserva=(char *)malloc(sizeof(char)*cuantos);
    // leer el archivo completo y almacenarlo en la variable reserva
    fread(reserva,sizeof(char),cuantos,fichero);
    // Cerrar fichero de origen
    fclose(fichero);
    // abrir archivo destino
    fichero=fopen(argv[2],"wt");
    // en caso de error devolver error y salir
    if(!fichero) {
        printf("\nNo se ha podido crear el archivo destino...");
        exit(1);
    }
    // si no existe error recorrer el vector creado en orden inverso
    // y almacenarlo en el archivo destino
    printf("\nInvertir archivo");
    for(contador=cuantos;contador>=0;contador--)
    {
        fwrite(&reserva[contador],sizeof(char),1,fichero);
        printf(".");
    }
    // cerrar el archivo destino
    fclose(fichero);
    // finalizar programa
    printf("Ok\n");
    // Liberar memoria
    free(reserva);
    return 0;
}

// Función Existe

int Existe(char *nombre_fichero)
{
    FILE *fichero;
    int resultado=0;  // 0 = existe 1 = no existe

    fichero=fopen(nombre_fichero,"rt");
    if(fichero!=NULL) {
        fclose(fichero);
    } else {
        resultado=1;
    }
    return resultado;
}

// Función contador

long int Tamanyo(char *nombre_fichero)
{
    FILE *fichero;
    long int contador=0;
    char caracter=0;

    fichero=fopen(nombre_fichero,"rt");
    fread(&caracter,1,sizeof(caracter),fichero);
    while(!feof(fichero))
    {
        contador++;
        fread(&caracter,1,sizeof(caracter),fichero);
    }
    fclose(fichero);
    return contador;
}





Esta entrada es parte no. 4 de 10 en la serie Practicas C

Nueva practica o ejercicio resuelto de programación en el lenguaje c, para que completes tu teleformacion con nuestros cursos online gratuitos.


Enunciado del ejercicio:

Realizar un programa en el lenguaje de programación c, que lea una matriz de un fichero, realiza la traspuesta de dicha matriz y la almacene en un fichero nuevo. Los nombres de los archivos se han de solicitar utilizando la línea de comandos como si de un comando ms-dos o Linux se tratara. Se ha de solicitar tanto el nombre del archivo origen como el nombre del archivo destino.

El ejercicio y practicas resuelta a continuación:

#include <stdio.h>
#include <stdlib.h>
// Predefinición de funciones

int Existe(char *);

// Función principal

int main(int argc,char *argv[])
{
    // Comprobación del numero de parámetros recibido
    if(argc!=3) {
        printf("\n¡Faltan parámetros");
        printf("\nFormato: comando fichero_origen fichero_destino");
        exit(1);
    }

    // Comprobación de ficheros
    if(Existe(argv[1])==1) {
        printf("\nEl fichero de origen no se ha encontrado o no existe...");
        exit(1);
    }

    // Declaración de variables necesarias
    FILE *fichero;
    int filas;
    int columnas;
    float **matriz1=NULL;
    int contador;
    int contador1;

    // Abrir archivo en modo lectura
    fichero=fopen(argv[1],"rt");
    // Leer filas y columnas
    fscanf(fichero,"%d %d",&filas,&columnas);
    printf("%d %d",filas,columnas);
    // Realizar la reserva de memoria para las matrices
     matriz1=(float **)malloc(sizeof(float *)*filas);
    for(contador=0;contador<filas;contador)
    {
        matriz1[contador]=(float *)malloc(sizeof(float)*columnas);
    }
    // Asignar datos de la matriz
    for(contador=0;contador<filas;contador++)
    {
        for(contador1=0;contador1<columnas;contador1++)
        {
            fscanf(fichero,"%f",&matriz1[contador][contador1]);
        }
    }
    fclose(fichero);
    printf("\n");
    for(contador=0;contador<filas;contador++)
    {
        for(contador1=0;contador1<columnas;contador1++)
        {
            printf("%.2f ",matriz1[contador][contador1]);
        }
        printf("\n");
    }

    // visualizar traspuesta
    printf("\n%d %d\n",columnas,filas);
    for(contador=0;contador<columnas;contador++)
    {
        for(contador1=0;contador1<filas;contador1++)
        {
            printf("%.2f ",matriz1[contador1][contador]);
        }
        printf("\n");
    }

    fichero=fopen(argv[2],"wt");
    if(!fichero)
    {
        printf("\nERROR No se ha podido crear el archivo destino...");
        exit(1);
    }
    // grabar traspuesta
    fprintf(fichero,"%d %d\n",columnas,filas);
    for(contador=0;contador<columnas;contador++)
    {
        for(contador1=0;contador1<filas;contador1++)
        {
            fprintf(fichero,"%.2f ",matriz1[contador1][contador]);
        }
        fprintf(fichero,"\n");
    }
    // cerrar archivo
    fclose(fichero);
    // liberar memoria
    for(contador=0;contador<filas;contador++)
    {
        free(matriz1[contador]);
    }
    free(matriz1);
    return 0;
}

// Funcion Existe

int Existe(char *nombre_fichero)
{
    FILE *fichero;
    int resultado=0;  // 0 = existe 1 = no existe

    fichero=fopen(nombre_fichero,"rt");
    if(fichero!=NULL)
    {
        fclose(fichero);
    }
    else
    {
        resultado=1;
    }
    return resultado;
}

Esta entrada es parte no. 5 de 10 en la serie Practicas C

Otro ejercicio de programación en c, para ir completando los ejercicios y practicas a resolver.

Enunciado del ejercicio:

Realizar un programa que solicite un numero entero por teclado y a continuación visualice por pantalla todos los números primos entre 1 y el numero introducido.

El ejercicio y practica resuelta a continuación:

#include <stdio.h>
#include <stdlib.h>
// Predefinición de funciones

int EsPrimo(int);
// Función principal

int main(int argc,char *argv[])
{
   int numero;
   int valores;
   // Solicitar por pantalla el numero
   printf(“Teclear No.: “);
   scanf(“ %d”,&numero);
   // Visualizar todos los números primos entre 1 y el numero
   // se utilizara una función para saber si un numero es primo o no
   for(valores=1;valores<=numero;valores++)
   {
       if(EsPrimo(valores)==0)
         printf(“El valor %d es primo\n”);
   }
   return 0;
}
// Funciones desarrolladas
// la funcion devuelve 0 si el numero es primo en caso contrario 1
int EsPrimo(int Valor)
{
  int primo=0;
  int divisores=0;
  // Calcular divisores del numero
  for(divisores=2;divisores<Valor-1 && primo==0;divisores++)
  {
    // Comprobar si existe un divisor
    if(Valor%divisores==0) primo=1;
  }
  return primo;
}

Esta entrada es parte no. 6 de 10 en la serie Practicas C





Un ejercicio nuevo de c sobre ficheros, para complementar tu formación en nuestro portal de cursos online y de teleformacion.

El ejercicio consiste en realizar un programa el cual ha de leer de un archivo 10 valores numéricos y a continuación crear un vector en memoria de forma dinámica. Se ha de solicitar un valor numérico por consola y multiplicar cada uno de los elementos del vector por dicho valor numérico, una vez realizado todos los procesos cerrar el archivo y liberar la memoria utilizada por el vector.

 

Solución al ejercicio planteado:

#include <stdio.h>
#include <stdlib.h>
int main()

{

    // Variables a utilizar

    int cuantos;
    int *Vector;
    FILE *fichero;
    int numero;
    int contador;

    // Crear array dinamico de memoria
    cuantos=10;
    Vector=(int *)malloc(sizeof(int)*cuantos);

    // leer archivo de datos y asignar los valores al array dinamico
    fichero=fopen("archivo.dat","rt");
    if(!fichero) {
        printf("\nError en la apertura del archivo archivo.dat. Compruebe que exista.");
        exit(1);
    }

    // prelectura
    fscanf(fichero,"%d\n",&numero);
    contador=0;
    while(!feof(fichero) && contador<10)
    {
        Vector[contador]=numero;
        contador++;
        fscanf(fichero,"%d\n",&numero);
    }

    // Cerrar archivo
    fclose(fichero);

    // pedir valor numerico

    printf("\nTeclee valor numerico ...: ");
    scanf(" %d",&numero);

    for(contador=0;contador<10;contador++) {
        Vector[contador]*=numero;
        printf("\n-> %d ",Vector[contador]);
    }

    // liberar memoria y salir del programa
    free(Vector);

    return 0;

}





Calendario

Agosto 2010
L M X J V S D
« Jun    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Referencias

Sitio seleccionado por
el Directorio Flesko


Blog Directory, Find A Blog, Submit A Blog, Search For The Best Blogs
Blog Directory