Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Isaias Tavares

Exercício de Função em C

Recommended Posts

Olá pessoal,

 

eu estava criando esse programa, mas ta dando erro e eu não sei no q eu estou errando...

 

#include <stdio.h>
#include <math.h>
float ler(char frase[100]){
float valor = 0;
do {
	printf(frase);
	scanf("%f", &valor);
} while (valor <= 0);
return valor;
}
int main ()
{
do {
	int escolha;
	float a, b, c, delta, x1, x2;
	printf("CÁLCULO DE EQUAÇÃO DO 2º GRAU\n");
	a = ler("Informe o valor de A:\n");
	b = ler("Informe o valor de B:\n");
	c = ler("Informe o valor de C:\n");
	delta = pow(b,2) - 4*a*c;
	if (delta < 0){
		printf("Delta = %.2f", delta);
		printf("Delta negativo. Não existe raízes.");
	}
	else {
		printf("Delta = %.2f", delta);
		x1 = ((-B) + sqrt(delta))/(2*a);
		x2 = ((-B) - sqrt(delta))/(2*a);
		printf("X' = %.2f e X'' = %.2f", x1, x2);
	}
	printf("Deseja calcular nova equação?");
	printf("Digite 0 para NÃO");
	printf("Digite 1 para SIM");
	printf("Digite sua escolha: ");
	scanf("%d", &escolha);
} while (escolha != 0);
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isaias Tavares,

 

1) Você declarou sua variáveis no lugar errado.

Tire elas de dentro do laço de repetição, variáveis não podem ser declaradas desta forma.

 

2) Nestas linhas:

x1 = ((-B) + sqrt(delta))/(2*a);
x2 = ((-B) - sqrt(delta))/(2*a);

 

Você esta utilizando "B", mas não declarou esta variável.

 

Dica:

-> Não utilize a função main desta forma:

int main()

Coloque alguma coisa como parametro, nem q seja vazio:

int main(void)

 

-> Utiliza nomes de variáveis que façam sentido. Por exemplo:

int iLaco;
int iContador
float fTemporario;

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá GBecker,

 

Fiz, o que você falou, tirei as variáveis do laço e as outras coisas tbm, mas continua do mesmo jeito..

 

aqui no meu código aparece b, não sei pq apareceu B.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, compilou aqui.

 

Posta os erros para facilitar a ajuda.

 

Flw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez esteja dando esses erros, pq eu acabei de baixar o geany e talvez esteja faltando configurar ele...

 

Segue abaixo os erros

 

gcc -Wall -o "funcaoc" funcaoc.c" (no diretório: /home/isaias/Documentos)

funcaoc.c: Na função 'ler':

funcaoc.c:6:3: aviso: format not a string literal and no format arguments [-Wformat-security]

/tmp/ccjXCOz0.o: In function `main':

funcaoc.c:(.text+0x172): undefined reference to `sqrt'

funcaoc.c:(.text+0x1cb): undefined reference to `sqrt'

collect2: ld returned 1 exit status

Compilação falhou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Digita:

 

gcc -Wall -Wextra -Werror -o funcaoc funcaoc.c -lm

 

Pode mostrar alguns outros errinhos, mas corrigindo provavelmente vai funcionar...

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu digitei o que você falou e apareceu a seguinte mensagem:

 

gcc: erro: funcao.c: Arquivo ou diretório não encontrado

 

obs.: eu tentei de várias formas, coloquei cd Documentos antes pq o arquivo esta na pasta Documentos, mas nao adiantou, tentei compilar primeiro e depois digitar isso, mas nao da certo...

 

Eu uso dois sistemas operacionais, o Windows 7 e o ubuntu 12.04

 

Esses erros que estavam dando era quando eu compilava ou pelo geany ou pelo terminal no ubuntu 12.04. Depois, eu peguei o mesmo código e compilei no code::blocks no windows 7 e executou normalmente. Qual será o motivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é que você não está passando o nome do arquivo certo, o gcc está procurando por "função.c".

 

O code::blocks provavelmente está com todos os warnings desabilitados, o recomendado é ativar TODOS, ou, ao menos, a maioria.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca tentei compilar nada no linux através de linha de comando. Mas imagino que o erro seja algum caminho dos arquivos.

Não precisa colocar todo o caminho do arquivo??

tipo: "usr/dev/project/arquivo.c"

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, você pode passar só a partir da pasta que você está. Mas você tem que estar na pasta.

 

Se estiver com dúvidas sobre o nome do arquivo, digita um "ls" (ou "dir" no windows)...

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza! Renato.

 

Nunca tive contato com linha de comando no Linux. Mal e mal tive com o Windows. =P

 

FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente Renato Utsch, eu estava digitando o nome do arquivo errado. Quando eu digitei o nome certo apareceu os seguintes erros:

 

funcaoc.c: Na função ‘ler’:

funcaoc.c:6:3: erro: format not a string literal and no format arguments [-Werror=format-security]

cc1: all warnings being treated as errors

 

Eu particularmente, acho bem melhor compilar pelo terminal e é bastante simples.

 

1º - Verifique em qual pasta esta o arquivo que você quer compilar.

2º - Digite ls no terminal e irá aparecer o nome das pastas

3º - Digite cd pasta, a pasta no caso seria o lugar onde está o arquivo, por exemplo, cd Documentos

4º - gcc prog.c -o prog, se não houver nenhum erro digite ./prog

O prog seria o nome do aquivo que você salvou, esse nome prog foi só um exemplo

 

Obs.: Esses comandos são para o linux, são sei compilar no Windows e para compilar no linux dessa forma você tem q instalar o gcc que tbm é muito simples de instalar, basta digitar no terminal o seguinte código:

 

sudo apt-get install build-essential gcc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana isto!

 

Estou tentando migrar para o linux. Tanto para desenvolvimento, quanto para uso comum.

Sempre é bom adquirir novos conhecimentos.

 

Vlw!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O linux é muito melhor para dev e, na minha opinião, até para uso geral, só pega em quesito de jogos e ferramentas de edição de vídeo...

 

4º - gcc prog.c -o prog, se não houver nenhum erro digite ./prog

 

Eu substituiria essa linha por:

 

gcc -Wall -Wextra -Werror prog.c -o prog

 

Isso habilita todos os warnings do compilador, assim, caso tiver alguma coisa feita meio errado, o gcc vai avisar. Isso permite que seu código seja mais bem escrito, ajuda bastante...

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com o Renato Utsch, o linux é bem melhor, só pega nesses quesitos... É mais usado por programador, depois que descobri o ubuntu, raramente entro no Windows 7 kkk

 

Vlw pela dica, Renato Utsch, eu não conhecia essa linha de código.

 

Mas quanto a esses erros que aparecem, o que sera? Eu fiz um programa para aparecer Hello World na tela so pra testar e executou, mas esse aparece esses erros, e quando eu uso o mesmo código no geany no Windows 7 o programa executa normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem 2 opções básicas:

 

1ª:

printf("%s", frase);

 

2ª:

puts(frase);

 

A string que você passa como primeiro parâmetro é só para formatar o output, e não o conteúdo em si. Agora, o puts() faz exatamente o que você quis, envia a string para o stdout. Do modo como mostrei acima, usar o puts() é mais rápido e recomendado, pois o printf() teria que primeiro interpretar a format string antes de mostrar o conteúdo...

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei dos dois jeitos, mas continuou dando os mesmos erros... Vou deixar isso de mão, provavelmente o problema é no compilador, até pq se eu utilizar o mesmo código e compilar em outro sistema operacional, como fiz no Windows, ele executa normalmente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é 'problema' no compilador, é que todos os warnings tão habilitados, e tão sendo tratados como erros...

 

Tanto que o Code::Blocks compila e ele usa (na maioria das vezes) o mesmo GCC.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.