elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No entiendo que esta mal(en C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No entiendo que esta mal(en C)  (Leído 3,054 veces)
oxi12pek

Desconectado Desconectado

Mensajes: 15



Ver Perfil
No entiendo que esta mal(en C)
« 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");

}


En línea

Algun dia lo sere...
$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #1 en: 2 Noviembre 2012, 16:17 pm »

Que error te da?

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

Eso no esta incompleto?


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #2 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
« Última modificación: 2 Noviembre 2012, 16:27 pm por rir3760 » En línea

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
oxi12pek

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #3 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!!!
En línea

Algun dia lo sere...
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #4 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  ;)
En línea

oxi12pek

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #5 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
En línea

Algun dia lo sere...
oxi12pek

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #6 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);
}
En línea

Algun dia lo sere...
oxi12pek

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Re: No entiendo que esta mal(en C)
« Respuesta #7 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!!
En línea

Algun dia lo sere...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No entiendo que es lo que pasa en esta red.
Hacking Wireless
magito 7 5,449 Último mensaje 14 Junio 2010, 12:31 pm
por lamaruja
No entiendo esta linea del programa
Programación C/C++
ProyectoX 5 2,596 Último mensaje 30 Noviembre 2012, 23:11 pm
por ProyectoX
No entiendo esta lógica [arreglos] [C]
Programación C/C++
barnix456 6 3,490 Último mensaje 10 Diciembre 2012, 23:56 pm
por barnix456
Ayuda no entiendo esta parte del codigo, soy principiante
Programación C/C++
spiderboot 3 3,292 Último mensaje 30 Enero 2014, 18:14 pm
por spiderboot
No entiendo por qué se puede usar esta función ¡si no debiera!
Programación C/C++
tecno46 4 2,233 Último mensaje 6 Noviembre 2014, 20:49 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines