Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: Deis em 05 de Dezembro de 2012, 21:14
-
Ola pessoal.
Estou començando a programar em C pelo Geany (Geany facil de usar e em protugues) e estou com dificulade em programar com " pow " e " sqrt " o Geany não enxerga a biblioteca math.h somente usando o lm ( linkar biblioteca math no codigo ) pelo terminal ai funciona.
A pergunta é a seguinte: Porque o Geany não linka a biblioteca math.h se ela foi declarada? Falta configuração?
Pegeui o programa abaixo na internet com a seguinte proposta:
Caso não de uma raiz quadrada exata, o programa executa a potenciação do numero digitado.
Mas o programa esta errado.
No " if (NUM==0) " somente a raiz de zero dara zero.
Qualquer outro numero digitado dara diferente de zero e nunca sera excutado o else, porque só o zero atende o " if (NUM==0) ".
Se eu digitar 9 sera executado o " if (); se eu digitar 5 sera executado o else().
Qual seria a condição que eu tenho que colocar no if para dar certo a proposta do exercicio?
Tem raiz inteiro executa if. Se der raiz quebrada executa else: potenciação.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
int NUM;
printf("\nINFORME NUMERO: ");
scanf("%i",&NUM);
if (NUM==0)
printf("\nA RAIZ QUADRADA DO NUMERO E:%f",sqrt(NUM));
else
printf("\nO QUADRADO DO NUMERO E:%f",pow(NUM,2));
printf("\n\n");
system("pause");
return(0);
}
-
Amigão, vc está salvando o seu arquivo em .c né? E tem coisa errada no seu programa aí cara.
-
Amigão, vc está salvando o seu arquivo em .c né? E tem coisa errada no seu programa aí cara.
Sim ele esta salvo em .c
E com certeza tem coisa errada.
Eu peguei esse programa na internet, puz para rodar, e deu para ver que tem falha.
Ele não cumpre o exercicio proposto.
-
Aqui o Geany está configurado desse jeito:
Compilar: gcc -Wall -c "%f"
Construir: gcc -Wall "%f" -lm -o "%e"
Alterei o programa, agora ele está fazendo o pedido. Cuidado com os vícios de linguagem lá do windows, tem coisa que não funciona no Ubuntu porque é variável de sistema, como o "system" e "cls".
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
// #include<string.h> // Não precisa dessa biblioteca
int main() {
int num, raiz_num_truncado; // Convenção para um bom código: variáveis utilizam letras minúsculas, CONSTANTES utilizam letras MAIÚSCULAS.
double raiz_num;
printf("\nINFORME NUMERO: ");
scanf("%d", &num); // Aqui é %d !!! Experimenta usar o %i e entrar lá no programa com 012, para ver o que acontece.
// Aqui vc vai tirar a raiz do número que o usuário digitou, independente se for uma raiz quadrada exata ou não
raiz_num = sqrt((double)num); // O double é conversor de cast, precisa converter o inteiro em double nesta função
// Aqui vc vai truncar o número, para poder compará-lo com ele mesmo à frente
raiz_num_truncado = (int)raiz_num; // Ao converter o raiz_num para inteiro, o número dentro dele é truncado (3.46396 vira 3 por exemplo)
// Se o número for uma raiz quadrada exata, então o raiz_num será igual ao raiz_num_truncado
// Se não for raiz quadrada exata, então na hora de truncar o raiz_num_truncado será diferente do raiz_num
// Lembrar que ao truncar um número, vc só pega a parte que vem antes da virgula, por exemplo: 7,290 truncando fica 7
if ( raiz_num == (double)raiz_num_truncado )
printf("\nA RAIZ QUADRADA DO NUMERO E: %.3f", raiz_num); // Importante indentar seu programa!!!
else
printf("\nO QUADRADO DO NUMERO E: %.3f", pow((double)num, 2.0));
printf("\n\n");
// O "pause" é variável de sistema, para ser específico é do rWindows, portanto não funcionará em Linux. Não faz parte da linguagem C.
//system("pause");
// No lugar do comando anterior, use:
printf("Aperte enter para sair");
getchar(); // Essas duas linhas são mais universais, funciona para qualquer sistema
return(0);
}
-
Aqui o Geany está configurado desse jeito:
Compilar: gcc -Wall -c "%f"
Construir: gcc -Wall "%f" -lm -o "%e"
Alterei o programa, agora ele está fazendo o pedido. Cuidado com os vícios de linguagem lá do windows, tem coisa que não funciona no Ubuntu porque é variável de sistema, como o "system" e "cls".
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
// #include<string.h> // Não precisa dessa biblioteca
int main() {
int num, raiz_num_truncado; // Convenção para um bom código: variáveis utilizam letras minúsculas, CONSTANTES utilizam letras MAIÚSCULAS.
double raiz_num;
printf("\nINFORME NUMERO: ");
scanf("%i", &num);
raiz_num = sqrt((double)num); // O double é conversor de cast, precisa converter o inteiro em double nesta função
raiz_num_truncado = (int)raiz_num; // Ao converter o raiz_num para inteiro, o número dentro dele é truncado (3.46396 vira 3 por exemplo)
if ( raiz_num == (double)raiz_num_truncado )
printf("\nA RAIZ QUADRADA DO NUMERO E: %.3f", raiz_num); // Importante indentar seu programa!!!
else
printf("\nO QUADRADO DO NUMERO E: %.3f", pow((double)num, 2.0));
printf("\n\n");
// O "pause" é variável de sistema, para ser específico é do rWindows, portanto não funcionará em Linux. Não faz parte da linguagem C.
//system("pause");
// No lugar do comando anterior, use:
printf("Aperte enter para sair");
getchar(); // Essas duas linhas são mais universais, funciona para qualquer sistema
return(0);
}
O brigado Sergio Benjamim pela ajuda.
Eu não sei quase nada de programação; faz uns 2 meses que começei a programar e nunca programei no Windows.
Eu sou leigo mesmo em programação.
Rodei seu programa e deu certinho, mas tive que rodar pelo terminal:
gcc raiz-quadrada.c -lm -o raiz-quadrada
./raiz-quadrada
Eu não sei como que eu configuro o Geany do jeito que você mostrou como esta configurado o seu.
Você poderia me ajudar a configurar o Geany?
E você poderia me orientar, dar um norte para eu me aprofundar em linguagem C?
Eu li seu codigo fonte e não entendi ele.
-
Muito obrigado mesmo Sergio Benjamim.
Eu fui fuçando e consegui achar aba que eu teria que colocar: Construir: gcc -Wall "%f" -lm -o "%e"
Estava assim: gcc-Wall-o"%""%f"
Perguntei para um monte de pessoas em alguns forum e não tive sucesso.
Mas você acertou na mosca a minha duvida e resolvou o meu problema.
Só preciso agora que você me oriente, me de um norte para eu me aprofundar em linguagem C?
Começar de modo certo.
-
Oh, tem que usar %d para ler inteiros, não %i, eu modifiquei lá no programa, dá uma olhada. Experimenta rodar o programa e jogar o número 012 e depois 12, vc vai notar que ele vai funcionar diferente se tiver com %i no scanf().
Para mudar as configurações que te falei, vá em Construir -> Definir Comandos de Construção.
Tem dois livros muito bons de C, que usei bastante para aprender aqui na facu:
Linguagem C, de Luis Damas
Treinamento em linguagem C, de Victorine Viviane Mizrahi
Aprendi bastante com eles, mesmo. Atualizei o código que postei anteriormente, dá uma olhada se está mais fácil de entender.
-
Oh, tem que usar %d para ler inteiros, não %i, eu modifiquei lá no programa, dá uma olhada. Experimenta rodar o programa e jogar o número 012 e depois 12, vc vai notar que ele vai funcionar diferente se tiver com %i no scanf().
Para mudar as configurações que te falei, vá em Construir -> Definir Comandos de Construção.
Tem dois livros muito bons de C, que usei bastante para aprender aqui na facu:
Linguagem C, de Luis Damas
Treinamento em linguagem C, de Victorine Viviane Mizrahi
Aprendi bastante com eles, mesmo. Atualizei o código que postei anteriormente, dá uma olhada se está mais fácil de entender.
Entendi que inteiro é %d e não %i.
Já consegui configurar o Geany.
Vou procurar esses livros na internet.
Aonde esta o código atualizado que você mencionou?
E porque digitando 012 da resultado diferente se digitasse 12?
-
Oh, tem que usar %d para ler inteiros, não %i, eu modifiquei lá no programa, dá uma olhada. Experimenta rodar o programa e jogar o número 012 e depois 12, vc vai notar que ele vai funcionar diferente se tiver com %i no scanf().
Para mudar as configurações que te falei, vá em Construir -> Definir Comandos de Construção.
Tem dois livros muito bons de C, que usei bastante para aprender aqui na facu:
Linguagem C, de Luis Damas
Treinamento em linguagem C, de Victorine Viviane Mizrahi
Aprendi bastante com eles, mesmo. Atualizei o código que postei anteriormente, dá uma olhada se está mais fácil de entender.
Entendi que inteiro é %d e não %i.
Já consegui configurar o Geany.
Vou procurar esses livros na internet.
Aonde esta o código atualizado que você mencionou?
E porque digitando 012 da resultado diferente se digitasse 12?
Atualizei ele no meu segundo post deste tópico, dá uma reparada lá em cima (eu editei o post).
Não tenho certeza, mas me parece que com %i se vc colocar um zero na frente o número é interpretado como sendo de base octal, ao invés de decimal.
Cara, se eu fosse vc eu compraria o livro do Luis Damas, ele é muito bom, vai ser um investimento para vc, não um gasto. Vale muito a pena. Procure usado mesmo, em sebos (procure na estante virtual).
-
Oh, tem que usar %d para ler inteiros, não %i, eu modifiquei lá no programa, dá uma olhada. Experimenta rodar o programa e jogar o número 012 e depois 12, vc vai notar que ele vai funcionar diferente se tiver com %i no scanf().
Para mudar as configurações que te falei, vá em Construir -> Definir Comandos de Construção.
Tem dois livros muito bons de C, que usei bastante para aprender aqui na facu:
Linguagem C, de Luis Damas
Treinamento em linguagem C, de Victorine Viviane Mizrahi
Aprendi bastante com eles, mesmo. Atualizei o código que postei anteriormente, dá uma olhada se está mais fácil de entender.
Entendi que inteiro é %d e não %i.
Já consegui configurar o Geany.
Vou procurar esses livros na internet.
Aonde esta o código atualizado que você mencionou?
E porque digitando 012 da resultado diferente se digitasse 12?
Atualizei ele no meu segundo post deste tópico, dá uma reparada lá em cima (eu editei o post).
Não tenho certeza, mas me parece que com %i se vc colocar um zero na frente o número é interpretado como sendo de base octal, ao invés de decimal.
Cara, se eu fosse vc eu compraria o livro do Luis Damas, ele é muito bom, vai ser um investimento para vc, não um gasto. Vale muito a pena. Procure usado mesmo, em sebos (procure na estante virtual).
Ok Sergio Benjamim, entendi.
Conheço a estante virtual, já comprei um livro la.
Muito obrigado por sua atenção.
-
Qual a edição do Livro Linguagem C, de Luis Damas 10ª Edição 2007?
-
Qual a edição do Livro Linguagem C, de Luis Damas 10ª Edição 2007?
Acho q usava o 10ª edição mesmo.
-
Qual a edição do Livro Linguagem C, de Luis Damas 10ª Edição 2007?
Acho q usava o 10ª edição mesmo.
Ok; vou comprar.
-
Tem como converter codigo fonte C++ para C e vice-versa?
-
Tem como converter codigo fonte C++ para C e vice-versa?
Tem, mas no sentido de vc ler todo o código e ir substituindo os códigos e funções (pensando assim vc também pode converter de C para Java, Java para Python e etc). Mas não esquente a cabeça com C++ por enquanto, ela é uma linguagem orientada à objetos e é mais chatinha de aprender do que C (minha opinião).
-
Tem como converter codigo fonte C++ para C e vice-versa?
Tem, mas no sentido de vc ler todo o código e ir substituindo os códigos e funções (pensando assim vc também pode converter de C para Java, Java para Python e etc). Mas não esquente a cabeça com C++ por enquanto, ela é uma linguagem orientada à objetos e é mais chatinha de aprender do que C (minha opinião).
Eu perguntei se era possivel a conversão; porque eu tenho um monte de exercicio em C++. Se desse para converter eu ia ter um monte de codigo fonte para treinar.
-
#include <stdio.h>
#include <math.h>
int main()
{
float num;
printf(" Informe um Numero Inteiro Positivo: ");
scanf("%f",&num);
if(num>=0){
printf("\n O Quadrado de %f é : %.3f\n",num,pow(num,2));
printf(" O Cubo de %f é : %.3f\n",num,pow(num,3));
printf(" A Raiz Quadrada de %f é : %.3f\n",num,sqrt((double)num));
printf(" A Raiz Cubica de %f é : %.3f\n",num,sqrt((double)num));
}
else
printf("\nInforme um Numero Positivo!!!");
printf("\n\n> > > Aperte enter para sair!!! < < <");
getchar();
}
Não estou conseguindo obter a raiz cubica.
Como que eu faço para conseguir a raiz cubica? printf(" A Raiz Cubica de %f é : %.3f\n",num,sqrt((double)num));
-
Eu não prestei a atenção.
" sqrt " é para obter uma Raiz Quadrada
Para se obter uma Raiz Cubica; usa-se a expressão " cbrt "