image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Fernando Araujo
Fernando Araujo23/08/2024 12:32
Compartilhe

<Direto ao Ponto 37> Como resolver problemas usando o computador

  • #Informática Básica

Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )

 

Olá, dev!

 

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Ele vai tratar de como usar algumas técnicas básicas para melhorar o entendimento de problemas, facilitando a sua solução inclusive usando o computador.

 

Sumário

1. Introdução

2. A Lógica de Programação

3. O entendimento do problema

4. A ajuda dos desenhos e rascunhos

5. Como um desenho pode ajudar no entendimento

6. Considerações finais

7. Referências 

 

1 – Introdução

 

Eu criei a série de artigos DIRETO AO PONTO com o objetivo de apresentar, de forma simples e direta, conhecimentos básicos da programação e de computação, principalmente, para os iniciantes.

 

Aqui, são tratados de temas como lógica de programação, linguagens, hardware dos computadores, história da computação e assuntos relacionados à plataforma da DIO, como a escrita de artigos e os desafios de código.

 

Este artigo vai tratar de algumas técnicas que podem ajudar a resolver problemas de forma mais rápida e objetiva, seguindo alguns passos simples e diretos. No caso da programação, as técnicas levam até o código em alguma linguagem de programação.

 

 

2 – A Lógica de Programação

 

A primeira coisa que um programador iniciante deve aprender é a tal Lógica de Programação, que resulta na concepção de um algoritmo para a resolução de problemas por meio de programas de computador.

 

Essa lógica é o terror dos iniciantes, a etapa importante negligenciada por grande parte dos programadores mais experientes e um dos fundamentos mais importantes para quem quer codificar a solução de qualquer problema.

 

Eu tratarei o assunto de forma bem direta, objetiva e prática, deixando de lado toda a conceituação teórica por trás do tema, os conhecimentos acadêmicos e as opiniões polêmicas contrárias, que buscam uma verdade absoluta para os conceitos e as técnicas associadas.

 

Todo mundo aqui na DIO já sabe (ou já ouviu) que a base da programação é a Lógica de Programação e que aprender a programar sem saber dela é difícil.

 

Em parte, isso é verdadeiro, pois a codificação nada mais é do que a conversão dos passos necessários para se resolver um determinado problema em código de alguma linguagem de programação.

 

Realmente, fica difícil definir os passos para codificar um programa equivalente sem lógica de programação. Ninguém nasce com esse conhecimento, mas ele pode ser aprendido por qualquer pessoa e melhorado com a prática.

 

O conceito de lógica não nasceu com a programação e pode ser aplicado a qualquer problema que precisa ser resolvido. Eu gosto de dizer que a Lógica de Programação acaba se resumindo aos algoritmos, que são os passos que devem ser aplicados em sequência para se resolver um problema. Qualquer problema! De qualquer área! Mesmo sem usar o computador.

 

Com o algoritmo escrito, para codificar um programa de computador basta traduzir cada ação descrita nos seus passos em código de alguma linguagem, de programação.

 

Os algoritmos usam o conceito de redução de escopo - ou divisão e conquista (“divide and conquer”), que representa a quebra um problema grande em pedaços menores, mais facilmente gerenciáveis e resolvidos de forma mais simples e direta. Essa redução de escopo também pode ser chamada de refinamento sucessivo.

 

Além disso, outra técnica que ajuda MUITO na resolução de problemas é o uso de desenhos e diagramas, que representam o problema a ser resolvido.

 

E, como última ferramenta tratada, mas primordial desde o início, a interpretação de textos. Ou seja, a leitura atenta do enunciado do problema e seus requisitos para permitir a extração dos dados que serão usados na solução.

 

 

2 – O entendimento do problema

 

image


A solução de um problema começa pela leitura do seu enunciado, e compreende a compreensão do problema, a identificação dos seus requisitos, dos dados fornecidos e das respostas pedidas. A leitura atenta do enunciado permite identificar cada uma destas partes. Até aqui, o conhecimento de português e interpretação de textos é a ferramenta principal.

 

Só que o entendimento pode ser facilitado com o uso de outras ferramentas como anotações e desenhos. Isso pode ser feito de forma manual ou usando algum programa/aplicativo. 

 

Agora, uma pausa para uma historinha pessoal.

 

Nos anos de 1983 e 1984, eu fui professor de Física do 2º Grau (o Ensino Médio atual). Eu ainda estava cursando graduação em Engenharia Elétrica, mas decidi experimentar aquela atividade que eu tanto admirava nos meus professores, a de ensinar!

 

Eu logo notei que os alunos cometiam erros grosseiros nos exercícios da matéria e considerei que Física devia ser difícil para eles.

 

A princípio, eu achei que era falta de base da Física mesmo, depois vi que era também dificuldade em Matemática. Ao longo do tempo, eu comprovei que a dificuldade já começava na língua portuguesa, na interpretação de textos!

 

Eles tinham dificuldade de entender o enunciado, o que era pedido, de lembrar das equações que regiam os problemas, e erravam os cálculos, dando respostas erradas.

 

Assim, eu precisei ensiná-los como resolver um problema, partindo do zero.

 

Eu dei aulas, nível Massinha 1, sobre resolução de problemas e fiz um algoritmo, na forma de um checklist, parecido com esse:

1. Ler o enunciado até o entendimento claro do problema e do resultado pedido;

2. Fazer um diagrama do problema, com um desenho à mão livre;

3. Listar as tarefas básicas necessárias para se chegar à solução;

4. Extrair os dados informados no enunciado e indicar o dado pedido;

5. Listar as possíveis fórmulas usadas para a resolução do problema;

6. Escolher as fórmulas e a sequência de aplicação delas para fazer os cálculos;

7. Substituir os valores dos dados para chegar a resultados intermediários e o resultado final;

8. Em uma linha final, responder ao questionamento pedido para o problema;

9. Grifar essa última linha (circundar, sublinhar, desenhar uma seta, etc.)

 

Os passos de 1 a 4 representam o entendimento do problema. Apenas os passos 4 a 6 dizem respeito aos conhecimentos da Física. O passo 7 tem a ver com a Matemática. O passo 8 também tem a ver com o entendimento do que é o problema e o passo 9 mostra com clareza onde está a sua resposta.

 

Então, para a resolução de um problema de Física, nem tudo é relacionado à Física propriamente dita, mas ao entendimento do que se pede e aos cálculos que serão realizados.

 

A quebra do problema inicial em passos menores é o que chamamos de divisão e conquista, pois a solução dos problemas menores sempre é mais fácil do que tentar resolver tudo de uma vez só. Além disso, para quem costuma procrastinar ao ver desafios grandes, encarar cada parte menor do desafio inicial dá um ânimo extra e já começar a resolver!

 

O entendimento do problema visa descobrir quais informações são dadas e quais são pedidas, quantidades que deverão virar variáveis das fórmulas matemáticas que serão usadas para os cálculos, bem como alguns detalhes implícitos no texto do enunciado, palavras modificadoras importantes (sempre, algum, nenhum, nunca, o maior, o menor, o dobro, o triplo, etc.).

 

O desenho ou diagrama ajuda a ter uma visão geral do problema, sua execução e da interação entre os elementos.

 

As equações possíveis facilitam a escolha de quais usar para cada tipo de problema.

 

Os cálculos darão o resultado pedido.

 

E a resposta final indicará o dado pedido em um espaço único.

 

O principal objetivo dessa lista de ações é torná-las um hábito na resolução de problemas, de modo que o aluno não precise recorrer a ela no futuro, após algumas aplicações. Aliás, o uso de checklists é muito útil para se automatizar processos. Eu adoro checklists e fluxogramas!

 

 

3 – A ajuda dos desenhos e rascunhos

 

image 


Um texto puro e seco, sem nenhuma figura ou diagrama, precisa de muita explicação para ser claro o suficiente e não deixar dúvidas sobre o seu entendimento. Muitas vezes, uma figura, diagrama ou gráfico torna claro um bloco inteiro de texto.

 

No caso de problemas de Física, que envolvem movimentos, interações entre objetos e associação de grandezas, ilustrações são essenciais.

 

Mesmo que seja um desenho rústico, nada artístico, um rabisco mesmo, feito com caneta e papel, ainda ajuda mais do que apenas ler uma parede de texto. Por exemplo, veja se a questão a seguir fica totalmente clara para ser resolvida diretamente:

 

Um trem de 60 m de comprimento, viajando a 72 Km/h, vai passar por um túnel de 400 m. Quanto tempo o trem levará para passar pelo túnel?

 

 

Na matemática é a mesma coisa, questões relacionadas a cálculos, geometria ou lógica matemática ficam muito mais claras com uma figura ilustrativa do que apenas com o enunciado do problema. Um exemplo é a questão seguinte:

 

Um quadrado é dividido em 2 retângulos iguais por uma linha horizontal. Qual o ângulo que a diagonal de um dos retângulos formados faz com a sua base?

a) 45°            b) 26,5º                    c) 30°                        d) 30,5°

e) depende do tamanho do lado 

 

 

No caso da programação, eu tenho visto muitos alunos aqui da DIO querendo tirar dúvidas sobre os desafios de código no Discord, nos fóruns e na área de artigos, com dúvidas no entendimento dos enunciados. Um exemplo típico de problema de programação é a Torre de Hanói:

 

Dada uma Torre de Hanói com 3 discos, escreva um programa para transferir a pilha de discos da primeira para a terceira torre, seguindo a regra de nunca colocar um disco maior sobre um menor.

 

Você consegue resolver estes problemas sem fazer um desenho?

 

 

4 – Como um desenho pode ajudar no entendimento

 

Aqui vão alguns desenhos que eu fiz à mão, que poderiam ajudar na solução dos problemas exemplificados na seção anterior.

 

Física - Um trem de 60 m de comprimento, viajando a 72 Km/h, vai passar por um túnel de 400 m. Quanto tempo o trem levará para passar pelo túnel?

 

image


  

Matemática - Um quadrado é dividido em 2 retângulos por uma linha horizontal. Qual o ângulo que a diagonal de um dos retângulos formados faz com a sua base?

 

 image



Programação - Dada uma Torre de Hanói com 3 discos, escreva um programa para transferir a pilha de discos da primeira torre para a terceira torre, seguindo a regra de sempre colocar um disco menor sobre um maior.

 

image


 

E aí, ficou mais fácil de entender os problemas após os desenhos?

 

  

5 – Acompanhamento da execução de um programa

 

 

image


Os desenhos e diagramas que foram citados anteriormente ajudam no entendimento do problema a ser representado por um algoritmo (ou visualmente por um fluxograma) que deve ser codificado em alguma linguagem de programação.

 

Como exemplo, vamos ver o seguinte problema:

 

Dado um número inteiro, escreva um código que calcule o seu quadrado, se ele for positivo, e calcule o seu cubo, se ele for negativo. No final, escreva o valor lido e o valor calculado. Se o número for zero, escreva zero na saída.

 

a) O entendimento do problema fica mais claro com um diagrama (os números mostrados são apenas exemplos):

 

image


b) Agora, vamos elaborar um algoritmo para a solução:

  1. Ler o número de entrada;
  2. Testar se o número é positivo, negativo ou zero;
  3. Se for positivo, a solução é o quadrado desse número;
  4.        Se for negativo, a solução é o cubo desse número;
  5.        Se for zero, a solução tem o mesmo valor da entrada
  6. Escrever o valor de entrada
  7. Escrever o valor do resultado

 

c) Atribuindo variáveis para os valores do algoritmo:

 

Número de entrada: num

Número do resultado: result

 

d) Traduzindo o algoritmo em pseudo-código:

ler num

result = 0

se (num > 0) // o número é positivo!

                       result = num * num

se (num < 0) // o número é negativo!

                       result = num * num * num

escrever(num)

escrever(result)

 

 

Ficou claro como se parte do enunciado de um problema e se chega à solução codificada?

 

O que falta agora? Qual é o próximo passo? Bem, no meu tempo, antes de submeter o código ao computador, a gente fazia um teste de mesa para simular a execução do programa.

 

E o que é um teste de mesa????

 

Bem, isso é assunto para o próximo artigo!

 

 

6 – Considerações finais

 

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Desta vez, foi apresentado um método simples e direto para facilitar o entendimento de um problema e chegar à sua solução.

 

Inicialmente, foram mostradas algumas técnicas para melhorar o entendimento de problemas e a implementação das soluções, inclusive usando o computador. Estas técnicas são a elaboração de algoritmos, aplicando o método da divisão e conquista, o uso de desenhos e a interpretação atenta do texto dos enunciados.

 

No final, com o algoritmo criado, fica bem direto se chegar à codificação em qualquer linguagem de programação. O próximo passo natural seria executar o programa em alguma IDE e realizar a sua depuração.

 

No entanto, no meu tempo de aprendizado da programação, lá nos anos 80, a gente ainda aplicava uma técnica manual para fazer a simulação do acompanhamento da execução do programa, antes de entregá-lo para a compilação e execução.

 

Era o teste de mesa, ainda usado hoje em algumas situações. Esse é o tema do próximo artigo.

 

Obrigado por ler até aqui, até o próximo artigo!

 

  

7 – Referências

 

Todo o conteúdo deste artigo foi tirado do que eu aprendi (e me lembro) sobre o assunto desde o início da minha carreira como programador, desde os anos 80 até agora. Por isso, não vou listar nenhum a referência de livros nem de sites.

  

 

Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )

 

Compartilhe
Comentários (0)