quinta-feira, 13 de outubro de 2011

Linguagem de programação

O que é uma linguagem de programação?
Uma linguagem de programação é um método padronizado para expressar instruções para um computador.
Porque programar?
Você pode programar para alcançar inúmeros objetivos, como por exemplo, desenvolver um software, para automatizar tarefas, quem sabe vende-lo e ficar rico! ou melhor ainda, já pensou em criar um jogo de computador? ficar famoso e…. rico!
Você também pode programar para web, desenvolver aplicativos e… se fizer sucesso, hmm… pode ficar rico! rsrs
Sim, a área de tecnologia é um mercado em constante crescimento e com salários iniciais relativamente altos. Se você tem uma paixão em especial por computadores, por que não entender sua linguagem e se comunicar melhor com eles ^^
Então, qual a linguagem que o computador entende?
Na verdade, os computadores não são inteligentes, como todos pensam. Inteligente é o programador!
O computador entende apenas a linguagem binário, ou seja, 1 e 0, ligado ou desligado, tensão alta ou tensão baixa… Não tem meio termo…
Quer dizer que tenho que aprender a programar em 0 e 1?
Negativo. Hoje em dia, temos o que chamamos de compiladores e interpretadores. São eles que fazem essa tradução de nossa linguagem para linguagem de máquina.
Qual a diferença da linguagem compilada para interpretada?

Na linguagem interpretada, o código fonte é traduzido para linguagem de máquina no momento da interpretação (execução), e o código fica visível, enquanto na compilada, este é feito anteriormente, não sendo possível visualizar o código fonte.
Ouvi dizer, que existem linguagens de baixo e alto nível, qual a diferença?
Resumidamente, as linguagens de baixo nível, são aquelas que possuem contato direto com o hardware do computador, geralmente linguagens compiladas, como por exemplo C, C++, Assembly…
Enquanto as linguagens de alto nível o contato é com o software, exemplos são linguagens interpretadas como Python, PHP, JavaScript, Pascal…
VisualG é um dos softwares mais utilizados para interpretação de algoritmos, ele utiliza a linguagem portugol, ou português estruturado, e é o software que utilizaremos aqui no Algoritmizando para criar, testar e corrigir nossos algoritmos criados nos posts da série Aprenda a Programar.
O que é um algoritmo?
Segundo a Wikipédia…
Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita.
Ok Bruno… Agora traduz!!!
O algoritmo, é uma instrução, ou uma ordem que você dará ao computador, para que ele realize determinada tarefa. Ao contrário do que a maioria das pessoas pensam, o computador não é inteligente, quem é inteligente, é o programador!
Simplificando…
Para que o computador entenda algo, é necessário que você o “ensine” passo-a-passo, como deve proceder. Como em uma receita de bolo.
Um exemplo:
Em nossa linguagem, se eu fosse criar um algoritmo explicando o que acontece quando acordo até o momento que entro no chuveiro, seria mais ou menos o seguinte:
Inicio
Bruno Barbosa desperta
abre os olhos
senta na cama
coloca o primeiro pé no chão
põe o segundo
fica de pé
anda até a sala de estar
chuta com o mindinho do pé a ponta do sofá
diz algumas palavras de baixo calão devido ter machucado muito
continua caminhando
entra no banheiro
fica nu (ui)
entra em baixo do chuveiro
liga o chuveiro
toma banho
FIM
Pode-se perceber então, que tudo é um algoritmo.
O sistema de buscas do Google, tem um algoritmo por trás dele, o msn que vocês tanto gostam, também tem um algoritmo, e assim sucessivamente.
Para aprendermos melhor sobre isto, antes de passar para qualquer tipo de linguagem de programação propriamente dita, iremos aprender a programar em uma pseudo-linguagem, conhecida como Portugol ou Português Estruturado.
Portugol
O portugol, é uma pseudo-linguagem criada para facilitar o aprendizado de algoritmos e lógica de programação, ela possui suas particularidades como qualquer outra linguagem, e a partir do próximo post, iremos passar a “programar” nesta linguagem, utilizando a ajuda do software VisualG. Então não percam e nos acompanhem, que toda terça, um post novo para você aprender a programar!
Variáveis…
Sim, variáveis.
E para quem ainda não sabe, em programação, o uso da matemática é relativamente alto e é importante também, que você possua um bom raciocínio lógico. Sabe aquela matéria de lógica matemática, que você aprendeu no ensino médio, fundamental, ou qualquer que seja… poisé, ela é bastante útil aqui!
Mas o que são variáveis em programação?

Desenho de como seria uma variável












Vamos entender variável, como uma caixa, na qual você pode dar o nome que lhe achar conveniente, e guardar o conteúdo que desejar.
Ou seja, toda variável tem um nome, valor e tipo.
Mas você não falou de tipo, o que é isso?
As variáveis, podem sem classificadas em:
•    numérica (numeros reais ou inteiros);
•    caracteres (sequências de texto);
•    booleanas (verdadeiro ou falso);
Em portugol, temos os tipos: real, inteiro, caractere e logico
Então eu posso colocar qualquer nome em minha variável?
Como assim?
Certas palavras, são reservadas para o uso da linguagem, ou seja, essas palavras não podem ser utilizadas como um nome para sua variável, pois haveria um conflito na hora de interpretar o código.

Abaixo, uma tabela sobre as palavras reservadas do portugol:
Palavras reservadas do Portugol
Não se preocupe em decorar essa tabela, não é necessário! A medida em que você for aprendendo a programar em portugol, você saberá exatamente qual palavra é, e qual não é reservada pela linguagem.
Outras restrições para o nome de sua variável é:
  • O primeiro caractere de sua variável, deve ser necessariamente letra ou underline ‘_’. Não pode começar em números
  • Nomes de variáveis não podem ter espaços em branco. Nada de Coca Cola por exemplo. Uma variável correta seria ArgoHost, tudo junto e sem espaços.
  • Essa aqui chega a ser difícil… Não é permitido variáveis com mais de 127 caracteres (pasmem! quem criaria uma variável desse tamanho?)
  • E por fim, em Portugol, diferente de outras linguagens de programação, as variáveis não são case sensivity, ou seja, elas não diferenciam maiúsculas de minúsculas. Logo, BrUnO = bruno.

Um pouco mais sobre os tipos de variáveis…

A tabela abaixo, exemplifica que tipo de conteúdo vai em cada variável.

Estrutura do portugol…

Todo e qualquer algoritmo, terá sempre um Nome, Declaração de variáveis, Início e Fim. Na estrutura abaixo:

Algoritmo “nome-do-seu-algoritmo”

VAR
nome-da-var: tipo
nome-da-var2: tipo
INICIO
|
|
|
|
FIMALGORITMO

Ok, entendi o “Nome” “Início” e “Fim” mas…

O que é declaração de variáveis?

A declaração de variáveis, é uma parte obrigatória no portugol, assim como em outras linguagens de programação como C por exemplo.
Ela é necessária para que o interpretador entenda que aquela palavra é uma variável, além de ser útil em muitos casos, para que não dê um erro em seu programa futuramente devido a um erro de digitação, acusando de imediato onde está o erro.
Na estrutura do Portugol, dentro da seção VAR, declaramos a variável da seguinte maneira:
Nome-da-var: tipo
ex:
meunome: caractere
Ainda sobre a questão de variáveis, não vou entrar em muitos detalhes, pois as mesmas foram explicadas no post anterior.
Vamos então criar nosso primeiro programa

Na tela Inicial do VisualG, já temos a estrutura de nosso portugol pronta,
Então vamos lá.
algoritmo “Treinamento”
var
inicio
escreva ("Processamento de Dados")
fimalgoritmo
Apos digitar este código e apertar F9, o código será executado, e você verá que estará escrito na tela apenas a frase: Processamento de Dados

O que é esse "escreva"?

É escrever na tela o texto entre ("  ") (aspas) e permanecer com o cursor no final da linha.
O que é esse "escreval"?
É escreve na tela o texto entre ( " ") (aspas) e passa o cursor para linha seguinte.
Um  ponto importante na ferramenta visualg é que após o fim de cada comando não precisamos colocar dois pontos, como na linguagem C, pois do contrário acarretará erro. Além disso, o visualg não reconhece nome de função, procedimento ou variável acentuadas.

E porquê não há nada no campo das variáveis?

Porque ainda não utilizamos nenhuma.
No código acima, como vocês podem ver, foi utilizado apenas um minúsculo pedaço do que podemos fazer em portugol.
No algoritmo a seguir, vamos fazer o uso da função leia() e de variáveis.
algoritmo “leianumero”                                 
var
num: inteiro
inicio
escreva(“Digite um número: “)
leia(num)
escreva(“O número digitado é: “, num)
fimalgoritmo

Entendendo o algoritmo…

Foi declarado a variável num, como inteiro. Ou seja, poderá receber qualquer número não-fracionário (-2, -3, -20, 0, 1, 2, 40, 18…)
Em seguida, o algoritmo irá solicitar ao usuário que digite um número, escrevendo na tela a seguinte frase: Digite um número:
Se vocês notarem, há um espaço após os : e antes da “, isso é necessário para que o cursor dê o espaço desejado.

o computador não é inteligente, ou seja, você tem que explicar tudo a ele, passo a passo.
O leia(num) irá aguardar com o cursor na tela até que o usuário digite um número inteiro e tecle enter.
O num é a variável que declaramos no início do algoritmo, lembram?
E finalmente, o resultado.
escreva(“O número digitado é: “, num)
É importante notar, que no escreva, tudo o que estiver entre aspas, vai ser tratado como um texto qualquer, então para retornarmos o conteúdo de uma variável, fechamos primeiro as aspas, colocamos uma vírgula e digitamos o nome da variável, para só então fechar o parenteses.
Testem o algoritmo acima no VisualG, e vejam o resultado.

escrever uma mensagem ao usuário, e inserção de dados a partir de interação com o leitor, como no exemplo abaixo:
algoritmo “exemplo”
var
empresa: caractere
inicio
escreva(“Que empresa oferece hospedagem de sites pelo melhor custo/benefício? “)
leia(empresa)
escreva(“Você digitou: “,empresa)
fimalgoritmo

e se por acaso, eu precisar atribuir um valor á uma variável sem a interação do leitor Bruno?

Veremos agora, logo abaixo…

Atribuição…

Utilizaremos este símbolo/sinal/setinha…, para atribuir um valor a uma variável: <-
Exemplo:
numero <- 10
id <- 18

e também, podemos atribuir a uma variável, o valor de outra variável.

Não entendi nada…

Por exemplo, eu tenho a variável x, que possui o valor 20, e também a variável id, que pode conter, ou não algum valor.
A questão é que eu quero atribuir a variável id, o valor da variável x
como seria?
simples…
id <- x

Resumindo…

Para atribuir um valor qualquer a uma variável, basta digitar o nome da variável, seguida de uma seta para esquerda, seguido do valor que você quer que ela tenha…

Bruno, entendi essa parte, mas quero fazer mais do que escrever e ler dados em meu algoritmo…

Ok, vocês é quem mandam!
Nem tudo na vida, é sequencial, ou seja, é possível resolver apenas de uma maneira. As vezes, é preciso haver condições para executar determinada tarefa, assim como efetuar operações matemáticas, e outros…
Nesse caso, utilizaremos operações matemáticas, condicionais, laços de repetições, etc.
Não se assustem, veremos cada um passo-a-passo, não é difícil!

Operadores aritméticos…

Para se realizar cálculos com variáveis, ou números definidos pelo programador, utilizaremos alguns sinais já bastante conhecidos por todos vocês:
Para entender os operadores aritméticos, é importante ressaltar, antes de mais nada, que como estamos “ensinando” algo para o computador, não podemos e não temos como passar para ele do jeito que escrevemos…
Por exemplo, em uma fórmula matemática, teríamos que passar tudo para uma linha apenas. É o que chamamos de linearização.
Vocês irão entender melhor ao visualizar a imagem abaixo:

E de onde saiu todos esses parênteses e “símbolos”?

Calma galera, de uma olhada na tabela abaixo, dos operadores aritméticos, e ficará mais fácil o entendimento…
 

Operadores relacionais…

Os operadores relacionais, servem para realizar a comparação entre duas expressões, e resultam apenas um valor… Verdadeiro ou Falso.
Observem a tabela abaixo:

 
Vamos ver a aplicação desses operadores em uma tabela verdade.


 
Entenderam como eles funcionam? Bem simples não?

Então vamos complicar mais um pouco…

No desenvolvimento de um programa, nem tudo são flores, ou seja, vamos colocar nossa cabeça para pensar…
As vezes é necessário juntar, dois ou mais operadores diferentes para conseguir um resultado…
Por exemplo:
(2 + 2 < 5) e (18 <> 18) resulta FALSO, pois como podemos observar na tabela verdade acima, Verdadeiro e Falso resulta Falso.

Ah… então eu tenho que decorar essa tabela verdade?

Não!
Um macete para vocês…
  • No operador E: Será verdadeiro quando as duas expressões forem verdadeiras.
  • No operador Ou: Será verdadeiro quando qualquer uma das expressões forem verdadeiras.
Logo,
  • Se houver UMA expressão falsa no operador E, o resultado sempre será FALSO.
  • No operador OU, será FALSO apenas quando as duas expressões forem FALSAS.

Difícil? Não, basta um pouco de treino…

Que tal responder á alguns desafios? retornando o resultado da expressão, sendo ele, Verdadeiro ou Falso.
  1. ((3 + 5) / 2) > 0) :
  2. (3 * 3 > 10) ou (2 + 2 < 10) :
  3. (10 <> 5) ou (1 + 1 = 0) :
  4. (2 + 3 >= 5) e (18 / 3 < 7) :
  5. (1 + 1 = 0) e (0 – 1 > 0) :

Estrutura condicional…

Vejamos…
Se “o Flamengo vencer” entao
…. “ele será campeão da libertadores”
fimse
=D
Sim, na vida, as vezes nos deparamos em situações na qual precisamos escolher algo somente se outra coisa acontecer…
Chamamos isso de condição.
Nos algoritmos, também utilizaremos isto, como vocês notaram no começo do post, o que utilizei ali, foi uma estrutura condicional. Observem bem, o que está em negrito, as palavras se, entao, fimse. Elas serão importantíssimas em nosso algoritmo…
então, poderia basicamente dizer que em um algoritmo a sintaxe seria a seguinte:
se <condição> entao
…. <ações a serem realizadas se a condição for verdadeira> //pode ser uma ou mais
fimse

Eu sei que o computador não entenderia se eu colocasse simplesmente “ele será campeão da libertadores”, então como ficaria isso em um algoritmo?

Esse foi um exemplo bem didático, mas em portugol, seria mais ou menos o seguinte:
se (vencedor = “Flamengo”) entao
…. escreva(“Flamengo será o campeão da Libertadores!!!”)
fimse

Esses “….” antes da ação, é necessário?

Não, esses quatro pontos, é um artifício que estou usando aqui no blog para indicar que ali, existe um espaço ou uma tabulação, já que se eu simplesmente der o espaço aqui no blog, ele não irá interpretar e ficará como se não houvesse nada…

Então para que esse espaço?

Esse espaço, é o que chamamos de identação, que além de ser uma questão de ética entre os programadores, ele vai servir para que seu código tenha uma melhor aparência, e fique mais fácil para entendê-lo e dar manutenção.

Entendi essa parte… mas e se a condição for falsa?

“Se você não mandar o computador fazer nada, ele nada fará!” (by eu)
Nesse caso, podemos fazer nosso algoritmo de duas maneiras:
1 – utilizar dois condicionais SE.
Um exemplo bem didático e de fácil entendimento:
  1. se dinheiro >= 30 entao
  2. …. ir_ao_cinema <- verdadeiro
  3. …. assistir_tv <- falso
  4. fimse
  5. se dinheiro < 30 entao
  6. …. ir_ao_cinema <- falso
  7. …. assistir_tv <- verdadeiro
  8. fimse
e a segunda opção, que é bem melhor e de mais agradável leitura…
  1. se dinheiro >= 30 entao
  2. …. ir_ao_cinema <- verdadeiro
  3. …. assistir_tv <- falso
  4. senao
  5. …. ir_ao_cinema <- falso
  6. …. assistir_tv <- verdadeiro
  7. fimse
Observem que agora na linha quatro, apareceu uma palavrinha nova para nós… O senao

Para que serve o senao?

O senao, será executado sempre que o resultado do “se” for falso.
No exemplo acima, o interpretador fez uma pergunta, “o dinheiro é maior ou igual a 30?”
Caso fosse, a variavel “ir_ao_cinema” receberia o valor verdadeiro, e a variável “assistir_tv” receberia o valor falso.
Se o dinheiro não fosse maior que 30, ou seja, caso ele fosse menor, o valor recebido das variáveis “ir_ao_cinema” e “assistir_tv” seriam outros.

Fácil não?

Agora, um algoritmo facin facin, para que vocês entendam por vez, como funciona a estrutura condicional se.


Tentem entender o algoritmo acima sem copia-lo no VisualG. E caso não tenham conseguido entender, pode postar nos comentários que explicarei linha por linha

estrutura condicional, quando e como utilizar o operador SE-ENTAO-SENAO, porém, dependendo da ocasião, quando se há muitas escolhas diferentes, nosso código pode ficar grande, e de difícil leitura…
Nesse caso, entra mais uma função em nosso querido algoritmo, o ESCOLHA… CASO… CASO… OUTROCASO… =)
Ele é tão simples quanto o SE, e acredito que não deve haver tantas dúvidas.
Abaixo tem um algoritmo, sobre a classificação de atletas pela sua faixa etária, este exemplo, poderia ter sido feito utilizando a estrutura condicional se – então, mas aqui utilizarei o escolha – caso, para que vocês entendam como funciona o mesmo.
 

… o Algoritmo

algoritmo “Classificação de Atletas”
var
nome, categoria: caractere
idade: inteiro
inicio
escreva(“Digite o nome do atleta: “)
leia(nome)
escreva(“Informe a idade do atleta: “)
leia(idade)
// Até aqui tudo bem, ele pede o nome e idade, lê os valores e joga nas respectivas variáveis
escolha idade
// A função escolha irá interpretar os casos abaixo em cima da variável idade
caso 5,6,7,8,9,10
// Caso a variável idade receba os valores de 5 a 10, irá atribuir na variável categoria o valor: infantil
…. categoria <- “infantil”
caso 11,12,13,14,15
// Caso a variável idade receba os valores de 11 a 15, irá atribuir na variável categoria o valor: juvenil
…. categoria <- “juvenil”
caso 16,17,18,19,20
// Caso a variável idade receba os valores de 16 a 20, irá atribuir na variável categoria o valor: junior
…. categoria <- “junior”
caso 21,22,23,24,25
// Caso a variável idade receba os valores de 21 a 25, irá atribuir na variável categoria o valor: profissional
…. categoria <- “profissional”
outrocaso
// E se a variável idade não receber nenhum dos valores acima mencionados, vamos atribuir a variável categoria o valor: inválido
…. categoria <- “INVALIDO”
fimescolha
// O fimescolha finaliza a função que abrimos anteriormente
escreva(“Categoria: “,categoria)
// E este último escreva, serve para que possamos mostrar o resultado ao usuário
fimalgoritmo

vamos aprender sobre estruturas de repetição.

Mas o que é isso?

Bom, até o momento, sempre fizemos algoritmos lineares, ou seja, ele possui um começo, meio e fim, e segue essa ordem…
As estruturas de repetição, irão repetir determinados comandos, até que uma comparação lógica se torne verdadeira ou falsa.
Vou explicar com exemplos, assim o entendimento se tornará mais fácil.
O Algoritmo abaixo, lê o nome e a nota de três provas de três alunos diferentes…
Algoritmo "MediaHarmonica"
 
var
a, b, c, MH: real
nome: caractere
 
inicio
 
escreva ("Entre com o nome do aluno: ")
leia (nome)
escreval ("Entre com as notas das três provas")
escreva ("Digite a primeira nota: ")
leia (a)
escreva ("Digite a segunda nota: ")
leia (b)
escreva ("Digite a terceira nota: ")
leia (c)
MH <- 3/(1/a + 1/b +1/c)
escreval ("A média harmônica do aluno: ", NOME, " é ", MH)
escreva ("Entre com o nome do aluno: ")
leia (nome)
escreval ("Entre com as notas das três provas")
escreva ("Digite a primeira nota: ")
leia (a)
escreva ("Digite a segunda nota: ")
leia (b)
escreva ("Digite a terceira nota: ")
leia (c)
MH <- 3/(1/a + 1/b +1/c)
escreval ("A média harmônica do aluno: ", NOME, " é ", MH)
escreva ("Entre com o nome do aluno: ")
leia (nome)
escreval ("Entre com as notas das três provas")
escreva ("Digite a primeira nota: ")
leia (a)
escreva ("Digite a segunda nota: ")
leia (b)
escreva ("Digite a terceira nota: ")
leia (c)
MH <- 3/(1/a + 1/b +1/c)
escreval ("A média harmônica do aluno: ", NOME, " é ", MH)
 
fimalgoritmo

Grande não?

Ainda bem que só tínhamos três alunos…
E se fosse uma turma de 40 alunos?
Para isso vamos utilizar estruturas de repetição =)

Repita … até

Na estrutura repita – ate, todos os comandos serão executados e, ao final, haverá uma expressão lógica, para que avalie a repetição, esta que somente irá cessar quando essa expressão for verdadeira.
// sintaxe da estrutura de repetição
repita
    <comandos>
ate <expressão lógica/relacional>
Agora um exemplo didático…
algoritmo "DemonstraRepeticao"
 
var
i: inteiro
 
inicio
 
i <- 1
repita
    escreva(i)
    i <- i + 1
ate i > 10
 
fimalgoritmo
Este algoritmo irá retornar na tela do usuário os números: 1 2 3 4 5 6 7 8 9 10

Mais porquê?

Primeiramente foi declarado a variável i como inteiro, logo em seguida utilizamos uma estrutura de repetição, o repita-ate, pedimos para escrever o valor de i e acrescentamos ao seu valor mais uma unidade, ou seja, i + 1.

e até quando isso será repetido?

Até que o valor de i seja maior que 10…
Então quando o valor de i chegou a 11, ele perguntou se i era maior que 10, como a resposta foi verdadeira, ele encerrou a repetição e foi para o próximo comando…
Como não temos mais nada, encerramos nosso algoritmo.

Agora, o algoritmo da média dos alunos…

Só que dessa vez, nós teremos 40 alunos em nossa classe!

Vamos digitar um por um?

Não! Agora que já sabemos utilizar uma estrutura de repetição, vamos poupar trabalho e resumir nosso algoritmo!
 
Algoritmo "MediaHarmonica"
 
var
a, b, c, MH, i: real
NOME: caractere
 
inicio
 
i <- 1
Repita
    escreva("Entre com o nome do aluno: ")
    leia(nome)
    escreval ("Entre com as notas das três provas")
    escreva("Digite a primeira nota: ")
    leia(a)
    escreva("Digite a segunda nota: ")
    leia(b)
    escreva("Digite a terceira nota: ")
    leia(c)
    MH <- 3/(1/a + 1/b +1/c)
    escreval("A média harmônica do aluno: ", NOME, " é ", MH)
    i <- i + 1
ate i > 40
 
FimAlgoritmo


Dando prosseguimento ao post anterior, sobre estruturas de repetição, hoje vamos aprender sobre o comando enquanto – faca.
Diferentemente do repita-ate, onde todos os comandos são interpretados, para só então haver uma expressão lógica verificando se deve ou não continuar a repetição, o enquanto-faca irá avaliar uma expressão lógica e, enquanto esta for verdadeira, irá executar os comandos…

Sintaxe do Enquanto .. faca

enquanto <expressão lógica ou relacional> faca    <comandos>fimenquanto Melhor explicado com exemplos =)

Exemplo 1

Neste exemplo, vou criar um algoritmo utilizando o repita-ate e depois o mesmo algoritmo, só que dessa vez utilizando a estrutura enquanto – faca, explicando passo-a-passo a vocês, para que possam entender a diferença entre ambos.
- Faça um algoritmo que solicite que o usuário digite um número, e informe se este número é maior que 10. O programa só pode parar de solicitar o número quando este for igual a 0 (zero)
Utilizando a estrutura de repetição repita .. ate
algoritmo "exemplo 1"// Nos siga no Twitter! @Algoritmizando varnumero: inteiro inicio repita    escreva("Digite um número: ")    leia(numero)    limpatela // Limpa a tela =P    se (numero > 10) entao        escreval("O número é maior que 10")    senao        escreval("O número é menor que 10")    fimseate (numero = 0) fimalgoritmo E agora o mesmo algoritmo, porém utilizando a estrutura de repetição enquanto .. faca
algoritmo "exemplo 2"// Nos siga no Twitter! @Algoritmizando varnumero: inteiro inicio numero <- 1enquanto numero <> 0 faca    escreva("Digite um número: ")    leia(numero)    limpatela    se (numero > 10) entao    escreval("O número ",numero," é maior que 10")    senao    escreval("O número ",numero," é menor que 10")    fimsefimenquanto fimalgoritmo Nesse exemplo, começamos nosso algoritmo atribuindo o valor 1 a variável número, para que possamos começar a utilizar nossa estrutura de repetição, conforme podem ver na linha 9;
E na linha 10, nossa condição para que o laço continue sendo executado, ou seja, enquanto a variável numero for diferente de 0 (zero), continuaremos executando o programa, e o usuário digitando números para descobrir se é maior ou menor que zero… (como se fosse necessário um programa para isso rsrsrs)
claro, claro, é apenas um exemplo didático…
Mas que tal ver se realmente aprendeu?
Deixo aqui então um desafio a vocês…
  1. Crie dois algoritmos, um utilizando a estrutura de repetição repita .. ate e outro utilizando o enquanto .. faca.
  2. Uma loja está vendendo três modelos de carro, o algoritmo deve ler o nome e o valor (R$) dos seguinte automóveis: GOL, PALIO, CORSA
  3. Ao final, informar quantos carros de cada modelo foram vendidos e o valor total arrecadado em reais.
  4. O programa só pode encerrar quando o valor do veículo for igual a zero.

iremos abordar a estrutura PARA .. FACA.

Para .. Faça

A sintaxe geral da estrutura de repetição para .. faca é a seguinte:
para X de N ate M [passo Y] faca
    <comandos>
fimpara

Explicando…

O X é a variável que deve ser previamente declarada, o N é o número que começará a contagem, M até onde vai essa contagem, e o passo Y só será necessário se você não quiser que seja de 1 em 1…
Sei que não entenderam nada, então vou mostrar um exemplo de uma estrutura de repetição utilizando enquanto .. faca e após, um utilizando o para .. faca, você verá que irá ficar bem mais simples!
algoritmo "repetição 1"
 
var
num: inteiro
 
inicio
 
num <- 1
enquanto num <= 10 faca
    escreva(num)
    num <- num + 1
fimenquanto
 
fimalgoritmo
Nesse algoritmo, foi utilizado a estrutura de repetição enquanto .. faca, como vocês podem notar, foi declarado a variável num para servir como condição para execução do laço, e ao mesmo tempo, imprimimos o valor da mesma na tela através do comando escreva.
Essa estrutura vai imprimir o seguinte resultado na tela do usuário: 1 2 3 4 5 6 7 8 9 10
Agora, a mesma estrutura, agora utilizando o para .. faca.
algoritmo "repetição 2"
 
var
num: inteiro
 
inicio
 
para num de 1 ate 10 faca
    escreva(num)
fimpara
 
fimalgoritmo
Esse algoritmo, tem a mesma função do algoritmo acima, porém dessa vez utilizando a estrutura para .. faca.

Vamos entender o algoritmo…

para num de 1 ate 10 faca
Neste comando, estamos dizendo ao interpretador VisualG que a variável num receberá o valor 1 e a cada iteração, ou seja, toda vez que os comandos dentro do para .. faca forem executados, a variável num receberá +1 em seu valor por padrão, e assim sucessivamente, até que o valor de num seja 10.
escreva(num) // já abordado anteriormente.
e o fimpara, que serve para indicar o fim do laço.

O Comando PASSO N:

1 – Imprimir na tela todos os números pares de 2 até 200
algoritmo "numeros pares"
 
var
num: inteiro
 
inicio
 
para num de 2 ate 200 passo 2 faca
    escreva(num)
fimpara
 
fimalgoritmo

Passo 2…

Vocês devem estar se perguntando de onde surgiu esse passo 2 agora…
Lembram que na sintaxe do para .. faca expliquei que ele não é obrigatório, mas poderia surgir?
então! por padrão no portugol, ele sempre acrescentará +1 a variável que agente está utilizando no laço, mas nesse exemplo, eu preciso pegar apenas os números pares, ou seja, de 2 em 2.
Bingo!
Está explicado então, o porquê do passo 2, assim em cada iteração, ele acrescentará +2 na variável num, esta que sempre será um valor par, que é o que queremos nesse exemplo.

Nos exemplos até agora, você escreveu do 1 até um número maior, como o 100 por exemplo… Teria como fazer o inverso? do 100 até o 1?

Sim!
Para isso, mais uma vez utilizaremos o passo N.
para num de 100 ate 1 passo -1 faca
    escreva(num)
fimpara
Sim, também podemos utilizar passo -N, ou seja, um passo negativo.
Porque?
Porque se o padrão do para .. faca é acrescentar mais 1 na variável, o objetivo do passo N é justamente te dar o poder de escolher qual o valor que você quer acrescentar ou reduzir no laço.

E agente fica por aqui… A partir do próximo post, iniciaremos nossos estudos em vetores e matrizes, então é necessário que você já esteja bastante familiarizado com tudo o que já foi dito até aqui.

 
Até então, aprendemos o que é uma variável e como declarar variáveis em portugol, e fizemos isso inúmeras vezes em nossos algoritmos.
O nosso problema começa, quando temos que declarar inúmeras variáveis para atender a um fim.
Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e a média da turma.
Agora imagine você na declaração de variáveis, declarando uma a uma, as 50 variáveis para o nome, depois as 50 variáveis para as notas…
var
aluno1, aluno2, aluno3, ........., aluno50: caractere
nota1, nota2, nota3, ............, nota50: real
Cansativo não? Acho que se fosse realmente assim, não haveria tantos programadores quanto há hoje em dia…
É em casos como esse que entra o assunto desse post. Vetores.
Vamos imaginar um vetor como sendo uma “caixa” com vários lugares separados para guardar seus documentos, ou seja, uma variável onde se pode armazenar mais de um dado.
Vetor de 8 posições
No exemplo abaixo, temos um vetor com dados armazenados nas 5 primeiras posições.

Para poder acessar o conteúdo desse vetor, vamos utilizar a sintaxe: nome[posição].
Ex: meuvetor[2]
- O retorno será a letra B.

Interessante, mas como eu posso usar vetores nos algoritmos?

Para usar os vetores, primeiro temos que declará-lo na seção de variáveis. Sim, vetor também é uma variável!
A sintaxe para declaração do vetor é a seguinte:
var
  nome-do-vetor: vetor[<posições>] de <tipo>
Exemplo:
var
  MeuVetor: vetor[1..5] de caractere
Primeiro vem o nome do vetor, então onde antes colocávamos apenas o tipo, que era caractere, real, inteiro, etc., agora vamos especificar que é um vetor, colocar quantas posições ele terá, e finalmente o tipo.
E não se confundam, no campo das posições, são apenas 2 (dois) pontos mesmo. Se colocar mais que isso seu vetor não irá funcionar. E as lendas urbanas dizem que se seu vetor estiver errado seu visualg trava. Não fiz todos os testes para confirmar isso.
Agora, um exemplo simples para facilitar a vida de vocês:
algoritmo "vetores by algoritmizando"
 
var
  x: vetor[1..2] de inteiro
 
inicio
 
escreval("Digite um número:  ")
leia(x[1])
escreval("Digite mais um número =D ")
leia(x[2])
escreval("Seus números digitados foram: ",x[1]," e ",x[2])
 
fimalgoritmo
E que tal, utilizar vetores junto com tudo o que aprendemos até aqui?
Atendendo ao pedido da leitora Fernanda no último post, dei início a um algoritmo que recebe 10 números, indica quais são os números ímpares maiores que 1 e menor que 726, qual a maior diferença entre dois números consecutivos informados pelo usuário e quais são múltiplos de 3.
algoritmo "Aprenda a Programar 12"
 
var
 
numeros, impar, multiplo3: vetor[0..10] de inteiro
maiordif: vetor[1..3] de inteiro
x, y: inteiro
 
inicio
 
escreval("============ APRENDA A PROGRAMAR #12 BY ALGORITMIZANDO ============")
 
// Variável para calcular maior diferença entre dois números consecutivos. Serão usados mais tarde
maiordif[3] <- 0
 
para x de 1 ate 10 faca
 
     // Instrução para digitar o numero e guardá-lo numa variável
 
     escreval("Digite o ",x,"º número: ")
     leia(numeros[x])
 
     // Verificação se o número é ímpar maior que 2 e menor que 726
 
    se ((numeros[x] mod 2) <> 0) entao
        se numeros[x] > 1 entao
            se numeros[x] < 726 entao
                impar[x] <- numeros[x]
            fimse
        fimse
    fimse
 
     // Verificação se o número é múltiplo de 3
 
    se ((numeros[x] mod 3) = 0) entao
    multiplo3[x] <- numeros[x]
    fimse
 
    // Maior diferença entre dois números consecutivos.
 
    y <- x - 1
    se ((numeros[x] - numeros[y]) > maiordif[3]) entao
        maiordif[3] <- numeros[x] - numeros[y]
        maiordif[1] <- numeros[x]
        maiordif[2] <- numeros[y]
    fimse
 
    limpatela
    escreval("============ APRENDA A PROGRAMAR #12 BY ALGORITMIZANDO ============")
fimpara
 
limpatela
escreval("============ APRENDA A PROGRAMAR #12 BY ALGORITMIZANDO ============")
escreval("")
escreval("==== NÚMEROS ÍMPARES MAIOR QUE 2 E MENOR QUE 726 ====")
para x de 1 ate 10 faca
   escreval(x,"º Número ímpar: ",impar[x])
fimpara
escreval("")
escreval("==== NÚMEROS MÚLTIPLOS DE 3 ====")
para x de 1 ate 10 faca
    escreval(x,"º Número múltiplo de 3: ",multiplo3[x])
fimpara
escreval("")
escreval("==== MAIOR DIFERENÇA ENTRE NÚMEROS CONSECUTIVOS ====")
escreval("A maior diferença está entre os números: ",maiordif[2]," e",maiordif[1])
escreval("Diferença de: ",maiordif[3])
 
fimalgoritmo
Agora é com vocês… aproveitem o exemplo acima e façam seus testes, crie novas funções e nos diga sobre suas experiências com vetores nos comentários.

Finalizando nosso estudo de algoritmos, iremos aprender hoje sobre variáveis compostas homogenias, ou seja… Matriz.
Antes de darem continuidade na leitura, recomendo que já estejam familiarizados com o assunto do post anterior, Vetores.

Afinal, o que é uma matriz?

Uma matriz, é nada mais, do que Vetores bi-dimensionais. Onde podemos acessar os dados ali contidos através de dois valores. As “linhas” e as “colunas”. Vocês entenderão logo!

Sintaxe…

nome: vetor[<linhas>,<colunas>] de <tipo>
Exemplo:
minhavar: vetor[1..3,1..3] de caractere
Onde o primeiro valor refere-se as linhas e o segundo as colunas. O exemplo acima, refere-se a criação de uma matriz com 3 linhas e 3 colunas, conforme imagem abaixo:

Como eu posso atribuir ou visualizar dados de minha matriz?

Para atribuir dados a uma determinada posição em uma Matriz, manteremos o mesmo padrão para variáveis comuns ou vetores.
* Para atribuir um determinado valor:
melhorblog[1,2] <- "Algoritmizando"
Atribui a palavra Algoritmizando na posição (1,2) da matriz melhorblog.
* Para ler determinado valor:
...
escreva("O melhor blog é: ",melhorblog[1,2])
...
Lê o valor que se encontra na posição (1,2) da matriz melhorblog.
E agora, um “pequeno” algoritmo, utilizando praticamente tudo o que vimos durante todos esses posts de algoritmos, inclusive o assunto desse post de hoje, Matriz:
Sistema de cadastro de alunos:
  • Fazer um programa de cadastro de alunos;
  • O programa deverá receber o nome, blog favorito e email de cada um dos alunos;
  • Após o cadastro, fornecer as seguintes opções:
  1. Consultar alunos cadastrados
  2. Consultar blogs favoritos por aluno
  3. Lista de emails cadastrados
  4. Lista completa, com todos os dados dos alunos cadastrados
  5. Finalizar o programa
Observação: O Programa só poderá ser finalizado quando escolhida a opção nº 5
algoritmo "Aprenda a Programar #13 - Matriz"
// Autor : Algoritmizando
// Seção de Declarações
var
alunos: vetor[1..2,1..3] de caractere
x, opcao, programa: inteiro
 
inicio
// Seção de Comandos
para x de 1 ate 2 faca
    escreval("============================")
    escreval("==== CADASTRO DE ALUNOS ====")
    escreval("============================")
    escreval("")
    escreva("Digite um Nome: ")
    leia(alunos[x,1])
    escreva("")
    escreva("Digite o blog favorito: ")
    leia(alunos[x,2]) // http://algoritmizando.com
    escreva("Informe o email: ")
    leia(alunos[x,3])
    limpatela
fimpara
limpatela
 
// Seta a variável 'programa' = 1 para manter o mesmo em execução
// Nosso programa só irá terminar quando esta variável for igual a zero
 
programa <- 1
 
enquanto programa = 1 faca
    escreval("")
    escreval("============================")
    escreval("==== CADASTRO DE ALUNOS ====")
    escreval("============================")
    escreval("")
    escreval("Digite a opção desejada: ")
    escreval("1 - Consulta Alunos Cadastrados")
    escreval("2 - Consulta Blogs Favoritos por aluno")
    escreval("3 - Lista de emails cadastrados")
    escreval("4 - Lista completa de alunos cadastrados")
    escreval("5 - Sair do Programa")
    escreval("")
   // Escolhendo a opção desejada...
    leia(opcao)
    limpatela
    escolha(opcao)
        caso 1
            escreval("---- Alunos Cadastrados: ")
            para x de 1 ate 2 faca
                escreval("---- ",alunos[x,1])
            fimpara
        caso 2
            escreval("---- Blogs favoritos por aluno: ")
            para x de 1 ate 2 faca
                 escreval("---- ",alunos[x,1],"    ",alunos[x,2])
            fimpara
        caso 3
            escreval("---- Lista de emails cadastrados: ")
            para x de 1 ate 2 faca
                escreval("---- ",alunos[x,3])
            fimpara
        caso 4
            escreval("---- Lista completa de alunos cadastrados: ")
            para x de 1 ate 2 faca
                escreval("---- ",alunos[x,1],"    ", alunos[x,2],"    ", alunos[x,3])
            fimpara
        caso 5
            escreval("==== OBRIGADO POR ACESSAR O BLOG! ====")
            programa <- 0
        outrocaso
            escreval("Opção Inválida...")
    fimescolha
fimenquanto
 
fimalgoritmo




 

E mais dois desafios extras… =)
  1. Faça um algoritmo que receba um número e mostre uma mensagem caso este número seja maior que 10.
  2. Faça um algoritmo que receba um número, e informe se este número está no intervalo de 100 a 200.


Nenhum comentário:

Postar um comentário