Professional Documents
Culture Documents
Lgica de Programao
CURSO
Tcnico em Automao Industrial
Professor
Thiago R. de Oliveira
Agosto de 2013
Lgica de Programao
Sumrio
CAPTULO 1 INTRODUO ................................................................................................................... 1
1.
Lgica ................................................................................................................................................ 1
2.
Instrues ........................................................................................................................................... 1
3.
Algoritmos ......................................................................................................................................... 2
4.
5.
2.
3.
Variveis e constantes......................................................................................................................... 9
4.
5.
Operadores ........................................................................................................................................11
2.
3.
4.
5.
6.
2.
3.
3.1.
Funes ..........................................................................................................................................18
3.2.
Procedimentos ................................................................................................................................20
2.
3.
2.
3.
REFERNCIAS ............................................................................................................................................30
ii
Lgica de Programao
Lgica de Programao
Captulo 1 Introduo
1. Lgica
A lgica de programao necessria para pessoas que desejam trabalhar com
desenvolvimento de sistemas e programas, ela permite definir a sequncia lgica para o
desenvolvimento.
Ento o que lgica?
Lgica de programao a tcnica de encadear pensamentos para atingir
determinado objetivo.
Estes pensamentos podem ser descritos como uma sequncia de instrues, que devem
ser seguidas para se cumprir uma determinada tarefa. A essa sequncia de instrues, d-se o
nome de Sequncia lgica.
Sequncia Lgica so passos executados at se atingir um objetivo ou a soluo de
um problema.
2. Instrues
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas
definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a
informao que indica a um computador uma ao elementar a executar. Convm ressaltar
que uma ordem isolada no permite realizar o processo completo, para isso necessrio um
conjunto de instrues colocadas em ordem sequencial lgica.
Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em
prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc.
evidente que essas instrues tm que ser executadas em uma ordem adequada no se pode
descascar as batatas depois de frit-las. Dessa maneira, uma instruo tomada em separado
no tem muito sentido. Contudo ao colocarmos em prtica o conjunto de todas as instrues,
na ordem correta, conseguiremos atingir o objetivo desejado inicialmente.
Podemos definir instrues como:
Instrues so um conjunto de regras ou normas definidas para a realizao ou
emprego de algo. Em informtica, o que indica a um computador uma ao elementar
a executar.
Lgica de Programao
Lgica de Programao
3. Algoritmos
Um algoritmo formalmente uma sequncia finita de passos que leva execuo
de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequncia de
instrues que do cabo de uma meta especfica. Estas tarefas no podem ser redundantes
nem subjetivas na sua definio, devem ser claras e precisas.
Ao pensarmos em algoritmos no mbito da programao de computadores
importante determinar alguns aspectos importantes da sequncia lgica a ser construda:
Execuo finita: Esta definio sutil exige que a execuo do algoritmo seja
realizada em tempo finito, ou seja, que o algoritmo tenha fim. Pode-se pensar
inicialmente que ao se ter um conjunto finito de instrues, a execuo do
algoritmo ser intrinsicamente finita em relao ao tempo. Contudo, podem
existir instrues que obriguem a mquina a executar uma tarefa repetidas
vezes, o que poderia fazer com que a execuo do algoritmo no tenha fim.
Lgica de Programao
Lgica de Programao
Suponha por exemplo que voc deseja calcular o seno de 22, no entanto, voc dispe
apenas de uma calculadora de 4 operaes. Observe que a instruo passada a voc se torna
praticamente impossvel de ser executada, uma vez que a mquina a ser utilizada no
consegue realizar a operao seno. Desta forma, para que a instruo seja bem realizada, ou
seria necessria a utilizao de uma calculadora cientfica (mudana de mquina) ou a
descrio da tarefa em sequncias passveis de serem executadas pela calculadora (mudana
no algoritmo). Em ambas as situaes, nota-se que seria necessrio conhecer a estrutura e
capacidades da mquina antes de se construir o algoritmo.
Em nossa disciplina, a mquina para a qual iremos construir nossos algoritmos o
computador. O computador ento nada mais do que um mecanismo de execuo de
algoritmos programvel, capaz de lidar com instrues e dados e executar uma infinidade de
algoritmos. Contudo, como toda mquina, o computador tambm sofre das mesmas limitaes
citadas para a questo das calculadoras: ele possui um conjunto finito de instrues que
capaz de executar. Neste caso, como podemos escrever algoritmos para um computador?
Precisaramos conhecer a estrutura interna do computador e sua lista de instrues para
podermos desenvolver nossas sequncias lgicas? Bom, a princpio sim, em algum momento
o algoritmo dever ser escrito como uma sequncia de instrues que o computador possa
executar. Contudo, atualmente utilizamos ferramentas de programao que nos permitem
desenvolver um algoritmo com um nvel de complexidade muito menor do que a necessria
para operar diretamente o computador, estas ferramentas so descritas no diagrama da Figura
1.
Lgica de Programao
Lgica de Programao
forma como cada instruo ser realizada, mas apenas nas etapas necessrias
para se atingir o objetivo desejado. A escrita do algoritmo pode ser feita como
uma lista de tarefas (pseudocdigo), como um fluxograma, ou outra forma que
facilita a compreenso por parte do ser humano;
Note que a utilizao dessas etapas permite que o programador escreva seu algoritmo
em uma linguagem mais simples e a traduo para um conjunto de instrues especfico do
computador utilizado fica a cargo do programa compilador. Apesar de ser um processo mais
fcil do que tentar conversar diretamente com o computador, exige que o programador tenha
domnio sobre a linguagem de programao a ser empregada, uma vez que a primeira etapa de
traduo deve ser realizada pelo ser humano mesmo.
4. Programas e cdigos
Programas so algoritmos escritos em linguagem de programao, os quais tambm
so chamados de cdigos. O cdigo principal do programa chamado de cdigo fonte e os
programas perifricos, como funes e procedimentos, so denominados sub-programas, ou
sub-rotinas.
5. Objetivos do curso
Este curso se prope a estudar e definir meios e procedimentos de se escrever
algoritmos. Contudo, para podermos desenvolver nosso trabalho com melhor xito
necessitamos definir tambm uma linguagem de programao base para estudo, sem, no
Prof. Thiago de Oliveira
Lgica de Programao
Lgica de Programao
entanto, ter ela com foco do trabalho. Assim, decidimos pelo uso da linguagem Portugol, que
uma linguagem bem simplificada, com instrues em portugus, mas que permite
compreender e aplicar os principais conceitos por traz da programao de computadores. O
Portugol utiliza um programa interpretador para executar os cdigos desenvolvidos, o qual,
nesta disciplina, ser o programa Visualg 2.0. Ao final da disciplina estudaremos formas de se
escrever algoritmos em um formato visualmente mais simples chamado de fluxograma.
Lgica de Programao
Lgica de Programao
Lgica de Programao
Lgica de Programao
Lgica de Programao
Lgica de Programao
Note que o objetivo de se obter a mdia de dois nmeros quaisquer apenas ser
alcanado se as etapas 1 a 9 forem executadas em sequncia. Se, por exemplo, as etapas 7 e 8
forem invertidas, a execuo possuir um resultado totalmente diferente. Por isso importante
sempre tem em mente que um algoritmo executado instruo por instruo em uma ordem
linear (um aps o outro).
Iterao execuo repetida de um grupo de instrues at que alguma condio seja
satisfeita. Em programas, comumente, alguma tarefa ou instruo deve ser repetida diversas
vezes. Considere por exemplo a tarefa de se somar uma lista de N nmeros, podemos escrever
N instrues do tipo adicionar o prximo nmero soma. Poderamos fazer o seguinte:
1 Defina um nmero N como entrada
2 Defina um nmero A como entrada
3 Defina um nmero S como sada
4 Atribua o valor 0 a S
5 Entre com o valor de N
6 Repita as etapas 7 e 8 N vezes, depois siga para a etapa 9:
7 Entre com o valor de A
8 Faa S receber S+A
9 Retorne o valor de S
Note que as etapas 7 e 8 sero executadas N vezes, de modo que o nmero A receber
N valores e o nmero S apresentar ao fim do algoritmo o somatrio desses valores. Com
Prof. Thiago de Oliveira
Lgica de Programao
Lgica de Programao
isso, um algoritmo que possuiria 100 etapas no mnimo em um sequncia normal executado
em 9 etapas, representando uma economia razovel de instrues, tempo e esforo, alm de
facilitar o entendimento do funcionamento do algoritmo.
Seleo a execuo seletiva de um grupo de instrues baseada em alguma
condio. Esta ideia nos permite escolher um caminho de execuo em funo dos dados
executados, permitindo uma flexibilidade maior ao algoritmo. Por exemplo, suponho que se
deseje fazer um algoritmo que calcule o peso ideal de um ser humano, sabe-se que a equao
que calcula esse peso :
= 100
, para homens
= 100
, para mulheres
//altura em centmetros
3. Variveis e constantes
Nos itens anteriores mencionamos que os dados manipulados pelo programa em algum
momento sero armazenados na memria do computador. Assim para podermos referenciar
esses dados em nosso cdigo, sem necessariamente nos preocuparmos em qual posio exata
de memria esse dado foi armazenado, utilizamos um indentificador (nome) e definimos o
tipo de informao que desejamos manipular (nmeros, letras, etc). Assim, o compilador ao
fazer a traduo do cdigo para linguagem de mquina saber fazer a indexao dos
identificadores com as posies de memria corretas. A informao referenciada aos
Prof. Thiago de Oliveira
Lgica de Programao
Lgica de Programao
identificadores pode variar ao longo da execuo do programa, por isso d-se a ela o nome de
varivel. Uma varivel ento um espao reservado na memria do computador para
armazenar um tipo de dado determinado.
Nos algoritmos citados anteriormente, quando utilizamos uma instruo do tipo:
Defina um nmero h como entrada, estamos na realidade fazendo uma declarao de uma
varivel. Neste exemplo, a varivel de nome h receber informaes numricas, ou seja, o
compilador saber que toda vez que o algoritmo utilizar o nome h a CPU dever
buscar/armazenar a informao sempre na mesma posio de memria e que todos os dados
manipulados por esta varivel sero do tipo numrico, o que indica ao computador qual o
tamanho da posio de memria.
Alm das variveis, os algoritmos tambm lidam com informaes do tipo constante,
esses tipos de dados no alteram seu valor ao longo da execuo do programa. Em um
algoritmo anterior escrevemos, por exemplo, Faa P receber h 100 (h-150)/4, neste caso,
os nmeros 100, 150 e 4 so constantes, uma vez que no variam ao longo do programa. No
entanto, esses exemplos no necessariamente possuem uma posio de memria reservada.
Podem existir situaes onde criamos uma constante e definimos uma posio de memria
especfica para ela, como exemplo: Defina um nmero PI = 3.141592. Neste caso,
reservamos uma posio de memria do tipo numrico, atribumos a ela o identificador PI e o
contedo dessa posio de memria ser sempre 3.141592 ao longo de toda a execuo do
programa, neste caso, apesar de passar por todas as etapas que a declarao de uma varivel,
declaramos uma constante. Note que em muitos casos a diferena entre varivel e constante
depende unicamente da lgica de uso dos dados.
4. Tipos de dados
Na seo anterior discutimos que ao se declarar uma varivel devemos tambm
informar ao compilador qual tipo de informao ser manipulada por ela, ou seja, uma vez
definido que uma varivel ser numrica, no poderemos tentar manipular dados do tipo
caracteres e letras com esta mesma varivel, seria o mesmo que comprar uma vasilha de
biscoitos e tentar colocar nela uma bicicleta. forma da informao manipulada pelas
variveis damos o nome de Tipos de dados.
primeira vista, existe uma infinidade de tipos de dados que podemos utilizar ao
construir nossos algoritmos. Contudo, cada linguagem de programao possui sua prpria
lista de tipos, os quais ela consegue gerenciar. Em muitas linguagens o prprio programador
pode criar um tipo prprio de dados e dar mais flexibilidade ao seu cdigo. O Portugol
Prof. Thiago de Oliveira
10
Lgica de Programao
Lgica de Programao
tambm possui sua lista de tipos, mas discutiremos as particularidades da linguagem que
utilizaremos nos prximos captulos.
Independentemente da linguagem de programao a ser empregada na escrita do
cdigo do algoritmo, podemos dividir os tipos de variveis possveis em 3 grupos principais:
5. Operadores
Os dados contidos em variveis podem ser manipulados por operaes sobre eles
realizadas. Em todas as linguagens de programao existem pelo menos 3 conjuntos de
operadores:
11
Lgica de Programao
Lgica de Programao
12
Lgica de Programao
Lgica de Programao
nome que o programador desejar. As aspas duplas informam apenas que aquela informao
deve ser encarada como uma sequncia de caracteres.
As informaes destacadas em azul definem algumas sees da linguagem:
2. Tipos de dados
O visualg possui quatro tipos de variveis disposio do programador e no permite
a criao de novos tipos. Os tipos de dados so:
Note que o vetor possui apenas um identificador (N), no entanto ele acomoda 9
variveis do mesmo tipo. O contedo dessa varivel pode ser acessado por meio do
identificador e do ndice do vetor, por exemplo, a expresso N[3] acessa o contedo da
varivel existente na posio nmero 3 do vetor N, e assim por diante. A grande vantagem
Prof. Thiago de Oliveira
13
Lgica de Programao
Lgica de Programao
dessa estrutura que o ndice pode ser referenciado por constantes ou por variveis do tipo
inteiro.
As matrizes so como vetores, mas alm do ndice de linhas possui tambm um ndice
de colunas.
3. Declarao de variveis
A declarao de variveis do ambiente visualg deve ser realizada na seo demarcada
pela palavra-chave var. A sequncia de declarao deve ser o identificador da varivel,
seguido de dois pontos e seguido do tipo de dados da varivel:
Identificador: tipo de dados
Caso mais de uma varivel de um mesmo tipo for definida, pode-se fazer a declarao
na mesma linha, separando os identificadores por vrgula:
Identificador1, Identificador2: tipo de dados
Abaixo seguem alguns exemplos de declarao de variveis dos quatro tipos existentes
no ambiente visualg.
var
a: inteiro
Valor1, Valor2: real
nome_do_aluno: caractere
sinalizador: logico
4. Operadores Aritmticos
Os operadores aritmticos existentes no ambiente visualg so:
Smbolo
Significado
+, -
\
+, -, /, *
MOD ou %
^
14
Lgica de Programao
Lgica de Programao
5. Operadores Relacionais
Os operadores relacionais em visualg so:
Smbolo
Nome
Igual
>
Maior que
<
Menor que
>=
Maior ou igual a
<=
Menor ou igual a
<>
Diferente de
6. Operadores lgicos
Os operadores lgicos operam variveis lgicas e para sabermos o resultado devemos
conhecer o comportamento dos operadores. O visualg apresenta quatro operadores lgicos:
Nome
Significado
NAO
Operador que resulta VERDADEIRO somente se seus dois operandos lgicos forem
verdadeiros.
OU
Operador que resulta VERDADEIRO quando um dos seus operandos lgicos for verdadeiro
XOU
Operador que resulta VERDADEIRO se seus dois operandos lgicos forem diferentes,
e FALSO se forem iguais.
15
Lgica de Programao
Lgica de Programao
Captulo 4 - Sequncia
Neste captulo descreveremos alguns comandos e definies necessrias para
desenvolver um algoritmo e escrev-lo em uma linguagem de programao. Focaremos-nos
no conceito de sequncia, ou seja, comandos e instrues que podem ser empregadas em um
fluxo contnuo de execuo sem desvios ou repetio. Esses comandos certamente sero
responsveis por grande parte das linhas de cdigo dos programas que o programador ir
realizar ao longo de sua vida.
1. Comando de atribuio
A atribuio de valores a variveis no visualg deve ser realizada apenas na seo de
comandos. Este comando altera o contedo de uma determinada varivel. O visualg aceita
dois smbolos para representar a atribuio de valores: <- e :=, por regra, a varivel que
receber a informao dever estar no lado esquerdo do comando e o valor a ser atribudo, ao
lado direito. Assim se o seguinte pedao cdigo for escrito:
vet[1]:=10
A<- 2
B:= 3+2^3
vet[1]<- vet[1]+4%3
Sendo que tanto A, B e vet so variveis do tipo real, o contedo da varivel A ser 2,
o contedo da varivel B ser 11 e o contedo da varivel vet[1] ser inicialmente 10 e em
seguida ser modificado para 11.
A atribuio pode ser utilizada para modificar o contedo de qualquer tipo de varivel,
por exemplo, se a varivel X for do tipo caractere, a seguinte instruo:
X<- Lgica de programao
Far com que a sequncia de caracteres Lgica de programao (note que uma
sequncia de caracteres deve sempre estar entre aspas duplas), seja armazenada na
varivel X.
16
Lgica de Programao
Lgica de Programao
Este comando solicita ao usurio a insero de dados, uma vez que estes dados so
inseridos eles sero armazenados nas variveis listas no argumento da funo (lista de
variveis). Por exemplo, suponha que se escreva o seguinte cdigo na seo de comando:
leia(x)
Sendo x uma varivel do tipo real. Ao ler esse comando o visualg ir esperar a
insero de dados pelo usurio. Como padro, o programa espera a insero de dados via
teclado. Uma vez que o usurio escreveu a informao e apertou o boto enter do teclado, a
informao digitada ir ser atribuda (armazenada) na varivel x.
OBS: O visualg permite que a forma de entrada de dados seja configurada,
podendo ser feita por meio de dados aleatrios informados pelo prprio computador, ou
lidos de um arquivo .txt, para mais informaes veja o manual do visualg, disponvel no
prprio programa.
Os comandos de sada do visualg so os comandos escreva() e escreval(). Ambos
possuem a mesma sintaxe:
escreva (<lista-de-expresses>)
escreval (<lista-de-expresses>)
Esses comandos iro escrever a lista de expresses na tela do computador, de modo a
permitirem uma comunicao do programa com o usurio. A lista de expresses pode ser
composta por caracteres, variveis, etc, todas separadas por vrgula, como mostra o exemplo
abaixo:
algoritmo "exemplo"
var
x: real
y: inteiro
a: caractere
l: logico
inicio
x <- 2.5
y <- 6
a <- "teste"
l <- VERDADEIRO
escreval ("x ", x, , y+3) // Escreve: x 2.5 9
escreval (a, "ok")
// Escreve: testeok (e depois pula linha)
escreval (a, " ok")
// Escreve: teste ok (e depois pula linha)
escreval (a + " ok")
// Escreve: teste ok (e depois pula linha)
escreva (l)
// Escreve: VERDADEIRO
fimalgoritmo
17
Lgica de Programao
Lgica de Programao
contedo dessa varivel. A principal diferena entre os comandos que o comando escreva()
escreve a lista de expresses na tela e mantem o cursor na mesma linha, enquanto que o
comando escreval(), escreve a lista de expresses e em seguida faz o cursor pular uma linha.
3. Funes e Procedimentos
Em muitas situaes existem tarefas especificas dentro de um algoritmo que so executadas
repetidamente. Dependendo da complexidade dessas tarefas a sua definio do longo do cdigo-fonte
pode gerar um cdigo confuso e de difcil interpretao. Imagine novamente a situao onde se deseja
calcular o seno de um ngulo, mas o mecanismo apenas realiza as quatro operaes bsicas. Existem
descries da funo seno que permitem fazer esse clculo, mas o algoritmo por traz dessa operao
realmente complexo. Agora, se ao longo do programa a chamada da funo seno for algo recorrente, o
programa se tornar muito complicado.
Uma soluo criar um subprograma que execute essa tarefa especfica, no caso, por
exemplo, execute o algoritmo que calcule o seno de um ngulo usando apenas as operaes bsicas, e
ao longo do cdigo-fonte esse subprograma chamado. A grande vantagem que a escrita do cdigo
fonte se torna algo muito mais simples e, logo, de fcil interpretao. Alm disso, o subprograma pode
ser reutilizado em outros programas. importante, no entanto, entender que ao chamar uma funo, o
programa principal interrompido e o fluxo de execuo do programa desviado para a sequncia de
instrues do subprograma. Ao trmino da execuo do subprograma, o programa principal volta a ser
executado de onde foi interrompido.
3.1. Funes
H um caso particular de subprograma que recebe o nome de funo. Uma funo,
alm de executar uma determinada tarefa, retorna um valor para quem a chamou, sendo este
valor o resultado da sua execuo. Por este motivo, a chamada de uma funo aparece no
corpo do programa principal como uma expresso, e no como um comando. Cada funo,
alm de ter acesso s variveis do programa que o chamou (as variveis globais), pode
possuir suas prprias variveis (as variveis locais), que existem apenas durante sua chamada.
Ao se chamar uma funo, tambm possvel passar-lhe determinadas informaes que
recebem o nome de parmetros. A quantidade dos parmetros, sua sequncia e respectivos
tipos no podem mudar: devem estar de acordo com o que foi especificado na sua
correspondente declarao.
No visualg a declarao de funes deve ser feita na seo de declarao de variveis,
logo aps a declarao das variveis globais. A sintaxe de declarao :
funcao <nome-de-funo> [<seqncia-de-declaraes-de-parmetros>]: <tipo-de-dado>
// Seo de declarao de variveis locais
var
inicio
Prof. Thiago de Oliveira
18
Lgica de Programao
Lgica de Programao
Observe que a funo raizquad() utilizada como um comando, assim como a funo
leia() e a escreva(). Simplificando muito o programa principal. Agora se quisermos, por
19
Lgica de Programao
Lgica de Programao
Neste caso, a funo receber dois parmetros: x que o argumento da raiz, q que a
ordem da raiz. Se no programa principal a seguinte instruo for escrita:
b<-raiz(5,3)
Isso significar que a varivel x = 5, e q = 3. Assim a funo raiz calcular a raiz cbica de 5.
OBS: Os parmetros de uma funo no visualg no podero ser constitudos de variveis
estruturadas como vetores e matrizes.
3.2. Procedimentos
Outro tipo de subprograma muito utilizado o procedimento. Um procedimento uma
funo que no retorna valores. A sua declarao segue a estrutura de uma funo:
procedimento <nome-de-procedimento> [(<seqncia-de-declaraes-de-parmetros>)]
// Seo de Declaraes Internas
var
inicio
// Seo de Comandos
fimprocedimento
Passagem por valor A funo recebe uma informao que ser tratada. A
declarao dos parmetros neste caso segue a seguinte expresso:
<seqncia-de-parmetros>: <tipo-de-dado>
Onde a sequncia de parmetros uma lista de variveis com o seu
determinado tipo. Variveis de um mesmo tipo podem ser listadas e separadas
por vrgula e variveis de tipos diferentes devem ser separadas por ponto e
vrgula;
20
Lgica de Programao
Lgica de Programao
sub-rotinas para clculo da raiz quadrada de um nmero e para o clculo da raiz de qualquer
ordem de um nmero.
Primeiramente, utilizamos o procedimento que altera variveis globais. Suponha que
existam no programa principal as variveis
a,b:real
Assim podemos definir o seguinte procedimento:
procedimento raizquad(x:real)
var aux:real
inicio
aux<- x^(1/2)
b<-aux
fimprocedimento
Neste caso, o procedimento utiliza a passagem por valor, assim como nas funes,
para receber o valor a partir do qual a raiz quadrada deve ser calculada. No entanto, para
armazenar o resultado do clculo, utiliza-se uma varivel global (b). Esse processo, apesar de
funcionar, no muito indicado, uma vez que se o procedimento for reaproveitado em outro
programa, a varivel global pode ter outro significado e ento podemos gerar um problema de
gerenciamento de variveis e complicar ainda mais o nosso programa. Uma outra soluo
muito interessante usar a passagem por referncia, como no exemplo abaixo:
procedimento raizquad(x:real; var y:real)
inicio
y<- x^(1/2)
fimprocedimento
Note que neste ltimo caso a varivel y definida como um parmetro, no entanto a
palavra-chave var a precede. Isso indica que na passagem dos parmetros a funo tem acesso
ao endereo da varivel global utilizada na chamada e assim poder alterar o seu contedo.
Desta forma, quando o procedimento escreveu y<- x^(1/2), o resultado do clculo ser
armazenado em uma varivel global e ento poder ser posteriormente utilizado no programa
principal. A grande vantagem de se utilizar o procedimento dessa forma que este pode ser
transportado para outros programas independentemente das variveis utilizadas. O programa
abaixo exemplifica o uso deste procedimento:
algoritmo teste raiz quadrada
var
a,b:real
procedimento raizquad(x:real; var y:real)
inicio
y<- x^(1/2)
fimprocedimento
Prof. Thiago de Oliveira
21
Lgica de Programao
Lgica de Programao
inicio
escreva(Entre com um nmero:>)
leia(a)
raizquad(a,b)
escreva(A raiz quadrada de ,a, : ,b)
fimalgoritmo
Note que este procedimento apresentar duas sadas (y e z) que so passadas por
referncia ao procedimento, fato que no possvel de ser executado por uma funo, j que
esta pode apresentar apenas uma sada.
Assim como nas funes, as variveis estruturadas no podem ser utilizadas como
parmetros de procedimentos.
22
Lgica de Programao
Lgica de Programao
Captulo 5 Iterao
As estruturas de algoritmos discutidas anteriormente so baseadas simplesmente na
ideia de se fazer construes sequenciais. Com estas estruturas podemos avaliar o contedo
de frmulas matemticas e executar tarefas simples, no entanto, as possibilidades dos
algoritmos que se utilizam apenas dessas tcnicas so muito limitadas. Neste captulo
comearemos a discutir estruturas que atribuem maior potencialidade a algoritmos de modo a
permitir que problemas mais complexos sejam executados. Os comandos a serem estudados
nesta seo sero baseados no conceito de iterao, ou seja, na repetio de tarefas.
Considere, por exemplo o problema de se calcular a soma dos N primeiros nmeros
inteiros no-negativo. No caso de fixarmos um valor para N, N = 14, por exemplo,
poderamos utilizar as noes de sequncia para escrever um programa que calcule a soma
dos primeiros 14 nmeros inteiros:
Algoritmo Soma 14 primeiros nmeros no-negativos
var
N,soma:inteiro
inicio
soma:= 1+2+3+4+5+6+7+8+9+10+11+12+13+14
escreva(O resultado da soma : ,soma)
fimalgoritmo
Este algoritmo, apesar de apresentar o resultado correto, decepcionante uma vez que
ele permite apenas o clculo da soma dos primeiros 14 nmeros. Caso se deseje realizar a
mesma operao para um total de nmeros diferentes seria necessrio escrever outro cdigo e
medida que o total de nmeros aumenta, a dificuldade de se escrever o cdigo se torna
maior. Esse algoritmo inflexvel e pouco prtico.
Outra forma de se implementar esse tipo de soma lembrar que ela pode ser escrita
como sendo
algoritmo:
Algoritmo Soma 14 primeiros nmeros no-negativos por somatrio
var
N,soma:inteiro
inicio
soma:= 0
soma:=soma+1
soma:=soma+2
soma:=soma+3
soma:=soma+4
soma:=soma+5
soma:=soma+6
soma:=soma+7
Prof. Thiago de Oliveira
23
Lgica de Programao
Lgica de Programao
soma:=soma+8
soma:=soma+9
soma:=soma+10
soma:=soma+11
soma:=soma+12
soma:=soma+13
soma:=soma+14
escreva(O resultado da soma : ,soma)
fimalgoritmo
1. Comando Para..faca
Um dos comandos de repetio disponveis e que encontra semelhantes em todas as
linguagens de programao existentes o comando Para..faca, a sintaxe desse comando a
seguinte:
para <varivel> de <valor-inicial> ate <valor-final> [passo <incremento>] faca
<seqncia-de-comandos>
fimpara
Onde:
varivel uma varivel do tipo inteiro que serve como um contador para o
nmero de repeties a serem executadas pelo comando;
24
Lgica de Programao
Lgica de Programao
25
Lgica de Programao
Lgica de Programao
2. Comando enquanto..faca
Outra estrutura de iterao o lao condicional, cujo representante no visualg o
comando enquanto..faca, cuja sintaxe a seguinte:
enquanto <expresso-lgica> faca
<seqncia-de-comandos>
fimenquanto
Note que neste exemplo, tanto a varivel de sada soma, quanto o contador i foram
inicializados antes do comando enquanto..faca e no seu interior o contador foi incrementado
com um passo de 1.
Uma questo importante desse comando de lao condicional que se a expresso
lgica ao longo da execuo do programa nunca for satisfeita, o lao nunca ser quebrado, o
que leva ao travamento do computador. Existem comandos extras que permitem a
26
Lgica de Programao
Lgica de Programao
interrupo do lao sem que a expresso lgica seja satisfeita. No visualg esse comando o
interrompa.
3. Comando repita..ate
O comando repita..ate tambm um comando de lao condicional, assim como o
enquanto..faca. No entanto a expresso lgica vem depois da sequncia de comandos, como
mostra a sintaxe abaixo:
repita
<seqncia-de-comandos>
ate <expresso-lgica>
27
Lgica de Programao
Lgica de Programao
Captulo 6 - Seleo
Como a iterao, a seleo permite a execuo condicional de um bloco de comandos
baseada na avaliao de dados. Contudo, enquanto a iterao destinada a permitir a
repetio de um conjunto de instrues, a seleo focada em realizar a uma simples escolha
entre alternativas, de modo que um conjunto de instrues ser executado se uma determinada
condio for verdadeira e outro conjunto ser executado, se esta mesma condio for falsa. A
seguir sero discutidas algumas estruturas de seleo.
1. Comando Se..entao
O comando se..entao utilizado para executar um conjunto de instrues se um
determinada condio for satisfeita, so essa condio no seja satisfeita, o comando no
realiza nada. A sintaxe deste comando apresentada abaixo:
se <expresso-lgica> entao
<seqncia-de-comandos>
fimse
2. Comando Se..entao..senao
O comando se..entao..senao uma extenso do comando anterior. Ele define um
conjunto de instrues a serem executadas se a expresso-lgica for satisfeita e outro
conjunto, se ela no for satisfeita.
Como exemplo de utilizao, podemos escrever um algoritmo que calcula e apresenta
as razes de um polinmio de segundo grau. Sabemos que uma funo de segundo grau
apresenta a seguinte estrutura bsica:
=
4
2
4
so reais. Por outro lado se <0, as razes so complexas. Assim, como os tipos de dados do
visualg no comportam nmeros complexos, a execuo de um algoritmo para o problema
apresentado depende do valor de . Um exemplo de soluo, usando o comando se..entao o
seguinte:
Algoritmo Clculo de razes de funo de segundo grau
var a,b,c: real
x1r,x1i,x2r,x2i:real
delta:real
inicio
escreva(Entre com o valor de a:)
Prof. Thiago de Oliveira
28
Lgica de Programao
Lgica de Programao
leia(a)
escreva(Entre com o valor de b:)
leia(b)
escreva(Entre com o valor de c:)
leia(c)
delta:=b^2-4*a*c
se (delta>=0) ento
x1r = (-b+delta^(1/2))/(2*a)
x2r = (-b-delta^(1/2))/(2*a)
escreval(x1 = ,x1r)
escreval(x2 = ,x2r)
seno
x1r = -b/(2*a)
x2r = x1r
x1i = +(-delta)^(1/2)
escreval(x1 = ,x1r, + i*,x1i)
escreval(x2 = ,x2r, - i*,x1i)
fimse
fimalgoritmo
3. Comando Escolha
O comando escolha permite selecionar um conjunto de instrues a serem executadas
dependendo do valor exibido por uma expresso de seleo. A sintaxe deste comando :
escolha <expresso-de-seleo>
caso <exp11>, <exp12>, ..., <exp1n>
<seqncia-de-comandos-1>
caso <exp21>, <exp22>, ..., <exp2n>
<seqncia-de-comandos-2>
...
outrocaso
<seqncia-de-comandos-extra>
fimescolha
Um exemplo de utilizao:
algoritmo "Times"
var time: caractere
inicio
escreva ("Entre com o nome de um time de futebol: ")
leia (time)
escolha time
caso "Flamengo", "Fluminense", "Vasco", "Botafogo"
escreval (" um time carioca.")
caso "So Paulo", "Palmeiras", "Santos", "Cornthians"
escreval (" um time paulista.")
outrocaso
escreval (" de outro estado.")
fimescolha
fimalgoritmo
29
Lgica de Programao
Lgica de Programao
Referncias
[1] HOLLOWAY, James Paul. Introduo Programao para Engenharia. Rio de
Janeiro: LTC, 2006;
[2] Manual Software Visualg, 2010.
30
Lgica de Programao