viciado 1 Denunciar post Postado Novembro 4, 2008 Quais os problemas nesse codigo. É para verificar se forma um triangulo e qual tipo de triangulo #include <stdio.h> #include <stdlib.h> #include <math.h> int verifica(int a, int b, int c){ if(abs(b-c)<a && a< b+c){ return (1); } else { return (0); } } char tipo(int a, int b, int c){ if(a==b==c){ return("Equilatero\n"); } else { if(a==b || a==c || b==c){ return("Isoscele\n"); } else{ return("Escaleno"); } } } int main() { int a, b, c; printf("Informe os lados do triangulo\n"); scanf("%d%d%d",&a,&b,&c); if(verifica){ return(tipo); } else{ printf("Nao forma um triangulo"); } system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 4, 2008 antes de eu analizar o código, pq to sem compilador aki.. gostaria q me diga, o erro é de lógica ow de compilação?? []'s Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 4, 2008 Acho que eh logica pq no dev paraceu erro1 Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 4, 2008 bom uma coisa q percebi, é q você esta dizendo q o retorno é um tipo char, e esta retornando uma cadeia de char.. e você qr retornar um char pro sistema operacional???? da dando um return dentro da main() []'s Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 4, 2008 Eu gostaria de fazer para verificar se é um triangulo os lados informados , se a função verificar for verdadeiro ir para a função tipo e a função tipo retornar o nome do triangulo imprimindo o nome na main Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 4, 2008 http://forum.imasters.com.br/index.php?showtopic=303187 Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 4, 2008 Agora fico melhor: #include <stdio.h> #include <stdlib.h> #include <math.h> int verifica(int a, int b, int c){ if((abs(b-c)<a) && (a< (b+c))){ return (1); } else { return (0); } } char *tipo(int a, int b, int c){ if((a==B) && (a==c)){ return("Equilatero"); } else { if((a==B) || (a==c) || (b==c)){ return("Isoscele\n"); } else{ return("Escaleno"); } } } int main() { int a, b, c; char tipo[20]; printf("Informe os lados do triangulo\n"); scanf("%d%d%d",&a,&b,&c); if(verifica(a,b,c)){ tipo = tipo(a,b,c); printf(" O triângulo e %s\n",&tipo); } else{ printf("Nao forma um triangulo"); } system("PAUSE"); return 0; } Erro na linha 36 "called object is not a function" tipo = tipo(a,b,c); Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 4, 2008 tente assim: char* xtipo; printf("Informe os lados do triangulo\n"); scanf("%d%d%d",&a,&b,&c); if(verifica(a,b,c)){ xtipo = tipo(a,b,c); printf(" O triângulo e %s\n",xtipo); } []'s Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 4, 2008 char *tipo(int a, int b, int c){ if((a==B) && (a==c)){ return("Equilatero"); } else { if((a==B) || (a==c) || (b==c)){ return("Isoscele\n"); } else{ return("Escaleno"); } } } Nem compila. Se a == b, a ==c e b ==c então o triângulo é equilatero e não isósceles. char *tipo(int a, int b, int c){ if(a==b && a==c) return("Equilatero"); else if (a!=b && a!=c && b!=c) return ("Escaleno"); else return("Isosceles"); } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 5, 2008 opa entaum viciado tinha erro de lógica e de compilação; []'s Compartilhar este post Link para o post Compartilhar em outros sites
Antoniosp 2 Denunciar post Postado Novembro 5, 2008 Na função tipo tem um B maiúsculo! E na main tem uma linha: tipo = tipo(a,b,c); tipo já e nome de função, escolhe outro nome pra variável! Não sei se dá encrenca também, mas coloca 1 espaço entre os %d %d %d do scanf. Até.. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 5, 2008 #include <stdio.h> #include <stdlib.h> #include <math.h> int verifica(int a, int b, int c){ if((abs(b-c)<a) && (a< (b+c))){ return (1); } else { return (0); } } char *tipo(int a, int b, int c){ if((a==B) && (a==c)){ return("Equilatero"); } else { if((a!=B) && (a!=c) && (b!=c)){ return("Escaleno"); } else{ return("Isosceles"); } } } int main() { int a, b, c; char nome[20]; printf("Informe os lados do triangulo\n"); scanf("%d%d%d",&a,&b,&c); if(verifica(a,b,c)){ nome = tipo(a,b,c); printf(" O triângulo e %s\n",nome); } else{ printf("Nao forma um triangulo"); } system("PAUSE"); return 0; } Continua dando erro na linha 36 so agora a mensagem é: incompatible types in assignment Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 5, 2008 Não há como atribuir o retorno de tipo() a nome usando o operador de igualdade. Use strcpy() Reveja os parênteses. Há erros. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 5, 2008 Pq você entope os ifs com parênteses? Isso dificulta a leitura. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 5, 2008 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int verifica(int a, int b, int c){ if(abs(b-c)<a && a< (b+c)){ return (1); } else { return (0); } } char *tipo(int a, int b, int c){ if(a==b && a==c){ return("Equilatero"); } else { if(a!=b && a!=c && b!=c){ return("Escaleno"); } else{ return("Isosceles"); } } } int main() { int a, b, c; char nome[20]; printf("Informe os lados do triangulo\n"); scanf("%d %d %d",&a,&b,&c); if(verifica(a,b,c)){ strcpy(tipo(a,b,c),nome); printf(" O triângulo e %s\n",nome); } else{ printf("Nao forma um triangulo"); } return 0; } Erro. Falha de Segmentação Core Dumped Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 5, 2008 if(verifica(a,b,c)) printf(" O triângulo e %s\n",tipo(a,b,c)); Com strcpy(tipo(a,b,c),nome) você está copiando nome para o endereço da função. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 5, 2008 Na função tipo tem um B maiúsculo! isso deve ter ocorrido pq ele coloco o codigo sem estar na tag [.code], ai saio o b.) assim B).. ai qnd coloquei a tag [.code] fico com B maiusculo.. []'s Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 5, 2008 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int verifica(int a, int b, int c){ if(abs(b-c)<a && a< (b+c)){ return (1); } else { return (0); } } char *tipo(int a, int b, int c){ if(a==b && a==c && b==c){ return("Equilatero"); } else { if(a!=b && a!=c && b!=c){ return("Escaleno"); } else{ return("Isosceles"); } } } int main() { int a, b, c; char nome[20]; printf("Informe os lados do triangulo\n"); scanf("%d %d %d",&a,&b,&c); if(verifica(a,b,c)){ strcpy(tipo(a,b,c),nome); printf(" O triângulo e %s\n",tipo(a,b,c)); } else{ printf("Nao forma um triangulo"); } return 0; }Depois que eu informo os lados continua dando falha de segmentação core dumped.OBS: Quando os lados noa formam o triangulo o programa funciona aparecendo a mensagem q nao forma o triangulo Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 5, 2008 Vou copiar o que eu já falei no post anterior: Com strcpy(tipo(a,b,c),nome) você está copiando nome para o endereço da função . Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 5, 2008 Vou copiar o que eu já falei no post anterior: Com strcpy(tipo(a,b,c),nome) você está copiando nome para o endereço da função . Obrigado. Resolvido #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int verifica(int a, int b, int c){ if(abs(b-c)<a && a< (b+c)){ return (1); } else { return (0); } } char *tipo(int a, int b, int c){ if(a==b && a==c){ return("Equilatero"); } else { if(a!=b && a!=c && b!=c){ return("Escaleno"); } else{ return("Isosceles"); } } } int main() { int a, b, c; printf("Informe os lados do triangulo\n"); scanf("%d %d %d",&a,&b,&c); if(verifica(a,b,c)){ printf(" O triângulo e %s\n",tipo(a,b,c)); } else{ printf("Nao forma um triangulo"); } system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites