image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Fernando Araujo
Fernando Araujo18/11/2024 09:05
Compartilhe

<Direto ao Ponto 60> Codificando um algoritmo em várias linguagens

  • #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 da codificação de um algoritmo em qualquer linguagem, ou seja, eu vou mostrar a importância de se elaborar um algoritmo antes de codificar uma tarefa.

 

Sumário

1.   Introdução

2.  Os algoritmos computacionais

3.  Dividindo um algoritmo em blocos funcionais

4. Criando um algoritmo para uma aplicação simples

5.  Codificando o algoritmo em linguagens de programação

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

 

Neste artigo, será tratada a codificação de um algoritmo em qualquer linguagem.

 

Primeiro, serão apresentados conceitos básicos dos algoritmos. Depois, será elaborado um algoritmo básico para uma aplicação simples.

 

Finalmente, serão apresentados códigos que implementam o algoritmo criado, usando várias linguagens diferentes.

 

Resumindo, eu vou mostrar a importância de se elaborar um algoritmo antes de codificar uma tarefa.

 

2 – Os algoritmos computacionais

 

Um algoritmo computacional é composto por uma sequência ordenada de passos para se resolver uma determinada tarefa.

 

A codificação de um algoritmo compreende a tradução de cada passo nas instruções oferecidas por uma linguagem de programação, com suas estruturas, palavras-chave, sintaxe, tipos de variáveis etc.

 

Pode ser que uma linguagem não ofereça as estruturas para a implementação direta do algoritmo, mas as instruções oferecidas por ela vão permitir a codificação do algoritmo de alguma forma.

 

Esta forma pode ser diferente da codificação do mesmo algoritmo com outra linguagem de programação.

 

De qualquer modo, tendo-se o algoritmo, pode-se codificá-lo em qualquer linguagem de programação moderna, principalmente se ela permitir o tipo estruturado (procedural).

 

 

3 – Dividindo um algoritmo em blocos funcionais

 

image


Os passos de um algoritmo podem ser executados de várias formas, embora os blocos primitivos sejam agrupados sequencialmente.

 

Os blocos primitivos podem ser:

·        Bloco sequencial – cada bloco é executado em sequência ao anterior;

·        Bloco de seleção – o bloco define mais de um caminho para a execução dos passos;

·        Bloco de repetição – o mesmo grupo de passos pode se repetir algumas vezes;

·        Bloco de procedimento – agrupa um conjunto de passos que pode ser executado quando chamado;

 

Os passos sequenciais são aqueles relacionados com inicialização de valores, pedidos de ações do usuário, mensagens enviadas para o usuário, cálculos, atribuições de valores a variáveis e chamadas a procedimentos, por exemplo.

 

Os passos de seleção indicam escolhas de caminhos que dependem de uma decisão a tomar.

 

Os passos de repetição são aqueles que repetem o mesmo grupo de passos um número de vezes, que pode ter uma quantidade determinada ou depender de alguma condição testada a cada iteração.

 

Os passos de um procedimento são realizados cada vez que forem ativados, podendo gerar algum valor de retorno ou não. São codificados por funções ou procedimentos.

 

 

4 – Criando um algoritmo para uma aplicação simples

 

Para exemplificar a codificação de um algoritmo por uma linguagem de programação, vamos criar um algoritmo para uma tarefa simples.

 

Por exemplo, vamos implementar um jogo de adivinhar um número secreto, já utilizado em um artigo anterior, no qual eu falei da linguagem Scratch.

 

1.   Gere um número secreto aleatório entre 1 e 20;

2.   Defina o número máximo de tentativas (5);

 

3.   Repita os passos abaixo até o jogador acertar ou o número de tentativas ultrapassar 5:

a.   Se o número máximo de tentativas for atingido:

                                         i.   Informe que ele não acertou e mostre o número secreto;

 

b.   Informe um número (entre 1 e 20);

                                         i.   Se o palpite for incorreto, informe se o palpite é maior ou menor que o número secreto;

 

                                       ii.   Se o palpite estiver correto, informe ao jogador que ele acertou e encerre o jogo.

 

Representando este algoritmo por blocos, temos:


image



Segue um fluxograma para estes passos do algoritmo:

 

image

 

 

5 – Codificando o algoritmo em linguagens de programação

 

image


A princípio, um algoritmo estabelece os passos para a realização de uma determinada tarefa, sem especificar os detalhes da sua implementação.

 

Esta implementação pode nem ser realizada por um computador, mas por uma pessoa que fará a tarefa. Isso é assunto de Sistemas de Informação.

 

Caso ele seja implementado no computador, a princípio, qualquer linguagem de programação poderá ser usada. Cada uma terá sua própria sintaxe e comandos disponíveis para a codificação.

 

É muito adequado que todas partam da mesma base única, o algoritmo. Acredito que não seria prático codificar um programa para resolver um problema e, depois de um tempo, partir deste código para implementá-lo em outra linguagem.

 

Como comparação, imagine que você é brasileiro e sabe falar inglês, francês e alemão. Traduzir um texto longo em inglês para francês diretamente e depois para alemão, seria uma tarefa bem complexa, por conta das especificidades de cada idioma.

 

Seria muito mais fácil traduzi-lo para o português primeiro e, partindo deste, traduzi-lo para francês, alemão e outros idiomas. O português você já domina e ele serviria de base para traduções diversas.

 

É o mesmo caso do algoritmo. É melhor criar um algoritmo que realize a tarefa e sirva como base para diversas codificações em várias linguagens de programação.

 

Pensando nisso, seguem codificações do algoritmo criado anteriormente para o jogo do número secreto em 4 linguagens de programação (Python, C, C++ e Java) que eu escolhi. Na verdade, eu também tinha criado códigos em outras linguagens (FORTRAN, COBOL, PHP, Pascal, Javascript, C#, Kotlin e Go), mas cortei por simplificação do artigo e didática.

Todos os códigos abaixo foram testados e funcionaram perfeitamente.

 

 

I - Exemplo em Python:


import random

 

# Função do jogo do número secreto

def jogo_numero_secreto():

   

   maxNum = 20

   numero_secreto = random.randint(1, maxNum)

   max_tentativas = 5

   tentativas = 0

 

   print("Bem-vindo ao jogo do Número Secreto!")

   print(f"Você tem {max_tentativas} tentativas para adivinhar o número secreto, entre 1 e {maxNum}")

 

   while tentativas < max_tentativas:

       palpite = int(input(f"Informe o seu palpite (entre 1 e {maxNum}): "))

 

       if palpite < 1 or palpite > maxNum:

           print(f"O número deve estar entre 1 e {maxNum}")

           continue

 

       tentativas += 1

 

       if palpite == numero_secreto:

           print(f"Uau! Você ACERTOU o número secreto {numero_secreto} em {tentativas} tentativas")

           break

       elif palpite < numero_secreto:

           print("Seu palpite é MENOR que o número secreto")

       else:

           print("Seu palpite é MAIOR que o número secreto")

 

       if tentativas == max_tentativas:

           print(f"Oops! Você não acertou o número secreto, que era {numero_secreto}")

 

# Executa o jogo

jogo_numero_secreto()

 

 

II - Exemplo em C:

 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

// Função do jogo do número secreto

int jogo_numero_secreto() {

   int numero_secreto, palpite, tentativas = 0;

   const int max_tentativas = 5, max_num = 20;

 

   srand(time(0)); 

   numero_secreto = rand() % max_num + 1;

 

   printf("Bem-vindo ao jogo do Número Secreto!\n");

   printf("Você tem %d tentativas para adivinhar o número secreto, entre 1 e %d\n", max_tentativas, max_num);

 

   while (tentativas < max_tentativas) {

       printf("Informe seu palpite (entre 1 e %d): ", max_num);

       scanf("%d", &palpite);

       if ((palpite < 1) || (palpite > max_num)){

           printf("O número deve estar entre 1 e %d\n", max_num);

           continue;

       }

 

 

       tentativas++;

 

       if (palpite == numero_secreto) {

           printf("Uau! Você ACERTOU o número secreto %d em %d tentativas.\n", numero_secreto, tentativas);

           break;

       } else if (palpite < numero_secreto) {

           printf("Seu palpite e MENOR que o número secreto.\n");

       } else {

           printf("Seu palpite e MAIOR que o número secreto.\n");

       }

 

       if (tentativas == max_tentativas) {

           printf("Oops! Você não acertou o número secreto, que era %d.\n", numero_secreto);

       }

   }

 

   return 0;

}

 

 

// Executa o jogo

int main(){

 

 jogo_numero_secreto();

 return(0);

}

A figura a seguir mostra a relação entre os passos do algoritmo criado e as instruções das 2 linguagens (Python e C) usadas para implementá-lo. As instruções formatadas em cores codificam os passos exatos do algoritmo, já as outras são instruções adicionais ou caracteres da sintaxe específica de cada linguagem:

 

image


 

III - Exemplo em C++:

 

#include <iostream>

#include <cstdlib>

#include <ctime>

 

using namespace std;

 

// Programa principal que executa o jogo

int main() {

   srand(time(0));

   int max_num = 20;

   int max_tentativas = 5;

   int tentativas = 0;

   int numero_secreto = rand() % max_num + 1;

 

   cout << "Bem-vindo ao jogo do Número Secreto!" << endl;

   cout << "Você tem " << max_tentativas << " tentativas para adivinhar o número secreto, entre 1 e " << max_num << endl;

 

   while (tentativas < max_tentativas) {

       int palpite;

       cout << "Informe seu palpite (entre 1 e " << max_num << "): ";

       cin >> palpite;

 

       if ((palpite < 1) || (palpite > max_num)){

           cout << "O número deve estar entre 1 e " << max_num << endl;

           continue;

       }

 

 

       tentativas++;

 

       if (palpite == numero_secreto) {

           cout << " Uau! Você ACERTOU o número secreto " << numero_secreto << " em " << tentativas << " tentativas." << endl;

           break;

       } else if (palpite < numero_secreto) {

           cout << "Seu palpite é MENOR que o número secreto." << endl;

       } else {

           cout << "Seu palpite é MAIOR que o número secreto." << endl;

       }

 

       if (tentativas == max_tentativas) {

           cout << "Oops! Você não acertou o número secreto, que era " << numero_secreto << "." << endl;

       }

   }

   return 0;

}

 

 

IV - Exemplo em Java:

 

import java.util.Scanner;

import java.util.Random;

 

// Classe principal que executa o jogo

public class Main {

   public static void main(String[] args) {

       int maxTentativas = 5;

       int tentativas = 0;

       int maxNum = 20;

       Random random = new Random();

       int numeroSecreto = random.nextInt(maxNum) + 1;

 

       Scanner scanner = new Scanner(System.in);

 

       System.out.println("Bem-vindo ao jogo do Número Secreto!");

 

       System.out.println("Você tem " + maxTentativas + " tentativas para adivinhar o número secreto, entre 1 e " + maxNum);

 

       while (tentativas < maxTentativas) {

           System.out.print("Informe seu palpite (entre 1 e " + maxNum + "): ");

           int palpite = scanner.nextInt();

 

           if (palpite < 1 || palpite > maxNum){

               System.out.println("O número deve estar entre 1 e " + maxNum);

               continue;

           }

 

 

           tentativas++;

 

           if (palpite == numeroSecreto) {

               System.out.println("Uau! Você ACERTOU o número secreto " + numeroSecreto + " em " + tentativas + " tentativas.");

               break;

           } else if (palpite < numeroSecreto) {

               System.out.println("Seu palpite é MENOR que o número secreto.");

           } else {

               System.out.println("Seu palpite é MAIOR que o número secreto.");

           }

 

           if (tentativas == maxTentativas) {

               System.out.println("Oops! Você não acertou o número secreto, que era " + numeroSecreto + ".");

           }

       }

       scanner.close();

   }

}

 

Esta outra figura mostra a relação entre os passos do algoritmo criado e as instruções de mais 2 linguagens (C++ e Java) usadas para implementá-lo. As instruções formatadas em cores codificam os passos exatos do algoritmo, já as outras são instruções adicionais ou caracteres da sintaxe específica de cada linguagem:

 

image


 

6 – Considerações finais

 

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO.

 

Desta vez, foi mostrado como um mesmo algoritmo pode ser codificado em qualquer linguagem de programação. A ideia é reforçar a importância de se elaborar um algoritmo antes de codificar uma tarefa.

 

Inicialmente, foram apresentados os conceitos básicos de um algoritmo computacional, que consiste de uma sequência ordenada de passos para se resolver uma tarefa.

 

Ele é composto de blocos que são executados sequencialmente, um por um. Ele é composto de blocos sequenciais, de seleção, de repetição e de procedimento (ou de função).

 

Uma linguagem de programação apenas traduz cada bloco em instruções fornecidas, com base na sua própria sintaxe e estrutura de dados oferecidas.

 

Um algoritmo funciona como uma mesma base única, permitindo que cada linguagem o adapte para uma codificação possível pela linguagem.

 

Foi criado um algoritmo básico para o conhecido jogo de adivinhar um número secreto.

 

Finalmente, foram apresentados códigos para implementar o algoritmo criado em 4 linguagens diferentes: Python, C, C++ e Java.

 

Eu ainda criei códigos para outras linguagens, mas por simplificação didática, só deixei estas 4 citadas.

 

No próximo artigo, eu vou tratar dos microprocessadores, coração dos computadores e dos equipamentos eletrônicos modernos.

 

 

7 – Referências

 

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

 

Os códigos implementados foram consultados no ChatGPT. Depois, eles foram adaptados por mim e todos foram testados e executaram com sucesso.

 

 

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

Compartilhe
Comentários (3)

AT

André Terceiro - 18/11/2024 09:47

Eu fiz um Jankenpo em várias plataformas / linguagens de programação :)


https://www.terceiro.com.br/jankenpo.html

Fernando Araujo
Fernando Araujo - 18/11/2024 09:41

Opa, Deivson.

Esse é um dos objetivos dos artigos desta série.

Juntar conceitos essenciais de programação muitas vezes negligenciados pelos programadores.

A base é tudo!!

:-)


Deivson Soares
Deivson Soares - 18/11/2024 09:30

Obg, Fernando por este artigo! Vejo que terei sempre que estar estudando para me atualizar, nesta área.