Ir ao conteúdo
  • Cadastre-se
brun0tf

C Exercício de estruturas de repetição

Recommended Posts

Oi, estou aprendendo a programar e tenho uma dúvida referente ao exercicio em anexo, espero que possam me ajudar.

Consegui fazer o exercício 3, no entanto estou com dificuldades em aplicar código sem a biblioteca math.h

5b0e10f851443_Screenshotfrom2018-05-2923-47-48.png.eb0e10e318d7eabce179ec156c723883.png

 

 

meu código:

#include <stdio.h>
int main()
{
    int num, n, res, soma=0, y=1;
    printf ("diga o numero");
    scanf ("%d", &num);
     printf ("diga o numero de termos");
    scanf ("%d", &n);
    if (n%2==0){
        for (int cont=1; cont<=n; cont++){
  y = y*num;
}
        
    for (int i=0; i<=n; i=i+2){
      res=i*y;
      soma = soma + res;
    }
printf ("%d\n", soma);

    }
else {printf ("Numero de termos ímpar");}
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passa isso de GO pra C ... Porque facilitar não é mesmo =D

package main

import "fmt"

func _pow(x int, n int) int  {
	var _sum int = x;
	for i := 1; i < n; i++ {
		_sum = x*_sum;
	}
	return _sum;
}

func main()  {
	var N int = 8;
	var n int = 2;
	var x int = 2;
	var terms []int;
	if((n % 2) == 0) {
		for i := 0; i < N; i++ {
			fmt.Print(n,"*(",x,"^",n,") + ");
			terms = append(terms,n*_pow(x, n));
			n += 2;
		}
		fmt.Println("... + nx^n\nSomatorio: ", terms);
	} else {
		fmt.Println("n deve ser par");
	}
}

https://play.golang.org/p/Hw3qWbUzHlI

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Plástico Bolha  pelo que entendi você usou pow pra efetuar a potencia, mas meu problema é com o exercicio 4, q pede pra nao usar math.h (nunca nem tinha ouvido falar em go kkk)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@brun0tf Não, ele criou uma função para calcular a potência, e usou essa função, ao invés de importá-la de uma biblioteca.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, brun0tf disse:

@Plástico Bolha  pelo que entendi você usou pow pra efetuar a potencia, mas meu problema é com o exercicio 4, q pede pra nao usar math.h (nunca nem tinha ouvido falar em go kkk)

Criei essa função pra calcular o pow:

func _pow(x int, n int) int  {
	var _sum int = x;
	for i := 1; i < n; i++ {
		_sum = x*_sum;
	}
	return _sum;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1#

@brun0tf, aqui, usando o Dev-C++ v5.11 (4.92 x64) o seu código não compilou em C. Para funcionar, declarei as variáveis fora do for. Ficou algo assim:

#include <stdio.h>
int main() {
    int num, n, res, soma=0, y=1;
    printf("Diga o numero"); //que número? 
    scanf("%d", &num);
    printf ("Diga o numero de termos");
    scanf ("%d", &n);
    if (n%2==0) {
        int cont;
        for (cont=1; cont<=n; cont++){
            y = y*num;
    }    
    int i;
    for (i=0; i<=n; i=i+2){
        res=i*y;
        soma = soma + res;
    }
    printf ("%d\n", soma);
    }
    else {
        printf ("Numero de termos ímpar");
    }
    return 0;
}

 

Mas em fim, não sei se é limitação do meu compilador ou se em C de fato não aceita.

 

 

 

2#

Apenas para efeito comparativo...

 

Inserir 2 e 4. Pelas minhas contas seria:

x=2
n=4

y=2(2)^2 + 4(2)^4
y=2*4 + 4*16
y=8 + 64
y=72

Correto?

 

No programa deu 96...

 

Em fim... acho que de fato já é sabido que não está funcionando...

 

Minha sugestão é que antes poste o exercício 3... para ser revisado e ver se está no caminho, caso contrário, não vai adiantar fazer o 4.

 

 

 

3#

Sobre:

Em 29/05/2018 às 23:57, brun0tf disse:

Consegui fazer o exercício 3, no entanto estou com dificuldades em aplicar código sem a biblioteca math.h

 

Então... perceba que o 4 é exatamente o mesmo algoritmo do 3... só muda que não vai usar o método pow(). Então, para que serve o método Pow()? ou seja, apenas implemente o que o método pow() faz e pronto.

 

A maneira mais prática é criar um método próprio como no exempo _pow(), que fará o que o pow() do math.h faz, daí invoca o seu método onde seria invocado o pow()...  ou pode também fazer a conta no próprio corpo.. não tem problema algum...

 

 

***

 

No aguardo.

 

 

adicionado 6 minutos depois

PS: se usar o nome pow(), não precisará mudar nada!!!    Veja, seria mais ou menos assim... o pow() é como se não "existisse" no C... ai alguém fez e deixou dentro de uma "biblioteca" a parte (que chamou de math)... ai, ao dar um include dessa biblioteca, tudo que tem no math será incorporado ao "compilador", logo, o comando passou a ser reconhecível.

 

RESUMINDO:

Em vez de dar um include para disponibilizar o pow(), você simplesmente irá implementar o método.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas

oi, obrigado pela atenção. Então, primeiro quero esclarecer que ainda não aprendi nada sobre funções, vetores e strings ainda.

 

Esse exercicio foi dado pelo professor do meu curso, e ele quer que usemos a potenciação como multiplicaçoes sucessivas de uma variável, como nesse código:

#include <stdio.h>
int main()
{
   int base, exp, x=1;
   printf ("diga a base: ");
   scanf ("%d", &base);
   printf ("diga o expoente: ");
   scanf ("%d", &exp);
   
   for (int i=1; i<=exp; i++){
	   x=x*2;}
	   printf ("%d", x);}
	   
   
   
   
2 horas atrás, Simon Viegas disse:

Correto?

 

No programa deu 96...

Sim, deu 96 por que o programa fez y=2*16 + y = 4*16.

O certo seria y=2*4 + y=4*16. (para x=2 e n=4), resultado q nao consigo chegar sem usar pow....

 

 

Aqui está meu programa do terceiro exercicio, q a principio esta certo(esqueci de por a condicinal que daria aviso de n=ímpar no programa)

#include <stdio.h>
#include <math.h>
int main()
{
   int n,x,j=1,i;
int  y, soma=0;
   printf ("diga x: ");
   scanf ("%d", &x);
   printf ("diga n: ");
   scanf ("%d", &n);
   
   
   for (i=2; i<=n; i=i+2){
       j = pow(x,i);
        y = i*j;
       printf ("%d*%d = %d\n", i,j,y);
       soma = soma + y;}
   
       printf ("\n\nSomatorio: %d", soma);

    return 0;}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

 

1#
Sempre, veja, SEMPRE mantenha o seu código indentado!!! É fundamental! Ex.:
 

#include <stdio.h>
#include <math.h>
int main() {
    int n,x,j=1,i;
    int  y, soma=0;
    
    printf ("diga x: ");
    scanf ("%d", &x);
    printf ("diga n: ");
    scanf ("%d", &n);
    for (i=2; i<=n; i=i+2) {
        j = pow(x,i);
        y = i*j;
        printf ("%d*%d = %d\n", i,j,y);
        soma = soma + y;
    }
    printf ("\n\nSomatorio: %d", soma);
    return 0;
}

Veja a diferença... Então, deixe o código perfeitamente organizado.. verás como faz diferença.

 

obs.: não existe um padrão único de indentação. Inclusive é possível ter suas próprias características... mas deve ter sempre coerência.

 

 

 

2#

Sobre:

4 minutos atrás, brun0tf disse:

oi, obrigado pela atenção. Então, primeiro quero esclarecer que ainda não aprendi nada sobre funções, vetores e strings ainda.

 

Simples: não use-as. Se ainda não aprendeu, não tem porque implementar... ou seja, o exercício é (ou deveria ser) sempre voltado para o que já aprendeu... não tente sair do fluxo de aprendizagem.

 

obs.: caso consiga fazer com o conteúdo já explicado, nada impede de você POSTERIORMENTE fazer com recursos extras, mas isso seria um "bônus", não o foco! Entenda que o uso de recursos mais avançados tende para servi para facilitar a implementação caso fosse feito com os mais básicos, ou seja, entender o simples antes ajuda a dominar melhor o avançado... ;)

 

Por exemplo, uma das utilidades do vetores é facilitar a implementação do uso de variáveis simples repetidas... é muito mais prático usar um vetor de nomes, do que criar um monte de variáveis simples, como nome1, nome2, nome3... com os vetores, usando um índice e um laço de repetição tudo fica bem simples, mas é interessante entende que "vetor veio para facilitar".

 

 

 

3#

Veja, a ÚNICA coisa que muda é que não vai usar o pow(), correto?

 

Vide:

7 minutos atrás, brun0tf disse:

j = pow(x,i);

 

Ou seja, nesse momento do código você precisa fazer que j seja igual ao que pow(x,i) resultaria!

 

Perceba que o código que o seu professor sugeriu a fazer faz o que o j precisa, ou seja, "tem um pow() implementado lá"... apenas use no seu código.

 

 

***

 

No aguardo.

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça uma função:

double potencia(double x, int exp) {

Que calcula a potência, e usa-a no mesmo lugar onde usa pow no primeiro programa.

 

 

adicionado 3 minutos depois

Sobre indentação, existe a opção de usar algo para indentar o código automaticamente, como esse site:

https://www.tutorialspoint.com/online_c_formatter.htm

(Cole o código no lado esquerdo, e depois clique em Beautify e o código será "embelezado" no lado direito. :lol:)

  • Curtir 2
  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas  Minha dúvida desde o começo é como usar esse pow, to a um tempo tentando mas continuo perdido kkk

Entendo que tenho que por uma variavel que faça a função de pow, foi o que fiz no primeiro código do tópico, no entanto acredito que esse exercício seja mais complexo, porque o valor da potência muda de acordo com o valor do n.

#include <stdio.h>
int main()
{
 int x, n, res, soma=0, y=1;
     printf ("diga o x");
     scanf ("%d", &x);
     printf ("diga o numero de termos");
     scanf ("%d", &n);
    
    if (n%2==0){
        for (int cont=1; cont<=n; cont++){
           y = y*x;
           printf ("%d\n", y); //esse printf explicita o meu erro
                                         }
        
        for (int i=2; i<=n; i=i+2){
           res=i*y;
           soma = soma + res;
           printf ("%d*%d=%d\n", i,y,res);
                                  }
           printf ("\nSomatorio=%d\n", soma);

               }
    else {printf ("Numero de termos ímpar");}
    return 0;
}

 

adicionado 3 minutos depois

@isrnick Talvez seja mas fácil usar função mesmo, mas esse é um exercício do meu curso, onde ainda não vimos função, então meu professor nao autorizou o uso desse recurso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo se eu entendo, parte do problema é o procedimento pow.

será que é isso que buscas.

Spoiler

#include <stdio.h>

int main(void) {
  float x; //base do potência
  float pote; //valor da potência
  int   n; //expoente positivo

    x = 2;
    n = 3;
    pote = 1;
    //de padrão sempre igual a 1
    int i = 0;
    while(i < n){
      pote = x * pote;
      ++i;
    }

    printf("%s%g\n", "Potencia: ", pote);
    //resposta igual: 2^3 = 8
    //tenta para mais valores base^expo
  return 0;
}

 

adicionado 4 minutos depois
11 horas atrás, brun0tf disse:

Minha dúvida desde o começo é como usar esse pow

Ah não! Agora entendo melhor, :lol:.

Fica pelo menos como outra forma de presentar o procedimento.

 

:thumbsup:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, brun0tf disse:

@isrnick Talvez seja mas fácil usar função mesmo, mas esse é um exercício do meu curso, onde ainda não vimos função, então meu professor nao autorizou o uso desse recurso

 

Por favor, leia o que eu disse no item 3# da minha postagem anterior.

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×