Algorítmo; Leitura de N números

Bom dia, pessoal. Vejam bem; eu estou estudando desenovolvimento web e, apesar de gostar mais do lado visual da coisa, eu também gosto (sou perfeccionista nisso) de aprender outras coisas, e quero desenvolver o meu lado lógico também, que não é muito bom.
Eu peguei uma lista de atividade de construção de algorítmo e tentei resolvê-la em portugol, primeiramente. Eis a 1ª questão:


Faça um programa capaz de solicitar um número N (1<N<1000) do usuário e ler N
números inteiros. Após a leitura do último número deve-se informar:
• Na primeira linha a soma dos N números em decimal.
• Na segunda linha a soma em hexadecimal dos números pares informados.
• Na terceira linha a soma em octal dos números impares informados.
Assuma que todos os números fornecidos pelo usuário serão inteiros válidos e que as somas nunca serão superiores a um número inteiro de 32 bits.


Se eu entendi a questão, é possível que o usuário queira entrar com… Não sei, 15 números, como eu vou fazer para o programa identificar o último número digitado sem se alongar acima disso? Por exemplo: Pelo o que entendi, é possível que o usuário entre com 998 números válidos (1< N >1000). Simplesmente empaquei nisso.
Mas aí pedir para o chatGPT resolver esse algorítmo em portugol e em seguida codificar em JS e para minha surpresa aconteceu exatamente o que eu estava pensando: de acordo com o código do chatGPT, se eu digitar; 23,35,45… ele simplesmente fica pedindo números sem chegar a um limite (imagino que esteja esperando os 998 serem digitados). Mas se eu digitar; 2,3,4. Ele me retorna os valores.
**
Eis o código:

algoritmo SomaHexOct
var
    N, i, numero: inteiro
    somaDecimal, somaHexPares, somaOctImpares: inteiro

inicio
    // Solicitar o número N do usuário
    escreva("Digite um número N (1 < N < 1000): ")
    leia(N)

    // Inicializar as somas
    somaDecimal <- 0
    somaHexPares <- 0
    somaOctImpares <- 0

    // Ler N números inteiros
    para i de 1 ate N faca
        escreva("Digite o número ", i, ": ")
        leia(numero)

        // Somar ao total
        somaDecimal <- somaDecimal + numero

        // Verificar se é par (hexadecimal)
        se numero % 2 = 0 entao
            somaHexPares <- somaHexPares + numero

        // Verificar se é ímpar (octal)
        senao
            somaOctImpares <- somaOctImpares + numero
        fimse
    fimpara

    // Exibir resultados
    escreva("Soma dos N números em decimal: ", somaDecimal)
    escreva("Soma em hexadecimal dos números pares: ", hexadecimal(somaHexPares))
    escreva("Soma em octal dos números ímpares: ", octal(somaOctImpares))
fimalgoritmo

Em Javascript:

// Solicitar o número N do usuário
let N = parseInt(prompt("Digite um número N (1 < N < 1000):"));

// Inicializar as somas
let somaDecimal = 0;
let somaHexPares = 0;
let somaOctImpares = 0;

// Ler N números inteiros
for (let i = 1; i <= N; i++) {
    let numero = parseInt(prompt("Digite o número " + i + ":"));

    // Somar ao total
    somaDecimal += numero;

    // Verificar se é par (hexadecimal)
    if (numero % 2 === 0) {
        somaHexPares += numero;
    } else { // Verificar se é ímpar (octal)
        somaOctImpares += numero;
    }
}

// Exibir resultados
console.log("Soma dos N números em decimal: " + somaDecimal);
console.log("Soma em hexadecimal dos números pares: " + somaHexPares.toString(16));
console.log("Soma em octal dos números ímpares: " + somaOctImpares.toString(8));

Li texto e código. Qual é a pergunta?

1 curtida

Ele está correto? Porque se eu digitar 35,46,67. Ele não me retorna os valores dos somatórios. E no desafio está especificado; “que leia N números inteiros”, então, se eu entrar com apenas 3 números, por que ele não me retorna os valores? O mesmo acontece se eu entrar com apenas 15, ou 20 etc…

Ah, em javascript o código está sendo mostrado no console. Aperte F12 e vá na guia “console” para ver a saída de “console.log”, ou então mude “console.log” para “alert” e vai aparecer um alerta da página.

1 curtida

Ah, mano, estava lendo novamente o desafio… Acho que acabei de entender a questão agora (droga eu sou horrível nisso), vou só fazer um teste para ver se é isso que pensei mesmo.

Programação é bem chato nesse sentido de só fazer o que foi pedido! Assumiu alguma coisa? Então provavelmente está errrado.

1 curtida

Foi o que pensei mesmo, erro de interpretação meu. Por isso sou horrível em lógica :pensive: depois de reler umas 10 vezes entendi :expressionless:

O computador:

  1. Só faz o que for pedido.
  2. Faz o que foi pedido mesmo que não faça sentido.
  3. Opera dentro de certas limitações que o programador precisa saber. (não adianta pedir pra somar 72057594037927940 + 1 em JS que não vai retornar 72057594037927941)

Quem inicia em programação precisa pegar bem o primeiro passo.
Quem acha que começou a entender programação precisa pegar bem o segundo passo
E quem acha que sabe programar, precisa pegar bem o terceiro passo.

1 curtida