/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda con algoritmo de comparacion

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dark100s



Registrado: 21 Nov 2009
Mensajes: 2
Ubicación: México

MensajePublicado: 03/11/2011 10:20 am
Título: Ayuda con algoritmo de comparacion

Tengo un problema con este algoritmo explico rápido su función, por medio del pseudocódigo:
Se captura el numero de caracteres: 7
Se ingresa uno por uno los caracteres: a | b | c | e | d | e | f |
Se ingresa la cantidad de caracteres que se desea buscar: 2
Se ingresa uno por uno los caracteres: e | f |
Inicia la comparación de los caracteres:
e != a
e != b
e != c
e = e <- Como 'e' es igual 'e' el contador queda en c=1
f != d <- 'f' es diferente 'd', el contador queda c=0 (los caracteres buscados deben ser continuos de lo contrario el contados vuelve a ser cero)
e = e <- Como 'e' es igual 'e' el contador queda en c=1
f = f <- 'f' igual 'f', el contador queda c=2.
si 2 = 2
Imprime “tu patrón esta en la cadena”.
De lo contrario
imprime "Tu patrón no esta en la cadena"

Les dejo mi algoritmo:

#include <stdio.h>
#include <stdlib.h>

int main(){

/*Declaracion de la variablea a ocupar*/
char *cadena, *patron;
int m,n,d,e,z=0;
int si;

/*Inicio de los procesos*/
printf("Tamaño de tu cadena ");//cadena
scanf("%d",&m);

if(m>0)
cadena=(char*)malloc(sizeof(char)*m);

else{

return 0;
}

for(d=0;d<m;d++){

printf("Elemento de tu cadena ");
fflush(stdin);
scanf("%c",&cadena[d]);
printf("[%d]%c \n", d, cadena[d]);
}

printf("Tamaño del patron ");//patron
fflush(stdin);
scanf("%d",&n);

if(n>0)
patron=(char*)malloc(sizeof(char)*n);

else
return 0;

for(e=0;e<n;e++){

printf("Elemento de tu patron");
fflush(stdin);
scanf("%c",&cadena[e]);
printf("[%d]%c \n", e, cadena[e]);
}

e=0;

for(d=0;d<m;d++){ /*Pienso que mi problema esta en la comparación de los caracteres
*/

if(cadena[d]==patron[e]){

e++;
z++;
}

else{

e=0;
z=0;
}
}


if(z==n)
printf("Tu patron si esta en la cadena");

else
printf("Tu patron no esta en la cadena %d, %d",z ,n);

free(cadena);
free(patron);
system("PAUSE");
return 0;
}

De antemano gracias por su ayuda.
_________________
El conocimiento es para todos por igual !!!!!!!!!!!!!!!!!!!!!!!!!
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7516
Ubicación: Mexico

MensajePublicado: 03/11/2011 6:33 pm
Título:

El problema es, como comentas, el bucle del programa. En este solo comparas el carácter actual con el correspondiente en el patrón a buscar.

Deberías tener dos bucles anidados, uno para procesar cada carácter y otro para verificar si a partir de ahí coincide la secuencia.

De esta forma:
Código:
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    char cadena[] = {'a', 'b', 'c', 'e', 'd', 'e', 'f'};
    char patron[] = {'e', 'f'};
   
    int long_cadena = (int) sizeof cadena;
    int long_patron = (int) sizeof patron;
   
    int i;
    int j;
   
    puts("Elementos de la cadena");
    for (i = 0; i < long_cadena; i++)
        printf("cadena[%d] == \'%c\'\n", i, cadena[i]);
   
    puts("Elementos del patron");
    for (i = 0; i < long_patron; i++)
        printf("patron[%d] == \'%c\'\n", i, patron[i]);
   
    putchar('\n');
    for (i = 0; i < long_cadena - (long_patron - 1); i++){
        for (j = 0; j < long_patron; j++)
            if (cadena[i + j] != patron[j])
                break;
       
        if (j == long_patron)
            break;
    }
   
    if (j == long_patron)
        printf("Patron encontrado, inicia en %d\n", i);
    else
        puts("Tu patron no esta en la cadena");
   
    return EXIT_SUCCESS;
}


Y deberías evitar el uso de "fflush(stdin)" ya que no es valido en C (fflush solo debe utilizarse con streams de salida mientras que stdin es uno de entrada).

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
dark100s



Registrado: 21 Nov 2009
Mensajes: 2
Ubicación: México

MensajePublicado: 12/11/2011 9:18 pm
Título: Gracias rir3760

Gracias rir3760, lo he probado y funciona al 100%.
_________________
El conocimiento es para todos por igual !!!!!!!!!!!!!!!!!!!!!!!!!
Volver arriba
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com