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");
}
Que error te da?
//FINAL:COMPROBACION DE SI ES O NO ANAGRAMA//
printf("
Eso no esta incompleto?
Otro error se encuentra en la función "equal_array":
if(x=0) return true;
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:
bool equal_array(int a[],int b[])
{
int i;
for (i = 0; i < N && a[i] == b[i]; i++)
;
return i == N;
}
Un saludo
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!!!
Aqui tienes uno mio:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int anagrama(char cad[], int j) {
char str1[100];
int k,l;
l=0;
for(k=0; k<strlen(cad); k++)
if (k!=j) {
str1[l] = cad[k];
l++;
}
str1[strlen(cad)-1] = '\0';
strcpy (cad,str1);
return 0;
}
int main(){
char cadena1[100], cadena2[100], letra;
int i,j;
printf("Introduzca las dos cadenas: ");
scanf("%s" "%s" ,cadena1, cadena2);
if (strlen(cadena1) != strlen(cadena2))
printf("Las cadenas no son anagramas\n");
else
{
for(i=0; i<strlen(cadena1); i++)
{
for (j=0; j < strlen(cadena2); j++) {
if (cadena1[i] == cadena2[j]) {
anagrama(cadena2,j);
break; }
}
}
if(strlen(cadena2)==0)
printf("Las cadenas son anagramas\n");
else
printf("Las cadenas no son anagramas\n");
}
return 0;
}
Espero te sirva ;)
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
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);
}
LO SIENTOOOOO. AHORA MISMO ME HE DADO CUENTA DE QUE NO HE INICIALIZADO J.
LO SIENTO DE NUEVO!!