Ir ao conteúdo

Posts recomendados

Postado

Crie um programa que esta pegando a um numero e descobrindo qual a sua raiz , tipo 9 raiz 3 .... Agora quero pegar as vezes que ele e dividido e dar a potencia 

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
 
 float rai(float num);
main(){
  
  printf("a raiz quadrada e = ou ~= %f ",rai(16));
   
  
  }
 
 float rai(float num){	
	  int i;
	  float r=num,cont;
	  //raiz recebe o numero 	
	  
	   
	   for(i=0;i<num;i++){ //faz o laço ate for menor que o numero passado 
	  	   r=r/2+num/(2*r);
	    
	   cont=r;
	   printf("%f \n ",cont);
	   }
	  
   return r;
 }

3^2 

  • Obrigado 1
Postado

Você pode usar recursividade para isso. lembra de iniciar x=1, na main😉

	


int pot(int num, int x)
{
	
	
if(num/2>1)
{
		//debbug//printf("x = %d num = %d\n", x, num);	
		return pot (num/2, x+1);
	
}
else
{
	return x;
}		

 

  • Membro VIP
Postado

Olá.

 

Alguns pontos:

 

1#

Qual o enunciado do problema? é bom analisá-lo para saber se o que você quer fazer de fato é o que foi solicitado.

 

Por exemplo. Se você informou 9, e deveria exibir 3^2, provavelmente isso não tem algo a ver com "pegar as vezes que ele é dividido e dar a potência", ou seja, 3^2 simplesmente seria "o resultado da raiz do número (3, que é a raiz de 9), elevado ao grau da raiz (2 porque a raiz foi quadrada)". Exemplo:

 

16 = 4^2

25 = 5^2

11 ~= 3,3166^2

etc

 

Se fosse ao cubo.

8 = 2^3

64 = 4^3

29 ~= 3.07231^3

etc

 

Resumindo:

Apenas vai pegar o resultado e depois exibir ^2.

Mas em fim, poste o enunciado completo.

 

 

 

2# SOBRE A INDENTAÇÃO DE CÓDIGOS

 

Sempre mantenha o código indentado. É de fundamental importância. Exemplo:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

float rai(float num);

main() {
    printf("a raiz quadrada e = ou ~= %f ",rai(16));
}

float rai(float num) {
    int i;
    float r=num, cont;
    
    //raiz recebe o numero
    for(i=0; i<num; i++) { //faz o laço ate for menor que o numero passado 
        r=r/2+num/(2*r);
        cont=r;
        printf("%f \n",cont);
    }
    return r;
}

 

 

 

3# SOBRE USO DE RECURSOS NÃO UTILIZADOS OU DESNECESSÁRIOS

Só use o que você precisa, exemplo:

#include<stdio.h>
//#include<stdlib.h>

float rai(float num);

main() {
    printf("a raiz quadrada e = ou ~= %f ",rai(16));
}

float rai(float num) {
    int i;
    float r=num;
    
    for(i=0; i<num; i++) { //faz o laço ate for menor que o numero passado 
        r= r/2 + num/(2*r);
        printf("%f \n",r);
    }
    return r;
}

 

 

 

4# SOBRE A NOMENCLATURA DAS FUNÇÕES

Em 15/12/2018 às 19:38, CARRETA PCZAO disse:

float rai(float num);

 

A nomenclatura rai não me parece interessante. Indico utilizar uma nomenclatura mais sugestiva, exemplo:

float raizQ(float num);

Fica por si só subentendido que é "uma função que retorna a Raiz Quadrada de um número real".

 

obs.: lá no inglês, por exemplo, usam-se algumas abreviações/reduções que no idioma funcionam... como pow() em alusão a power() e sqrt() em alusão a square root etc. Em fim... prefira usar nomenclaturas funcionais.

 

 

 

5#

Não consegui entender a necessidade para uso de um for nesse algoritmo. Perceba que na formula que você usou dentro do laço, em determinado momento está ocorrendo de começara repetir o resultado, ou seja, a condição de parada do for não está muito coerente.

 

Resumidamente:

Você precisa reformular o algoritmo para calcular uma raiz quadrada. Exibir o tal dessa estrutura "3^2" é algo posterior, ou seja, se nem está calculando corretamente a raiz, como vai utilizar algo do cálculo para exibir alguma coisa?
 

 

 

6#

@guhbrj, o seu código não está funcionando muito bem. Veja:
 

#include<stdio.h>
//#include<stdlib.h>

int pot(int num, int x);
main() {
    int i;
    for(i; i<20; i++)
        printf("Raiz(%d) = %f \n",i,pot(i,1));
}
int pot(int num, int x)
{
    if(num/2>1)
        return pot(num/2, x+1);
    else
        return x;
}	

tela.PNG

 

***

 

No aguardo.

 

  • Curtir 1
  • Membro VIP
Postado

7#

Eu passei os valores por parâmetro. Usei o i. (cada valor de i, será um valor de num)

 

Mas então, qual o objetivo dessa função pot()?

 

 

 

8#

Em relação à questão:

Em 15/12/2018 às 18:38, CARRETA PCZAO disse:

quero pegar as vezes que ele e dividido e dar a potencia 

 

Pelo que eu entendi, antes teria que verificar se de fato @CARRETA PCZAO precisa disso ou não, ou seja, pode está querendo algo que não tem relação com o que foi proposto. Vide:

 

9 horas atrás, Simon Viegas disse:

1#

Qual o enunciado do problema? é bom analisá-lo para saber se o que você quer fazer de fato é o que foi solicitado.

 

Por exemplo. Se você informou 9, e deveria exibir 3^2, provavelmente isso não tem algo a ver com "pegar as vezes que ele é dividido e dar a potência", ou seja, 3^2 simplesmente seria "o resultado da raiz do número (3, que é a raiz de 9), elevado ao grau da raiz (2 porque a raiz foi quadrada)". Exemplo:

 

16 = 4^2

25 = 5^2

11 ~= 3,3166^2

etc

 

Se fosse ao cubo.

8 = 2^3

64 = 4^3

29 ~= 3.07231^3

etc

 

Resumindo:

Apenas vai pegar o resultado e depois exibir ^2.

Mas em fim, poste o enunciado completo.

 

Postado

Aqui segue o programa "completo".

Vale lembrar que este algoritmo só calcula potências de 2. Se quiser que calcule outras potencias, basta alterar a linha 30 //return pot (num/2, x+1); 

#include<stdio.h>

int pot(int num, int x);


int main()
{
	int num, result=0 ,x=1;
	printf("entre com um numero: ")	;
	scanf("%d", &num);
	if(num%2==1)
	{
		printf("\npotencia nao existe");
	}
	else
	{
		result = pot(num, x);
		printf("%d = 2^%d",num, result);
	}
		
}

int pot(int num, int x)
{
	
	
if(num/2>1)
{
	printf("x = %d num = %d\n", x, num);	// essa linha e so pra apurar o comportamento do codigo
	return pot (num/2, x+1);
	
}
else
{
	return x;
}		
}

 

Capturar.PNG

  • Membro VIP
Postado
Em 21/12/2018 às 21:01, guhbrj disse:

Aqui segue o programa "completo".

Vale lembrar que este algoritmo só calcula potências de 2. Se quiser que calcule outras potencias, basta alterar a linha 30 //return pot (num/2, x+1); 

Olá. @guhbrj, continuo sem entender.

 

Por exemplo, inseri o número 20. O resultado na tela ficou assim:

Entre com um numero: 20
x = 1 num = 20
x = 2 num = 10
x = 3 num = 5
20 = 2^4

Pelas contas que eu fiz, 2^4 = 16, e não 20.

 

Qual proposta desse código e a relação com o problema do @CARRETA PCZAO?

Postado
7 horas atrás, Simon Viegas disse:

Qual proposta desse código e a relação com o problema do @CARRETA PCZAO?

7 horas atrás, Simon Viegas disse:

Vale lembrar que este algoritmo só calcula potências de 2.

Esse programa calcula potências de 2. 

  • A variável x conta quantas vezes foi necessário fazer a divisão;
  • O programa pega um número e devolve sua raiz, como o @CARRETA PCZAO pediu.
7 horas atrás, Simon Viegas disse:

Pelas contas que eu fiz, 2^4 = 16, e não 20.

 

 

 

Temos um clássico problema de arredondamento, tendo em vista que estamos trabalhando com divisão entre números inteiros.

 

 

 

 

A proposta é demonstrar a possibilidade da implementação de uma função recursiva para a solução deste problema.

O código é aberto e podem fazer as alterações necessárias para adequação, de acordo com a demanda de cada um.

Postado

 

Em 15/12/2018 às 19:38, CARRETA PCZAO disse:

Crie um programa que esta pegando a um numero e descobrindo qual a sua raiz , tipo 9 raiz 3 .... Agora quero pegar as vezes que ele e dividido e dar a potencia 

Então como se defini esse programa? Enfim o programa trabalha apenas com números possíveis de representação na expressão do tipo bd =  n tal que n, d e b pertencente aos naturais.

 

n= 27

d= 3

b= 3

d é o número de divisões.

 

 

Em 23/12/2018 às 20:59, guhbrj disse:

Temos um clássico problema de arredondamento, tendo em vista que estamos trabalhando com divisão entre números inteiros.

É um caso o expoente 1.

 

Conclusão: A base do programa na minha interpretação é, testar um dado número n é composto por um único fator primo ou não primo e quantas repetições.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!