Lógica de Programação
No Desafio 1, você estudou como descrever e representar a sequência de passos lógicos ou algoritmos necessários para a execução de uma tarefa em qualquer sistema, seja um software, aplicativo, site etc.
Agora, nesta etapa, você irá mergulhar na parte computacional e conhecerá os recursos e comandos para resolver o Desafio 2:
Para isso, você estudará os seguintes conteúdos:
Agora que já sabemos o que é um algoritmo, precisamos conhecer algumas técnicas de programação.
Técnicas de programação são conceitos, recursos e boas práticas para o desenvolvimento de programas de computadores.
Com as técnicas de programação, como sintaxe e recursos específicos ou comuns entre as linguagens de programação, podemos criar as soluções para os nossos projetos, produtos e/ou serviços.
As técnicas de programação que abordaremos agora são:
Os dados são todas as informações relevantes para a programação que devem ser armazenadas, pois serão usadas durante a execução do algoritmo ou programa.
Os dados podem ser de vários tipos, como caracteres ou números. Isso varia de acordo com o sistema operacional e a linguagem de programação usada.
Vamos conhecer três tipos de dados comuns para exemplificar.
Clique nas abas para ver os tipos de dados.
Estruturas de dados definem a organização e suas operações (métodos de acesso) sobre um determinado conjunto de informações. Essa organização permite um melhor processamento e é usada para grandes volumes de dados.
Por exemplo: você deseja armazenar o nome de todos os alunos da sua turma. O sistema deve definir a organização (como salvar) e, consequentemente, o acesso ao conjunto de operações sobre esses dados (inserir ou remover um aluno, editar um nome ou trocar a posição de um dado).
Há vários tipos de estrutura de dados.
Clique nas abas para conhecer as mais comuns.
Uma lista armazena dados do mesmo tipo em sequência. Os dados não precisam estar necessariamente armazenados em sequência física na memória do computador, mas há uma sequência lógica entre eles. Cada elemento da lista é chamado de nó.
Em uma lista sequencial ou contígua, os nós estão em sequência lógica e física. Em uma lista encadeada, não há a necessidade da sequência física, apenas a sequência lógica deve ser mantida e o último nó é uma célula nula.
As listas são subdivididas em filas, pilhas e vetores, dependendo do acesso aos nós.
A fila é uma estrutura do tipo first in first out (FIFO), na qual o primeiro elemento a ser inserido será o primeiro a ser retirado. Assim como em uma fila de pessoas, o primeiro que chegou no balcão, será o primeiro a ser atendido, e assim por diante.
A pilha é uma estrutura do tipo last in first out (LIFO). O último elemento a ser inserido será o primeiro elemento a ser retirado. Podemos ter acesso ao topo dessa pilha, inserir um novo item, remover o item corrente. É como uma pilha de pratos: colocamos ou retiramos pratos no topo da pilha.
Um vetor é uma estrutura que armazena uma sequência de objetos do mesmo tipo, em posição consecutiva lógica e física, sendo possível alcançar qualquer item diretamente. Não é necessário passar pelo primeiro ou último elemento.
O valor dos tipos de dados é salvo em uma variável, ou seja, em um espaço de memória do computador.
As variáveis devem ser declaradas com nome, valor e tipo. O nome é atribuído ao declarar a variável. O valor pode ser atribuído ou calculado. O tipo depende do valor e da linguagem da programação usada.
A sintaxe dos comandos, inclusive o da declaração de variáveis, também depende da linguagem de programação usada.
Por exemplo: eu desejo armazenar o valor "Helena" em uma variável de nome "nomeDoEstudante
". Como o valor é formado de caracteres, o tipo da variável deve ser string. No quadro a seguir, temos dois exemplos de declaração de variáveis em duas linguagens de programação diferentes (em preto). O texto em cinza claro são comentários (indicados pelo sinal //) e não fazem parte do comando.
// linguagem X
var nomeDoEstudante: String = "Helena";
// var é a declaração de variável
// nomeDoEstudante é o nome atribuído
// string é o tipo de dado, pois é formado de caracteres
// Helena é o valor
//linguagem Y
$nomedoestudante = 'Helena'
// $ é a declaração de variável
// nomedoestudante é o nome atribuído
// atribui o tipo de acordo com o valor
// Helena é o valor
Durante a execução do algoritmo ou programa, o valor da variável pode mudar. Em um programa que calcula a idade atual de uma pessoa, por exemplo, a variável que guarda o valor da data atual mudará todos os dias.
Caso o valor de uma variável não possa ser alterado, indicamos que ela é uma constante. Como a data de nascimento de uma pessoa, no caso do programa que calcula a idade. Assim como a variável, a declaração da constante varia de acordo com a linguagem de programação usada.
As informações que fornecemos ao computador são os dados de entrada da nossa aplicação, um processamento é feito com base na informação fornecida, e a saída é o resultado a partir do processamento.
Os valores dos dados de entrada e saída são armazenados em variáveis ou constantes. O processamento é feito através da aplicação ou programa de computador, baseado nos algoritmos da programação.
E a partir dessas informações armazenadas, podemos criar condicionais em nosso código de processamento para seguirmos ações distintas em nossa programação.
E, assim como na declaração de variáveis e constantes, a sintaxe para cada condicional depende da linguagem de programação escolhida. Apesar das especificidades de cada linguagem, a lógica de programação é a mesma, ou seja, o planejamento macro do algoritmo é o mesmo, mas a escrita dos comandos é diferente.
Pense Nisso...
Imagine que uma concessionária vai realizar um evento de test drive e o cadastro de participantes é feito através do site. Independentemente da linguagem de programação escolhida para o sistema de cadastro, todas devem atender ao requisito de só aceitar participantes com habilitação permanente de motorista e, consequentemente, maiores de 18 anos.
E se um menor de idade tentar fazer o cadastro? Como fazer essa validação? Vamos aprender?
As estruturas de decisão (também conhecidas como estruturas condicionais) usam comandos de decisão para testar uma ou mais condições e especificam uma instrução (ou um conjunto de instruções) se o resultado do teste for verdadeiro, e outra instrução (ou conjunto de instruções) caso o resultado do teste seja falso.
Em outras palavras, a estrutura de decisão é baseada em uma condição: se a condição for atendida, o programa segue um caminho e, se a condição não for atendida, o programa segue outro caminho. O fluxograma é a representação gráfica de uma estrutura de decisão.
A grosso modo, um comando de decisão especifica uma condição a ser testada e indica uma instrução caso a condição seja atendida e outra instrução caso a condição não seja atendida. A sintaxe do comando varia de acordo com a linguagem de programação usada.
Vamos abordar os comandos mais comuns, que são:
O mais simples dos comandos de decisão aparece nas linguagens de programação como if e pode ser traduzido como "SE". Note que aqui só há instrução caso a condição seja atendida, então não há ação específica e o restante do código é executado.
Clique nas abas abaixo para ver alguns exemplos.
if (condição) comando
SE (senha correta) exibir "bem-vindo"
Var senha = a1234
if (senha = a1234) console.log "bem-vindo"
//console.log é um comando para exibir uma mensagem
Aqui, o comando "SE" vem acompanhado de uma instrução caso a condição não seja atendida, como uma bifurcação no caminho.
Clique nas abas abaixo para ver alguns exemplos.
if (condição) comando
else comando
SE (senha correta) exibir "bem-vindo"
SE NÃO exibir "senha incorreta"
Var senha = a1234
if (senha = a1234) console.log "bem-vindo"
else console.log "senha incorreta"
E caso nenhuma das duas condições seja atendida, podemos utilizar o comando "SE" aninhado.
Clique nas abas abaixo para ver alguns exemplos.
if (condição) comando
else if (condição) comando
else comando
SE (login correto) exibir "digite a senha"
E SE (senha correta) exibir "bem-vindo"
SE NÃO exibir "login ou senha incorretos"
Var login = fulano
Var senha = a1234
if (login = fulano) console.log "digite a senha"
else if (senha = a1234) console.log "bem-vindo"
else console.log "login ou senha incorretos"
Importante
Note que o código só vai verificar o segundo if se o primeiro for atendido, ou seja, só vai verificar se a senha está correta, se o login estiver correto. Se o login estiver incorreto, o código executará o else.
Este comando é muito utilizado quando uma quantidade maior de condições é necessária para ser utilizada em sua aplicação, quando há uma variedade maior na sua quantidade de alternativas necessárias.
Clique nas abas abaixo para ver alguns exemplos.
switch (condição) { caso 1: comando; pare; caso 2: comando; pare; caso 3: comando; pare; padrão: comando; }
verifique (fruta) caso banana: mostrar preço da banana; pare; caso maçã: mostrar preço da maçã; pare; caso uva: mostrar preço da uva; pare; padrão: mostrar "Não temos esse produto";
switch (fruta)
{
case banana:
mostrar "Bananas custam R$10 a dúzia";
break;
case maçã:
mostrar "Maçãs custam R$15 reais a dúzia";
break;
case uva:
mostrar "Uvas custam R$20 o kilo";
break;
default:
mostrar "Não temos essa fruta";
}
Importante
A instrução opcional break associada a cada case garante que o programa saia da condicional switch e execute a instrução que segue logo após o switch. Caso break seja omitido, o programa continua a execução para a próxima instrução dentro de switch.
No exemplo, "fruta" é avaliado como "Bananas", o programa corresponde o valor com o case "Bananas" e executa a instrução associada. Quando break for encontrado, o programa para (break), saindo de switch e executa a instrução localizada após o switch. Se break fosse omitido, a instrução para "Maçãs" também seria executada.
As estruturas de repetição permitem repetir um comando ou um conjunto de instruções, de acordo com uma condição ou um contador.
Essas estruturas têm usos diversos, como tecidos com desenhos em padrão, renderização de estruturas metálicas, jogos em geral, embalagem de produtos em lotes, entre outros.
Pense nisso...
Por exemplo, quero um código para escrever a frase "Eu sou capaz" 10 vezes. Qual dessas opções parece ser melhor?
Digitar dez vezes o mesmo comando
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
Escreva "eu sou capaz"
OU
Usar uma estrutura de repetição
Escreva "eu sou capaz" 10 vezes
Assim como a declaração de variáveis ou os comandos de decisão, a sintaxe das estruturas de repetição depende da linguagem de programação usada.
Vamos abordar três comandos de repetição muito comuns:
Este comando repete a instrução enquanto a condição for verdadeira. Quando a condição passa a ser falsa, os comandos do while não são executados e são executados os comandos após o while. A condição do while deve ser alterada dentro do while, como um contador.
Note que a condição é checada antes da instrução dentro do while.
Clique nas abas abaixo para ver alguns exemplos.
while (condição) {
comando;
altera contador;
}
ENQUANTO (contador < 10) {
escreva "eu sou capaz"
soma + 1 ao contador
}
Var contador = 1
while (contador < 10) {
console.log "eu sou capaz"
contador = contador + 1
}
Assim como o while, este comando repete a instrução enquanto a condição for verdadeira, porém a condição é verificada após a instrução do while. Portanto, se o contador for alterado dentro da instrução, isso afetará a verificação da condição.
O comando do while é usado quando é necessário executar o bloco de instruções interno pelo menos uma vez.
Clique nas abas a seguir para ver os exemplos.
do {
comando
}
while (condição);
FAÇA {
escreva "eu sou capaz"
soma um ao contador
}
ENQUANTO (contador < 10)
Var contador = 1
do {
console.log "eu sou capaz"
contador = contador + 1
}
while (contador < 10)
O comando for é usado para repetir a instrução por um número determinado de vezes. É usado para repetições simples, pois em repetições mais complexas é recomendado usar o while.
É necessário usar uma variável como contador, que sofrerá um acréscimo ou decréscimo ao final do bloco de instruções interno.
Clique nas abas a seguir para ver os exemplos.
for (contador, condição, incremento) {
comando
}
para (contador = 0, contador < 10, contador = contador + 1) {
escreva "eu sou capaz"
}
for (contador = 0, contador < 10, contador++){
console.log "eu sou capaz"
}
1. Assinale a alternativa correta. Qual destes itens é uma estrutura de condição?
Atenção
Selecione uma alternativa.
Parabéns! Resposta correta.
O if é um dos comandos possíveis para especificar uma condição a ser testada.
Ops! Tente novamente!
Lembre-se que um comando de decisão indica uma instrução caso uma condição seja ou não atendida.
Resposta incorreta.
A resposta correta é a alternativa a. O if é um dos comandos possíveis para especificar uma condição a ser testada.
2. Associe corretamente as características do sistemas GIT.
a. && | |
b. ++ | |
c. || | |
d. != | |
e. ! |
3. Marque verdadeiro ou falso para cada alternativa.
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Você percebeu que, para nos auxiliar na criação de algoritmos, usamos as técnicas de programação, como fluxogramas, estruturas de decisão e repetição, além de elementos e conceitos que nos auxiliam na sintaxe dos comandos, como tipos e estrutura de dados, variáveis, constantes e operadores.
No próximo desafio...
Realizaremos a implementação do código, utilizando uma linguagem de programação específica para criar nosso sistema.
Aviso
Parece que você já iniciou o curso, você pode: