#include <stdio.h>
#include <stdlib.h>
void quicksort(int[],int);
int main(){
static int lista[] = {9,3,88,5,13,10,27,6,18,3};
int n_elementos = sizeof(lista)/sizeof(int);
register i;
quicksort(lista, n_elementos);
printf("\nLista ordenada: \n");
for(i=0; i<n_elementos; i++){
printf("%6d", lista[i]);
}
system("pause");
return 0;
}
// Quicksort
void qs(int[], int, int);
void quicksort(int lista[], int n_elementos){
qs(lista,0,n_elementos-1);
}
// Funcion recursiva
void qs(int lista[], int inf, int sup){
register izq, der;
int mitad, x;
izq = inf;
der = sup;
mitad= lista[(izq+der)/2];
do{
while(lista[izq]<mitad && izq < sup){
izq++;
}
while(mitad<lista[der] && der>inf){
der--;
if(izq<=der){
x = lista[izq];
lista[izq] = lista[der];
lista[der] = x;
izq++;
der--;
}
}
}while(izq<=der);
if(inf<der){
qs(lista,inf,der);
}
if(izq<sup){
qs(lista,izq,sup);
}
}
Recursión: Quicksort recursivo
Recursión: Búsqueda dicotómica recursiva
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TAM 100
void bus(int dato, int ini, int fin, int *CB);
void imprimeCB(int *CB){
int i;
for(i=0; i<TAM-1; i++){
printf("%d ",CB[i]);
}
}
int main(){
int CB[TAM];
int ini=0, fin=TAM-1, dato, i;
srand((unsigned int)time(NULL));
for(i=0; i<TAM; i++){
CB[i] = (int) (rand()%100);
}
imprimeCB(CB);
dato = (int) (rand()%100);
CB[i] = dato;
printf("\n\nDato a buscar: %d\n",dato);
bus(dato, ini, fin, CB);
system("pause");
return 0;
}
void bus(int dato, int ini, int fin, int *CB2){
int mitad;
mitad = (ini+fin)/2;
if(ini==fin){
printf("\nEl elemento no esta en el array\n");
}
else if
(dato==CB2[mitad]){
printf("\nPosicion %d\n",mitad);
}
else if
(dato<CB2[mitad]){
fin=mitad-1;
bus(dato, ini, fin, CB2);
}
else if
(dato > CB2[mitad]){
ini=mitad+1;
bus(dato,ini,fin,CB2);
}
else if
(dato==CB2[mitad]){
printf("Posicion %d\n",mitad);
}
else
printf("\nElemento no esta en el array\n");
}
Recursión: División recursiva
#include <stdio.h>
int division (int a, int b);
int main(){
int x, y, resultado;
printf("Ingrese un numero: ");
scanf("%d",&x);
fflush(stdin);
printf("Ingrese un numero menor: ");
scanf("%d",&y);
resultado = division(x,y);
printf("El cociente es: %d\n",resultado);
system("pause");
return 0;
}
int division (int a, int b){
if(a<b){
return 0;
}
else{
return 1+division(a-b,b);
}
}
Recursión: MCM Recursivo
#include <stdio.h>
int mcm(int m, int n);
int main(){
int primero, segundo, resultado;
printf("Ingrese primer numero: ");
scanf("%d",&primero);
fflush(stdin);
printf("Ingrese segundo numero: ");
scanf("%d",&segundo);
fflush(stdin);
if(segundo>primero){
resultado = mcm(segundo,primero);
}
else{
resultado = mcm(primero,segundo);
}
printf("El MCM de %d y %d es: %d \n", primero, segundo, resultado);
system("pause");
return 0;
}
int mcm(int m, int n){
if(n==0){
return m; // condicion de parada
return mcm(n, m%n); // llamada recursiva
}
}
Recursión: Raíz cuadrada recursiva
#include <stdio.h>
int num=0;
int raiz(int n, int a);
int main(){
int res=0;
printf("Introduce un numero: ");
scanf("%d",&num);
res=raiz(num,1);
printf("El resultado es %d\n",res);
system("pause");
return 0;
}
int raiz(int n, int a){
if(((a+1)*(a+1))>n){
return a;
}
else{
if(((a+1)*(a+1))<=n){
return raiz(n,a+1);
}
}
}
Recursión: Potencia recursiva
#include <stdio.h>
int exponente(int b, int e);
int main(){
int b,e, resultado;
printf("Introduzca la base: ");
scanf("%d",&b);
printf("Introduzca el exponente: ");
scanf("%d",&e);
resultado = exponente(b,e);
printf("El resultado es: %d\n",resultado);
system("pause");
return 0;
}
int exponente(int b, int e){
if(e==1){
return b;
}
else{
return b*exponente(b,e-1);
}
}
Recursión: Listar números y sumar recursivamente
#include <stdio.h>
int suma(int n);
main(){
int n, i;
printf("Ingrese un numero: ");
scanf("%d",&n);
fflush(stdin);
for(i=1; i<=n; i++){
printf("%d ",i);
}
printf("\n\nLa suma es : %d",suma(n));
getch();
}
int suma (int n){
if(n==1)
return 1;
else
return (suma(n-1)+n);
}
Recursión: Factorial recursivo
#include <stdio.h>
int factorial (int n);
int main(){
int num = 0;
printf("Introducir numero: ");
scanf("%d",&num);
fflush(stdin);
printf("EL factorial de %d es %d \n",num,factorial(num));
system("pause");
return 0;
}
int factorial(int n){
if(n==0){
return 1;
}
else{
return n*factorial(n-1);
}
}
#include <stdio.h>
int main(){
int i, fact=1, num;
printf("Ingresa numero: ");
scanf("%d",&num);
for(i=1; i<=num; i++){
fact = fact * i;
}
printf("El factorial de %d es %d\n", num,fact);
system("pause");
return 0;
}
Fichero: Uso fwrite
#include <stdio.h>
int main(){
FILE *fp;
char cadena[] = "Uso fwrite en ficheros\n";
fp = fopen("usofwrite","r+");
fwrite(cadena, sizeof(char), sizeof(cadena),fp);
fclose(fp);
system("pause");
return 0;
}
Fich: Uso de ferror
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *f;
char cadena[] = "Cadena a escribir";
if((fopen==("usoferror.txt","r"))==NULL){
printf("Error, no se puede abrir el archivo.\n");
exit(1);
}
fprintf(f, "%s\n", cadena);
if(ferror(f)){
printf("Error de escritura en el fichero.\n");
clearerr(f);
}
fclose(f);
system("pause");
return 0;
}
Fich: Escribir datos formateados, fprintf
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *ptabla;
char c = 'c';
int i, j=1;
char cadena[10] = "hola";
// Si fichero no existe se crea
if((ptabla = fopen("tabla.txt","w"))==NULL){
exit(1);
}
// Escribir la tabla en el fichero
for(i=0; i<10; i++){
fprintf(ptabla, "\tLinea %c - %d - %s \n",c++,j++,&cadena);
}
printf("El fichero no existe y se crea.\n");
printf("Ejecutar de nuevo el programa.\n");
system("pause");
return 0;
}
Fich: Fichero, escribir caracter a caracter, fputc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *f;
char buf[100];
int i=0;
if(f==fopen("fichero1.txt","w")==NULL){ //fichero a escribir
perror("El archivo no se puede abrir");
exit(1);
}
strcpy(buf, "Texto a escribir\n");
while(!ferror(f) && buf[i]){
fputc(buf[i++],f);
}
if(ferror(f)){
perror("Error al escribir");
}
fclose(f);
system("pause");
return 0;
}
Fich: Abrir y mostrar fichero entre 3 opciones
#include <stdio.h>
#include <string.h>
int main(){
int opcion;
char nombre[200];
char texto[1000];
FILE *f;
printf("Los archivos que tenemos son:\n");
printf("\n1.Refran \n2.Tiempo \n3.Libros\n\n");
printf("Cual quiere abrir: ");
scanf("%d",&opcion);
fflush(stdin);
switch(opcion){
case 1: strcpy(nombre,"refran.txt");
break;
case 2: strcpy(nombre,"tiempo.txt");
break;
case 3: strcpy(nombre,"libros.txt");
break;
default: printf("Opcion no valida.\n");
break;
}
f = fopen(nombre, "r");
if(f==NULL){
printf("No se ha podido abrir el archivo\n");
}
else{
while(! feof(f)){
fgets(texto,1000,f);
printf("%s", texto);
}
}
fclose(f);
system("pause");
return 0;
}
Fich: Leer datos de alumnos
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *f;
char direccion[] ="C:\\Users\\leeralumnos.txt";
char opcion;
struct alumnos{
char nombre[20];
char apellido[20];
int edad;
float nota;
};
struct alumnos alum;
f = fopen(direccion,"a");
do{
// Primero solicita datos por pantalla
printf("Introduzca informacion del alumno:\n");
printf("Nombre: ");
scanf("%s", alum.nombre); // Guardar en struct
fflush(stdin);
printf("Apellido: ");
scanf("%s", alum.apellido); // Guardar en struct
fflush(stdin);
printf("Edad: ");
scanf("%d", &alum.edad); // Guardar en struct
fflush(stdin);
printf("Nota: ");
scanf("%f", &alum.nota); // Guardar en struct
fflush(stdin);
// Ahora escribir en archivo = FPRINTF
fprintf(f,"%s - %s - %d - %f \n", alum.nombre, alum.apellido, alum.edad,alum.nota);
// Preguntar si quiere seguir ingresando datos
printf("Quiere seguir ingresando mas datos? (y/n): ");
scanf("%c",&opcion);
fflush(stdin);
}while(opcion == 'y' || opcion == 'Y');
fclose(f);
system("pause");
return 0;
}
Fich: copiar fichero en otro
#include <stdio.h>
int main(){
FILE *file1, *file2;
int data1 = 0;
file1 = fopen("original.txt","r");
file2 = fopen ("copia.txt","w");
while((data1 = fgetc(file1))!=EOF){
fputc(data1,file2);
}
fclose(file1);
fclose(file2);
system("pause");
return 0;
}
Fich: Escribir texto en fichero. fgets, fputs
#include <stdio.h>
#include <string.h>
int main(){
FILE *fichero;
char texto[1000];
fichero = fopen("C:\\Users\\agregartexto.txt","w");
printf("Introduzca el texto que quiere guardar en el archivo txt:\n");
fgets(texto,1000,stdin);
fputs(texto, fichero);
fclose(fichero);
system("pause");
return 0;
}
Suscribirse a:
Entradas (Atom)