#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");
}
Programación en C
Fich: Diccionario
Recursión: Busqueda binaria en vector ordenado
#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
#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
#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);
}
}
}
Suscribirse a:
Entradas (Atom)