Recursión: Quicksort recursivo

quicksort recursivo.html
#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: Búsqueda dicotómica recursiva

busqueda dicotomica recursiva.html
#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

division recursiva.html
#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

mcd recursivo.html
#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

raiz cuadrada recursiva.html
#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

potencia recursiva.html
#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

listar numeros y suma recursiva.html
#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

factorial recursivo2.html
#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);
	}
}


factorial recursivo.html
#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

fichero uso fwrite.html
#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

fichero uso ferror.html
#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

fichero escribir datos formateados fprintf.html
#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

fichero escribir caracter a caracter fputc.html
#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

abrir y mostrar fichero 3 opciones.html
#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

fichero leer datos de alumnos.html
#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

copiar fichero en otro.html
#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

escribir texto en fichero fgets fputs.html
#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;
}