Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Curso de introdução à lógica de Programação. Assuntos: variáveis, operadores, laços, vetores.
Tipologia: Notas de estudo
1 / 19
Esta página não é visível na pré-visualização
Não perca as partes importantes!
(^1) Contato: [email protected]
Considere agora o problema de somar dois valores num´ericos. Podemos escrever o seguinte algoritmo para resolver este problema:
Passo 1: Obtenha dois n´umeros, que chamaremos de N1 e N2; Passo 2: Calcule N3 = N1 + N2; Passo 3: Exiba o resultado N3.
Perceba que o algoritmo acima simplesmente define uma sequˆencia de passos que devem ser executados para que consigamos somar dois n´umeros e exibir o resultado desta soma. Perceba tamb´em que tal algoritmo possui um in´ıcio e um fim determinados. Esta ´e uma outra importante caracter´ıstica dos algoritmos:
Defini¸c˜ao 2 Um algoritmo deve resolver um problema em um n´umero finito de passos.
Definiremos inicialmente como vari´avel um dado necess´ario para resolver um problema. Voltando ao algoritmo que resolve o problema de passar manteiga no p˜ao de forma, temos que, para resolver este problema, ´e necess´ario que te- nhamos dispon´ıveis a manteiga, o p˜ao e uma faca. Portanto, estes itens s˜ao vari´aveis do nosso algoritmo.
Considere agora o algoritmo que resolve o problema de somar dois n´umeros. Temos que os dados necess´arios para resolver este problema s˜ao dois n´umeros N1 e N2, e n˜ao mais objetos tang´ıveis. Computacionalmente, necessitamos ar- mazenar estes dados na mem´oria do computador para que consigamos realizar opera¸c˜oes com eles. Assim, as vari´aveis agora passam a ser espa¸cos de mem´oria do computador que reservamos. Os nomes N1 e N2 passam a ser referˆencias para estes espa¸cos de mem´oria.
Isto nos permite introduzir outra defini¸c˜ao importante:
Defini¸c˜ao 3 Uma vari´avel ´e uma referˆencia para uma posi¸c˜ao de mem´oria do computador e se apresenta como um dado necess´ario para a resolu¸c˜ao de determinado problema.
E f´^ ´ acil imaginar a mem´oria do computador como uma esp´ecie de gavetas onde guardamos nossos valores. Para acessar estes valores, usamos um nome associado a tais gavetas:
Posi¸c˜ao (endere¸co) Conte´udo Vari´avel H5555 2 N H5556 4.556 Aux H H5558 maria nom H5559 trg H5560 6 N
Perceba que podemos ter diferentes valores dentro da mem´oria do computa- dor. Perceba tamb´em que, para algumas posi¸c˜oes de mem´oria, existem nomes (vari´aveis) associados. Por exemplo, definimos as vari´aveis N1 e N2.
Suponha, por exemplo, que nosso algoritmo realiza o c´alculo N3 = N1 + N2. Isto significa que estamos realizando o c´alculo 2 + 6 (veja a tabela acima) e armazenando o resultado (igual a 8) em uma posi¸c˜ao da mem´oria do computador que chamaremos de N3. Veja como fica a mem´oria do computador agora:
Posi¸c˜ao (endere¸co) Conte´udo Vari´avel H5555 2 N H5556 4.556 Aux H H5558 maria nom H5559 trg H5560 6 N H5561 8 N
Toda vari´avel possui um tipo de de dados espec´ıfico. Um tipo de dados corres- ponde a natureza intr´ınseca ao dado. Por exemplo, voltandoa tabela acima, temos que N1 ´e uma vari´avel num´erica e nom ´e uma vari´avel do tipo texto.
Quando criamos uma vari´avel para ser utilizada em um algoritmo, estamos reservandos um espa¸co de mem´oria. Este espa¸co possui um tamanho determi- nado pelo tipo de dados da vari´avel. A princ´ıpio (enquanto estivemos estudando l´ogia de programa¸c˜ao), quando for necess´ario especificar o tipo de dados da vari´avel, poderemos definir os tipos texto e num´erico.
(a) Um senhor est´a em uma das margens de um rio com uma raposa, uma d´uzia de galinhas e um saco de milho. O senhor pretende atravessar o rio com suas cargas, em um barco que s´o comporta o senhor e uma das cargas. Evidentemente, o senhor n˜ao pode deixar em uma das margens, sozinhos, a raposa e a galinha, nem a galinha e o milho. (b) Suponha que vocˆe possua ´agua ilimitada. Como obter exatamente uma medida de 4 litros de ´agua dispondo apenas de dois recipientes com capacidades de 3 litros e 5 litros respectivamente? (c) O jogo conhecido como Torre de Han´oi consiste de trˆes torres, as quais podemos chamar de origem, destino e auxiliar e um conjunto de n discos de diˆametros diferentes, colocados na torre origem na or- dem decrescente dos seus diˆametros. O objetivo do jogo ´e, movendo um ´unico disco de cada vez e n˜ao podendo colocar um disco sobre
Passo 3: Se o resto da divis˜ao feita no Passo 2 for zero, exiba a mensagem O n´umero ´e par. Caso contr´ario, exiba a mensagem O n´umero ´e ´ımpar.
Atividade: Mostre que o algoritmo acima est´a correto atrav´es de um teste de mesa.
O Passo 1 do algoritmo acima, nos permite definir o conceito de atribui¸c˜ao. Quando colocamos Obtenha o n´umero x, estamos, na verdade, criando uma vari´avel, isto, ´e, reservando um espa¸co de mem´oria e definindo o nome x para ter acesso aos valores alocados nesta posi¸c˜ao de mem´oria. Podemos definir uma atribui¸c˜ao utilizando :=, uma seta para a esquerda ou at´e mesmo sinal =. A fim de evitar confus˜oes, vamos criar uma defini¸c˜ao:
Defini¸c˜ao 4 As atribui¸c˜oes ser˜ao indicadas pelo sinal := e as compara¸c˜oes ser˜ao indicadas pelo sinal =.
Um diagrama de fluxo (ou simplemente fluxograma) ´e uma forma padroni- zada de se escrever algoritmos utilizando elementos gr´aficos - s´ımbolos. Cada s´ımbolo possui um significado espec´ıfico que auxilia o desenvolvedor a entender o fluxo (dire¸c˜ao) do processamento.
A princ´ıpio, s˜ao apresentados os s´ımbolos mais utilizados:
Figura 1: S´ımbolos mais comuns utilizados no fluxograma.
Como exemplo de utiliza¸c˜ao do fluxograma, vamos considerar o seguinte problema: Calcular a m´edia de dois valores num´ericos quaisquer. Podemos criar o seguinte algoritmo:
Figura 2: Algoritmo de c´alculo da m´edia de dois valores.
O pseudo-c´odigo (tamb´em chamado de portugol, portuguˆes estruturado ou pseudo- linguagem) ´e uma simplifica¸c˜ao da l´ıngua portuguesa que utilizamos para escre- ver algoritmos. Para que esta linguagem fa¸ca sentido, temos que ser bastante
SE N mod 2 = 0 ENT ˜AO ESCREVA(“O n´umero ´e par”) SEN ˜AO ESCREVA(“O n´umero ´e ´ımpar”)
FIM-ALGORITMO 2
Perceba que o comando SE verifica se uma dada condio foi satisfeita ou n˜ao. Caso ela seja satisfeita, seu algoritmo ´e redirecionado para o comando ap´os o ENT AO associado ao comando SE. No algoritmo acima, por exemplo, verifica-˜ mos se o resto da divis˜ao por 2 ´e igual a 0. Se esta verifica¸c˜ao for verdadeira, ent˜ao escrevemos “O numero ´e par”. Caso a verifica¸c˜ao seja falsa, escrevemos “O numero ´e ´ımpar”.
Utilizando a nota¸c˜ao de fluxograma, podemos reescrever este mesmo algo- ritmo como mostrado na Figura 3.
Figura 3: Algoritmo 2 representado em fluxograma.
Para nos auxiliar a realizar desvios l´ogicos dentro dos algoritmos, necessitamos de operadores que realizem compara¸c˜oes entre valores (e entre vari´aveis). De fato, temos duas categorias de operadores: relacionais e l´ogicos. Vale ressaltar que o resultado de uma opera¸c˜ao envolvendo os operadores acima ´e sempre um valor booleano verdadeiro (TRUE) ou falso (FALSE). Veja as tabelas abaixo:
Operadores relacionais
Operador Descri¸c˜ao = igual <> diferente
maior < menor = maior ou igual <= menor ou igual
Operadores l´ogicos
Operador Descri¸c˜ao E / AND Uma express˜ao ´e verdadeira se todas as condi¸c˜oes forem verdadeiras OU / OR Uma express˜ao ´e verdadeira se pelo menos uma condi¸c˜ao for verdadeira NOT Inverte o valor l´ogico de uma express˜ao
(a) (A+C) > B (b) B >= (A + 2) (c) C = (B – A) (d) (B + A) <= C
(a) (A > C) AND (C <= D) (b) (A+B) > 10 OR (A+B) = (C+D)
Se tiv´essemos que construir um algoritmo para resolver este problema, um mesmo trecho deste algoritmo (o que faz as divis˜oes) poderia ser repetido v´arias vezes. Para fazer esta tarefa, temos definidas as estruturas de repeti¸c˜ao. Uma estrutura de repeti¸c˜ao permite que uma sequˆencia de instru¸c˜oes (comandos) seja executada v´arias vezes, at´e que ou enquanto uma condi¸c˜ao seja satisfeita. As estruturas de repeti¸c˜ao tamb´em s˜ao chamadas de la¸cos ou loops.
Existem dois tipos de la¸cos de repeti¸c˜ao: os la¸cos determinados e os inde- terminados. Como o pr´oprio nome diz, os la¸cos determinados executam uma quantidade fixa de repeti¸c˜oes, independentemente dos comandos que s˜ao repeti- dos. J´a os la¸cos indeterminados executam uma sequˆencia de instru¸c˜oes indefini- damente, at´e que determinada condi¸c˜ao seja satisfeita. Veja os exemplos abaixo:
La¸co determinado: Para saber se o 5 ´e primo, divida-o por 1, 2, 3, 4, 5. Se apenas o 1 e o 5 produzirem divis˜oes exatas, ent˜ao 5 ´e primo.
La¸co indeterminado: Enquanto o usu´ario n˜ao pressionar a tecla ESC, exiba o menu principal.
Para realizar a repeti¸c˜ao de instru¸c˜oes uma quantidade fixa de vezes, utilizare- mos a estrutura PARA ... AT´E ... FAC¸ A. Esta estrutura necessita de uma vari´avel auxiliar (comumente chamada pelos programadores de i) para contro- lar o n´umero de repeti¸c˜oes. De maneira geral, podemos construir este la¸co como:
PARA i := inicio AT´E fim PASSO incremento FAC¸ A
instru¸c˜oes
Os textos inicio e fim representam valores num´ericos constantes ou vari´aveis. O comando PASSO ´e opcional e incremento indica qual o tamanho do salto que o la¸co dar´a de inicio at´e fim e, se for omitido, os incrementos ser˜ao feitos de 1 em 1 de forma crescente.
Por exemplo, temos que PARA i := 1 AT´E 3 FAC¸ A ESCREVA (“Ol´a”) produz como resultado Ol´a Ol´a Ol´a.
Voltemos agora ao problema do n´umero primo colocado no cap´ıtulo inicial deste texto: Dado um n´umero natural N, verifique se ele ´e primo. Utilizando os comandos SE e PARA, temos condi¸c˜oes de criar um algoritmo para resolver este problema:
ALGORITMO 1 DECLARE N, i, quant NATURAIS
quant := 0 LEIA(N) PARA i := 1 AT´E N FAC¸ A
SE N mod i = 0 ENT ˜AO quant := quant + 1 SE quant = 2 ENT ˜AO ESCREVA(“O n´umero ´e primo”) SEN ˜AO ESCREVA(“O n´umero n˜ao ´e primo”)
FIM-ALGORITMO 1
Vamos fazer um pequeno teste de mesa para testar o algoritmo acima. Con- sidere N = 5. Ent˜ao, temos que:
N! = N.(N – 1)! 1! = 1 0! = 1
Por exemplo, 6! = 65432*
LEIA(num[i]) PARA i := 0 AT´E 4 FAC¸ A ESCREVA(“Valor: ” + num[i])
FIM-ALGORITMO 1
Construa um algoritmo que receba do usu´ario dois vetores A e B (ambos do mesmo tamanho), realize as opera¸c˜oes de conjuntos citadas acima e imprima os vetores resultantes.
Vimos que uma estrutura de repeti¸c˜ao determinada faz com que um certo trecho de instru¸c˜oes seja repetido v´arias vezes, por´em dentro de um n´umero exato de repeti¸c˜oes.
Uma estrutura de repeti¸c˜ao indeterminada tamb´e repete um certo trecho de instru¸c˜oes, por´em, n˜ao sabemos exatamente quando a condi¸c˜ao necess´aria para parar o la¸co ser´a satisfeita. Para realizar a repeti¸c˜ao de instru¸c˜oes uma quantidade indeterminada de vezes, utilizaremos a estrutura ENQUANTO ... FAC¸ A. Esta estrutura ne- cessita que atualizemos a condi¸c˜ao dentro do trecho de c´odigo que est´a sendo repetido. De maneira geral, podemos construir este la¸co como:
ENQUANTO (condi¸c˜ao for verdadeira) FAC¸ A
instru¸c˜oes atualiza condi¸c˜ao
A condi¸c˜ao representa um teste l´ogico, que resulta em verdadeiro ou falso. A atualiza¸c˜ao da condi¸ca ao se refere a algum processamento que temos que fazer de forma que o la¸co n˜a seja executado infinitamente.
Imagine, por exemplo, o seguinte problema: Um aparelho capta sinais de minuto em minuto e grava o valor (n´umero real) deste sinal em um arquivo de texto. Posteriormente, temos que ler este arquivo e calcular a m´edia dos valores dos sinais.
Para resolver este problema, ter´ıamos que projetar um algoritmo para ler um arquivo de dados enquanto houvesse dados para serem lidos. Enquanto esta condi¸c˜ao ´e verdadeira, lemos o dados e realizamos o processamento adequado. Quando a condi¸c˜ao de existˆencia de dados n˜ao for mais satisfeita, ent˜ao paramos a leitura do arquivo. Veja o algoritmo abaixo:
ALGORITMO 1 DECLARE arq ARQUIVO, valor, soma e media REAIS, quant NATURAL
ABRA(arq) LEIA(valor, arq) ENQUANTO (valor ̸= VAZIO) FAC¸ A soma = soma + valor quant = quant + 1 LEIA(valor, arq) FECHE(arq) media = soma / quant ESCREVA(“Media dos valores: ” + media)
FIM-ALGORITMO 1
Uma breve explica¸c˜ao: o trecho ABRA(arq) cria uma referˆencia para um arquivo chamada arq. O trecho LEIA(valor, arq) realiza, ent˜ao, a leitura de um n´umero real do arquivo de texto referenciado por arq e armazena este valor na vari´avel valor. Perceba que, se existir um dado v´alido dentro do arquivo, a vari´avel valor ´e diferente de VAZIO, ent˜ao a execu¸c˜ao ´e direcionada para o la¸co ENQUANTO. Dentro do la¸co ENQUANTO realizamos uma nova leitura com LEIA(valor, arq) e assim se procede, at´e que valor seja VAZIO (ou seja, j´a houve a leitura de todos os dados do arquivo) e a condi¸c˜ao do la¸co n˜ao seja mais satisfeita. Ap´os o la¸co ser finalizado, o algoritmo continua sua execu¸c˜ao com a pr´oxima instru¸c˜ao.
cont´em dados de apenas 1 dia (24 horas), construa um algoritmo para ler este arquivo e contabilizar quantos minutos o aparelho gerou dados corrompidos dentro do per´ıodo das 11:00 at´e `as 13:00. Utilize o comando LEIA(min, val, arq) para ler uma linha do arquivo.
Boa sorte!