Fich: Diccionario

diccionario struct.html
#include <stdio.h>
#include <string.h>

FILE *fd;

struct diccionario{
	char spanish[50];
	char english[50];
}palabras[100];

int anadir();
int mostrar();

int main(){
	
	int opc;
	
	printf("\tMENU \n\n");
	printf("1. Anadir palabra\n2. Traducir palabra\n3. Mostrar palabras\n4. Salir\n\n");
	printf("Ingrese la opcion deseada: \n");
	scanf("%d", &opc);
	
	switch(opc){
		case 1: anadir(); break;
		case 4: printf("saliendo del programa\n"); break;
		//case 2: traducir(); break;
		case 3: mostrar(); break;
		default: printf("Opcion no valida\n");
	}
	//traducir();
	//mostrar();	
	
	system("pause");
	return 0;
}

int anadir(){
	FILE *fd;
	struct diccionario palabras;
	char rpt;
		
	fd = fopen("diccionario.txt","at");
	
	if(fd==NULL){
		printf("Error al anadir palabra\n");
		return 1;
	}
	printf("\nAnadiendo nueva palabra\n");
	
	do{
		fflush(stdin);
		printf("Ingrese palabra en espanol: ");
		gets(palabras.spanish);
		printf("Ingrese traduccion al ingles: ");
		gets(palabras.english);
		
		fprintf(fd,"\nPalabra en espanol: ");
		fwrite(palabras.spanish,1,strlen(palabras.spanish),fd);
		fprintf(fd,"\nPalabra en ingles: ");
		fwrite(palabras.english,1,strlen(palabras.english),fd);
		
		printf("Desea seguir agregando palabras? (s/n): ");
		scanf("%c",&rpt);	
	}while(rpt != 'n');
	fclose(fd);
}

int traducir(){
	FILE *fd;
	struct diccionario palabras;
	struct diccionario;
	int cont=0;
	
	fd = fopen("diccionario.txt", "rt");
	if(fd==NULL){
		printf("No se ha podido leer el archivo\n");
	}
	
	printf("\nIngrese la palabra en espanol que quiere traducir: ");
	gets(palabras.spanish);
	
	while(!feof(fd)){
		fread(diccionario,sizeof(diccionario),1,fd);
		
		if(strstr(spanish,diccionario.spanish)){
			printf("Espanol: %s\n",diccionario.spanish);
			printf("Ingles: %s\n",diccionario.english);
		}
		cont++;
	}
	fclose(fd);
	
	
}

int mostrar(){
	FILE *fd;
	int c;
	struct diccionario palabras;
	
	fd = fopen("diccionario.txt", "rt");
	if(fd==NULL){
		printf("No se ha podido leer el archivo\n");
	}
	printf("\n\nMostrando las palabras... \n");
	while(!feof(fd)){
		c=fgetc(fd);
		printf("%c",c);
	}
	fclose(fd);
	printf("\n\n");
}

Recursión: Busqueda binaria en vector ordenado

busqueda binaria vector odenado recursion.html
#include <stdio.h>

int buscar(int v[], int i, int d, int x);

int main(){
	
	int vector[] = {1,2,3,4,5,6};
	int dato, izq = 0, der = 0, resultado;
	
	printf("Ingrese numero a buscar: ");
	scanf("%d",&dato);
	fflush(stdin);
	
	resultado = buscar(vector, izq, der, dato);
	
	printf("%d ",resultado); //no sé
	
	system("pause");
}

int buscar(int v[], int i, int d, int x){
	
	int centro;
	
	if(i>=d){
		centro = (i+d)/2;
	
	if(v[centro]==x){
		return centro; // Caso base 1, exito
		
	}
	else{
		if(v[centro]>x){
			return buscar(v, i, centro-1, x); //izquierda
		}
		else{
			return buscar(v, centro+1, d, x); // derecha
		}
	}
	
	}
	else{ // i>d
			return (-1); // Caso base 2, fracaso
		}
}

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);
		}
	}
}