Ir ao conteúdo
  • Cadastre-se

Estrutura de Repetição (Loop) em C


Posts recomendados

Boa tarde, estou tentando implementar no algoritmo a seguinte ordem de ciclos e ações:


ciclo      ação


força     dobra               // ciclo 1
jedi       + 1000             // ciclo 2
força     dobra              // ciclo 3 (repetição do ciclo 1)
jedi      + 1000             // ciclo 4 (repetição do ciclo 2)

.... .....                         // ciclo n

e assim sucessivamente 

Passei para o algoritmo da seguinte maneira: 

/* Ciclos de Treinamento */

for (i = 1 ; i <= n ; i++)
{

     if (i % 2 != 0) 
    {
       total = valor*2;
     }
    else
   {
     total = valor + 1000;
   }


}

No entanto, só executa a primeira opção. Ao rodar o programa, digito valor igual a 1000 e n = 2 ciclos. O programa retorna 2000 como total.

 A minha ideia foi utilizar "par ou impar":  se impar, então ciclo 1 (total = valor * 2), se par, ciclo 2 (total = valor + 100) e assim sucessivamente. 

Alguém consegue enxergar o erro no algoritmo ?

Antecipadamente agradeço 

Link para o comentário
Compartilhar em outros sites

@Gabriel_Moro Eu alterei aqui, mas ainda não consigo chegar onde quero:

 

O que desejo fazer é isso: 

 

valor = 1000   n = 4 ciclos (digitado)

 

* ciclo 1: 1000*2 = 2000
* ciclo 2: 1000 + 1000 = 2000
* ciclo 3: 2000*2 = 4000
* ciclo 4: 2000 + 1000 = 3000

 

total: 11000

 

Modifiquei meu código para:

 

/* Ciclos de Treinamento */

 

    forca = valor*2;                                    // ciclo 1
    jedi = valor + 1000;                             // ciclo 2
    parcial1,parcial2 = 0;

 

    for (i=0 ; i <= n-2 ; i++ )
    {
        if (i % 2 != 0)
        {
           nforca = forca*2;                                             // ciclo 3
           parcial1 = parcial1 + nforca;
        }
        else
        {
            njedi = jedi + 1000;                                       // ciclo 4
            parcial2 = parcial2 + njedi;
        }
    }

   

    parcial = parcial1 + parcial2;
    total = forca + jedi + parcial;

 

Mas não consigo chegar nesse valor de 11000

Link para o comentário
Compartilhar em outros sites

@Gabriel_Morovou colocar o código na íntegra, isso pode facilitar. O código tá todo certinho, exceto essa parte dos ciclos. :/

 

# include <stdio.h>
# include <locale.h>

 

int main (void)
{
    int i,n;
    long int valor,forca,jedi,nforca,njedi,total1,total2,total;

 

    /* Entrada de Dados */

 

    setlocale (LC_ALL, "Portuguese");

 

    printf ("Informe o número INICIAL de mid-chlorians: ");
    scanf ("%d", &valor);
    printf ("Informe a quantidade de ciclos de treinamento: ")/
    scanf ("%d", &n);
    printf ("\n");

 

    /* Ciclos de Treinamento */

 

   total1,total2 = 0;
   forca = valor*2;
   jedi = valor + 1000;

   

   for (i=0 ; i <=(n-2) ; i++ )
   {
        if (i % 2 != 0)
        {
           nforca = forca*2;
           total1+=nforca;
        }
        else
        {
            njedi = jedi+1000;
            total2+=jedi;
        }
    }

 

    total = total1 + total2;

 

    /* Classificação: Padawan, Cavaleiro Jedi ou Mestre Jedi ? */

 

    if (total <= 100000)
    {
        printf ("%d mid-chlorians foram encontrados após %d ciclos\n", total , n);
        printf ("\n");
        printf ("Conclusão: ainda é considerado PADAWAN ");
        printf ("\n");
    }

 

    if (total > 100000 && total <= 1000000)
    {
        printf ("%d mid-chlorians foram encontrados após %d ciclos\n", total , n);
        printf ("\n");
        printf ("Conclusão: já é considerado CAVALEIRO JEDI ");
        printf ("\n");
    }

 

    if (total > 1000000)
    {
        printf ("%d mid-chlorians foram encontrados após %d ciclos\n", total , n);
        printf ("\n");
        printf ("Conclusão: ascende ao grau de MESTRE JEDI ");
        printf ("\n");
    }

    return (0);
}

 

Como TESTE, tenho usado  valor =1000  e n = 4 ciclos, com isso, espero o resultado total = 11.000

 

* ciclo 1: 1000*2 = 2000
* ciclo 2: 1000 + 1000 = 2000
* ciclo 3: 2000*2 = 4000
* ciclo 4: 2000 + 1000 = 3000

 

A não ser q meu raciocínio esteja errado....
 

Link para o comentário
Compartilhar em outros sites

teste o código que eu coloquei (teste como esta estruturado), ao testa-lo obtive 11000

4 minutos atrás, Wagner Candido disse:

   for (i=0 ; i <=(n-2) ; i++ )

use i<n

4 minutos atrás, Wagner Candido disse:

if (i % 2 != 0)
        {
           nforca = forca*2;
           total1+=nforca;
        }
        else
        {
            njedi = jedi+1000;
            total2+=jedi;
        }

o total para funcionar é necessário que seja 1 só

com essa lógica todos os ciclos são feitos no for

Link para o comentário
Compartilhar em outros sites

@Gabriel_Moro muito obrigado !!! 

deu certo, o problema era no total, só pode ser 1 mesmo

adicionado 10 minutos depois

@Gabriel_MoroÚltima dúvida:  testei n = 6 , era pra dar total = 23.000, tá dando 24000

 

 /* Ciclos de Treinamento */

   total = 0;
   forca = valor*2;                    // ciclo 1
   jedi = valor + 1000;                // ciclo 2

 

    for (i=0 ; i <= (n-2) ; i++ )               // o (n -2) é justamente para descontar os ciclos 1 e 2 
    {                                                     // se eu usar < ao invés de <= dá 19.000 só  
        if (i % 2 != 0)
        {
           forca*= 2;                  // ciclos 3,5,7...
           total+=forca;
        }
        else
        {
            jedi+= 1000;              // ciclos 4,6,8...
            total+=jedi;
        }
    }

 

* ciclo 1: 1000*2 = 2000
* ciclo 2: 1000 + 1000 = 2000
* ciclo 3: 2000*2 = 4000
* ciclo 4: 2000 + 1000 = 3000
* ciclo 5: 4000*2 = 8000
* ciclo 6: 3000 + 1000 = 4000

total: 23000

 

 

 

adicionado 31 minutos depois
42 minutos atrás, Wagner Candido disse:

@Gabriel_Moro muito obrigado !!! 

deu certo, o problema era no total, só pode ser 1 mesmo

adicionado 10 minutos depois

@Gabriel_MoroÚltima dúvida:  testei n = 6 , era pra dar total = 23.000, tá dando 24000

 

 /* Ciclos de Treinamento */

   total = 0;
   forca = valor*2;                    // ciclo 1
   jedi = valor + 1000;                // ciclo 2

 

    for (i=0 ; i <= (n-2) ; i++ )               // o (n -2) é justamente para descontar os ciclos 1 e 2 
    {                                                     // se eu usar < ao invés de <= dá 19.000 só  
        if (i % 2 != 0)
        {
           forca*= 2;                  // ciclos 3,5,7...
           total+=forca;
        }
        else
        {
            jedi+= 1000;              // ciclos 4,6,8...
            total+=jedi;
        }
    }

 

* ciclo 1: 1000*2 = 2000
* ciclo 2: 1000 + 1000 = 2000
* ciclo 3: 2000*2 = 4000
* ciclo 4: 2000 + 1000 = 3000
* ciclo 5: 4000*2 = 8000
* ciclo 6: 3000 + 1000 = 4000

total: 23000

Se usarmos o MESMO TOTAL para ambos:

* ciclo 5: 4000*2 = 8000
* ciclo 6: 4000 + 1000 = 5000  (aqui teria q receber o valor do ciclo 4, ou seja, 3000)

total: 24.000

No entanto, alterando para 2 totais distintos, ao testar com n =4, recebo total de 11040 (ao invés de 11000) e ao testar com n =6, recebo total de 24040 (ao invés de 23000) 

Citação

 

 

 

 

Link para o comentário
Compartilhar em outros sites

int valor=1000, jedi=1000, forca=1000;
    int n=6;
    int total=0, i;

    forca*= 2;
    total+=forca;
    jedi+= 1000;
    total+=jedi;

    for (i=2 ; i <n ; i++ )
    {
        if (i % 2 != 0)
        {
           forca*= 2;
           total+=forca;
        }
        else
        {
            jedi+= 1000;
            total+=jedi;
        }
    }

como tu quer fazer os dois primeiros ciclos fora do for ficaria assim...

adicionado 4 minutos depois
40 minutos atrás, Wagner Candido disse:

 forca = valor*2;                    // ciclo 1
   jedi = valor + 1000;                // ciclo 2

faltou somar total

 

41 minutos atrás, Wagner Candido disse:

for (i=0 ; i <= (n-2) ; i++ )

e i é < porque tu tirou dois ciclos então ciclo 0 1 2 3 (total 4 ciclos, dois foram feitos fora do for)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!