Ejercicios y practicas resueltas de c ( 3 )
Posted by: | CommentsUn 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;
}
Ejercicios y Practicas de C (1)
Posted by: | CommentsBien, 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→
Ejercicios y practicas resueltas de C ( 4 )
Posted by: | CommentsOtro 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;
}
Ejercicios y practicas resueltas de c ( 5 )
Posted by: | CommentsNueva 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;
}
Ejercicios y practicas resueltas de c ( 6 )
Posted by: | CommentsOtro 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;
}
Ejercicios y practicas de programación en c ( 7 )
Posted by: | Comments
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;
}

