Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: oxi12pek en 2 Noviembre 2012, 15:52 pm



Título: No entiendo que esta mal(en C)
Publicado por: oxi12pek en 2 Noviembre 2012, 15:52 pm
Hola a todos!!! Soy nuevo en este foro y lo que mayormente me a impulsado a hacerme parte de el es la frustracion cuando no se porque el programa que e creado no funciona como querria. En este caso e creado este programa que lee dos palabras y comprueba si son o no anagramas. Todo va como la seda hasta que llega el momento donde la funcion equal_array devuelve true o false. Ayuda por favor. Frustraccion... :huh: . Aqui os dejo el programa copiado tal y como lo tengo:

#include<stdio.h>
#include<stdbool.h>
#define N 26


   
bool equal_array(int counts1[N],int counts2[N])
  {
    int i,x=0;
    printf("Contador final: ");
    for(i=0;i<N;i++){
      counts1-=counts2;
      printf("%d ",counts1);
    }
    printf("\n");
    for(i=0;i<N;i++){
      if(counts1!=0){
   x++;}
    }
    printf("X: %d",x);
    printf("\n");
    if(x=0) return true;
    if(x>0)return false;
  }

int main(void)
{
  char x;
  int a[N],b[N];
  int i,j;
  printf("Escribe dos palabras y sabras si son anagramas on no\n");
 
  //ARRAYS A CERO//
  for(i=0;i<N;i++){
    a=0;
    b=0;
  }
  //LECTURA DE LA PRIMERA PALABRA//
  printf("Escribe la primera palabra: ");
  for(i=0;i<N;i++){
    scanf("%c",&x);
    if((x>='A')&&(x<='Z'))
      a[x-65]++;
    if((x>='a')&&(x<='z'))
      a[x-97]++;
    if(x=='\n') break;
  }
 
  //COMPROBACION LECTURA DE LA PRIMERA PALABRA//
  printf("Contador de la primera palabra: ");
  for(i=0;i<N;i++)
    printf("%d ",a);
  printf("\n");
  read_word(a);

  //LECTURA DE LA SEGUNDA PALABRA//
  printf("Escribe la segunda palabra: ");
  for(i=0;i<N;i++){
    scanf("%c",&x);
    if((x>='A')&&(x<='Z'))
      b[x-65]++;
    if((x>='a')&&(x<='z'))
      b[x-97]++;
    if(x=='\n') break;
  }
  //COMPROBACION LECTURA DE LA SEGUNDA PALABRA//
  printf("Contador de la segunda palabra: ");
  for(i=0;i<N;i++)
    printf("%d ",b);
  printf("\n");

  //FINAL:COMPROBACION DE SI ES O NO ANAGRAMA//
  printf("
  if(equal_array(a,b)==true)
    printf("Las palabras son anagramas\n");
  else
    printf("Las palabras no son anagramas\n");

}


Título: Re: No entiendo que esta mal(en C)
Publicado por: $Edu$ en 2 Noviembre 2012, 16:17 pm
Que error te da?

//FINAL:COMPROBACION DE SI ES O NO ANAGRAMA//
  printf("

Eso no esta incompleto?


Título: Re: No entiendo que esta mal(en C)
Publicado por: rir3760 en 2 Noviembre 2012, 16:22 pm
Otro error se encuentra en la función "equal_array":
Código
  1. if(x=0) return true;
  2. if(x>0)return false;
Utilizas el operador de asignación "=" cuando debería ser el de comparación "==", debido a ello el valor de retorno de la función es "no definido".

Edito:

Considerando lo que hace la funcion "equal_array" su codigo es excesivamente largo, ella se puede reducir a:
Código
  1. bool equal_array(int a[],int b[])
  2. {
  3.   int i;
  4.  
  5.   for (i = 0; i < N && a[i] == b[i]; i++)
  6.      ;
  7.  
  8.   return i == N;
  9. }

Un saludo


Título: Re: No entiendo que esta mal(en C)
Publicado por: oxi12pek en 2 Noviembre 2012, 16:40 pm
UI ese printf se me a colado.Lo siento. En cuanto a la funcion equal_array podrias explicar un poco tu version, es que no lo veo muy claro.
Muchas gracias, ya funciona. Como se nota que soy un misero nobato...
Soys unos maquinas gracias!!!


Título: Re: No entiendo que esta mal(en C)
Publicado por: Blaster en 2 Noviembre 2012, 17:00 pm
Aqui tienes uno mio:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int anagrama(char cad[], int j) {
  6.    char str1[100];
  7.    int k,l;
  8.    l=0;
  9.    for(k=0; k<strlen(cad); k++)
  10.       if (k!=j) {
  11.          str1[l] = cad[k];
  12.          l++;
  13.       }
  14.    str1[strlen(cad)-1] = '\0';
  15.    strcpy (cad,str1);
  16.    return 0;
  17. }
  18. int main(){
  19.  char cadena1[100], cadena2[100], letra;
  20.  int i,j;
  21.  
  22.  printf("Introduzca las dos cadenas: ");
  23.  scanf("%s" "%s" ,cadena1, cadena2);
  24.  
  25.  if (strlen(cadena1) != strlen(cadena2))
  26.     printf("Las cadenas no son anagramas\n");
  27.  else
  28.  {
  29.       for(i=0; i<strlen(cadena1); i++)
  30.       {
  31.           for (j=0; j < strlen(cadena2); j++) {
  32.               if (cadena1[i] == cadena2[j]) {
  33.                  anagrama(cadena2,j);                  
  34.                  break; }
  35.           }
  36.       }
  37.       if(strlen(cadena2)==0)
  38.         printf("Las cadenas son anagramas\n");
  39.       else
  40.         printf("Las cadenas no son anagramas\n");
  41.  }
  42.  return 0;
  43. }
  44.  

Espero te sirva  ;)


Título: Re: No entiendo que esta mal(en C)
Publicado por: oxi12pek en 2 Noviembre 2012, 17:08 pm
Es una buena manera de conseguir el mismo resultado. En mi caso se me especificaba de que manera hacerlo por lo tanto no podia utilizar la libreria de string,etc. Pero muchisimas gracias de todos modos porque me a servido para entender otras cosas.
Gracias a todos por tomaros un tiempo en responder!!!
Saludos


Título: Re: No entiendo que esta mal(en C)
Publicado por: oxi12pek en 2 Noviembre 2012, 18:15 pm
Oye y aqui en los punteros que ocurre. Haciendo indireccion estoy asignando todos los valores del array sumados a x no???
void avg_sum(double a[],int n,double *avg, double *sum)
  {
  int i;
  for(i=0;i<n;i++)
    *sum+=a;
  *avg=(*sum/n);
  }
int main(void)
{
  double A[]={1,2,3,4,5,6.6,7.7,88.8,1,4},x,y;
  int j;

  avg_sum(A,j,&y,&x);
  printf("Suma total del array: %f\n",x);
  printf("Promedio del array: %f\n",y);
}


Título: Re: No entiendo que esta mal(en C)
Publicado por: oxi12pek en 2 Noviembre 2012, 18:17 pm
LO SIENTOOOOO. AHORA MISMO ME HE DADO CUENTA DE QUE NO HE INICIALIZADO J.
LO SIENTO DE NUEVO!!