-
UNIVERSIDADE ESTCIO DE S
CURSO DE ENGENHARIA
LGICA DE PROGRAMAO
PROF. M. Sc. EDGAR GURGEL
RIO DE JANEIRO
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 2 de 63
SUMRIO I - Algoritmos e Fluxogramas ........................................................................... 4 1 - Introduo .................................................................................................................... 4 2 - Conceito de Algoritmo ................................................................................................ 5 3 - Exemplos Informais de Algoritmos ............................................................................ 6
3.1 - Exemplo 1: Troca de uma lmpada queimada ................................................. 6 4 - Exemplo de um Algoritmo .......................................................................................... 7 5 - Fluxogramas (Diagrama de Blocos) ............................................................................ 8 Exerccios: ...................................................................................................................... 10 II - Conceitos Bsicos ..................................................................................... 11 1 - Tipos Primitivos de Dados ........................................................................................ 11 2 - Constantes ................................................................................................................. 11 3 - Variveis .................................................................................................................... 12 4 - Identificadores ........................................................................................................... 12 5 - Expresses Aritmticas ............................................................................................. 13 6 - Expresses Lgicas ................................................................................................... 14 7 - Cadeias de Caracteres ................................................. Error! Bookmark not defined. 8 - Comando de Atribuio ............................................................................................ 15 9 - Entrada e Sada de Dados .......................................................................................... 16 10 Blocos ........................................................................................................................ 17 Exerccios: ...................................................................................................................... 18 III - Estrutura de Sequncia ............................................................................ 19 1 - Introduo .................................................................................................................. 19 2 - Conceito de Sequncia .............................................................................................. 19 3 Exemplos .................................................................................................................. 19 Exerccios: ...................................................................................................................... 23 IV - Estrutura de Seleo ................................................................................ 24 1 - Conceito de Seleo .................................................................................................. 24 2 - Seleo Simples ......................................................................................................... 24 3 - Seleo Composta ..................................................................................................... 25 4 - Seleo Encadeada (Ses encaixados) ....................................................................... 27 5 - Seleo de Mltipla Escolha (Estrutura Caso) .......................................................... 28 Exerccios: ...................................................................................................................... 31 V Funo ........................................................................................................ 32
1 - Funes Numricas .......................................................................................... Error! Bookmark not defined.
Exerccios: ...................................................................................................................... 31 VI - Estrutura de Repetio ............................................................................. 32 1 - Conceito de Repetio ............................................................................................... 38 2 - Enquanto (Repetio com Teste no Incio) ............................................................... 38 3 - Repita (Repetio com Teste no Final) ..................................................................... 40 4 - Para (Repetio com Varivel de Controle) .............................................................. 42 Exerccios: ...................................................................................................................... 43
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 3 de 63
Anexos ............................................................................................................................ 46 Anexo A Programao em C++ ................................................................................ 46 1 - Introduo .................................................................................................................. 46 2 - Fases de um Programa em C++ ................................................................................ 47 3 - Estrutura de um Programa ......................................................................................... 47 4 - Estrutura de uma Funo ........................................................................................... 48 5 - Variveis .................................................................................................................... 48 6 - Operadores Aritmticos ............................................................................................. 48 7 - Operadores Relacionais ............................................................................................. 48 8 - Entrada e Sada de dados ........................................................................................... 49 9 - Tipos de Dados .......................................................................................................... 50 10 - Estruturas ................................................................................................................. 51 10.1 - Estrutura de Seleo ............................................................................................. 51 10.2 - Estrutura de Seleo Encadeada ........................................................................... 51 10.3 - Estrutura de Repetio While ............................................................................... 52 10.4 - Estrutura de Repetio For ................................................................................... 52 Anexo B Tutorial Dev C++ ....................................................................................... 53 Anexo C Tutorial Visual Studio C ........................................................................... 60
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 4 de 63
I - Algoritmos e Fluxogramas
1 - Introduo
Os computadores, infelizmente, s fazem aquilo que se manda, e no necessariamente aquilo que se deseja que eles faam. No deve haver ambigidade nas
instrues dos programas que se fornece ao computador, nem a possibilidade de
interpretaes alternativas. O computador sempre tomar algum caminho em suas
aes, muito cuidado necessrio para se assegurar que o computador siga pelo nico
caminho correto possvel que leve aos resultados desejados. Por exemplo, uma
afirmao como: calcule a mdia qualquer de notas muito imprecisa, apesar de
parecer especificar aquilo que se deseja. Muitos detalhes foram omitidos, entre eles cita-
se: onde esto as notas, quantas so, os ausentes devem ou no ser includos, aqui est a
essncia da programao de computadores.
Muitos problemas interessantes parecem ser complexos do ponto de vista da
programao. Em alguns casos (tais como problemas matemticos difceis), esta
complexidade pode ser inerente ao problema em si, entretanto, em muitos casos isto
pode ser devido a outros fatores que esto dentro do nosso controle, por exemplo, uma
especificao incompleta ou obscura do problema. No desenvolvimento de programas,
como ser visto, a complexidade no precisa ser sempre um problema, pois a mesma
pode ser controlada adequadamente.
A programao de computadores pode ser difcil. Tal dificuldade se deve a sua
complexidade inerente, combinando muitos processos mentais. Entretanto, pode-se
tornar mais fcil. Por exemplo, um trabalho de programao pode tornar-se muito mais
fcil se o mesmo for dividido sistematicamente em partes menos complexas (a
abordagem do dividir para conquistar).
Primeiramente, importante separar a fase de resoluo do problema da fase de
implementao do problema. Na fase de resoluo do problema, ser concentrada a
elaborao de um algoritmo para resolver um problema proposto. Somente depois da
satisfao com a formulao de um algoritmo adequado que se passar
implementao deste algoritmo em alguma linguagem de programao. Dado um
algoritmo suficientemente preciso, sua codificao em alguma linguagem de
programao direta.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 5 de 63
Figura 1.1: Resoluo do Problema e Programao.
2 - Conceito de Algoritmo
Um algoritmo pode ser definido como: uma sequncia finita de instrues
bem definidas, logicamente encadeadas e no ambguas, onde cada uma das quais
pode ser executada mecanicamente num perodo de tempo finito com uma
quantidade de esforo finito para resolver um problema do mundo real. A
definio sugere que os algoritmos tenham diversas propriedades importantes.
Primeiramente, os passos de um algoritmo devem ser simples e sem ambiguidade e
devem estar numa ordem cuidadosamente definida, Alm disso, se insiste em que os
algoritmos sejam efetivos, isto , devem sempre resolver um problema utilizando um
nmero finito de passos.
Construir algoritmos o objetivo principal de toda a programao, portanto
desenvolver bons algoritmos a principal tarefa do programador. Deve-se, pois, seguir
algumas regras bsicas na resoluo de um problema:
! Compreender o problema
Deixar claro o problema;
Identificar as entradas e as sadas.
! Delinear um plano
Desenvolver um procedimento para a soluo do problema.
Soluo em forma de
Algoritmo
Soluo como um programa
de computador
Problema
Passo difcil
Fase da resoluo do
problema
Fase da implementao
do problema
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 6 de 63
! Executar o plano
Verificar manualmente e corrigi-lo, se necessrio;
Codificar o algoritmo;
Executar o algoritmo com dados de teste, depurando quando necessrio.
! Refinar e documentar o algoritmo
Voltar, revisando passos;
Dar um tratamento esttico ao algoritmo.
Todo algoritmo composto por um grupo de aes primitivas (aes passveis
de execuo por um ser humano ou por uma mquina). As aes primitivas que se
utilizar na construo de algoritmos sero construes lingusticas em portugus
(Portugol, Portugus estruturado ou pseudocdigo).
O portugus estruturado tem como finalidade mostrar uma notao para
elaboraes de algoritmos, os quais sero posteriormente utilizados para a definio,
criao e desenvolvimento de uma linguagem computacional.
A diferena entre um algoritmo e uma linguagem de programao de alto nvel,
que a primeira (escrita em portugus, francs, alemo, ...) no pode ser compilada em
um computador. Isto , quando se cria um algoritmo em Pseudocdigo, est se
assumindo que exista um computador hipottico capaz de execut-lo.
3 - Exemplos Informais de Algoritmos
Apesar de o termo ser novo em si, o conceito certamente bastante familiar. As
indicaes dadas para se chegar a uma determinada rua constituem um algoritmo para
se encontrar essa rua. Como exemplo pode-se citar: receita de cozinha, planta de
projeto, etc.
Por exemplo, as instrues para trocar uma lmpada queimada so constitudas
por uma descrio dos objetos manipulados e por uma sequncia de passos. Estas
instrues podem ser descritas como um algoritmo informal.
3.1 - Exemplo 1: Troca de uma lmpada queimada
! Desligar o interruptor;
! Selecionar uma nova lmpada para a substituio;
! Posicionar a escada embaixo da lmpada queimada;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 7 de 63
! Subir na escada;
! Retirar a lmpada queimada do soquete;
! Descer da escada;
! Deixar a lmpada queimada;
! Pegar a lmpada boa;
! Subir na escada;
! Colocar a nova lmpada no soquete;
! Descer da escada;
! Ligar o interruptor;
! Guardar a lmpada queimada e a escada.
4 - Exemplo de um Algoritmo
Para se ter noo de um algoritmo se tomar como exemplo a soma dos 100
primeiros nmeros inteiros positivos. O objetivo da apresentao deste exemplo
fornecer uma ideia intuitiva dos passos e do raciocnio envolvidos na gerao de um
algoritmo. No caso de se resolver este problema em uma calculadora, seria fornecido a
ela a seguinte sequncia de passos:
Limpar o visor da calculadora
Pressionar a tecla 1;
Pressionar a tecla +;
Pressionar a tecla 2;
Pressionar a tecla +;
Pressionar a tecla 3;
Pressionar a tecla +;
...
Pressionar a tecla 100;
Pressionar a tecla =
O smbolo ... na descrio de aes acima muito importante, pois indica que
existe um padro de comportamento que se repete ao longo da descrio e, portanto,
no necessrio enumerar todos os passos, porque se pode facilmente gerar e executar
os que esto implcitos. No entanto, a existncia destes smbolos no permite qualificar
o conjunto de instrues anteriores como um algoritmo, pois a caracterstica da
rigorosidade deixa de se verificar.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 8 de 63
Para transformar as instrues anteriores num algoritmo que possa ser executado
por um computador, necessrio tornar explcito o que est implcito. S que para
explicitar todos os passos do algoritmo anterior, teramos mais trabalho do que executar
o algoritmo propriamente dito, portanto ser conveniente encontrar uma soluo
alternativa. A soluo para este tipo de algoritmo ser vista a seguir nas estruturas de
controle.
5 - Fluxogramas (Diagrama de Blocos)
frequentemente mais fcil transmitir ideias atravs de ilustraes. Mapas
fornecem uma representao conveniente da topologia da cidade, e pode ter mais valor
quando se est perdido do que as explicaes verbais. Uma primeira tentativa no sentido
de utilizar um formato grfico na descrio de algoritmos, que data dos dias de Von
Neumann, envolveu o uso de fluxogramas. Um fluxograma mostra a lgica de um
algoritmo, enfatizando os passos individuais e suas interconexes.
Durante os anos um simbolismo relativamente padro apareceu. Um clculo
representado por um retngulo, uma deciso por um losango e as operaes de entrada e
sada por formas simbolizando os meios utilizados. Estes smbolos so ligados por
linhas que indicam a ordem e o sentido em que as operaes devem ser executadas.
Nos ltimos anos, a atitude dos profissionais de programao em relao ao
popular fluxograma diminuiu consideravelmente. A opinio sobre os fluxogramas
divergente. Para alguns, so considerados simplesmente um apndice desnecessrio de
um programa; para outros, so vistos como um instigador de maus hbitos de
programao.
Uma nova gerao de programadores est sendo educada com novos mtodos de
desenvolvimento de programas, mtodos aos quais o fluxograma, adiciona muito pouco.
Muitas vezes, quando mostra a lgica de um algoritmo, o fluxograma obscurece sua
estrutura. Assim sendo percebeu-se que a estrutura to importante (e possivelmente
mais) quanto a lgica.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 9 de 63
Smbolos comuns de fluxogramas
Clculo Deciso Entrada Sada
Incio / Fim Conectores
Exemplo de um fluxograma
Incio nota1, nota2 nota3, nota4 media (nota1 + nota2 + nota3 + nota4) / 4 sim se no media >= 5.0 voc passou com uma voc foi reprovado com nota de, media uma nota de, media
Fim
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 10 de 63
Exerccios:
1) O que um algoritmo? E qual a sua finalidade na programao?
2) Explique sucintamente as fases de resoluo e implementao de um programa.
3) O que um fluxograma? E portugus estruturado?
4) Usando o conceito de algoritmo informal, elabore um para mudar um pneu furado.
Admita que esto disponveis um macaco e um estepe em boas condies.
5) Trs senhoras, dona Branca, dona Rosa e dona Violeta passeavam pelo parque
quando dona Rosa disse: No curioso que estejamos usando vestidos de cores branca,
rosa e violeta, embora nenhuma de ns esteja usando um vestido de cor igual ao seu
prprio nome. Uma simples coincidncia, respondeu a senhora com o vestido violeta.
Diga qual a cor do vestido de cada senhora?
6) Trs jesutas e trs canibais precisam atravessar um rio; para tal, dispem de um
barco com capacidade para duas pessoas. Por medida de segurana, no se deve permitir
que em alguma margem a quantidade a quantidade de jesutas seja inferior de
canibais. Qual a soluo para efetuar a travessia com segurana? Elabora um algoritmo
mostrando a resposta, indicando as aes que concretizam a soluo deste problema.
7) Elabore um algoritmo que mova trs discos de uma Torre de Hani, que consiste em
trs hastes (a,b,c), uma das quais serve de suporte para trs para trs discos de tamanhos
diferentes (1,2,3), os menores sobre os maiores. Pode-se mover um disco de cada vez
para qualquer haste, contanto que nunca seja colocado um disco maior sobre um menor.
O objetivo transferir os trs discos para outra haste.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 11 de 63
II - Conceitos Bsicos
1 - Tipos Primitivos de Dados
Um tipo de dado primitivo corresponde ao conjunto de valores que uma
varivel, constante, expresso ou funo pode assumir e o conjunto de operaes que
podem ser efetuadas sobre ele. Estes conjuntos de valores so definidos pelas
linguagens de programao, sobre modelos matemticos, que aproveitam as operaes
sobre estes modelos. No caso do estudo de algoritmos, usaremos os seguintes tipos:
Numricos:
#Inteiro: toda e qualquer informao numrica que pertena ao conjunto dos
nmeros inteiros, isto , dados numricos positivos, negativos e o zero, excluindo-se
os nmeros fracionrios.
#Real: toda e qualquer informao numrica que pertena aos nmeros reais,
isto , o conjunto dos inteiros mais os nmeros fracionrios.
No-numricos:
#Caractere: toda e qualquer informao composta por apenas um dos caracteres
alfanumricos {0...9 }, {A...Z }ou especiais, por exemplo {%, &,
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 12 de 63
resposta = s; {caractere} carro = caminho; {cadeia}
pi = 3.1415; {real} situacao = verdadeiro; {lgico} 3 - Variveis
Uma informao classificada como varivel quando tem a possibilidade de ser
alterada em algum instante no decorrer do programa. Todo dado a ser armazenado na
memria de um computador deve ser previamente identificado, ou seja, primeiro
necessrio saber qual o seu tipo, para depois fazer a alocao de um espao de memria
para o seu armazenamento adequado.
Em um ambiente computacional, as informaes variveis so guardadas em
dispositivos eletrnicos chamados de memria. Esta memria pode ser vista como um
armrio composto de vrias gavetas, no qual as gavetas seriam os locais fsicos
responsveis por armazenar objetos; os objetos (que podem ser substitudos) seriam as
informaes e as gavetas seriam as variveis.
Visto que na memria existem inmeras variveis, precisa-se diferenci-las, o
que feito atravs do nome da varivel. Cada varivel, no entanto, pode guardar apenas
uma informao de cada vez, sendo sempre do mesmo tipo. Os exemplos abaixo
mostram como se deve declarar uma varivel: var nome,endereco: cadeia[40]; apart: inteiro; resposta: lgico;
4 - Identificadores So as constantes, as variveis e o nome do programa e servem para a sua
identificao no programa. Os identificadores devem acompanhar as seguintes regras de
formao:
a) Devem comear por um caractere alfabtico;
b) Podem ser seguidos por mais caracteres alfabticos e/ou numricos e/ou (_);
c) No permitido o uso de caracteres especiais, com exceo para o sublinhado (_);
d) Os nomes escolhidos devem explicitar seus contedos;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 13 de 63
e) Os nomes escolhidos no podem ser uma palavra reservada do programa;
No poder haver no mesmo programa dois identificadores com o mesmo nome,
mesmo que representem a mesma grandeza.
5 - Expresses Aritmticas Denomina-se expresso aritmtica aquela cujos operadores so aritmticos e
cujos operandos so constantes e/ou variveis do tipo numrico (inteiro e/ou real).
Operadores Aritmticos
FUNO SMBOLO Adio + Subtrao - Multiplicao * Diviso / Potenciao ^ Quociente da diviso inteira DIV ou # Resto da diviso inteira MOD ou %
Alm das operaes bsicas anteriormente citadas, pode-se usar nas expresses
aritmticas algumas funes da matemtica:
Funes Aritmticas (Primitivas)
FUNO SMBOLO Retorna o seno de X SIN(X) Retorna o cosseno de X COS(X) Retorna a tangente de X TG(X) Retorna o arco cujo seno X ARCSIN(X) Retorna o arco cujo cosseno X ARCCOS(X) Retorna o arco cujo tangente X ARCTG(X) Retorna o valor absoluto de X ABS(X) Retorna o logaritmo na base e de X LOG(X) Retorna o logaritmo na base 10 de X LOG10(X) Retorna a raiz quadrada de X SQRT(X) ou RAIZ(X) Retorna o quadrado de X SQR(X) ou QUAD(X) Arredonda o fracionrio X para o inteiro superior ROUND(X) Arredonda o fracionrio X para o inteiro inferior TRUNC(X) Retorna a exponencial e elevado a X EXP(X)
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 14 de 63
6 - Expresses Lgicas
Denomina-se expresso lgica aquela cujos operadores so lgicos e/ou
relacionais e cujos operandos so relaes e/ou variveis e/ou constantes do tipo lgico. Operadores Relacionais
FUNO SMBOLO Igual a = Diferente de Maior que > Menor que < Maior ou igual que >= Menor ou igual que
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 15 de 63
Disjuno (v) Conectivo ou:
A B A ou B Verdadeiro Verdadeiro Verdadeiro Verdadeiro Falso Verdadeiro Falso Verdadeiro Verdadeiro Falso Falso Falso Durante a execuo de uma expresso que envolve vrios operadores,
necessria a existncia de prioridades, caso contrrio poderemos obter valores que no
representam o resultado esperado. a seguinte a hierarquia que deve ser seguida:
1. Efetuar as operaes embutidas em parnteses mais internos 2. Efetuar funes matemticas 3. Efetuar potenciaes 4. Efetuar as multiplicaes e/ou divises 5. DIV e/ou MOD 6. Efetuar adio e/ou subtrao 7. Operadores relacionais 8. Operadores lgicos
8.1. no
8.2.e / ou
7 - Comando de Atribuio Um comando de atribuio permite fornecer um valor a uma certa varivel
(guardar um objeto em uma gaveta), onde o tipo dessa informao deve ser compatvel
com o tipo de varivel, isto , somente podemos atribuir um valor inteiro a uma varivel
capaz de comport-lo, ou seja, uma varivel declarada do tipo inteiro. Exemplos:
total 34; resposta verdadeiro; time_bom Flamengo; A caracterstica principal das variveis a de que podem guardar valores
diferentes em tempos diferentes. A habilidade de modificar os valores das variveis
muito importante, por isso, s vezes, pode-se verificar a presena de mesma varivel em
ambos os lados da linha de atribuio. Considere que esta apario em ambos os
membros tm significados diferentes no processamento do comando.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 16 de 63
No exemplo abaixo, o primeiro valor que a varivel X alocar ser 1, no
segundo momento este valor passar a ser 2. O primeiro valor ser perdido e o segundo
valor continuar alocado na memria, at que haja uma nova atribuio a esta varivel.
Por isso que se diz que o comando de atribuio uma operao destrutiva, pois
qualquer valor que a varivel possua antes do processamento da operao de atribuio
se perde, sendo substitudo pelo novo valor. O exemplo mostra a funo da varivel em
cada um dos lados.
x 1; x x + 1;
8 - Entrada e Sada de Dados Os clculos do computador no so de grande valor a no ser que, primeiro, se
possa fornecer os dados sobre os quais estes clculos sero efetuados e, segundo, ver os
resultados desses clculos. Uma vez que as operaes de entrada e sada so muito
relacionadas interao dos programadores, sua forma altamente dependente da
linguagem de programao especfica utilizada e, s vezes, do prprio sistema de
computador.
Todo algoritmo para computador possui comandos que levam a informao da
memria principal do computador a seus perifricos e vice-versa. Os comandos que se
far uso para manusear entrada e sada de informaes so mostrados a seguir: leia(lista de entrada)
A lista de entrada nos d os nomes das variveis s quais os valores devem ser
atribudos.
O comando ler permite ler valores dados atribuindo-os a variveis indicadas. H
de se ressaltar que o processo de associar valores s variveis indicadas semelhante
operao de atribuio em dois importantes aspectos:
Qualquer valor que a varivel possua anteriormente ser destrudo;
Como na atribuio, verificada a compatibilidade de tipo.
Indica que um segundo valor
ser atribudo varivel x
Indica que o primeiro valor da varivel x ser utilizado
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 17 de 63
O exemplo abaixo demonstra tais aspectos: var
a,b: inteiro; b 1; leia(a,b);{valores de a e x lidos so 3 e 4} leia(a); {valor de a lido seja 10}
Nota-se, ao executar o exemplo acima, que o valor final de a ser 10, pois o
outro valor (3) foi destrudo, devido a ordem de execuo dos comandos e que o valor
de b ser 4 pelo mesmo motivo. escreva(lista de sada)
O comando de sada semelhante ao comando de entrada em formato, porm
um pouco mais geral em termos do que se pode especificar na lista de sada. possvel
mostrar:
O contedo de qualquer varivel;
O resultado de qualquer expresso;
O valor de qualquer constante. Seguem alguns exemplos:
escreva(total); escreva(valor1, valor2, media); escreva(Bom Dia!, nome); escreva(Voc pesa, x*2, quilos);
9 - Blocos Um bloco pode ser definido como um conjunto de aes com uma funo
definida; neste caso, um algoritmo pode ser visto como um bloco. Delimita-se o bloco
por um incio e um fim. incio . . {seqncia de aes} . fim.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 18 de 63
Exerccios:
8) Determine o valor atribudo a varivel A:
1. A 3 ^ 3 + 4 * 8 / 5 + 2 * 4
2. B 16 - 12 / 3
C 3
A B div C + (B - 2 * C) mod C
9) Determine o valor de X nas expresses:
1. A 2
X 6 - SQRT (2 ^ A) * 5 - 4 * (18 - 4 ^ 2)
2. A 2
B 4
X ((28 + 3 * B) / A - (A ^ B)) * 3 * 2
10) Determine o resultado(falso ou verdadeiro) das seguintes expresses lgicas:
1. no (X mod Y > 13) e no (Y > 22), para X=14 e Y=3
2. no DIAUTIL ou ((HORASDIA > 8) e no (HORASTOT div HORASDIA >
21)), para DIAUTIL = falso, HORASDIA = 4 e HORASTOT = 22
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 19 de 63
III - Estrutura de Sequncia
1 - Introduo
Na criao de algoritmos, sero utilizados os conceitos de bloco lgico, entrada
e sada de dados, variveis, constantes, atribuies, expresses lgicas, relacionais e
aritmticas, bem como comandos que traduzam estes conceitos de forma a representar o
conjunto de aes.
Para que esse conjunto de aes se torne vivel, deve existir uma perfeita relao
lgica intrnseca ao modo pelo qual essas aes so executadas, ao modo pelo qual
regido o fluxo de execuo.
Atravs das estruturas bsicas de controle do fluxo de execuo sequncia,
seleo, repetio e da combinao delas, pode-se criar um algoritmo para solucionar
qualquer problema.
2 - Conceito de Sequncia
Sequncia um conjunto de aes primitivas que sero executadas numa
sequncia linear de cima para baixo, isto , sero executadas na mesma ordem em que
foram escritas. As aes devem sempre ser seguidas por ponto-e-vrgula(;), que objetiva
separar uma instruo da outra e auxiliar organizao sequencial das aes, pois aps
encontrar um (;) deve-se executar o prximo comando da sequncia.
3 Exemplos Exemplo 1: Uma loja de mveis est promovendo uma liquidao anual. Deve-se
desenvolver um programa para calcular o preo total, para o cliente de um item que ter
certa reduo percentual (desconto) sobre seu preo de lista.
Para se resolver este problema, o primeiro passo procurar entend-lo. Do modo
como foi feito, o enunciado do problema muito geral. Por exemplo, poder-se fazer as
seguintes perguntas:
Todos os itens tero o mesmo desconto?
O que includo no preo total para o cliente?
Devem ser includos impostos? Neste caso a que taxa?
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 20 de 63
Um programador deve tomar decises a respeito da fonte e natureza dos dados
de entrada, da sada desejada, do grau de preciso e assim por diante. Programadores
profissionais geralmente tomam essas decises discutindo com os futuros usurios do
programa.
Neste problema, descobriu-se que a reduo percentual (o desconto) sobre o
preo de lista diferente de item para item. O preo total para o cliente incluir o preo
com desconto, mais uma taxa de imposto fixo de 5% sobre esse preo. No entanto, os
usurios do programa querem que seja tambm calculada a quantia economizada como
o resultado do desconto. Temos, pois, que fornecer ao programa informaes relativas
ao preo do item e percentagem de desconto.
O programa, ento, dar informaes relativas quantia economizada e preo
total para o cliente. Mais a ttulo de metodologia sero utilizadas algumas regras para
desenvolver este primeiro programa.
# REGRA 1 #
A primeira declarao em um programa serve para lhe dar um nome, este
facultativo, mas sempre obedecendo s regras dos identificadores. Esta primeira
declarao marca o seu ponto inicial. Exemplo: Algoritmo PRECO_VENDA;
# REGRA 2 #
Logo aps o nome do programa vem a declarao das constantes, se nele houver.
Todas as constantes a serem usadas no programa recebem os seus valores pr-definidos.
Exemplo: const taxa_imp = 0.05;
# REGRA 3 #
Depois disto vem a declarao das variveis a serem usadas no programa. O
nome e tambm o tipo das variveis devem ser declarados.
A regra 3 requer o desenvolvimento de um procedimento para resolver o
problema. Isto , as incgnitas (variveis de sada) devem ser determinadas por algum
tipo de manipulao de dados (variveis de entrada). Para encontrar essas variveis,
pode-se dividir o trabalho em trs tarefas principais:
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 21 de 63
Obter informaes relativas ao preo de lista e desconto (fornecer os dados de
entrada);
Calcular a economia e o preo total;
Gerar a sada do programa (os resultados esperados: preo total e economia).
var
preco_lista, taxa_desc, economia, preco_red, preco_total: real;
# REGRA 4 #
O incio da seo de procedimentos de todo programa marcado por incio.
A entrada e sada de variveis so expressas genericamente, sem referncia a
dispositivos especficos de E/S (como terminal de vdeo, impressora, teclado, disco,...).
O procedimento para a entrada de dados ser o seguinte: primeiramente ser
mandada uma mensagem para o usurio atravs do comando escrever, por exemplo: escreva(Entre com o preo da lista:);
Em seguida ser utilizado o comando ler para colocar o valor que o usurio
digitou na memria do computador. Significa que o programa deve receber um valor
para a varivel. leia(preco_total);
Para exibir o valor de preco_total ser utilizado novamente o comando escrever,
que significa que este valor ser mostrado em algum dispositivo de sada, neste caso o
vdeo. escreva(O preo total calculado foi:, preco_total);
O comando escrever tambm pode exibir constantes em formas de mensagem,
como por exemplo: escreva(Este programa calcula o preo reduzido);
# REGRA 5 #
As variveis recebero novos valores dentro do programa, por meio de operao
de atribuio .
Para processar a informao de entrada, a fim de obter a sada, deve-se dispor de
algum mtodo para calcular e armazenar o valor de uma expresso. Por exemplo, para
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 22 de 63
calcular a varivel economia, precisa multiplicar a varivel preo de lista pela
percentagem de desconto (expressa como um valor decimal). Isto pode ser escrito:
economia preco_lista * (taxa_desc / 100); O comando acima pode ser lido como: economia recebe o valor de preco_lista
multiplicado por taxa_desc dividido por cem.
# REGRA 6 #
O fim de todo o programa marcado por um fim.
Combinando todos esses comandos, o programa pode ser expresso, em
linguagem algortmica, como se segue: Algoritmo preco_venda; const taxa_imp = 0.05; var
preco_lista, taxa_desc, economia, preco_red, preco_total: real; inicio
escreva(Entre com o preo da lista:); leia(preco_lista); escreva(Entre com o desconto percentual:); leia(taxa_desc); economia preco_lista * (taxa_desc / 100); preco_red preco_lista - economia; preco_total preco_red + preco_red * taxa_imp; escreva(A economia :, economia); escreva(O preo total :, preco_total); fim.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 23 de 63
Exerccios:
11) Construir um algoritmo para calcular a mdia aritmtica entre duas notas
quaisquer fornecidas pelo usurio.
12) Dados os lados de um tringulo retngulo (nas variveis Lado1 e Lado2),
determine e exiba o comprimento do terceiro lado (hipotenusa). Supe-se que todas
as variveis sejam inteiras.
13) Preparar um algoritmo para ler uma temperatura dada na escala Celsius e exibir o
equivalente na escala Fahrenheit (frmula de converso: F= 9 / 5 * C + 32).
14) Ler dois valores para as variveis A e B, efetuar a troca dos valores de forma que
a varivel A passe a possuir o valor da varivel B e que a varivel B passe a possuir o
valor da varivel A. Apresentar os valores trocados.
15) Preparar um algoritmo para efetuar o clculo de quantidade de litros de
combustvel gasta em uma viagem, utilizando-se um automvel que faz 12 KM por
litro. Para obter o clculo, o usurio dever fornecer o tempo gasto na viagem e a
velocidade mdia durante a mesma. Desta forma, ser possvel obter a distncia
percorrida com a frmula: distancia = tempo * velocidade. Tendo o valor da distncia,
basta calcular a quantidade de litros de combustvel utilizada na viagem com a
frmula: litros = distancia / 12. O programa dever exibir o valor da quantidade de litros
de combustvel utilizada na viagem.
16) Elaborar um algoritmo para ler dois valores inteiros e efetuar as operaes de
adio, subtrao, multiplicao e diviso do primeiro pelo segundo, apresentando no
final os quatro resultados obtidos.
17) Preparar um algoritmo para ler os valores dos coeficientes a, b, c de uma equao
quadrtica da forma: ax2 + bx + c e exibir o valor do discriminante.
18) O cardpio de uma casa de hambrguer dado abaixo. Preparar um algoritmo
para ler a quantidade de cada item comprado e calcular a conta final.
Casa de hambrguer Hambrguer R$ 4,20 Cheeseburger R$ 4,50 Batata frita R$ 3,80 Milkshake R$ 5,80
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 24 de 63
IV - Estrutura de Seleo
1 - Conceito de Seleo Apesar de se conseguir solucionar problemas e transform-los em programas, os recursos da estrutura sequencial so muito limitados, pois haver momentos em que um
determinado valor dentro de um programa necessitar ser tratado para se efetuar um
processamento mais adequado.
Uma estrutura de seleo permite a escolha de um grupo de aes e estruturas a
ser executado quando determinadas condies, representadas por expresses lgicas,
so ou no satisfeitas.
Deve-se imaginar a seguinte situao: um programa que apresente a mdia
escolar de um aluno. At aqui, muito simples, mas alm de calcular a mdia, o
programa deve apresentar se o mesmo est aprovado ou reprovado segundo a anlise de
sua mdia. Deve-se observar que aqui ser necessrio verificar a mdia do aluno para
ento se tomar uma deciso no sentido de apresentar a sua real situao: aprovado ou
reprovado.
2 - Seleo Simples
Sintaxe da estrutura: Se Ento inicio instruo 1; instruo 2; . . . instruo n; fim; {fim do ento} fim-se;
uma expresso lgica, que quando verificada, pode gerar um
resultado falso ou verdadeiro.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 25 de 63
Se for verdadeira, ento o bloco verdade (Ento) ser executado;
caso contrrio ( for falsa) o comando ser encerrado.
Verificar-se-, agora, o seguinte exemplo, para se analisar a estrutura alternativa
simples:
Algoritmo notas1; {Calcula a mdia aritmtica entre duas notas e verifica se o aluno foi aprovado por mdia} var
n1,n2,media: real; inicio leia(n1); leia(n2); media (n1 + n2)/2; escreva(A mdia foi =, media); Se media >= 8 Ento escreva(Aprovado por mdia); fim-se; fim. {trmino do algoritmo}
3 - Seleo Composta
Sintaxe de estrutura: Se Ento Incio instruo 1; instruo 2; . . instruo n; fim Seno inicio instruo 1;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 26 de 63
instruo 2; . . instruo n; fim; fim-se;
Se a condio for satisfeita, ento apenas o bloco verdade ser executado, caso
contrrio, o bloco falso o que ser executado.
Exemplo 1: Construir um algoritmo para calcular as razes de uma equao do 2 grau. Algoritmo equacao;{calcula as razes da equao} var
x1,x2,delta,a,b,c: real; Incio escrever(Entre com os valores dos coef. a, b e c:); leia(a); leia(b); leia(c); delta b^2 - 4*a*c; Se delta > 0 Ento inicio x1 (-b + SQRT(delta)) / 2 * a; x2 (-b - SQRT(delta)) / 2 * a; escreva(raiz 1=,x1, raiz 2=,x2);
fim Seno escreva(No existem razes reais!); fim-se; fim.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 27 de 63
Exemplo 2: Melhorar o exemplo do clculo da mdia das notas: Algoritmo notas2;{Calcula a mdia aritmtica entre duas notas e verifica se o aluno foi aprovado por mdia} var
n1,n2,media: real; inicio leia(n1); leia(n2); media (n1 + n2)/2; escrever(A mdia foi =, media); Se media >= 8 Ento escreva(Aprovado por mdia); Seno escreva(Prova Final); fim-se; fim. {trmino do algoritmo} 4 - Seleo Encadeada ou Aninhada (Ses encaixados)
Pode-se agrupar vrias alternativas a fim de inspecionar uma ou mais condies.
Geralmente tal estrutura formada quando uma determinada instruo ou bloco de
aes deve ser executado se um conjunto de possibilidades ou combinaes de situaes
for satisfeito.
Sintaxe da estrutura: Se ento instruo 1 seno Se ento inicio instruo 2; instruo 3;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 28 de 63
instruo 4; fim seno Se ento instruo 5; fim-se; fim-se; fim-se;
Se for satisfeita, ento a instruo 1 ser executada, caso contrrio,
a ser inspecionada e se for satisfeita, ento o bloco de aes (instruo 2,
instruo 3, instruo 4) ser executado, caso contrrio a ser verificada e
se for satisfeita, a instruo 5 ser executada.
5 - Seleo de Mltipla Escolha (Estrutura Caso)
Quando uma nica varivel pode assumir diversos valores e que as instrues a
serem executadas dependam do valor armazenado nesta varivel, pode-se usar a
estrutura Caso. Seria uma forma mais compacta da Seleo encadeada.
Sintaxe da estrutura: Caso faa v1: instruo 1; v2: inicio instruo 2; instruo 3; instruo 4; fim; Seno
inicio instruo 7; instruo 8;
fim; {fim do bloco seno} fim; {fim da estrutura Caso}
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 29 de 63
Exemplo: Construa um algoritmo que, tendo como dados de entrada o preo de um
produto e um cdigo de origem, emita o preo junto de sua procedncia. Caso o cdigo
seja nenhum dos especificados, o produto deve ser encarado como importado.
Cdigo de Origem:
1- Sul 2- Norte 3- Leste 4- Oeste Algoritmo produto; var preco: real; origem: inteiro; inicio leia(origem); leia(preco); Caso origem faa 1: escreva(preco, Produto do Sul); 2: escreva(preco, Produto do Norte); 3: escreva(preco, Produto do Leste); 4: escreva(preco, Produto do Oeste); seno escreva(preco, Produto Importado); fim; fim.
Exerccios 19) Faa um algoritmo para ler um nmero e se ele for maior do que 20 ento exibir a
metade desse nmero.
20) Faa um algoritmo para ler um nmero e informar se ele positivo, negativo ou
nulo.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 30 de 63
21) Faa um algoritmo para realizar as quatro operaes bsicas. Considere que
sero lidos dois nmeros como entrada e os seguintes caracteres representando as
operaes bsicas: + (adio), - (subtrao), * (multiplicao) e / (diviso). Voc deve
considerar ainda a possibilidade do usurio digitar um valor diferente das operaes
bsicas descritas acima, e neste caso o algoritmo deve escrever uma mensagem
informando Caractere invlido.
22) Faa um algoritmo para ler dois nmeros e efetuar a adio destes nmeros. Caso
o valor somado seja maior que 20 este dever ser apresentado somando-se a ele
mais 8, caso o valor somado seja menor ou igual a 20 este dever ser apresentado
subtraindo-se 5.
23) A Prefeitura do Rio abriu uma linha de crdito para os funcionrios estatutrios. O
valor mximo da prestao no poder ultrapassar 30% do salrio bruto. Faa um
algoritmo que permita entrar com o salrio bruto e o valor da prestao e informar se o
emprstimo pode ou no ser concedido.
24) Faa um algoritmo para entrar com um nmero e exibir se ele maior do que 20,
menor ou igual a 20.
25) Faa um algoritmo para entrar com dois nmeros e exibir o maior nmero,
supondo que so diferentes.
26) Faa um algoritmo para entrar com trs nmeros e exibir o maior nmero, supondo
que so diferentes.
27) Faa um algoritmo para entrar com trs nmeros e armazenar o maior nmero na
varivel de nome maior, supondo que so diferentes. Exiba o maior nmero.
28) Faa um algoritmo para ler trs nmeros, os possveis lados de um tringulo, e
exibir a classificao segundo os lados: equiltero, escaleno e issceles. Verifique
antes se os lados formam um tringulo, em caso negativo, informe ao usurio.
29) Um comerciante comprou um produto e quer vend-lo com um lucro de 45% se o
valor da compra for menor que R$ 20,00. Caso contrrio, o lucro ser de 30%. Faa
um algoritmo para ler o valor do produto e exibir o valor da venda.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 31 de 63
30) Faa um algoritmo para entrar com o salrio de uma pessoa e exibir o desconto do
INSS segundo a tabela a seguir:
Menor ou igual a R$ 600,00 Isento Maior que R$ 600,00 e menor ou igual a R$ 1200,00 20%
Maior que R$ 1200,00 e menor ou igual a R$ 2000,00 25% Maior que R$ 2000,00 30%
31) Faa um algoritmo para ler a nota de um aluno e converta esta nota quantitativa
em uma nota qualitativa, de acordo com a tabela abaixo:
Nota quantitativa Nota qualitativa nota2 a 4 Mau nota>4 a 6 Regular nota>6 a 8 Bom
nota>8 a 10 Excelente
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 32 de 63
V Funo
5.1 Conceito Funo um trecho de programa com atribuies especficas,
simplificando o entendimento do programa, proporcionando ao programa menores chances de erro e de complexidade.
A linguagem C formada de vrias funes.
5.2 Vantagens
As funes atravs da passagem de parmetros e atravs do seu nome permitem que sejam retornados valores rotina chamadora e desta forma, esses valores podero ser impressos, atribudos a uma varivel ou podem servir em operaes aritmticas entre outras. Os principais objetivos de uma funo so:
Dividir e estruturar um algoritmo em partes logicamente coerentes;
Facilidade em testar os trechos em separados; O programador poder criar sua prpria biblioteca de funes,
tornando sua programao mais eficiente uma vez que poder fazer uso de funes por ele escritas em vrios outros programas com a vantagem de j terem sido testadas;
Aumentar a legibilidade de um programa; Evitar que uma certa sequncia de comandos necessria em
vrios locais de um programa tenha que ser escrita repetidamente nestes locais, diminuindo tambm, o cdigo fonte,;
Tudo isto justifica o uso de funes em nossos programas. 5.3. Funes Pr-definidas
O conjunto de funes pr-definidas muito extenso e aqui vamos relacionar algumas funes das bibliotecas: math, ctype, string e stdlib.
Quando estudamos uma funo, temos vrios parmetros a observar. Veja, por exemplo a seguinte funo pr-definida da biblioteca math:
double sqrt(double x)
Este o prottipo da funo, isto , informaes sobre o nome da
funo, o tipo de retorno da funo e tipos dos parmetros. Esta funo retorna um valor double, seu nome sqrt e o tipo da
varivel que recebe o valor passado(parmetro) double.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 33 de 63
Quando voc criar suas funes, elas precisaro ter uma declarao semelhante a esta.
As funes podero ser localizadas antes da funo principal(main) ou depois.
Se uma funo for declarada antes, o prottipo da funo no precisar ser declarado na funo main, mas se declarada depois, o prottipo precisar ser declarado na funo main.
Declarao de uma funo:
tipo identificador (lista de parmetros) int, float, char, void Nome da funo ( tipo1 nome1, tipo2 nome2 )
Exemplos:
int quadrado(int l) char maiuscula(char n[] )
5.4 Chamada da funo
No devemos ficar preocupados como isso ir acontecer, pois j fizemos
uso de vrios funes internas(funes do tradutor) e, da mesma forma, chamaremos as nossas funes.
Quando uma funo chamada, o fluxo de controle desviado para a
funo, no momento em que ela ativada no programa principal. Ao terminar
a execuo dos comandos da funo, o fluxo de controle retorna ao comando
seguinte quele onde ela foi ativada, exatamente como na figura abaixo:
5.5 Estrutura de uma funo
Uma funo um bloco contendo incio e fim, sendo identificada por um nome , pelo qual ser referenciada em qualquer parte e em qualquer momento do programa. A funo serve para executar tarefas menores como ler, calcular,
main() funcao1( ...) { ... retorna(...); }
{... ...
< chamada da funo 1 > ... ... }
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 34 de 63
determinar o maior/menor valor entre uma lista de valores, ordenar, converter para maisculas, entre outras.
Aps executar estas tarefas menores, a funo retorna, ou no, um determinado valor para a funo chamadora.
Quando a funo no retornar nada(nulo) usaremos o tipo void, pois sugerido pelo comit de padronizao ANSI.
Dentro da funo, podem ser declaradas variveis que chamamos de variveis locais, pois s so visveis dentro da funo.
Sintaxe da funo:
nome_da_funo(declaraes dos parmetros) { < declarao das variveis locais> comandos que formam o corpo da funo return(< valor >) ; /* ou return; ou nada */ }
tipo de funo : tipo de dado que a funo dar retorno. Pode ser int, float, char ou void nome da funo : segue as mesmas regras de declarao de
variveis parmetros : nomes das variveis, seguem as mesmas regras de declarao de variveis declaraes dos parmetros
: declaraes de variveis da funo(tipo e nome)
{ : incio da funo variveis locais : declaraes de variveis que sero utilizadas
dentro da funo( tipo e nome) corpo da funo : sequncia de comandos return( .. ) : o que vai ser retornado para o algoritmo ou no
existe } : fim da funo
5.6 Localizao das funes
Podem ser colocadas antes ou aps a funo principal (main).
prottipo da funcao1; prottipo da funcao2; prottipo da funcao3; int main() { ... }
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 35 de 63
// abaixo do main() // definio de funo funcao1(...) { ... } funcao2(...) { ... } funcao3(...) { ... } 5.7 Dividindo o programa em funes Ns podemos modularizar nossos programas para que possamos deix-
lo mais claro. Se as funes manipulam as mesmas variveis, deveremos declar-las com variveis globais, isto , fora de todas as funes.
5.8 Tipos de Funes 5.8.1 Funes void ( no retornam nada)
Este tipo de funo no tem nenhum dado de retorno para a funo
principal. Ela executa o trecho e retorna para a funo seguinte da sua chamada. A funo pode no ter parmetros e ser do tipo void, tambm. Exemplo: #include using namespace std; void aster();/*prototipo da funo(tipo de retorno, nome e (argumentos) */ int main() { cout
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 36 de 63
5.8.1 Funes com passagem de valor A linguagem C++ passa os valores para funes atravs de argumentos
das chamadas das funes para os parmetros das funes, na verdade variveis que recebero cpias dos dados. Desta maneira, os dados de origem no so alterados.
Uma boa dica: Suponha que voc comprou um livro e descobriu alguns erros. Voc corrige no seu livro, mas no altera o original que, enquanto o autor no corrigir, os erros permanecero.
A nica exceo para as matrizes que so ponteiros para o primeiro
elemento da matriz.
Exemplo: Funo para somar dois nmeros #include using namespace std; void soma(int x, int y); /*prottipo funo(tipo de retorno, nome e(argumentos) */ int main() { int num1,num2; coutnum1, coutnum2, soma(num1,num2); system("pause"); } void soma(int x, int y) { int soma; soma = x + y; cout>>\n A soma e
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 37 de 63
Exerccios 32) Desenvolva um programa que tenha trs funes: uma para calcular e
apresentar a subtrao, uma para a multiplicao e uma para a diviso de dois
nmeros quaisquer fornecidos pelo usurio. Os nmeros devem ser fornecidos
no programa principal e depois informados funo que realiza a operaes e
exibe o resultados.
33) Desenvolva um programa que tenha uma funo para calcular e apresentar
o valor de uma potncia de um nmero qualquer informado pelo usurio. Ou
seja, ao informar para a funo o nmero e a sua potncia, deve ser
apresentado o seu resultado. Por exemplo, se for mencionado no programa
principal funo potncia(2,3), deve ser apresentado o valor 8.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 38 de 63
VI - Estrutura de Repetio
1 - Conceito de Repetio
Na estrutura de sequncia sabe-se que os comandos so executados uma nica
vez e um aps o outro (de cima para baixo). Com o estudo da seleo, acrescenta-se a
possibilidade de escolher instrues a serem executadas, mas cada instruo continua
sendo executada apenas uma vez. A execuo do programa comea com a primeira
instruo e termina na ltima, sendo cada instruo executada no mximo uma vez. Em
programao frequentemente preciso repetir a execuo de um grupo de instrues, ou
mesmo repetir a execuo de todo o programa, para diferentes valores de dados.
Em programao, uma sequncia de instrues executada repetidas vezes
chamada de lao(loop). Um lao constitudo por uma sequncia de instrues, o corpo
do lao, e por uma estrutura que controla a repetio deste corpo, especificando quantas
vezes ele ter de ser repetido.
As instrues que constituem o corpo de um lao podem ser executadas qualquer
nmero de vezes(at mesmo nenhuma), mas este nmero finito. H erros semnticos
que podem provocar a execuo interminvel do corpo do lao, caso que se diz que o
lao infinito.
Existem trs estruturas que permitem a especificao de laos em nossa
linguagem algortmica: Enquanto, Repita e Para.
2 - Enquanto (Repetio com Teste no Incio)
Consiste numa estrutura de controle de fluxo que permite executar de forma
repetitiva uma instruo (ou bloco de instrues) enquanto uma determinada expresso
lgica tiver o valor verdadeiro, porm, sempre verificando antes de cada execuo se
permitido repetir o mesmo trecho.
Sintaxe da estrutura: Enquanto faa Incio instruo 1; instruo 2; instruo 3;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 39 de 63
. . . instruo n; fim; {fim do enquanto}
Enquanto a condio for satisfeita, as instrues de 1 a n sero repetidas, caso
contrrio, o comando abandonado (sai do lao). Se j da primeira vez o resultado for
falso, os comandos no sero executados uma nica vez.
A estrutura Enquanto pode ser usada para construir laos determinados ou
indeterminados. Seguem alguns exemplos de como estes tipos de laos funcionam:
Exemplo1: Nmero de repeties determinadas: Construir um algoritmo para calcular a
soma dos 100 primeiros nmeros inteiros e positivos. Algoritmo soma100; var numero,soma: inteiro; inicio soma 0; numero 1;
Enquanto (numero
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 40 de 63
Algoritmo maior_elemento; var valor, maior: real; inicio escreva(Entre com o valor =); leia(valor); maior valor;
Enquanto (valor 0) faa incio Se valor > maior Ento maior valor; escrever(Entre com o valor =); leia(valor); fim; escreva(Maior valor =,maior); fim. 3 - Repita (Repetio com Teste no Final)
Consiste numa estrutura que permite que um bloco ou uma ao primitiva seja
repetida at que uma determinada condio seja satisfeita.
Sintaxe da estrutura: Repita instruo 1; instruo 2; instruo 3; . . . instruo n; At ;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 41 de 63
A diferena bsica entre as estruturas enquanto e repita que nesta ltima, o
bloco executado pelo menos uma vez independentemente da validade da condio,
pois a inspeo da condio s feita aps a execuo do bloco ou ao primitiva.
importante tambm ressaltar que no h necessidade dos delimitadores de
bloco (Incio - Fim), ao contrrio do enquanto, pois o corpo do lao j est delimitado
pelas palavras Repita e At, evitando assim qualquer ambiguidade quanto
determinao das instrues a serem repetidas.
Da mesma forma que a estrutura enquanto, a estrutura repita tambm serve para
construir laos determinados e indeterminados. Sero utilizados os mesmos exemplos
para comparar as duas estruturas.
Exemplo1: Algoritmo soma100_2; var numero, soma: inteiro; inicio soma0;
numero 1; Repita soma soma + numero; numero numero + 1; At (numero > 100); escrever(Soma =, soma); Fim. Exemplo2: Algoritmo maior_elemento_2; var valor, maior: real; Incio escreva(Entre com o valor =); leia(valor); maior valor;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 42 de 63
Repita Se valor > maior Ento maior valor; escreva(Entre com o valor =); leia(valor); At (valor = 0); escreva(Maior valor =, maior); fim. Comparando este algoritmo com o do primeiro exemplo da estrutura enquanto, nota-se que a utilizao de uma estrutura repita no lugar de uma estrutura enquanto
corresponde a utilizar como para o repita a negao da do
enquanto.
4 - Para (Repetio com Varivel de Controle)
Nas estruturas de repetio vistas at agora, ocorrem casos em que se torna
difcil determinar quantas vezes o bloco ser executado. Sabe-se que ele ser executado
enquanto uma condio for satisfeita (Enquanto) ou at que uma condio seja satisfeita
(Repita). A estrutura Para repete a execuo do bloco um nmero fixo de vezes, pois
ela possui limites fixos. O nmero de repeties do bloco ser dado por:
Onde:
Vi: valor inicial
Vf: valor final
Na estrutura Para, usar-se- o conceito de varivel de controle, que ser uma
varivel (V) que ser incrementada aps a repetio de um bloco, de acordo com o valor
deste incremento (p).
Sintaxe da estrutura:
Para v vi at vf faa inicio instruo 1; instruo 2;
N = Vf - Vi + 1
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 43 de 63
instruo 3; .
. .
instruo n; fim; {fim do para}
A estrutura Para s aceita repeties determinadas e nestes casos ser a mais
conveniente. Ser utilizado o exemplo da soma dos 100 primeiros nmeros inteiros e
positivos e percebe-se que esta estrutura mais conveniente porque no necessrio:
Inicializar o primeiro inteiro a ser adicionado;
Incrementar o valor do inteiro a ser adicionado ao valor da soma;
Testar se o valor do inteiro j atingiu o limite.
Exemplo: Algoritmo soma100_3; var numero,soma: inteiro; inicio soma 0; Para numero 1 at 100 faa soma soma + numero; escreva(Soma =, soma); fim.
Exerccios:
Diga o que ser escrito nos trechos dos algoritmos abaixo, considere que
todas as variveis utilizadas so do tipo inteiro. 34) valor 5; Para i 1 at 5 faa
valor valor + i; escreva(valor);
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 44 de 63
35) valor3; x 0;
Enquanto x < 5 faa incio valor valor + 1; x x + 1; fim; escreva(valor); 36) Faa um algoritmo para exibir todos os nmeros de 1 a 100.
37) Faa um algoritmo para exibir todos os nmeros de 100 a 1.
38) Faa um algoritmo para exibir os 100 primeiros nmeros pares.
39) Faa um algoritmo para ler 10 nmeros e exibir o quadrado de cada
nmero lido.
40) Faa um algoritmo que leia um nmero, maior que zero, que ser o limite
superior de um intervalo e exibir todos os nmeros impares menores do que
esse nmero.
41) Faa um algoritmo que exiba a soma dos nmeros pares entre 25 e 199.
42) Faa um algoritmo que exiba a tabuada de multiplicar do nmero 3.
43) Faa um algoritmo para ler vrios nmeros positivos e exibir a mdia dos
nmeros digitados. Quando um numero negativo for digitado, o programa deve
encerrar e apresentar a mdia.
44) Faa um algoritmo para ler vrios nmeros e informar quantos nmeros
entre 100 e 200 foram digitados. Quando o valor 0(zero) for lido, o algoritmo
dever cessar sua execuo.
45) Faa um algoritmo para ler vrios nmeros inteiros e apresentar o fatorial
de cada nmero. O algoritmo se encerra quando se digita um nmero menor do
que 1.
46) Faa um algoritmo para ler com a idade de vrias pessoas e exibir:
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 45 de 63
O total de pessoas com menos de 21 anos;
O total de pessoas com mais de 50 anos.
Quando uma idade negativa for digitada, o programa deve encerrar e
apresentar as informaes solicitadas.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 46 de 63
Anexos Anexo A Programao em C++ 1 - Introduo " Linguagem BCPL foi desenvolvida por Martin Richards;
" Linguagem B desenvolvida por Ken Thompson;
" Linguagem C desenvolvida por Dennis Ritchie em um DEC DCP-11, usando o
sistema operacional Unix;
" Linguagem C with Classes;
" Linguagem C++ desenvolvida por Bjarne Stroustrup, em 1979, na Bell
Laboratories, Nova Jersey;
" C++, j passou por trs revises;
" Primeira reviso em 1985 e a segunda em 1990;
" Terceira reviso foi o processo de padronizao da C++, com o comit ANSI
(American National Standards Institute) e a ISO (International Standards
Organization);
" Criao da STL (Standard Template Library), conjunto de rotinas genricas que
podem ser usadas para a manipulao de dados;
" Incluso da STL na especificao da linguagem C++;
" Expandiu o escopo da linguagem C++;
" Padronizao da linguagem C++;
" Padronizada pela pelo documento ISO/IEC 14882:1998;
" Trata-se de uma linguagem para programadores;
" Baseia-se no paradigma da programao orientada a objetos;
" Preocupao com a portabilidade;
" Deu origem as linguagens Java e C#...;
" Todo programa C++ possui uma funo main;
" O C++ possui a sua biblioteca padro de funes (C++ Standard Library);
" Comentrios documentam o programa e melhoram a sua legibilidade;
" O C++ faz distino entre maisculas e minsculas (case sensitive);
" As sentenas terminam por ponto e vrgula (;);
" Para recepo ou envio de dados os programas em C++ consideram 3 objetos
padres do tipo stream:
" cin (stream padro de entrada - normalmente o teclado);
" cout (stream padro de sada - normalmente o monitor);
" cerr (stream padro de erros - normalmente o monitor);
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 47 de 63
2 - Fases de um Programa em C++
3 - Estrutura de um Programa
// O nome deste programa primeiro.cpp #include using namespace std; int main() { cout
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 48 de 63
4 - Estrutura de uma Funo /*************************** Cabealho p/ Comentrios ***************************/ tipo nomeFunc(parmetros) { seqncia de comandos retorna var_tipo } 5 - Variveis " Os nomes podem ter qualquer tamanho, porm apenas os 31 primeiros
caracteres so significativos; " Antes de sua utilizao as variveis devem ser declaradas. A forma geral para
declarao de uma varivel : " onde tipo um dos tipos de variveis C++ (int, float, double, etc) e
nome qualquer nome de varivel vlido; " Ex. int soma /* resultado da adio */
" Declarao de variveis inteiras e reais (ponto-flutuante): " Inteiros: int quantidade /* no. de unidades */ " Reais: float salario /* salario bruto */
6 - Operadores Aritmticos
" Observao sobre a diviso:
" Na diviso inteira a parte fracionria truncada (descartada) sem
arredondamento;
" Ex. 19/10 = 1;
" Se o divisor ou o dividendo for um nmero real ser realizada uma
diviso real ao invs da diviso inteira;
" Ex. 19/10.0 = 1.9
7 - Operadores Relacionais
Operao OperadorAdio +Subtrao -Multiplicao *Diviso /Resto %
Operador Precedncia
( ) Calculados em primeiro lugar da esq. p/ dir.
*, / ou % Calculados em segundo lugar da esq. p/ dir.
+ ou - Calculados por ltimo da esq. p/ dir.
Tipo Operao Operadorigualdade igual ==
diferente !=relacionais maior que >
menor que =menor ou igual
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 49 de 63
8 - Entrada e Sada de dados " A E/S em C++ ocorre em streams (fluxo de bytes). Um stream um objeto
onde um programa pode inserir ou extrair caracteres;
" A biblioteca padro C++ inclui o arquivo de cabealho iostream, onde os
objetos stream de E/S padro esto definidos;
" Sada padro
" Normalmente a sada padro de um programa a tela do monitor. Em
C++, o objeto stream para acess-la o cout;
" Para inserir dados no objeto stream cout utiliza-se o operador de
insero (
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 50 de 63
" Para extrair dados no objeto stream cin utiliza-se o operador de
extrao (>>);
" cin s processar a entrada quando a tecla ENTER for pressionada;
" O tipo do dado digitado deve ser compatvel com o tipo definido para a
varivel. Por exemplo, se a varivel inteira somente inteiros devem
ser digitados;
" O exemplo 3 equivalente aos exemplos 1 e 2. Em ambos os casos
devem ser digitados um valor para a varivel a e outro para a varivel
b, separados por espao, tab ou uma nova linha;
" cin pode ser utilizado para a leitura de strings. Entretanto, a extrao de
cin termina assim que um espao em branco for encontrado, fazendo
com que apenas uma palavra seja extrada. Sendo assim, para a leitura
de uma linha inteira pode ser utilizada, por exemplo, a funo getline;
9 - Tipos de Dados " char
" Um nico byte, capaz de conter um nico caractere;
" int " Um inteiro, normalmente reflete o tamanho natural dos inteiros da mquina
host;
" float " Ponto flutuante em preciso simples;
" double " Ponto flutuante em preciso dupla;
" qualificadores " short, long;
" signed, unsigned.
Exemplos de Uso de cin 1) std::cin >> a; 2) cin >> b; 3) cin >> a >> b;
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 51 de 63
10 - Estruturas
10.1 - Estrutura de Seleo /* Utilizando a estrutura o comando if... else...
Este o segundo programa e o seu nome segundo.cpp */
#include
using namespace std;
int main()
{
double grau = 5.0;
if(grau >= 7.0)
cout
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 52 de 63
10.3 - Estrutura de Repetio While
10.4 - Estrutura de Repetio For Sintaxe:
produto = 2; while(produto
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 53 de 63
Anexo B Tutorial Dev C++ Baixe o Dev C++ em http://www.bloodshed.net/index.html 1. Abrindo o Programa
Depois de instalar o Dev C++, abra o programa. Selecione a lngua e clique em
Clique no boto
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 54 de 63
Clique no boto
Clique no boto para concluir a configurao
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 55 de 63
2. Criando um Projeto
Entre em Arquivo # Novo # Projeto
Aparecer a tela abaixo:
Escolha o tipo de projeto que voc pretente iniciar e nomeie seu projeto.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 56 de 63
Escolha se seu projeto ser em C ou C++.
Aps isso clique em . Aparecer uma tela para escolher o local para salvar o seu projeto.
Feito isso clique em .
Agora iremos criar um novo arquivo fonte para dar incio a construo de nosso programa.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 57 de 63
V em Arquivo # Novo # Arquivo Fonte (ou use o atalho no teclado ).
Agora voc est pronto para iniciar seu programa.
3. Compilando um Programa
Quando seu programa estiver finalizado v em Menu # Executar # Compilar ou
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 58 de 63
Aparecer a tela abaixo:
Isto significa que seu programa no contm erros e pode ser executado.
V em Menu # Executar # Executar ou . Salve junto ao seu projeto.
Seu programa ser executado.
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 59 de 63
4. Abrindo Programas Existentes
V em Menu # Arquivo # Abrir projeto ou arquivo Ctrl+O
Encontre a origem do projeto ou aquivo.
Clique em .
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 60 de 63
Anexo C Tutorial Visual Studio C
Interface New project Escolher Win32 Marcar Win32 console application Colocar o nome do projeto No necessrio procurar diretrio, somente se voc quiser mudar o padro Desmarcar a caixa Create directory solution Clicar em Ok
Interface Win32 Application Wizard Marcar console application Marcar empty project Clicar em Finish
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 61 de 63
Interface Grfica do Visual Studio Boto direito em Source Files Add New Item...
Interface Add New Item: Clicar em Code Colocar nome e clicar em C++ File (.cpp) Clicar no boto add
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 62 de 63
Interface Grfica do Visual Studio Marcar na barra de ferramentas debug ou release
Interface Grfica do Visual Studio (Compilando) Clicar na barra de menu Build Build Solution ou F7
-
Lgica de Programao Prof. Edgar Gurgel
Pgina 63 de 63
Interface Grfica do Visual Studio (Executando) Clicar na barra de menu Debug Start debugging ou F5
Em seguida aparecer uma janela de console (janela preta) com o seu programa
em execuo (para segurar a tela use o comando system (pause)).