Anda di halaman 1dari 23

Ejercicios y practicas resueltas de C ( 4 )

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 revs ), en vez de solicitar
los nombres de archivos en el programa se utiliza la lnea de parmetros 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 dinmica con la funcin malloc, y la funcin 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>

// Predefinicin de funciones

int Existe(char *);

long int Tamanyo(char *);

// Funcin principal

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

// Comprobacin del numero de parmetros recibido

if(argc!=3) {

printf("\nFaltan parmetros");

printf("\nFormato: comando fichero_origen fichero_destino");

exit(1);

}
// Comprobacin de ficheros

if(Existe(argv[1])==1) {

printf("\nEl fichero de origen no se ha encontrado o no existe...");

exit(1);

// Declaracin 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 tamao 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;

// Funcin 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;

// Funcin 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 )

Enunciado del ejercicio:

Realizar un programa en el lenguaje de programacin 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 lnea 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 continuacin:

#include <stdio.h>

#include <stdlib.h>

// Predefinicin de funciones

int Existe(char *);

// Funcin principal

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

// Comprobacin del numero de parmetros recibido

if(argc!=3) {
printf("\nFaltan parmetros");

printf("\nFormato: comando fichero_origen fichero_destino");

exit(1);

// Comprobacin de ficheros

if(Existe(argv[1])==1) {

printf("\nEl fichero de origen no se ha encontrado o no existe...");

exit(1);

// Declaracin 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 )

Enunciado del ejercicio:

[ad#468x602009febrero]

[ad#cuadrop2011]

Realizar un programa que solicite un numero entero por teclado y a continuacin visualice por
pantalla todos los nmeros primos entre 1 y el numero introducido.

El ejercicio y practica resuelta a continuacin:

#include <stdio.h>

#include <stdlib.h>

// Predefinicin de funciones

int EsPrimo(int);

// Funcin 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 nmeros primos entre 1 y el numero

// se utilizara una funcin 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;

[ad#468152011]

[ad#enlace2011]

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 programacin en c ( 7 )

El ejercicio consiste en realizar un programa el cual ha de leer de un archivo 10 valores


numricos y a continuacin crear un vector en memoria de forma dinmica. Se ha de solicitar un
valor numrico por consola y multiplicar cada uno de los elementos del vector por dicho valor
numrico, una vez realizado todos los procesos cerrar el archivo y liberar la memoria utilizada
por el vector.

Solucin 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 programacin en ( 8 )

Nuevo ejercicio de programacin en c, para que puedas practicar este lenguaje base en el
aprendizaje de programacin. 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
programacin 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 programacin

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 introduccin de notas. Una vez
finalizada la introduccin 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 aadir 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",&nota);

// 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 programacin en c ( 9 )

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.

Solucin 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;

---------------------

Practicas y ejercicios de programacin en c ( 10 )

1 Realizar un programa que pide un dato de entrada que se ha de corresponder a la longitud de


un radio, calcula y visualiza la longitud de la circunferencia, el rea del crculo y el volumen de la
esfera que se corresponda con el radio dado.

Formulas a emplear:

Siendo r = radio y ^= elevado

Longitud circunferencia = 2PIr

rea crculo = PIr^2

Volumen esfera = 4/3 PI r ^3

Solucin (1)
#include <stdio.h>

#include <stdlib.h>

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

// Creacin de variables a utilizar

int radio;

float longitud;

float area;

float volumen;

// Solicitar el radio por teclado

printf(Introduzca radio: );

scanf( %d,&radio);

// Realizar los calculos

longitud = 2*PI*radio;

area = PI*(radio*radio);

volumen = (4/3)*PI*(radio*radio*radio);

// Visualizar los resultados

printf(\nLongitud del radio = %.2f,longitud);

printf(\nArea = %.2f,area);

printf(\nVolumen = %.2f,volumen);

system(PAUSE);

return 0;

-----------------------------------------
Ejercicio de lenguaje C - Saludo

Escribir en lenguaje C un programa que:

1) Pida por teclado el nombre (dato cadena) de una persona.

2) Muestre por pantalla el mensaje: "Hola <nombre>, buenos das.".

Solucin: uso de funciones printf, scanf y getch

/* Programa: Saludo */

#include <conio.h>

#include <stdio.h>

int main()

char nombre[20];

printf( "Introduzca su nombre: " );

scanf( "%s", nombre );

printf( "Hola %s, buenos d%cas.", nombre, 161 );


getch(); /* Pausa */

return 0;

char nombre[20] sirve para declarar la variable nombre de tipo cadena, pudiendo contener 20
char (caracteres).

El especificador de formato %s debe utilizarse tanto en scanf como en printf para las cadenas
(strings).

Obsrvese que, en este ejercicio, en la funcin scanf no hay que escribir el carcter ampersand
(&) antes de la variable nombre. Esto es as, ya que, para las variables de tipo cadena (arrays de
caracteres), su propio identificador (nombre, en este caso) ya hace referencia a la direccin de
memoria donde se va a almacenar el dato.

161 es el nmero decimal que corresponde al carcter () con tilde en ASCII.

Anda mungkin juga menyukai