Blog Archives
Ejercicios y practicas resueltas de C ( 4 )
By admin
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;
}
Ejercicios y practicas resueltas de c ( 5 )
By admin
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;
}
Ejercicios y practicas resueltas de c ( 6 )
By admin | 33 comments
33Otro 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: Aclaraciones
Esperamos que os sean de ayuda estos ejercicios y practicas de programacion en lenguaje c en vuestros estudios, bien sean en modalidad de teleformacion o presenciales en vuestros institutos. Los cursos, practicas o ejercicios que se solucionan no pretenden ser la unica solucion posible, asi que si vuestro profesor os dice que hay un error, o es mejor realizar el ejercicio de otra forma, hacerle caso y ayudarnos a nosotros presentando diferentes soluciones utilizando para ello los comentarios.
Ejercicios y practicas de programación en c ( 7 )
By admin
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;
}
Ejercicios y practicas de programación en ( 8 )
By admin
Nuevo ejercicio de programación en c, para que puedas practicar este lenguaje base en el aprendizaje de programación. Los ejercicios resueltos no tienen un orden especifico en su complejidad, por lo tanto te puedes encontrar con ejercicios que para personas noveles en la programación resulten dificiles de comprender, busca las practicas que mas se ajusten a tus necesidades en base a tu nivel. Gracias por visitar el sitio web, un saludo y aprende desde tu casa.
Planteamiento de la practica de programación
El ejercicio planteado hoy es que el programa realice una serie de peticiones de notas de alumnos, hasta que se teclee un valor –1 para finalizar la introducción de notas. Una vez finalizada la introducción de notas se han de visualizar cuantos alumnos han aprobado y suspendido, asi como cuantos han sacado notas englobadas de la siguiente forma:
de 5 a 6 – suficiente
de 6 a 7 – bien
de 7 a 8 – notable
de 9 o superior – sobresaliente
Vuelvo a recordaros, que no pretendo dar lecciones de como se ha de programar un ejercicio, ya que puede haber muchas formas de resolverlo, esto no significa que la practica resuelta que aqui planteamos sea la mas correcta, de hecho siempre estoy dispuesto a añadir correcciones o nuevos planteamientos a la misma, si me los dejais en un comentario…
Practica resuelta de programacion en c
#include <stdio.h>
#include <stdlib.h>
int main()
{
// Declaracion de variables
int nota=0;
int positivos=0;
int negativos=0;
int aprobados=0;
int suspendidos=0;
int bien=0;
int notable=0;
int sobresaliente=0;
int suficiente=0;
// Solicitar notas hasta teclear -1
printf("\nNotas de los alumnos. (Para finalizar -1 )\n");
do
{
printf("Nota...: ");
scanf(" %d",¬a);
// controlar si se quiere finalizar o no
if(nota!=-1)
{
// controlar valores positivos y negativos
if(nota>0)
positivos++;
else if(nota<0)
negativos++;
// controlar aprobados suspendidos
if(nota<5)
suspendidos++;
else
aprobados++;
// controlar calificaciones
if(nota>=5 && nota<6)
suficiente++;
else if(nota>=6 && nota<=7)
bien++;
else if(nota>=7 && nota<9)
notable++;
else if(nota>=9)
sobresaliente++;
}
} while(nota!=-1);
// Visualizar resultados
printf("\nNOTAS DE LOS ALUMNOS");
printf("\nAlumnos aprobados ...............: %d",aprobados);
printf("\nAlumnos suspendidos .............: %d",suspendidos);
printf("\nAlumnos con nota suficiente .....: %d",suficiente);
printf("\nAlumnos con nota bien ...........: %d",bien);
printf("\nAlumnos con nota notable ........: %d",notable);
printf("\nAlumnos con nota sobresaliente ..: %d",sobresaliente);
// Realizar calculos correspondientes
return 0;
}
Ejercicios y practicas de programación en c ( 9 )
By admin
Nuevo articulo para que sigas tus estudios online con nosotros, solucionando problemas, practicas y ejercicios realizados con el lenguaje de programación c.
Saber si un numero es primo o no
Planteamiento del ejercicio:
Se ha de solicitar por teclado un numero entero positivo, para finalizar el programa se ha de teclear el valor –1, en caso de ser el numero valido se ha de indicar si el numero es primo o no.
Solución al ejercicio propuesto:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// Variables a utilizar en el programa
int numero=0;
int divisores=0;
int primo=0; // primo = 0 no primo = 1
// Solicitar numero entero hasta valor -1
do
{
printf("\nNumero.....: ");
scanf(" %d",&numero);
if(numero!=-1 && numero>0)
{
// el numero es valido comprobar si es primo
primo=0;
divisores=2;
while(divisores<numero && primo!=1)
{
if(numero%divisores==0) primo=1;
divisores++;
}
// Si primo vale 0 es que el numero es primo
if (primo==0)
{
printf("\nEl numero %d es primo",numero);
}
else
{
printf("\nEl numero %d no es primo",numero);
}
}
} while(numero!=-1);
return 0;
}


