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

Título: Programação em C pow e sqrt " Resolvido "
Enviado 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);
}
 

Título: Re: Programação em c pow e sqrt
Enviado por: Sergio Benjamim em 05 de Dezembro de 2012, 21:50
Amigão, vc está salvando o seu arquivo em .c né? E tem coisa errada no seu programa aí cara.
Título: Re: Programação em c pow e sqrt
Enviado por: Deis em 05 de Dezembro de 2012, 21:53
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.
Título: Re: Programação em c pow e sqrt
Enviado por: Sergio Benjamim em 05 de Dezembro de 2012, 22:15
Aqui o Geany está configurado desse jeito:

Citar
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".

Código: [Selecionar]
#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);
}
Título: Re: Programação em c pow e sqrt
Enviado por: Deis em 05 de Dezembro de 2012, 22:27
Aqui o Geany está configurado desse jeito:

Citar
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".

Código: [Selecionar]
#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.

Título: Re: Programação em c pow e sqrt
Enviado por: Deis em 05 de Dezembro de 2012, 22:46
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.
Título: Re: Programação em c pow e sqrt
Enviado por: Sergio Benjamim em 05 de Dezembro de 2012, 22:57
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.
Título: Re: Programação em c pow e sqrt
Enviado por: Deis em 05 de Dezembro de 2012, 23:11
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?
Título: Re: Programação em c pow e sqrt
Enviado por: Sergio Benjamim em 05 de Dezembro de 2012, 23:19
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).
Título: Re: Programação em c pow e sqrt
Enviado por: Deis em 05 de Dezembro de 2012, 23:23
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.
Título: Re: Programação em c pow e sqrt " Resolvido "
Enviado por: Deis em 05 de Dezembro de 2012, 23:30
Qual a edição do Livro Linguagem C, de Luis Damas 10ª Edição 2007?
Título: Re: Programação em c pow e sqrt " Resolvido "
Enviado por: Sergio Benjamim em 05 de Dezembro de 2012, 23:38
Qual a edição do Livro Linguagem C, de Luis Damas 10ª Edição 2007?

Acho q usava o 10ª edição mesmo.
Título: Re: Programação em c pow e sqrt " Resolvido "
Enviado por: Deis em 05 de Dezembro de 2012, 23:40
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.
Título: Re: Programação em c pow e sqrt " Resolvido "
Enviado por: Deis em 05 de Dezembro de 2012, 23:42
Tem como converter codigo fonte C++ para C e vice-versa?
Título: Re: Programação em c pow e sqrt " Resolvido "
Enviado por: Sergio Benjamim em 06 de Dezembro de 2012, 00:12
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).
Título: Re: Programação em c pow e sqrt " Resolvido "
Enviado por: Deis em 06 de Dezembro de 2012, 11:10
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.
Título: Re: Programação em C pow e sqrt " Resolvido "
Enviado por: Deis em 06 de Dezembro de 2012, 17:18
#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));
Título: Re: Programação em C pow e sqrt " Resolvido "
Enviado por: Deis em 06 de Dezembro de 2012, 17:56
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 "