Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: swagger14 en 19 Octubre 2011, 18:03 pm



Título: ayuda con una funcion en c
Publicado por: swagger14 en 19 Octubre 2011, 18:03 pm
lo tengo q hacer es una funcion (pero es posible una forma d hacerlo sin la función strcmp) que compare 2 cadena enteras y devuelva -1 si cad1 <cad2 0, si son iguale ,
y 1 si  es mayor  hasta a hora esto es lo que tengo
Código:
#include<stdio.h>
#include<stdlib.h>

const int lim=20;

 int comparacadena( char cad1[lim],char cad2[lim]);


 int comparacadena( char cad1[lim],char cad2[lim]){
     
      char cad1[lim],cad2[lim];
     
  printf("digite cadena 1 ");
     
  gets(cad1);
  printf("digite cadena 2");
  gets (cad2);
  fflush(stdin); 
     
      if (cad1[lim]< cad2[lim]){
         printf ("cadena 1 es menor");
         return -1;
         }
               
          if (cad1[lim]=cad2[lim]){
               printf("cadenas son iguales");
            return 0;}
             if  (cad1>cad2){
                  printf ("cadena1 es mayor que cadena 2");   
                   return 1; 
             }
             }
     
    int main(){
               
        comparacadena( char cad1[lim], char cad2[lim]));
     
        system ("pause");
        return 0;
                     
               
               
               
 
                }


Título: Re: ayuda con una funcion en c
Publicado por: rir3760 en 19 Octubre 2011, 19:29 pm
Lo digo sin mala intención: ese programa esta muy mal y si apenas empiezas con el lenguaje C deberías conseguir un buen libro, para ello revisa los temas fijos de este foro.

Casi todo el proceso que haces en la función de comparación como pedir las cadenas e indicar el resultado lo debes pasar a la función principal con ciertas correcciones como evitar el uso de "gets" y "fflush(stdin)".

En cuanto a la implementación de la función para comparar, a esta se le pasa la dirección base de dos cadenas y debe retornar el resultado indicado. Un solución utilizando punteros:
Código
  1. int fn_cmp(char const *s, char const *t)
  2. {
  3.   while (*s == *t && *s != '\0'){
  4.      s++;
  5.      t++;
  6.   }
  7.  
  8.   return (*s > *t) - (*s < *t);
  9. }

El resto te toca a ti.

Un saludo


Título: Re: ayuda con una funcion en c
Publicado por: swagger14 en 21 Octubre 2011, 07:36 am
 ok muchas grasiaas



Título: Re: ayuda con una funcion en c
Publicado por: darkvidhack en 21 Octubre 2011, 19:27 pm
Hola!! te doy un par de consejillos jeje:

1. Implementa directamente la función 'comparacadena', no hagas la declaración y luego la implementación aparte, eso sería si la implementaras debajo del 'main'.

2. Procura que la función 'comparacadena' solo se encargue de comparar las cadenas que le pasas, hay que tener un cierto de nivel de abstracción, es muy importante en la programación, es decir, que si tienes una función que te compara dos cadenas, asegurate que sólo hace eso, la lectura de las cadenas puedes hacerla en el main o en otra función aparte.

3. En la declaración de 'comparacadena' pones que devuelve un dato de tipo entero, y luego en el main llamas a la función como si devolviera un void, no te salta el compilador?

4. En este caso, la variable globar 'im' no está mal del todo, aunque las variables globales siempre se deben escribir en mayúscula, LIM, por supuesto, no acostumbres a poner muchas variables globales, ya que puede inducir a errores si hay un cierto grado de dependencia de las funciones con esta variable.

Y... creo que nada más, si tienes alguna duda postea ;)


Título: Re: ayuda con una funcion en c
Publicado por: swagger14 en 22 Octubre 2011, 08:18 am
qu


Título: Re: ayuda con una funcion en c
Publicado por: swagger14 en 22 Octubre 2011, 08:29 am
que tal a horaa el copilador no decteta error pero no corre!
Código:
#include<stdio.h>
#include<stdlib.h>

const int lim=20;

 int comparacadena( char *cad1[lim],char *cad2[lim]);
 
 int main(){
     char *cad1[lim],*cad2[lim];
     
      printf("digite cadena 1 ");     
      gets(*cad1);
      printf("digite cadena 2");
      gets (*cad2);
      fflush(stdin); 
      system ("pause");
      return 0;
     
      }
     
     
     
     
  int comparacadena( char *cad1[lim],char *cad2[lim]){
     
      {
   while (*cad1[lim] == *cad2[lim] && *cad1[lim] != '\0'){
      *cad1[lim]++;
      *cad2[lim]++;
   }
   if (*cad1[lim]< *cad2[lim]){
         printf ("cadena 1 es menor");
         return -1;
         }
               
          if (*cad1[lim]==*cad2[lim]){
               printf("cadenas son iguales");
            return 0;}
             if  (*cad1[lim]>*cad2[lim]){
                  printf ("cadena1 es mayor que cadena 2");   
                   return 1; 
             }
             
     
     
      }
      }
     
     


Título: Re: ayuda con una funcion en c
Publicado por: darkvidhack en 22 Octubre 2011, 10:14 am
hola de nuevo!! no corre el programa entero o la comparación? has pensado que quizás no estés llamando a la función 'comparacadena'? Porque en el main no veo ninguna llamada a la función, otra cosa, porque no pones 'comparacadena' que devuelva un bool?, así podrías poner

if (comparacadena(cadena1,cadena2) == true) {    mostrar que son iguales;    }  else  {

       mostrar que son distintas;
}


Saludos


Título: Re: ayuda con una funcion en c
Publicado por: rir3760 en 22 Octubre 2011, 15:51 pm
El programa sigue con errores: utilizas gets (no se recomienda), "fflush(stdin)" (tampoco), no llamas a la función (esto ya lo comento darkvidhack) y tratas de utilizar un array de punteros cuando debes utilizar un array.

En la función principal debes utilizar:
Código
  1. int main(void)
  2. {
  3.    char cad1[lim];
  4.    char cad2[lim];
  5.  
  6.    printf("digite cadena 1 ");      
  7.    gets(*cad1);
  8.  
  9.    printf("digite cadena 2");
  10.    gets (*cad2);
  11.  
  12.    /* llamada a la funcion */
  13.  
  14.    return 0;
  15. }

En cuanto a tu función de comparación lo mejor que se puede decir es que tiene varios errores que ya te comentamos mas algunos mas. Si no tienes material de referencia de calidad por favor revisa los temas fijos de estos foros, ahí encontraras a montones.

Un saludo