Professional Documents
Culture Documents
ESCOLA
Lgica de Programao
Sumrio
LGICA DE PROGRAMAO
1.1 Definies bsicas. ......................................................................................................................................................... 4 1.2 Necessidade do uso da lgica......................................................................................................................................... 4 1.3 Uso da lgica no desenvolvimento de programas.......................................................................................................... 4 1.4 Diferenciao de nomenclaturas..................................................................................................................................... 5 2.1 Princpios de resoluo de problemas. ........................................................................................................................... 6 2.2 Particularidades entre lgicas......................................................................................................................................... 6 2.2.1 Tcnica Modular.......................................................................................................................................................... 7 2.2.2 Portugs Estruturada.................................................................................................................................................... 7
1 INTRODUO................................................................................................................................ 4
2 INTRODUO LGICA........................................................................................................... 6
3.1 Tipos de Informao....................................................................................................................................................... 8 3.2 Tipos de Dados............................................................................................................................................................... 8 3.3 O Uso de Variveis......................................................................................................................................................... 8 3.4 O Uso de Constantes. ..................................................................................................................................................... 9 3.5 Os Operadores Aritmticos............................................................................................................................................. 9 3.6 As Expresses Aritmticas ou Frmulas Matemticas.................................................................................................. 9 3.7.1 Entrada, Processamento e Sada................................................................................................................................ 10 3.8 Exerccios de Aula....................................................................................................................................................... 13 3.9 Exerccios de Fixao................................................................................................................................................... 15 4.1 Desvio Condicional Simples. ....................................................................................................................................... 17 4.1.1 Exerccio de Aula. ..................................................................................................................................................... 18 4.2 Operadores Relacionais............................................................................................................................................... 18 4.3 Desvio Condicional Composto.................................................................................................................................... 18 4.3.1 Exerccio de Aula. ..................................................................................................................................................... 19 4.4 Exerccios de Fixao................................................................................................................................................... 20 4.5 Desvio Condicional Encadeado.................................................................................................................................... 21 4.5.1 Exerccio de Aula. ..................................................................................................................................................... 22 4.6 Exerccios de Fixao................................................................................................................................................... 23 4.7 Operadores Lgicos...................................................................................................................................................... 23 4.7.1 Operador Lgico: .e................................................................................................................................................... 24 4.7.1.1 Exerccio de Aula. .................................................................................................................................................. 24 4.7.2 Operador Lgico: .ou................................................................................................................................................. 25 4.7.2.1 Exerccio de Aula. .................................................................................................................................................. 26 4.7.3 Operador Lgico: .no............................................................................................................................................... 27 4.7.3.1 Exerccio de Aula. .................................................................................................................................................. 27 4.8 Exerccios de Fixao................................................................................................................................................... 29 5.1 Repetio do tipo: Teste Lgico no incio do looping.................................................................................................. 33 5.1.1 Exerccio de Aula. ..................................................................................................................................................... 34 5.1.1.1 Exerccios de Fixao............................................................................................................................................. 35 5.1.2 Exerccios de Fixao................................................................................................................................................ 36 5.2 Repetio do tipo: Teste Lgico no fim do looping...................................................................................................... 37 5.2.1 Exerccio de Aula. ..................................................................................................................................................... 37 5.2.1.1 Exerccios de Fixao............................................................................................................................................. 38 5.2.2 Exerccio de Aula. .................................................................................................................................................... 38 5.2.2.1 Exerccios de Fixao............................................................................................................................................. 38 5.3 Repetio do tipo: Varivel de Controle....................................................................................................................... 39 5.3.1 Exerccio de Aula. ..................................................................................................................................................... 39 5.3.2 Exerccios de Fixao................................................................................................................................................ 40 5.4 Exerccios de Fixao................................................................................................................................................... 41 6.1 Matrizes de uma dimenso ou vetores.......................................................................................................................... 43
6.2 Operaes bsicas com Matrizes de uma dimenso.................................................................................................... 44 6.2.1 Atribuio de uma Matriz......................................................................................................................................... 45 6.2.2 Leitura de dados de uma Matriz................................................................................................................................ 45 6.2.3 Escrita dos dados de uma Matriz............................................................................................................................ 45 6.3 Exerccio de Aula. ........................................................................................................................................................ 46 6.4 Exerccios de Fixao................................................................................................................................................... 48 7.1 Matrizes com mais de uma dimenso........................................................................................................................... 49 7.2 Operaes bsicas com matrizes de duas dimenses. ................................................................................................. 50 7.2.1 Atribuio de uma Matriz....................................................................................................................................... 51 7.2.2 Leitura de dados de uma Matriz............................................................................................................................. 51 7.3 Exerccio de Aula. ........................................................................................................................................................ 52
Lgica de Programao
1 INTRODUO
E deve ser composta por quatro passos fundamentais: Escrever as instrues em seqncias lgicas; Escrever instrues em grupos pequenos; Distribuir mdulos de programa entre diferentes programadores para que trabalhem sob a superviso de um programador snior; Revisar o trabalho executado, em reunies regulares.
Lgica de Programao
Vamos identificar as diferenas entre as seguintes nomenclaturas: Fluxograma: uma ferramenta usada e desenvolvida pelo profissional que est envolvido diretamente com programao, tendo como objetivo descrever o mtodo e a seqncia do processo dos planos num computador. Portugus Estruturado: uma ferramenta de representao textual de um determinado algoritmo computacional. Este mtodo utilizado com a finalidade de apresentar uma codificao simples que seja de fcil traduo para outras linguagens de programao de computador. Algoritmo: um processo de clculo matemtico ou de resoluo de um grupo de problemas semelhantes. Pode-se dizer, tambm, que so regras formais para obteno de um resultado ou da soluo de um problema, englobando frmulas de expresses aritmticas. 1.5 Formas de representao grfica uma maneira simples e concisa de representar dados sobre uma superfcie plana, por meio de diferentes formas, de modo a facilitar a visualizao completa e imediata de dados ou fenmenos tabulados. 1.6 Simbologias bsicas Estes so alguns dos smbolos mais utilizados ao longo dos anos pelos profissionais de Processamento de Dados:
Terminal smbolo utilizado como ponto para indicar o incio e/ou fim do fluxo de um programa Seta de fluxo de dados permite indicar o sentido do fluxo de dados.
Processamento Smbolo ou bloco que se utiliza pra indicar clculos a efetuar, atribuies de valores ou qualquer manipulao de dados que tenha um bloco especfico para sua descrio.
Entrada e sada de dados smbolo em funo de um dispositivo qualquer de entrada ou sada de dados, como fornecedor de informaes para processamento, gravao e outros.
Deciso indica a deciso que deve ser tomada indicando a possibilidade de desvio para outros pontos do fluxo, dependendo do resultado de comparao e de acordo com situaes variveis.
Mdulo de sub-rotina
2 INTRODUO LGICA
2.1 Princpios de resoluo de problemas
Ns programadores que somos solucionadores de problemas, devemos entender que problema uma questo que foge a uma determinada regra, ou melhor, o desvio de um percurso, o qual impede de atingir com sucesso um determinado objetivo com eficincia e eficcia. Portanto para resolver um problema de lgica usamos um procedimento de desenvolvimento para o fluxo de informaes. Vamos usar como exemplo uma Escola Tcnica de Informtica, em que o clculo da mdia realizado por quatro notas bimestrais que determinam a aprovao ou reprovao dos seus alunos. Considere que o valor da mdia deva ser maior ou igual a 7 para que ocorra a aprovao. A primeira etapa apresenta um detalhamento no que se refere entrada e sada, ou seja, deve-se entrar com as quatro notas bimestrais para se obter, como resultado, o clculo da mdia e assim definir a aprovao ou reprovao do aluno. A segunda etapa consiste em trabalhar o termo: determinar a aprovao. Para ser possvel determinar algo, necessrio estabelecer uma condio. Assim sendo, uma condio envolve uma deciso a ser tomada segundo um determinado resultado. No caso, a mdia. Desta forma, a condio de aprovao: mdia maior ou igual a 7 deve ser considerada no algoritmo.
Lgica de Programao
Esta tcnica deve ser elaborada como uma estrutura de partes independentes, denominada de mdulos, cujo procedimento controlado por um conjunto de regras, onde suas metas so as seguintes: Decompor o problema em partes independentes; Dividir um problema complexo em problemas menores e mais simples; Verificar a correo de um mdulo de blocos, independentemente de sua utilizao como uma unidade em processo maior. A modularizao deve ser desenvolvida, se possvel, em diferentes nveis. Ela pode ser utilizada para separar um problema em sistemas, um sistema em programas e um programa em mdulos. O modelo padro de um mdulo consiste em trs partes: Entrada, Processamento e Sada.
Dados de Entrada Processo de transformao Dados de Sada
finalidade mostrar uma notao para elaborao de algoritmos, os quais sero utilizados na definio, criao e desenvolvimento de uma linguagem computacional (Clipper, C, Pascal, Delphi) e sua documentao. A seguir, apresentado um exemplo deste tipo de algoritmo:
incio caractere: resultado; real: n1, n2, n3, n4; real: soma, media; leia n1, n2, n3, n4; soma n1 + n2 + n3 + n4; media soma / 4; se ( media >= 7 ) ento resultado Aprovado; seno resultado Reprovado; fim_se escreva Nota 1: , n1; escreva Nota 2: , n2; escreva Nota 3: , n3; escreva Nota 4: , n4; escreva Soma: , soma; escreva Mdia: , media; escreva Resultado: , resultado; fim
Real
Caracteres
Lgicos
Para utilizar o conceito de varivel, imagine que a memria de um computador um grande arquivo com vrias gavetas, sendo que cada gaveta pode armazenar apenas um nico valor (Seja ele: numrico, lgico ou caractere). Se for um grande arquivo com vrias gavetas voc h de concordar que necessrio identificar com um nome a gaveta que se pretende utilizar. Desta forma o valor armazenado pode ser utilizado a qualquer momento. O nome de uma varivel utilizado para sua identificao e posterior uso em um programa. Sendo assim, necessrio estabelecer algumas regras de utilizao de variveis: Nomes de uma varivel podero ser atribudos com um ou mais caracteres; O primeiro caractere do nome de uma varivel dever ser uma letra; O nome de uma varivel no poder possuir espaos em branco; No pode ser uma palavra reservada a uma instruo de programa; No podero ser utilizados outros caracteres a no ser letras e nmeros.
Lgica de Programao
So nomes vlidos de variveis: nomeusuario, nome_cliente, fone1, delta25, z4, entre outros. Devemos ainda considerar que dentro de um programa uma varivel pode exercer dois papis. Um de ao, quando modificada ao longo de um programa para apresentar um determinado resultado, e o segundo de controle, a qual poder ser vigiada e controlada durante a execuo de um programa.
Tipo de resultado Inteiro ou Real Real Inteiro Inteiro ou Real Inteiro ou Real Inteiro ou Real
/ Div * + -
Perceba que as chaves e colchetes so abolidos, utilizando-se em seu lugar apenas os parnteses. tambm substitudo o sinal de (=) igual pelo sinal de () implicando ou atribuindo. O sinal de atribuio () utilizado para indicar que o valor de uma expresso aritmtica ou frmula est sendo armazenado em uma varivel. No caso da frmula para o clculo da rea de uma circunferncia, ela poderia ser escrita da seguinte maneira: area 3.14159 * raio h2 ou area 3.14159 * raio * raio
10
Lgica de Programao
FluxOGRAMA Completada a fase de interpretao do problema e da definio das variveis a serem utilizadas, passa-se para a fase de diagramao do algoritmo, que o fluxograma.
Inicio
Ler A Ler B
X <-- A + B
Escrever X
Fim
Figura 3.1 Fluxograma para leitura, soma de dois valores e apresentao do resultado. Observe a indicao de Incio e Fim do fluxograma com o smbolo Terminal. Este smbolo dever estar sempre presente, indicando o ponto de incio e fim de um fluxograma. Note tambm a existncia de uma seta na linha que liga um smbolo ao outro. Isto necessrio, pois desta forma sabe-se a direo que o processamento de um programa dever seguir. O smbolo retngulo significa Processamento e ser utilizado para representar diversas operaes, principalmente os clculos matemticos executados por um programa. PORtuGuS EStRutuRADO Podemos utilizar outra forma de representao da lgica do programa, atravs de uma representao textual chamada: Portugus Estruturado. A seguir escrevemos o programa nesta forma de representao: incio inteiro: A, B, X; leia A; leia B; X A + B; escreva X; fim
11
Desta forma, so utilizadas trs variveis: A, B e X, estabelecendo-se assim o seu respectivo tipo. Tendo relacionado todas as variveis que sero utilizadas no programa, passa-se para a fase de montagem do que est estabelecido no fluxograma, ou seja, de tudo que est relacionado entre os smbolos Terminal (Indicao de incio e fim do fluxograma) Observe que o bloco de instrues de programa, indicado entre as instrues incio e fim apresentado deslocado um pouco para a direita. Este estilo de escrita deve ser obedecido, para facilitar a leitura de um bloco de programa, recebendo o nome de endentao. Aps a leitura dos valores para as variveis A e B, eles sero somados e atribudos na varivel X, a qual ser apresentada com o valor da soma processada. CODIfICAO EM PASCAl Para exemplificar vamos codificar o algoritmo que soma os nmeros na linguagem Pascal: program soma_num; var X : integer; A : integer; B : integer; begin readln (A); readln (B); X := A + B; writeln (X); end. Depois de codificar o programa (escrever o programa em uma linguagem) voc deve compilar o programa fonte. O que significa compilar? Compilar : Transformar a linguagem fonte do programa em um programa executvel, ou seja, transformar o programa na linguagem de mquina. Como compilamos? Compilamos utilizando um programa especial que faz este trabalho Observao: Se houver problemas de sintaxe, se voc escreveu alguma instruo errada, o compilador no ir gerar o programa executvel, ele apenas ir emitir uma mensagem de erro de sintaxe. Se no houver erro na compilao, teremos o programa executvel, tambm chamado de aplicativo, que ser utilizado para testar o programa, verificando se o mesmo faz o que o fluxograma determinou. Resumindo: Para fazer o computador resolver um problema qualquer temos que: 1 Fazer o algoritmo do problema 2 Codificar o programa em uma linguagem de programao 3 Compilar este programa para verificar erros de sintaxe e criar o programa executvel 4 Testar o programa executvel
12
Lgica de Programao
CODIfICAO EM LInGuAGEM C Agora vamos codificar o algoritmo que soma os nmeros na linguagem C. main( ) { int X; int A; int B; scanf(%d, &A); scanf(%d, &B); X = A + B; printf(%d, X); } Depois de codificar este programa, voc dever tambm compilar, para verificar possveis erros de sintaxe, e testar o programa.
13
14
Lgica de Programao
4 Indique com um X quais dos dados abaixo so do tipo Lgico. ( ) -678 ( ) 0.87 ( ) -9.12 ( ) .Verdadeiro. ( ) -456 ( ) .V. ( ) Cinco ( ) .Falso. ( ) .F. ( ) 1.56
15
16
Lgica de Programao
Para solucionar o problema proposto, necessrio trabalhar uma nova instruo: se...ento...fim_se. Fluxograma Observe no fluxograma a existncia das letras S e N, alm das linhas com seta indicando a direo do processamento, colocada juntamente com o smbolo de Deciso. O S representa o sim e est posicionado para indicar que um determinado bloco de operaes ser executado quando a condio atribuda for verdadeira. O N est para no e ser executado quando a condio for falsa. O smbolo do losango, ou melhor, dizendo, Deciso dever ser utilizado em situaes em que haja necessidade de usar uma deciso dentro do programa. Uma deciso ser tomada sempre com base em uma pergunta, como Resposta = sim, e esta pergunta que dever estar indicada dentro do smbolo de losango.
Condio N
PORtuGuS EStRutuRADO se (condio) ento < instrues para condio verdadeira > fim_se Sendo a condio verdadeira, sero executadas todas as instrues que estejam entre a instruo se...ento e a instruo fim-se. Sendo a condio falsa, sero executadas as instrues que estejam aps o comando fim_se.
17
18
Lgica de Programao
Instrues executadas quando condio verdadeira
Condio N
Figura 4.3 Estrutura do smbolo para instruo se...ento...seno...fim-se PORtuGuS EStRutuRADO se (condio) ento < instrues para condio verdadeira > seno < instrues para condio falsa > fim se Sendo a condio verdadeira, sero executadas todas as instrues que estejam posicionadas entre o se... ento e a instruo seno. Sendo a condio falsa, sero executadas as instrues que estejam entre o seno e a instruo fim se.
19
escreva Digite um nmero: ; leia A; escreva Digite outro nmero: ; leia B; X A + B; se ( X >= 10 ) ento R X + 5; seno R X 7; fim se escreva O resultado : , R; fim Observe que aps a definio dos tipos de variveis, solicitada a leitura dos valores para as variveis A e B, depois esses valores so atribudos na varivel X, a qual possui o resultado da adio dos dois valores. Neste ponto, questionada no programa uma condio que permitir escrever o resultado da soma adicionado de 5, caso esta seja maior ou igual a 10, e no sendo, o programa apresentar o resultado subtraindo 7.
20
Lgica de Programao
Existem casos em que necessrio estabelecer a verificao de condies sucessivas, em que uma determinada ao poder ser executada se um conjunto anterior de instrues ou condies for satisfeito. Sendo a ao executada, ela poder ainda estabelecer novas condies. Isto significa utilizar uma condio dentro de outra condio. Este tipo de estrutura poder possuir diversos nveis de condio, sendo chamadas de encadeamentos. FluxOGRAMA
Condio1 N
Condio2 N
21
Figura 4.5 Estrutura condicional composta ou encadeada. Portugus Estruturado se (condio 1) ento < instrues para condio 1 verdadeira > seno se (condio 2) ento < instrues para condio 2 verdadeira > seno < instrues para condio 1 e condio 2 falsa > fim se fim se
22
Lgica de Programao
fim se fim se escreva O valor do novo salrio : ,novo_salario; fim
c) Faa um Programa que leia o cdigo de uma mercadoria e que escreva o nome do produto conforme tabela abaixo: 1 Sabo 2 Vassoura 3 Detergente
23
Para facilitar a compreenso deste operador imagine que voc possua dois fios ligados a uma lmpada e a uma bateria. A lmpada somente acender se voc tiver ligado ambos os fios aos plos da bateria. Acompanhe esse exemplo no seguinte diagrama: Fio Vermelho Ligado Falso Verdadeiro Falso Verdadeiro Fio Preto Ligado Falso Falso Verdadeiro Verdadeiro Lmpada Acende Falso Falso Falso Verdadeiro
PORtuGuS EStRutuRADO se (condio 1) .e. (condio 2) ento < instrues executadas se condio 1 e condio 2 verdadeiras > fim_se O operador .e. faz com que somente seja executada uma determinada operao se todas as condies mencionadas forem simultaneamente verdadeiras.
24
Lgica de Programao
O exemplo mostra, por meio da utilizao do operador .e. que somente ser apresentada a mensagem O nmero est na faixa de 20 a 90, caso o valor fornecido para a varivel num seja entre 20 e 90. Qualquer valor fornecido fora da faixa definida apresentar a mensagem O nmero no est na faixa de 20 a 90. Segundo exemplo Desenvolver a lgica para um programa que leia um ngulo (entre 0 e 360) e que escreva o quadrante ao qual pertence. Ignorar os eixos. Algoritmo 1 Ler um valor para a varivel angulo; 2 Verificar se o ngulo digitado > 0 e < 90, se for verdade: ngulo est no primeiro quadrante 3 Verificar se o ngulo digitado > 90 e < 180, se for verdade: ngulo est no segundo quadrante 4 Verificar se o ngulo digitado > 180 e < 270, se for verdade: ngulo est no terceiro quadrante 5 Verificar se o ngulo digitado > 270 e < 360, se for verdade: ngulo est no quarto quadrante Portugus Estruturado incio inteiro: ngulo; escreva Digite um ngulo: ; leia angulo; se ( angulo > 0 ) .e. ( angulo < 90 ) ento escreva ngulo est no primeiro quadrante; seno se ( angulo > 90 ) .e. ( angulo < 180 ) ento escreva ngulo est no segundo quadrante; seno se ( angulo > 180 ) .e. ( angulo < 270 ) ento escreva ngulo est no terceiro quadrante; seno se ( angulo > 270 ) .e. ( angulo < 360 ) ento escreva ngulo est no quarto quadrante; fim se fim se fim se fim se fim O programa acima no se preocupa se o usurio digitar um valor indevido, ou seja, se no estiver na faixa ou estiver em um dos eixos. Este exemplo foi feito desta forma para que possamos nos concentrar apenas no operador lgico .e.
Considere agora, como exemplo, que voc deseja escrever uma carta. Se voc tiver uma mquina de escrever
25
ou (OR) um microcomputador, pode tranqilamente satisfazer seu desejo. Acompanhe o diagrama em seguida: Tem Mquina Falso Verdadeiro Falso Verdadeiro Tem Computador Falso Falso Verdadeiro Verdadeiro Pode Escrever Falso Verdadeiro Verdadeiro Verdadeiro
PORtuGuS EStRutuRADO se (condio 1) .ou. (condio 2) ento < instrues executadas se condio 1 ou se condio 2 for verdadeiras > fim_se O operador .ou. faz com que seja executada uma determinada operao se pelo menos uma das condies mencionadas for verdadeira.
26
Lgica de Programao
O operador do tipo .no. utilizado quando houver necessidade de estabelecer a inverso do resultado lgico de uma determinada condio. Se a condio for verdadeira, ser considerada falsa. Se a condio for falsa, ser considerada verdadeira. Abaixo, apresentada a tabela de deciso para este tipo de operador: Condio Falsa Falsa Resultado Verdadeiro Verdadeiro
Considere agora, como exemplo, que se voc possui um carro e o pneu est furado, voc no (NOT) pode viajar. o que mostra a tabela abaixo: Peneu Est furado Falso Verdadeiro Resultado Verdadeiro Falso
Portugus Estruturado se .no. (condio) ento < instrues executadas se condio no for verdadeira > fim se O operador .no. faz com que seja executada uma determinada operao se a condio no for verdadeira, portanto, considerada falsa ou vice-versa.
27
escreva C; fim
SEGunDO ExEMplO Ler trs valores para os lados de um tringulo, considerando lados como: A, B e C. Verificar se os lados fornecidos formam realmente um tringulo, e se for esta condio verdadeira, dever ser indicado qual tipo de tringulo foi formado: issceles, escaleno ou eqiltero. AlGORItMO Para estabelecer este algoritmo, necessrio em primeiro lugar saber o que realmente um tringulo. Se voc no souber o que um tringulo, conseqentemente no conseguir resolver o problema. Tringulo uma forma geomtrica (polgono) composta por trs lados, sendo que cada lado menor que a soma dos outros dois lados. Perceba que isto uma regra (uma condio) e dever ser considerada. um tringulo quando A<B+C, quando B<A+C e quando C<A+B. Tendo certeza de que os valores informados para os trs lados formam um tringulo, sero ento analisados os valores para estabelecer qual tipo de tringulo ser formado: issceles, escaleno ou eqiltero. Um tringulo issceles quando possui dois lados iguais e um diferente, sendo A=B ou A=C ou B=C; escaleno quando possui todos os lados diferentes, sendo A<>B e B<>C e eqiltero quando possui todos os lados iguais, sendo A=B e B=C. 1 Ler trs valores para os lados de um tringulo: A, B e C; 2 Verificar se cada lado menor que a soma dos outros dois lados. Se sim, saber se A=B e B=C, sendo verdade o tringulo eqiltero. Se no, verificar se A=B ou A=C ou B=C, sendo verdade o tringulo issceles; caso contrrio, o tringulo escaleno. 3 Caso os lados fornecidos no caracterizem um tringulo, avisar a ocorrncia. PORtuGuS EStRutuRADO incio real: A, B, C ; leia A, B, C; se ( A < B + C ) .e. ( B < A + C ) .e. ( C < A + B ) ento se ( A = B ) .e. ( B = C ) ento escreva Tringulo Eqiltero; seno se ( A = B ) .ou. ( A = C ) .ou. ( C = B ) ento escreva Tringulo Issceles; seno escreva Tringulo Escaleno; fim se fim se seno escreva As medidas no formam um tringulo; fim se fim
28
Lgica de Programao
1. Faa um Programa que leia as coordenadas de um ponto no plano (x,y) e escreva o quadrante ao qual pertence o ponto no plano. No primeiro quadrante x e y so positivos. No segundo quadrante y positivo. No terceiro quadrante nem x nem y positivo. No quarto quadrante x positivo.
Y Segundo Quadrante Primeiro Quadrante
Terceiro Quadrante
Quarto Quadrante
2. Faa um Programa que leia o QI de uma pessoa e escreva uma mensagem baseada na tabela abaixo. Observe que os colchetes identificam um intervalo fechado e os parnteses identificam um intervalo aberto. [ 000, 030 ) - [ 030, 050 ) - [ 050, 070 ) - [ 070, 100 ) - [ 100, 150 ] - Outros - Ameba Dbil Mental Regular Normal Gnio QI invlido
3. Faa um Programa que leia trs notas de uma pessoa. Calcular a mdia e apresentar um conceito conforme a tabela abaixo: [ 10, 09 ] - ( 09, 07 ] - ( 07, 04 ] - ( 04, 00 ] - A B C D
4. A empresa XYZ & Cia Ltda decidiu conceder um aumento de salrios a seus funcionrios de acordo com a tabela abaixo: SALRIO ATUAL De 0 at 400 Acima de 400 at 700 Acima de 700 at 1000 Acima de 1000 at 1800 Acima de 1800 at 2500 Acima de 2500 NDICE DE AUMENTO 15% 12% 10% 7% 4% 0%
29
Faa um Programa que leia o nmero do funcionrio, o seu salrio atual. Calcular e apresentar o valor do salrio j corrigido. 5. Determine o resultado lgico das expresses mencionadas, assinalando se so verdadeiras ou falsas.. Considere para as repostas os seguintes valores: X = 1, A = 3, B = 5, C = 8 e D = 7. a) .no. ( X > 3 ) Verdadeiro ( ) Falso ( ) b) ( X < 1 ) .e. ( B > D) Verdadeiro ( ) Falso ( ) c) ( D < 0 ) .e. ( C > 5 ) Verdadeiro ( ) Falso ( ) d) ( X > 3 ) .ou. ( C < 7 ) Verdadeiro ( ) Falso ( ) e) ( A > B ) .ou. ( C > B ) Verdadeiro ( ) Falso ( ) f) ( X >= 2 ) Verdadeiro ( ) Falso ( ) g) ( X < 1 ) .e. ( B >= D ) Verdadeiro ( ) Falso ( ) h) ( D < 0 ) .ou. ( C > 5 ) Verdadeiro ( ) Falso ( ) i) .no. ( D > 3 ) Verdadeiro ( ) Falso ( ) j) ( A > B ) .ou. ( C < B ) Verdadeiro ( ) Falso ( ) 6. Indique a sada dos trechos de programa em portugus estruturado, mostrado abaixo. Para as sadas considere os seguintes valores: A=2, B=3, C=5 e D=9. No necessrio calcular os valores de X. Marque na resposta apenas a frmula que ser executada de acordo com a condio. a Resposta: ____________________________________________________________________ se ( D > 5 ) ento X(A+B)*D seno X(AB)/C fim se escreva X
b Resposta: ____________________________________________________________________ se ( A > 2 ) .e. ( B < 7 ) ento X(A+2)*(B2) seno X(A+B)/D*(C+D) fim se escreva X
c Resposta: ____________________________________________________________________ se ( A = 2 ) .ou. ( B < 7 ) ento X(A+2)*(B2) seno X(A+B)/D*(C+D) fim se escreva X
30
Lgica de Programao
d Resposta: ____________________________________________________________________ se ( A > 2 ) .ou. ( B < 7 ) ento X A+B -2 seno X AB fim se escreva X
e Resposta: ____________________________________________________________________ se .no. ( A > 2 ) .ou. .no. ( B < 7 ) ento XA+B seno XA/B fim se escreva X
f Resposta: ____________________________________________________________________ se ( A > 3 ) .e. ( B < 5 ) ento XA+D seno XD/B fim se escreva X
g Resposta: ____________________________________________________________________ se ( C >= 2 ) .e. ( B <= 7 ) ento X(A+B)/2 seno XD*C fim se escreva X
h Resposta: ____________________________________________________________________ se ( A >= 2 ) .ou. ( C <= 1 ) ento X(A+D)/2 seno X A*C fim se escreva X
31
32
Lgica de Programao
result num * 3; escreva result; leia num; result num * 3; escreva result; leia num; result num * 3; escreva result; leia num; result num * 3; escreva result; fim Para estes casos existem comandos apropriados para efetuar a repetio de determinados trechos de programas o nmero de vezes que for necessrio. A principal vantagem deste recurso que o programa passa a ter um tamanho menor, podendo sua amplitude de processamento ser aumentada sem alterar o tamanho do cdigo de programao. Desta forma, pode-se determinar repeties com nmeros variados de vezes.
33
No incio desta aula fizemos um programa que fazia a leitura de um valor para a varivel num, multiplicava esse valor por 3, colocando a resposta na varivel result e apresentava o valor obtido, repetindo esta seqncia por cinco vezes, porque no conhecamos a estrutura enquanto...faa...fim_enquanto, agora vamos fazer o mesmo exemplo utilizando a estrutura para o controle do lao de repetio. FluxOGRAMA Cuidado para no confundir esta nova estrutura com a estrutura de deciso usada anteriormente. Aqui existe um retorno condio aps a execuo do bloco de operaes, at que a condio se torne falsa.
Condio S
34
Lgica de Programao
PORtuGuS EStRutuRADO incio inteiro: num, result; inteiro: cont; cont 1; enquanto ( cont <= 5 ) faa leia num; result num * 3; escreva result; cont cont + 1; fim enquanto fim Alm da utilizao das variveis num e result, foi necessrio criar uma terceira varivel (cont) para controlar a contagem do nmero de vezes que o trecho de programa dever ser executado. Logo aps o incio do programa, a varivel contador atribuda com o valor 1 (cont 1). Em seguida, a instruo enquanto (cont <= 5) faa efetua a checagem da condio estabelecida, verificando que a condio verdadeira, pois o valor da varivel cont que neste momento 1, realmente menor ou igual a 5, e enquanto for dever processar o looping. Sendo assim, tem incio a execuo da rotina de instrues contidas entre as instrues enquanto e a instruo fim enquanto. Depois de efetuar a primeira leitura, clculo e apresentao do valor calculado, o programa encontra a linha cont cont + 1, reinicializando o contedo da varivel contador. Observe que a varivel cont possui neste momento o valor 1 e somado a mais 1 esta passa a ter o valor 2, ou seja, cont cont + 1, sendo assim cont 1 + 1 que resultar cont = 2. Agora que a varivel cont possui o valor 2, o processamento do programa volta para a instruo enquanto (cont <= 5 ) faa, uma vez que o valor da varivel cont menor ou igual a 5. Ser ento executada a rotina de instrues, s que desta vez a varivel cont passar a possuir o valor 3. Desta forma o programa processar novamente a rotina de instrues, passando o valor de cont para 4 que ser verificado e sendo menor ou igual a 5, ser executada mais uma vez a mesma rotina de instrues. Neste ponto, a varivel cont passa a possuir o valor 5. Perceba que a instruo enquanto (cont <= 5) faa ir efetuar a checagem do valor da varivel cont que 5 com a condio cont <= 5. Veja que 5 no menor que 5, mas igual. Sendo esta condio verdadeira, dever a rotina ser executada mais uma vez. Neste momento, o valor da varivel cont passa a ser 6, que resultar para a instruo enquanto uma condio falsa. E por conseguinte, desviar o processamento para a primeira instruo aps a instruo fim_enquanto que no caso a instruo fim, dando o encerramento do programa.
35
SEGunDO ExEMplO Para ilustrar de forma um pouco diferente, imagine que o primeiro exemplo dever ser executado enquanto o usurio queira. Desta forma, em vez de possuir dentro da rotina um contador de vezes, pode-se possuir uma instruo pedindo que o usurio informe se deseja continuar ou no. AlGORItMO 1 Criar uma varivel para ser utilizada como resposta; 2 Enquanto a reposta for sim, executar os passos 3, 4 e 5. 3 Ler um valor para a varivel num; 4 Efetuar a multiplicao do valor de num por 3, atribuindo o resultado em result; 5 Apresentar o valor calculado contido na varivel result; 6 Quando a resposta for diferente de sim, encerrar o processamento do looping. PORtuGuS EStRutuRADO incio inteiro: num, result; caractere: resp; resp S; enquanto ( resp = S ) faa leia num; result num * 3; escreva result; escreva Deseja continuar ?; leia resp; fim enquanto fim Veja que o contador foi substitudo pela varivel resp, que enquanto for igual a S executar a rotina existente entre as instrues enquanto e fim_enquanto. Neste caso, o nmero de vezes que a rotina ir repetir ser controlado pelo usurio e ser encerrada somente quando alguma informao diferente de S for fornecida para a varivel resp.
36
Lgica de Programao
Caracteriza-se por uma estrutura que efetua um teste lgico no fim de um looping. Esta estrutura parecida com a enquanto. A estrutura em questo denominada de repita, sendo conseguida com a utilizao do conjunto de instrues repita...at_que. A estrutura repita...at_que tem o seu funcionamento controlado por deciso. Porm, ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Diferente da estrutura enquanto que executa somente um conjunto de instrues, enquanto a condio verdadeira. Desta forma repita tem seu funcionamento em sentido contrrio a enquanto, pois sempre ir processar um conjunto de instrues no mnimo uma vez at que a condio se torne verdadeira. Para a estrutura repita um conjunto de instrues executado enquanto a condio se mantm Falsa at que ela seja Verdadeira.
37
38
Lgica de Programao
Anteriormente, foram vistas duas formas de elaborar looping. Uma usando o conceito enquanto e a outra usando o conceito repita. Foi visto tambm como elaborar rotinas que efetuaram a execuo de um looping um determinado nmero de vezes com a utilizao de um contador (por meio de uma varivel de controle). Porm, existe uma possibilidade de facilitar o uso de contadores finitos sem fazer uso das duas estruturas anteriores, deixando-as para utilizao de loopings em que no se conhece de antemo o nmero de vezes que uma determinada seqncia de instrues dever ser executada. Os loopings que possuem um nmero finito de execues podero ser processador por meio de estrutura de laos contados do tipo para, sendo conseguida com a utilizao do conjunto de instrues para...de...at...passo...faa...fim_para. A estrutura para...de...at...passo...faa...fim_para tem o seu funcionamento controlado por uma varivel denominada contador. Sendo assim, poder executar um determinado conjunto de instrues um determinado nmero de vezes. FluxOGRAMA Com relao ao fluxograma, ser indicada a varivel a ser controlada com a implicao dos valores de incio, fim e incremento, separados por vrgula. Para representar esta operao em um fluxograma, ser utilizado o smbolo denominado Processamento predefinido ou Preparao, representado pela figura de um hexgono. Figura 5.7 Estrutura do smbolo da instruo para...fim_para Portugus Estruturado para <varivel> de <incio> at <fim> passo <incremento> faa <instrues> fim_para
39
Ser executado o conjunto de instrues entre a instruo para e a instruo fim_para, sendo a varivel cont (varivel de controle) inicializada com valor 1 e incrementada de mais 1 por meio da instruo passo at o valor 5. Esse tipo de estrutura de repetio poder ser utilizada todas as vezes que houver a necessidade de repetir trechos finitos, em que se conhecem os valores inicial e final. SEGunDO ExEMplO Desenvolver a lgica para um programa que escreva na tela os nmeros de 1 at 10. Repare que estamos desejando escrever os nmeros na seguinte seqncia: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Vamos utilizar a estrutura para...de...at...passo...faa...fim_para mas com o passo incrementando o valor da varivel contadora. Algoritmo 1 Definir um contador, variando de 1 a 10; 2 Apresentar o valor contido na varivel contador; 5 Repitir o passo 2 at que o contador seja encerrado. Portugus Estruturado incio inteiro: cont; para cont de 1 at 10 passo 1 faa escreva cont; fim para fim TERCEIRO ExEMplO Desenvolver a lgica para um programa que escreva na tela os nmeros de 10 at 1. Repare que estamos desejando escrever os nmeros na seguinte seqncia: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1. Vamos utilizar a estrutura para...de...at...passo...faa...fim_para mas com o passo decrementando o valor da varivel contadora. Algoritmo 1 Definir um contador, variando de 10 a 1; 2 Apresentar o valor contido na varivel contador; 5 Repitir o passo 2 at que o contador seja encerrado. Portugus Estruturado incio inteiro: cont; para cont de 10 at 1 passo -1 faa escreva cont; fim para fim
40
41
2 SAI UMA PESSOA (escrever: Saiu) 3 MOSTRAR QUANTOS LUGARES ESTO DISPONVEIS 4 MOSTRAR O TOTAL DE PESSOAS QUE ENTRARAM 5 MOSTRAR O TOTAL DE PESSOAS QUE SARAM Outro cdigo escrever: Cdigo Invlido 12. Faa um Programa que calcule o desconto do imposto de renda. O programa dever perguntar quando a pessoa deseja encerrar o programa (Deseja fazer outro clculo? (S/N)). O programa deve pedir o valor do salrio, calcular e apresentar o valor do desconto baseado na seguinte informao: Salrio at R$ 900,00 isento (No paga imposto de renda) Salrio acima de R$ 900,00 at R$ 1.800,00 para 15% de imposto de renda Salrio acima de R$ 1.800,00 para 27% de imposto de renda 13. Faa um Programa que leia o peso das pessoas que querem entrar em um elevador. A capacidade mxima do elevador de 15 pessoas ou 800 Kg, o que ocorrer primeiro. O programa deve ler o peso da pessoa que deseja entrar, se a sua entrada no fizer com que seja ultrapassado qualquer um dos limites, dever escrever: PODE ENTRAR, caso contrrio, ou seja, ultrapassando os limites, dever escrever: NO PODE ENTRAR: ELEVADOR LOTADO e encerrar o programa, mostrando o nmero de pessoas transportadas e o peso total transportado. 14. Faa um Programa que leia dois nmeros e a operao desejada ( + , - , * , / ) e que escreva na tela o resultado da operao. O programa depois de apresentar o resultado dever perguntar quando a pessoa deseja encerrar o programa (Deseja fazer outro clculo? (S/N)). Se a reposta for S dever pedir outros nmeros e a operao desejada, se a resposta for N dever encerrar o programa. 15. Em uma fbrica de chocolates, foi designado ao programador, fazer um programa que calcule o desconto de INSS dos funcionrios. Este programa deve ler o nome do funcionrio e o valor do salrio bruto. Calcular o desconto do INSS levando em considerao o seguinte: a) Para salrios at R$ 500,00 a alquota de INSS ser de 8% b) Para salrios acima de R$ 500,00 at R$ 1.000,00 a alquota de INSS ser de 10% c) Para salrios acima de R$ 1.000,00 a alquota de INSS ser de 12% Para cada funcionrio dever ser apresentado na tela: a) Nome do Funcionrio b) Salrio Bruto c) Taxa de INSS d) Valor de INSS e) Salrio Lquido Aps estas apresentaes o programa dever fazer uma pergunta: Deseja fazer mais algum clculo? (S/N), se a resposta for afirmativa o programa dever continuar com os dados do prximo funcionrio, caso contrrio dever ser terminado. 16. Faa um Programa que possibilite calcular a rea total de uma residncia (sala, cozinha, banheiro, quartos, rea de servio, quintal, garagem, etc). O programa deve solicitar a entrada do nome, a largura e o comprimento de um determinado cmodo. Em seguida, deve apresentar a rea do cmodo lido e tambm uma mensagem solicitando do usurio a confirmao de continuar calculando novos cmodos. Caso o usurio responda que NO, o programa deve apresentar o valor total acumulado da rea residencial.
42
Lgica de Programao
A utilizao deste tipo de estrutura de dados recebe diversos nomes, como: variveis indexadas, variveis compostas, variveis subscritas, arranjos, vetores, matrizes, tabelas em memria ou arrays (do ingls). So vrios os nomes encontrados, a que ns iremos tratar por matrizes. Vamos trabalhar com estes dados direcionados para a linguagem C, pois a escola ir tratar na disciplina de Fundamentos de Programao com esta linguagem. Portanto vamos adaptar a estrutura lgica para esta linguagem, facilitando assim o entendimento de nossos alunos.
Agora basta escrever um programa para efetuar o clculo da mdia de cada aluno. Vamos comear pelo clculo da mdia de cada aluno, iremos representar as notas de cada aluno pelas variveis: nota1, nota2, nota3, nota4, nota5, nota6, e para o clculo da mdia a varivel media, todas do tipo real. Algoritmo 1 Ler as notas do aluno para as variveis nota1, nota2, nota3, nota4, nota5, nota6; 2 Efetuar a soma das notas e a diviso delas por 6, atribuindo o seu resultado para a varivel media; 3 Apresentar o valor da varivel media aps a operao de soma e diviso dos valores fornecidos. Com o conhecimento adquirido at este momento, seria ento elaborado um programa que efetuaria a leitura de cada nota, a soma delas e a diviso do valor da soma por 6, obtendo-se desta forma a mdia do aluno.
43
PORtuGuS EStRutuRADO incio real: nota1; real: nota2; real: nota3; real: nota4; real: nota5; real: nota6; real: nota7; real: soma; real: media; leia nota1; leia nota2; leia nota3; leia nota4; leia nota5; leia nota6;
soma nota1 + nota2 + nota3 + nota4 + nota5 + nota6; media soma / 6; escreva media; fim Perceba que para receber as notas foram utilizadas 6 variveis. Com a tcnica de matrizes poderia ter sido utilizada apenas uma varivel com a capacidade de armazenar 6 valores.
44
Lgica de Programao
Anteriormente, foram utilizadas vrias instrues para poder definir e montar um programa. No caso da utilizao de matrizes, ser definida a instruo conjunto que indicar em portugus estruturado a utilizao de uma matriz, tendo como sintaxe: <tipo de dado> conjunto[<dimenso>], sendo que <dimenso> ser a indicao do tamanho do vetor e <tipo de dado> se o vetor em questo utilizar valores reais, inteiros, lgicos ou caracteres.
45
Supondo que aps a leitura das 6 notas, houvesse a necessidade de apresenta-las antes da apresentao do valor da mdia. Abaixo apresentada a codificao em portugus estruturado da escrita das 6 notas antes de ser apresentado o clculo da mdia. PORtuGuS EStRutuRADO incio real: nota[6]; real: soma, media; inteiro: ndice; soma 0; para ndice de 0 at 5 passo 1 faa leia nota[ndice]; soma soma + nota[ndice]; fim para media soma / 6; para ndice de 0 at 5 passo 1 faa escreva nota[ndice]; fim_para escreva media; fim
46
Lgica de Programao
PORtuGuS EStRutuRADO incio inteiro: matrizA[10]; inteiro: matrizB[10]; inteiro: indice, resp; para ndice de 0 at 9 passo 1 faa leia matrizA[ndice]; fim_para para ndice de 0 at 9 passo 1 faa resp indice mod 2; se ( resp = 0 ) ento matrizB[ndice] matrizA[ndice] * 5; seno matrizB[ndice] matrizA[ndice] + 5; fim_se fim_para para ndice de 0 at 9 passo 1 faa escreva matrizA[ndice]; fim_para para ndice de 0 at 9 passo 1 faa escreva matrizB[ndice]; fim_para fim
SEGunDO ExEMplO Desenvolver um programa que efetue a leitura de dez elementos de uma matriz A do tipo vetor. No final, apresente o total da soma de todos os elementos que sejam mpares. AlGORItMO Perceba que em relao ao primeiro exemplo, este apresenta uma diferena: o primeiro pedia para verificar se o ndice era par ou mpar. Neste exemplo, est sendo solicitado que analise a condio do elemento e no do ndice. J foi alertado anteriormente para se tomar cuidado para no confundir elemento com ndice. Vamos a soluo: 1 Iniciar o contador de ndice, varivel ndice como 0 em um contador at 9; 2 Ler os 10 valores, um a um; 3 Verificar se o elemento mpar; se sim efetuar a soma dos elementos; 4 Apresentar o total somado de todos os elementos mpares da matriz. Observe que quando se faz meno ao ndice indica-se a varivel que controla o contador de ndice, e no caso do exemplo anterior, a varivel ndice. Quando se faz meno ao elemento, indica-se matrizA[ndice] pois desta forma est se pegando o valor armazenado e no a sua posio de endereo.
47
PORtuGuS EStRutuRADO inicio inteiro: matriz[10]; inteiro: indice, resp, soma; soma 0;
para indice de 0 at 9 passo 1 faa leia matrizA[ndice]; fim_para para indice de 0 at 9 passo 1 faa resp matrizA[indice] mod 2; se ( resp = 1 ) ento soma soma + matrizA[indice] ; fim_se fim_para
48
Lgica de Programao
ser multiplicado por 2 e armazenado na matriz B; caso contrrio, o elemento da matriz A dever ser armazenado na matriz B sem nenhum clculo. Apresentar os elementos das matrizes A e B. k) Faa um programa que leia uma matriz numrica de 10 elementos. No final apresentar quantos nmeros so positivos e quantos so negativos l) Faa um programa que leia uma matriz numrica de 10 elementos. No final encontrar nesta matriz o maior valor lido, apresentando a sua posio na matriz e o seu valor. m) Faa um programa que leia uma matriz numrica de 10 elementos. No final encontrar nesta matriz o maior valor lido e o menor valor lido n) Em uma Escola Tcnica de Informtica, h um professor que faz 6 provas. Faa um programa que leia as notas destas provas para um vetor notas. No final calcular e apresentar a mdia do aluno e o resultado obtido conforme a tabela a seguir: [00,05) - Reprovado [05,07) - Recuperao [07,09) - Satisfatrio [09,10] - timo
49
Veja como ficaria nossa tabela com as notas e as mdias de cada aluno: Aluno 1 2 3 4 5 6 7 8 NOTA 1 4.0 6.0 9.0 3.0 4.0 7.0 8.0 6.0 NOTA 2 6.0 7.0 8.0 5.0 6.0 7.0 7.0 7.0 NOTA 3 5.0 5.0 9.0 4.0 6.0 7.0 6.0 2.0 NOTA 4 3.0 8.0 6.0 2.0 8.0 7.0 5.0 9.0
50
Lgica de Programao
Uma matriz de duas dimenses atribuda pela instruo conjunto j utilizada para definir o uso de uma matriz de uma dimenso, sendo bastante parecidas em sua referncia. A sintaxe : <tipo de dado> : conjunto[<dimenso1>][<dimenso2>], sendo que <dimenso1> e <dimenso2> so a indicao do tamanho da tabela e <tipo de dado> o tipo da matriz, que poder ser formada por valores reais, inteiros, lgicos ou caracteres.
51
Para demonstrar a utilizao de uma matriz de duas dimenses, considere o exemplo apresentado a seguir: Primeiro exemplo Desenvolver um programa que efetue a leitura das receitas e despesas dos primeiros 6 meses de uma empresa. Calcular e armazenar o resultado mensal da empresa. Algoritmo 1 Ler as receitas de cada ms 2 Ler as despesas de cada ms 3 Calcular o resultado de cada ms subtraindo a receita da despesa 4 Apresentar as receitas, as despesas e o resultados de cada ms Pela caracterstica do programa a ser desenvolvido, seria ideal utilizarmos uma matriz 3 x 6, para armazenar estes dados. Nas colunas teremos os meses, nas linhas teremos respectivamente receitas, despesas e resultados, veja o desenho a seguir: Janeiro Receitas Despesas Resultados PORtuGuS EStRutuRADO incio real : caixa[3][ 6]; inteiro: lin, col; lin 1; para col de 0 at 5 passo 1 faa escreva Digite a receita do ms; leia caixa[lin][col]; fim_para lin 2; para col de 0 at 5 passo 1 faa escreva Digite a despesa do ms; leia caixa[lin][col]; fim_para para col de 0 at 5 passo 1 faa caixa[2][col] caixa[0][col] - caixa[1][col]; fim_para para col de 0 at 5 passo 1 faa escreva A receita do ms, caixa[0][col]; escreva A despesa do ms,caixa[1][col]; escreva O resultado do ms,caixa[2][col]; fim_para fim Fevereiro Maro Abril Maio Junho
52
Lgica de Programao
53
8 PROCEDIMEntOS E FunES
A partir deste momento vamos aprender o conceito da tcnica de sub-rotinas. Estas sub-rotinas tambm so conhecidas pela denominao de mdulos, sub-programas, ou subalgoritmos. Na linguagem C as sub-rotinas so tratadas como FUNES. Na realidade, no importa como so chamadas, o que importa a forma como funcionam e como devem ser aplicadas em um programa, e isto que iremos aprender a partir deste momento. Iremos rever o conceito de criao estruturada de programas, pois para escrever um programa de computador necessita-se de estudo (levantamento de todas as necessidades e detalhes do que dever ser feito) e metodologia (regras bsicas que devero ser seguidas). Sem a aplicao de mtodos no ser possvel resolver grandes problemas; quando muito, pequenos problemas. As Sub-rotinas No geral, problemas complexos exigem algoritmos complexos. Mas sempre possvel dividir um problema grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples, e esse trecho menor que chamado de sub-rotina. Uma sub-rotina na verdade um programa, e sendo um programa poder efetuar diversas operaes computacionais (entrada, processamento e sada) e dever ser tratada como foram os programas projetados at este momento. As sub-rotinas so utilizadas na diviso de algoritmos complexos, permitindo assim possuir a modularizao de um determinado problema, considerado grande e de difcil soluo. Quando trabalhamos com esta tcnica, pode-se deparar com a necessidade de dividir uma sub-rotina em outras tantas quantas forem necessrias, buscando uma soluo mais simples de uma parte do problema maior. O processo de dividir sub-rotinas em outras denominado Mtodo de Refinamento Sucessivo. O Mtodo Top-Down Desde muito tempo este um dos processos mais simples e mais utilizados pelos programadores. O processo de programar um computador torna-se bastante simples quando aplicado o mtodo de utilizao de sub-rotinas (mdulos de programas). Porm, a utilizao dessas sub-rotinas dever ser feita com aplicao do mtodo top down. Um mtodo bastante adequado para a programao de um computador trabalhar com o conceito de programao estruturada, pois a maior parte das linguagens de programao utilizadas atualmente tambm , o que facilita a aplicao deste processo de trabalho. O mtodo mais adequado para a programao estruturada o Top-Down (De cima para baixo) o qual se caracteriza basicamente por: Antes de iniciar a construo do programa, o programador dever ter em mente as tarefas principais que este dever executar. No necessrio saber como funcionaro, somente saber quantas so. Conhecidas todas as tarefas a serem executadas, tem-se em mente como dever ser o programa principal, o qual vai controlar todas as outras tarefas distribudas em suas sub-rotinas. Tendo definido o programa principal, iniciado o processo de detalhamento para cada sub-rotina. Desta forma so definidos vrios algoritmos, um para cada rotina em separado, para que se tenha uma viso do que dever ser executado em cada mdulo de programa. Existem programadores que estabelecem o nmero mximo de linhas de programa que uma rotina dever possuir. Se o nmero de linhas ultrapassa o limite preestabelecido, a rotina em desenvolvimento dividida em outra sub-rotina ( neste ponto que se aplica o mtodo de refinamento sucessivo). O mtodo Top-Down faz com que o programa tenha uma estrutura semelhante a um organograma. A utilizao do mtodo de cima para baixo permite que seja efetuado cada mdulo de programa em separado. Desta forma, cada um pode ser testado separadamente garantindo que o programa completo esteja sem erro ao seu trmino. Outro detalhe a ser considerado que muitas vezes existem em um programa trechos de cdigos que so repetidos vrias vezes. Esses trechos podero ser utilizados como sub-rotinas, proporcionando um programa menor e mais fcil de ser alterado num futuro prximo.
54
Lgica de Programao
A utilizao de sub-rotinas e o uso do mtodo Top-Down na programao permitem ao programador elaborar rotinas exclusivas. Por exemplo, uma rotina somente para entrada, outra para a parte de processamento e outra para sada dos dados. Aplicao prtica do uso de Sub-Rotinas As sub-rotinas podem ser subdivididas em dois tipos: Procedimentos e Funes. Entre estes dois tipos de sub-rotinas existem algumas diferenas, mas o conceito o mesmo para ambas. Um Procedimento um bloco de programa contendo incio e fim e ser identificado por um nome, por meio do qual ser referenciado em qualquer parte do programa principal ou do programa chamador da rotina. Quando uma sub-rotina chamada por um programa, ela executada e ao seu trmino o controle de processamento retorna automaticamente para a primeira linha de instruo aps a linha que efetuou a chamada de sub-rotina. Uma funo tambm um bloco de programa, como so os procedimentos, contendo inicio e fim e sendo identificada por um nome, por meio do qual tambm ser referenciada em qualquer parte do programa principal. Uma sub-rotina de funo na verdade muito parecida com uma sub-rotina de procedimento. A sua principal diferena est no fato de uma funo retornar um determinado valor. As funes formam o alicerce da programao em C. Voc faz toda a programao C dentro de uma funo, porque todos os programas devem incluir main, que uma funo. Em outras linguagens como Pascal, so utilizados procedimentos e funes, FORTRAN utiliza somente funes e a linguagem Assembly utiliza somente procedimentos. A linguagem C utiliza somente funes com e sem retorno de valores, tornando-se um pouco diferente na qualificao de sub-rotinas e funes, conforme a lgica de programao. Mas, no se preocupe, isto no ir mudar a forma como voc vai trabalhar na linguagem C. Exerccio de Aula Vamos criar um programa de calculadora que apresente um menu de selees no programa principal. Esse menu dever dar ao usurio a possibilidade de escolher uma entre quatro operaes aritmticas. Escolhida a opo desejada, dever ser solicitada entrada de dois nmeros e depois de processada a operao, dever ser exibido o resultado. Este programa dever ser um conjunto de cinco rotinas, sendo uma principal e quatro secundrias. A rotina principal efetuar o controle das quatro rotinas secundrias que, por sua vez, pediro a leitura de dois valores, faro a operao e apresentaro o resultado obtido. A figura a seguir apresenta um organograma com a idia de hierarquizao das rotinas do programa. A quinta opo no se caracteriza por ser uma rotina, apenas a opo que vai encerrar o looping de controle do menu. Tendo uma idia da estrutura geral do programa, ser escrito em separado cada algoritmo com os seus detalhes de operao. Primeiro o programa principal e depois as outras rotinas, de preferncia na mesma ordem em que esto mencionadas no organograma. ideal que voc codifique o programa aos poucos, como por exemplo: na definio do programa acima, primeiro vamos testar o menu e ver se a interao entre as partes funciona. Veja no programa a seguir:
55
opcao <- 0; enquanto opcao <> 5 faa escrever 1 Adio; escrever 2 - Subtracao; escrever 3 - Multiplicacao; escrever 4 Diviso; escrever 5 - Fim do programa; escrever Escolha uma opcao: ; leia opcao; se opcao = 1 entao somar; seno se opcao = 2 entao subtrair; seno se opcao = 3 ento multiplicar; seno se opcao = 4 ento dividir; seno se opcao = 5; ento escrever Encerrando o programa; seno escrever Opcao invalida; fim_se fim_se fim_se fim_se fim_se
fim_enquanto fim
procedimento somar inicio real: valorA, valorB, result; escrever Rotina de Soma; escrever Digite um valor para A: ; leia valorA; escrever Digite um valor para B: ; leia valorB;
56
Lgica de Programao
result <- valorA + valorB; escrever A soma de A com B e: , result; fim [somar]
procedimento subtrair inicio real: valorA, valorB, result; escrever Rotina de Subtrao; escrever Digite um valor para A: ; leia valorA; escrever Digite um valor para B: ; leia valorB; result <- valorA - valorB; escrever A subtrao de A com B e: , result; fim [subtrair]
procedimento multiplicar inicio real: valorA, valorB, result; escrever Rotina de Multiplicao; escrever Digite um valor para A: ; leia valorA; escrever Digite um valor para B: ; leia valorB; result <- valorA * valorB; escrever A multiplicao de A com B e: , result; fim [multiplicar] procedimento dividir inicio real: valorA, valorB, result; escrever Rotina de Diviso; escrever Digite um valor para A: ; leia valorA; escrever Digite um valor para B: ; leia valorB; result <- valorA / valorB;
57
Funes As funes podem ser utilizadas da forma mais simples possvel, como as que no recebem nenhuma informao e tambm no retornam nenhuma informao. Mas podem ser um pouco mais sofisticadas podendo receber informaes de quem as chamou e se for necessrio retornar uma informao para a funo que a chamou. A principal diferena existente entre uma sub-rotina do tipo procedimento e uma sub-rotina do tipo funo a capacidade que uma funo tem de retornar sempre um valor. Vamos ver um exemplo atravs da funo somar: funo inteiro somar ( ) inicio real: valorA, valorB, result; escrever Rotina de Soma; escrever Digite um valor para A: ; leia valorA; escrever Digite um valor para B: ; leia valorB; result <- valorA + valorB; return result; fim [somar] No programa acima podemos perceber o comando return que retorna o valor da varivel result.
58
Lgica de Programao
ExERCCIOS DE FIxAO 1. Faa um programa que efetue o clculo de uma prestao em atraso. Para tanto, utilize a frmula PREST = VALOR + (VALOR * (TAXA / 100) * TEMPO). O programa dever chamar uma funo que faa a entrada dos dados e o clculo da prestao e retorne o valor deste clculo para a funo principal (main). Finalmente apresentar o valor da prestao. 2. Faa um programa que possua uma funo que efetue e permita apresentar o somatrio dos N primeiros nmeros inteiros. (1+2+3+4+5+6+...+N). Esta funo dever receber da funo principal (main) o nmero N e no final esta mesma funo dever retornar o valor do somatrio, que dever ser apresentado ao usurio pela funo principal (main). 3. Faa um programa que possua uma funo para calcular e apresentar o valor de uma potncia de um nmero qualquer. Ou seja, ao informar para a funo o nmero e sua potncia, dever ser apresentado o seu resultado. Por exemplo, se for mencionado no programa principal a funo POTENCIA(2,3), dever ser apresentado o valor 8. 4. Faa um programa que possua uma funo para calcular e apresentar a srie de Fibonacci de N termos. A srie de Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34,...etc. Est srie caracteriza-se pela soma de um termo posterior com o seu anterior subseqente. A funo main deve apenas chamar a funo que calcula a srie de Fibonacci. 5. Faa um programa que efetua a leitura de um nmero inteiro e apresente uma mensagem informando se o nmero par ou mpar. Usar uma funo que identifique se o nmero par ou mpar. 6. Faa um programa que apresente um menu com as seguintes opes de clculos: Calcular a rea do quadrado Calcular a rea do retngulo Calcular a rea do circulo Encerrar o programa Estes clculos devem ser realizados em funes, ou seja, dever ter uma funo para cada tipo de clculo. Cada funo dever ter entrada de dados (digitao dos dados para o clculo), processamento dos dados (clculos propriamente ditos) e a sada de dados (apresentao dos resultados dos clculos). 7. Faa um programa que apresente um menu com as seguintes opes e efetue os respectivos clculos atravs de funes: Calcular o volume de uma lata de leo Calcular o volume de uma caixa Encerrar o programa 8. Em uma Escola Tcnica de Informtica, h um professor que faz 6 provas. Faa um programa para calcular a mdia dos alunos de uma escola. O programa dever ter um menu com as seguintes informaes: Calcular a mdia Encerrar o programa O clculo da mdia dever ser realizado em uma funo onde dever ser solicitado o valor das 6 notas escolares, efetuar o clculo da mdia e apresentar no final o resultado obtido conforme a tabela a seguir: [00,05) - Reprovado [05,07) - Recuperao [07,09) - Satisfatrio [09,10] - timo
59
9. Faa um programa para ler uma temperatura em graus Celsius. Criar uma funo que converte a temperatura de Celsius para Fahrenheit. A frmula de converso F ( 9 * C + 160 ) / 5, sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. A funo de converso deve receber como entrada de dados a temperatura em Celsius em tipo de dado float, fazer a converso e retornar o valor convertido em graus Fahrenheit. 10. Faa um programa para ler uma temperatura em graus Fahrenheit. Criar uma funo que converte a temperatura de Fahrenheit para Celsius. A frmula de converso C ( F 32 ) * ( 5 / 9 ), sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. A funo de converso deve receber como entrada de dados a temperatura em Fahrenheit em tipo de dado float, fazer a converso e retornar o valor convertido em graus Celsius. 11. Faa um programa que leia um caracter do teclado. Criar uma funo que ir converter esta letra para uma letra minscula e retorna-la. 12. Faa um programa que leia dois nmeros. Criar uma funo chamada potencia que eleva o primeiro nmero a uma potncia inteira do segundo nmero e retorna o valor calculado. Por exemplo, se for lido os nmeros 2 e 3, a funo ir calcular 2 ou seja 2 * 2 * 2 13. Faa um programa que leia e calcule a rea de um retngulo. O programa dever ter uma funo que leia a base e a altura do retngulo, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do retngulo = base * altura. 14. Faa um programa que leia e calcule a rea de um tringulo. O programa dever ter uma funo que leia a base e a altura do retngulo, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do tringulo = (base * altura) / 2. 15. Faa um programa que leia e calcule a rea de um trapzio. O programa dever ter uma funo que leia a base maior, a base menor e a altura do trapzio, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do trapzio = ((base maior + base menor) /2) * altura. 16. Faa um programa que leia e calcule a rea de um crculo. O programa dever ter uma funo que leia o raio do crculo, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do crculo = * r.
Anotaes:____________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________
60
Lgica de Programao
Bibliografia utilizada: 1. MANZANO, JOS AUGUSTO N. G. Algoritmos: Lgica para Desenvolvimento de Programao, Editora rica, So Paulo, 2000. 2. MANZANO, JOS AUGUSTO N. G. Lgica estruturada para Programao, Editora rica, So Paulo, 2001. 3. BOHI, MARILYN Guia para programadores, Editora Campus, Rio de Janeiro, 1988. 4. ALCIDES MAYA - Polgrafo Tcnicas de Programao Porto Alegre, 2001 5. ALCIDES MAYA - Polgrafo Algoritmo Porto Alegre, 2001 6. REIS, ANTONIO Manual Bsico de Linguagem C, Porto Alegre, 2000. 7. Outras fontes Internet, Revistas e Peridicos.
61