Ir ao conteúdo

Posts recomendados

Postado

Ola, tudo bem? Estou começando aprender a programar, e para isso estou utilizando o Visualg para exercitar minha lógica de programação. Trabalhando lá com algoritmos então, resolvi criar o seguinte: informo para o programa um certo número e, se este for par, divido por dois; se for impar, multiplico por 3 e somo 1. Faço isso até este meu número virar 1 (sim, todos viram uma hora). Enfim, quando fui executar o algoritmo, séries de erros apareceram com relação a atribuição das variáveis, entre inteiro e real. já tentei mudar várias vezes, criar variáveis de auxílio etc. Se puderem me ajudar agradeço. O código está abaixo, entre os spoillers.

 

Obs: além do repita, já tentei utilizar para, enquanto, procedimentos, funções etc.

 

Spoiler

algoritmo "semnome"

var

n: inteiro

inicio

Escreva ("Digite um número: ")
Leia (n)

Repita

      Se (n%2=0) entao
         n <- n/2
      senao
           n <- n*3+1
      Fimse
      
      Escreval (n)
      
ate (n=1)

fimalgoritmo

 

Sem título.png

  • Curtir 2
  • Membro VIP
Postado

Olá @Jaedson Alves.

 

A divisão de um número inteiro por outro inteiro resulta em um número real, logo, a variável que recebe o resultado tem que ser real (ou classe maior - que abrange o real...).

 

Daí ou você segue como a orientação de @Jaedson Alves, ou declara outra variável para efetuar as contas... (mais prático alterar para real).

 

 

ADENDO:
1) sim, toda divisão vai resultar em real, vale lembrar que "todo inteiro também é real, mas nem todo real é inteiro";

2) esse cálculo efetuado no algoritmo é curioso..., acho que seria interessante usar uma outra variável para contar quantos loops foram necessário para chegar ao "1". Dessa forma, além de mostrar os números, mostraria também a quantidade.

 

No aguardo.

  • Curtir 1
Postado

@isrnick Deu certinho com isso, valeu!

adicionado 2 minutos depois

@Simon Viegas Olá, quando tentei declarar a variável como real, ele continuou mostrando o erro, desta vez como se eu tivesse que ter posto como inteiro. O que resolveu foi utilizar a sugestão do Isrnick, de utilizar a barra invertida (\). Vou tentar ainda utilizar outra variável para a contagem, já que é interessante saber o número de vezes que foi necessário se fazer o loop. Obrigado ^^ 

adicionado 8 minutos depois

@isrnick  @Simon Viegas Ficou ótimo, valeu.

Sem título.jpg

  • Curtir 2
Postado

@Simon Viegas agora eu programei o código em c++, porém com algumas alterações. Me interessa saber agora só saber para os números que seguem a função 4x+3 =y (3; 7; 11; 15 etc), e não me interessa mais saber o número de passos até o número virar 1, e sim até ele ficar menor que o inicial. (detalhe: agora em vez de fazer 3*x+1, estou fazendo (3*x+1)/2). enfim, o código está dando resultados diferentes de quando eu programei no visualg g. inclusive, quando mudo o   while ( c < 1048575);, do do-while para um valor tipo 8, ele continua em um looping que gera muitos valores, enquanto deveria escrever apenas 2.

#include <iostream>
#include<stdlib.h>

using namespace std;

int main()
{
        int aux = 0;
        int c = 3;
        int d;
        int x;
        int t;

    do
    {

        d = 0;
        x = c;

        \\isso só aumenta o D
        while (x >= c)
        {
            if (x % 2 == 0)
            {
                x = x/2;
                d = d + 1;
            }
            else
            {
                    x = (3*x+1)/2;
                    d = d + 1;
            }
        }

        cout << d << endl;

        if (d > aux)
        {
            aux = d;
        }

        c = c + 4;
        t = t+1;
        
    } while ( c < 1048575);

    cout << "o maior valor de operações foi de: "<< aux << endl;
    cout << "Foram calculados: " << t <<endl;
    system("pause");
    return 0;
}

 

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!