Ir ao conteúdo
  • Cadastre-se
Fernando Vernier

C++ Novato em programação C++

Recommended Posts

Fala galera,

 

Tudo bem?

 

Estou iniciando na programação, alguém por favor poderia me dizer exatamente o que o simples código abaixo faz linha por linha?

 

#include <iostream>

int main() {

int c, n, max = 0;

std::cin.ignore();

while(std::cin >> n)

max < n ? c = !!(max = n) : c += max == n;

std::cout << c;

return 0; }

 

Muito Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu diria que isso não é um código simples, é sim um código curto, mas não fica óbvio com uma leitura rápida o que faz, principalmente usando esse operador ternário com dupla atribuição, com uma dupla negação booleana, tudo na mesma expressão.

 

É o tipo de situação que eu diria que seria muito melhor fazer o código um pouco mais extenso, deixando as operações explícitas, e o código seria entendido muito mais facilmente. É importante lembrar que código é escrito para programadores entenderem, não para o computador, então legibilidade é mais importante que quão compacto o código fica.

 

Mas segue a explicação (também fiz algumas correções no código):

 

#include <iostream>

int main() {
    int c = 0,   //faltava inicializar c com valor 0
        n,
        max = 0; //Como 0 e' o maximo inicial numeros negativos nao serao contados
    
    //Enquanto for digitado um numero inteiro valido no terminal:
    while(std::cin >> n)
        //Conta quantas vezes o maior numero digitado se repete:
        max < n ? c = !!(max = n) : c += max == n; 
    
    //A linha abaixo deve vir apos o while, nao antes, pois serve para descartar
    //o(s) caractere(s) digitado(s) que nao forma(m) um numero inteiro valido,
    //usado(s) para sair do while, mas que ainda esta(ao) no stream de entrada.
    std::cin.ignore(); 
    
    //Imprime a quantas vezes o maior numero foi repetido
    std::cout << c;
    
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda, entendi perfeitamente e ficou mais claro, estou me dedicando aos estudos logo ficará fácil a compreensão.

 

Abraços.

  • Curtir 1

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

×