Você está na página 1de 89

Tubaro / Santa Catarina / BRAZIL E-Mail : osmarjr@unisul.rct-sc.

br

ndice
1. Introduo................................................................................................................................................4 1.1 Conceito de Algoritmo........................................................................................................................4 1.2 Fases de um Algoritmos......................................................................................................................4 1.3 Viso Geral.........................................................................................................................................5 2. Formas de Representao de Algoritmos.............................................................................................6 2.1 Descrio Narrativa...........................................................................................................................6 2.2 Fluxograma Convencional.................................................................................................................7 2.3 Pseudocdigo......................................................................................................................................8 2.4 Sntese..................................................................................................................................................9 3. Tipos de Dados.......................................................................................................................................11 3.1 Dados Numricos..............................................................................................................................11 3.2 Dados Literais. .................................................................................................................................12 3.3 Dados Lgicos...................................................................................................................................13 3.4 Sntese................................................................................................................................................13 4. Variveis.................................................................................................................................................15 4.1 Arquitetura de Memria...................................................................................................................15 4.2 Tipos de Dados..................................................................................................................................15 4.3 Armazenamento de Dados na Memria...........................................................................................16 4.4 Conceito e Utilidade de Variveis....................................................................................................18 4.5 Definio de Variveis em Algoritmos.............................................................................................19 4.6 Definio de Variveis em Pascal....................................................................................................20 4.7 Mapeamento de Variveis na Memria...........................................................................................21 4.8 Tipos de Dados em Pascal................................................................................................................22 4.9 Sntese................................................................................................................................................22 5. Expresses..............................................................................................................................................24 5.1 Operadores........................................................................................................................................24 5.2 Tipos de Expresses..........................................................................................................................25 5.3 Avaliao de Expresses..................................................................................................................29 5.4 Sntese................................................................................................................................................29 5.5 Exerccio Resolvido..........................................................................................................................30 6. Instrues Primitivas............................................................................................................................32 6.1 Instruo Primitiva de Atribuio....................................................................................................32 6.2 Instruo Primitiva de Sada de Dados............................................................................................35 6.3 Instruo Primitiva de Entrada de Dados........................................................................................37 6.4 Sntese................................................................................................................................................40 6.5 Exerccios Resolvidos.......................................................................................................................41 7. Controle do Fluxo de Execuo...........................................................................................................47

7.1 Comandos Compostos.......................................................................................................................47 7.2 Estrutura Seqencial.........................................................................................................................47 7.3 Estruturas de deciso........................................................................................................................47 7.4 Estruturas de Repetio....................................................................................................................56 7.5 Aninhamentos....................................................................................................................................63 7.6 Sntese................................................................................................................................................64 8. Smbolos Usados em Fluxogramas.......................................................................................................68 9. Funes pr-definidas do Pascal..........................................................................................................70 9.1 Descrio das Funes/Rotinas: .....................................................................................................70 10. Problemas Resolvidos em Algoritmos, Pascal e C...........................................................................79 10.1 Algoritmo do Triangulo..................................................................................................................79 10.2 Algoritmo Preco Automvel..........................................................................................................80 10.3 Algoritmo Media Valor...................................................................................................................81 10.4 Algoritmo 3 Menores......................................................................................................................82 10.5 Algoritmo Media Maior que 4........................................................................................................83 10.6 Algoritmo Salrio............................................................................................................................85 10.7 Algoritmo 50 Triangulos.................................................................................................................86 10.8 Algoritmo Media Menores..............................................................................................................87

1.

Introduo

1.1

Conceito de Algoritmo

A automao o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por mquinas, sejam estas dispositivos mecnicos, eletrnicos (como os computadores) ou de natureza mista. Para que a automao de uma tarefa sejam bem-sucedida necessrio que a mquina que passar a realiz-la seja capaz de desempenhar cada uma das etapas constituintes do processo a ser automatizado com eficincia, de modo a garantir a repetibilidade do mesmo. Assim, necessrio que seja especificado com clareza e exatido o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem como a seqncia em que estas fases devem ser realizadas. A especificao da seqncia ordenada de passos que deve ser seguida para a realizao de uma tarefa, garantindo a sua repetibilidade, d-se o nome de algoritmo. Ao contrrio do que se pode pensar, o conceito de algoritmo no foi criado para satisfazer s necessidades da computao. Pelo contrrio, a programao de computadores apenas um dos campos de aplicao dos algoritmos. Na verdade, h inmeros casos que podem exemplificar o uso (involuntrio ou no) de algoritmos para a padronizao do exerccio de tarefas rotineiras. Tornando ao contexto computacional, daqui em diante a ateno deste trabalho estar voltada automao de tarefas utilizando computadores. Algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo um caminho para a soluo de um problema, e em geral, os caminhos que levam a uma soluo so muitas. O aprendizado de algoritmos no se consegue a no ser atravs de muitos exerccios. Algoritmos no se aprende: - Copiando Algoritmos Estudando Algoritmos Algoritmos s se aprendem: - Construindo Algoritmos - Testando Algoritmos Para que um computador possa desempenhar uma tarefa necessrio que este seja detalhada passo a passo, numa forma compreensvel pela mquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais que um algoritmo escrito numa forma compreensvel pelo computador.

1.2

Fases de um Algoritmos

Quando temos um problema e vamos utilizar um computador para resolve-lo inevitavelmente temos que passar pelas seguintes etapas: a) Definir o problema. b) Realizar um estudo da situao atual e verificar quais a(s) forma(s) de resolver o problema. c) Terminada a fase de estudo, utilizar uma linguagem de programao para escrever o programa que dever a princpio, resolver o problema. d) Analisar junto aos usurios se o problema foi resolvido. Se a soluo no foi encontrada, dever ser retornado para a fase de estudo para descobrir onde est a falha. Estas so de forma bem geral, as etapas que um analista passa, desde a apresentao do problema at a sua efetiva soluo. Iremos, neste curso, nos ater as etapas de estudo, tambm chamada

de anlise, e a etapa de programao. Mas antes vamos definir o seguinte conceito: Programar um computador consiste em elaborar um conjunto finito de instrues, reconhecidas pela mquina, de forma que o computador execute estas instrues. Estas instrues possuem regras e uma Sintaxe prpria, como uma linguagem tipo portugus ou ingls, sendo isto chamadas de linguagem de computador. No mundo computacional existe uma grande variedade de linguagens Pascal, C, C++, Java, Cobol, Fortran, etc .

1.3

Viso Geral

O objetivo deste trabalho prover ao leitor meios de organizar o raciocnio empregado na soluo de problemas rotineiros e express-lo numa forma entendida (quase) diretamente pelos computadores. A tcnica apresentada basicamente a da Programao Estruturada, onde enfatizada a abordagem de problemas pelo Mtodo de Refinamento Sucessivos.

2.

Formas de Representao de Algoritmos

Existem diversas formas de representao de algoritmos, mas no h um consenso com relao melhor delas. O critrio usado para classificar hierarquicamente estas formas est diretamente ligado ao nvel de detalhe ou, inversamente, ao grau de abstrao oferecido. Algumas formas de representao de algoritmos tratam os problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma linguagem de programao especfica. Por outro lado, existem formas de representao de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idia principal, o algoritmo, dificultando seu entendimento. Dentre as formas de representao de algoritmos mais conhecidas sobressaltam: a Descrio Narrativa; o Fluxograma Convencional o Pseudocdigo, tambm conhecido como Linguagem estruturada ou Portugol.

2.1

Descrio Narrativa

Nesta forma de representao os algoritmos so expressos diretamente em linguagem natural. Como exemplo, tm-se os algoritmos seguintes: Receita de Bolo: Misture os Ingredientes Unte a forma com manteiga Despeje a mistura na forma Se houver coco ralado Ento despeje sobre a mistura Leve a forma ao forno Enquanto no corar Deixe a forma no forno Retire do forno Deixe esfriar Troca de um pneu furado: Afrouxar ligeramente as porcas Suspender o carro Retirar as porcas e o pneu Colocar o pneu reserva Apertar as porcas Abaixar o carro Dar o aperto final nas porcas Tomando Banho: Entrar no banheiro e tirar a roupa Abrir a torneira do chuveiro Entrar na gua Ensaboar-se Sair da gua Fechar a torneira Enxugar-se Vestir-se Clculo da mdia de um aluno: Obter as notas da primeira e da Segunda provas Calcular a mdia aritmtica entre as duas Se a mdia for maior que 7, o aluno foi

Aprovado, seno ele foi reprovado. Esta representao pouco usada na prtica porque o uso da linguagem natural muitas vezes d oportunidade a ms interpretaes, ambigidades e imprecises. Por exemplo, a instruo "afrouxar ligeiramente as porcas" no algoritmo da troca de pneus est sujeita a interpretaes diferentes por pessoas distintas. Uma instruo mais precisa seria: "afrouxar a porca, girando-a de 30o no sentido anti-horrio".

2.2

Fluxograma Convencional

E uma representao grfica de algoritmos onde formas geomtricas diferentes implicam aes (instrues, comandos) distintos. Tal propriedade facilita o entendimento das idias contidas nos algoritmos e justifica sua popularidade. Esta forma e aproximadamente intermediria a descrio narrativa e ao pseudocdigo (subitem seguinte), pois e menos imprecisa que a primeira e, no entanto, no se preocupa com detalhes de implementao do programa, como o tipo das variveis usadas (Captulos 2 e 3). Ha vrios padres que definem as formas geomtricas das figuras que devem ser usadas para representar cada um dos diversos tipos de instrues; contudo, nenhum deles se sobressai com relao aos demais no que diz respeito a aceitao por parte dos usurios. Nota-se que os fluxogramas convencionais preocupam-se com detalhes de nvel fsico da implementao do algoritmo. Por exemplo, figuras geomtricas diferentes so adotadas para representar operaes de sada de dados realizadas em dispositivos distintos, como uma fita magntica ou um monitor de vdeo. Como a abordagem deste texto no est interessada em detalhes fsicos da implementao (onde fazer), mas to somente com o nvel lgico (o que fazer e como fazer) das instrues do algoritmo, ser adotada a notao simplificada da Figura 1 para os fluxogramas. De qualquer modo, o Apndice A contm uma tabela com os smbolos mais comuns nos fluxogramas convencionais. = Incio e final do fluxograma

= Operao de entrada de dados

= Operao de sada de dados

= Operaes de atribuio e chamada ou retorno de subalgoritmo

= Deciso Figura 1 - Principais formas geomtricas usadas em fluxogramas De modo geral, um fluxograma se resume a um nico smbolo inicial, por onde a execuo do algoritmo comea, e um ou mais smbolos finais, que so pontos onde a execuo de algoritmo se encerra. Partindo do smbolo inicial, h sempre um nico caminho orientado a ser seguido, representando a existncia de uma nica seqncia de execuo das instrues. Isto pode ser melhor visualizado pelo fato de que, apesar de vrios caminhos poderem convergir para uma mesma figura do diagrama, h sempre um nico caminho saindo desta. Excees e esta regra so os smbolos finais, dos quais no h nenhum fluxo saindo, e os smbolos de deciso, de onde pode haver mais de um caminho de sada (usualmente dois caminhos), representando uma bifurcao no fluxo. A Figura 2 mostra a representao do algoritmo de clculo da mdia de um aluno sob a forma de um fluxograma.

Incio

N1, N2

Mdia (N1 + N2 ) /2

.V. Mdia > 7 .F.

"Aprovado"

"Reprovado"

Fim

Figura 2 - Exemplo de um fluxograma convencional

2.3

Pseudocdigo

Antes de utilizarmos uma linguagem de computador, necessrio organizar as aes a serem tomadas pela mquina de forma organizada e lgica, sem nos atermos as regras rgidas da Sintaxe de uma linguagem. Para isto utilizaremos uma forma de escrever tais aes, conhecida como algoritmo, ou pseudocdigo. Conceituando: Algoritmo consiste em um conjunto lgico e finito de aes ( instrues ) que resolvem um determinado problema. Esta forma de representao de algoritmos rica em detalhes, como a definio dos tipos das variveis usadas no algoritmo e, por assemelhar-se bastante forma em que os programas so escritos, encontra muita aceitao. Na verdade, esta representao suficientemente geral para permitir que a traduo de um algoritmo nela representada para uma linguagem de programao especfica seja praticamente direta.

A forma geral da representao de um algoritmo na forma de pseudocdigo a seguinte:


Algoritmo <Nome_do_algoritmo> <declarao_de_variveis> <subalgoritmos> Incio <Corpo_do_algoritmo> Fim. Em Pascal ficaria da seguinte forma: Program <Nome_do_programa>; <declarao_de_variveis> <subalgoritmos> Begin <Corpo_do_Programa>; End. Onde: Algoritmo uma palavra que indica o incio da definio de um algoritmo em forma de pseudocdigo. <nome_do_algoritmo> um nome simblico dado ao algoritmo com a finalidade de distingui-lo dos demais. <declarao_de_variveis> consiste em uma poro opcional onde so declaradas as variveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos. <subalgoritmos> consiste de uma poro opcional do pseudocdigo onde so definidos os subalgoritmos. Incio e Fim so respectivamente as palavras que delimitam o incio e o trmino do conjunto de instrues do corpo do algoritmo. Como exemplo, a Figura 3 mostra a representao do algoritmo do clculo da mdia de um aluno, na forma de um pseudocdigo. Algoritmo Mdia Var N1, N2, Mdia : real Incio Leia N1, N2 Mdia (N1 + N2) / 2 Se Mdia > 7 Ento Escreva "Aprovado" Seno Escreva "Reprovado" Fim_se Fim Figura 3 - Figura de um pseudocdigo

2.4

Sntese

H diversas formas de representao de algoritmos que diferem entre si pela quantidade de detalhes de implementao que fornecem ou, inversamente, pelo grau de abstrao que possibilitam com relao implementao do algoritmo em termos de uma linguagem de programao especfica. Dentre as principais formas de representao de algoritmos destacam-se: a descrio narrativa, o fluxograma convencional e o pseudocdigo (ou linguagem estruturada).

2.4.1 Exerccios A
Usando Descrio Narrativa, Fluxograma e Pseudocdigo desenvolva os seguintes algoritmos: 1. Elabore um algoritmo para mudar um pneu furado. Admita que esto disponveis um macaco e outro pneu em boas condies. 9

2. Elabore um algoritmo para fazer pipoca numa panela de fogo, usando manteiga, sal e milho de pipoca. 3. Desenvolva um algoritmo para trocar um vidro quebrado de uma janela. Numa lista parte, descreva todos os matrias necessrios. 4. Elabore um algoritmo que represente sua sada de casa pela manh. Comece com o passo dormindo na cama e inclua todas as atividades matutinas normais. 5. (a) Elabore um algoritmo para realizar uma chamada telefnica. (b) Amplie a parte (a) para um algoritmo que permita realizar chamadas de longa distncia. Inclua as possibilidades de chamadas aparelho-a-aparelho, a cobrar e de pessoa-a-pessoa.

10

3.

Tipos de Dados

Todo o trabalho realizado por um computador e baseado na manipulao das informaes contidas em sua memria. Grosso modo, estas informaes podem ser classificadas em dois tipos: As instrues que comandam o funcionamento da mquina e determinam a maneira como devem ser tratados os dados. As instrues so especficas para cada modelo de computador, pois so funo do tipo particular de processador utilizado em sua implementao. Os dados propriamente ditos, que correspondem a poro das informaes a serem processadas pelo computador. A maior parte das pessoas no ligadas a rea de informtica ignora o potencial dos computadores e imagina que eles so capazes de tratar apenas com dados numricos. Na realidade, a capacidade dos mesmos se estende a outros tipos de dados. O objetivo deste captulo e justamente o de classificar os dados de acordo com o tipo de informao contida neles. A classificao apresentada no se aplica a nenhuma linguagem de programao especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria das linguagens.

3.1

Dados Numricos

Antes de apresentar formalmente os tipos de dados numricos, e conveniente recordar alguns conceitos bsicos relacionados a teoria dos nmeros e conjuntos. O conjunto dos nmeros naturais e representado por N dado por: N = { 1, 2, 3, 4, ... } Algumas correntes de matemticos tericos convencionam que o nmero O est contido neste conjunto; contudo, no convm perder tempo em tais discusses filosficas, uma vez que isto no influenciar de forma alguma este estudo. Na seqncia, encontramos o conjunto dos nmeros inteiros: Z = { ..., -3, -2, -1, O. 1, 2, 3, ... } O conjunto Z contm todos os elementos de N. bem como alguns nmeros que no pertencem a N (os nmeros negativos e o zero). Portanto, dizemos que N est contido em Z. ou ento, que Z contm N. Englobando o conjunto dos nmeros inteiros, existe o conjunto dos nmeros fracionrios (Q), dado pelo universo dos nmeros que podem ser expressos na forma de ma frao, isto e, um quociente onde o numerador e o denominador so nmeros inteiros. Mais formalmente, Q = { p / q | p, q pertencem a Z } Por ltimo, surge o conjunto dos nmeros reais (R), formado pela unio do conjunto dos nmeros fracionrios Q com o conjunto dos nmeros que no podem ser expressos na forma de uma frao (os nmeros irracionais). Ex.: 2 = 1.1412..., PI = 3.14159... A Figura 4 sintetiza a informao apresentada at aqui. Existe um conjunto que contm o conjunto dos nmeros reais, o conjunto dos nmeros complexos, cujo estudo extrapola os objetivos deste texto.

11

Tornando ao aspecto computacional, os dados numricos representveis num computador so divididos em apenas duas classes: os inteiros e os reais.

Figura 4 - Representao do Universos dos conjuntos numricos e as relaes de pertinncia entre eles.

3.1.1 Dados Numricos Inteiros


Os nmeros inteiros so aqueles que no possuem componentes decimais ou fracionrios, podendo ser positivos ou negativos. Os elementos pertencentes aos conjuntos N e Z. apesar de serem representveis na classe dos nmeros reais, so classificados como dados do tipo inteiro, por no possurem parte fracionria. est possibilidade e interessante por permitir ma economia do espao de memria, como veremos adiante. Por sua vez, os elementos dos conjuntos Q e R. por possurem parte fracionria, no podem ser representados na classe inteira, pertencendo necessariamente aos tipos de dados ditos reais. Como exemplo de nmeros inteiros temos: 24 - nmero inteiro positivo 0 - nmero inteiro -12 - nmero inteiro negativo

3.1.2 Dados Numricos Reais


Os dados de tipo real so aqueles que podem possuir componentes decimais ou fracionrios, e podem tambm ser positivos ou negativos. Como dito anteriormente, os elementos dos conjuntos de nmeros fracionrios e reais so necessariamente representados nos computadores por dados do tipo real. Exemplos de dados do tipo real: 24.01 - nmero real positivo com duas casas decimais 144. - nmero real positivo com zero casas decimais -13.3 - nmero real negativo com uma casa decimal 0.0 - nmero real com uma casa decimal 0.0 0. - nmero real com zero casas decimais Observe que h uma diferena entre '0', que e um dado do tipo inteiro, e '0.' (ou '0.0') que um dado do tipo real. Portanto, a simples existncia do ponto decimal serve pare diferenciar um dado numrico do tipo inteiro de um do tipo real.

3.2

Dados Literais.

O tipo de dados literal e constitudo por ma seqncia de caracteres contendo letras, dgitos e/ou smbolos especiais. Este tipo de dados e tambm muitas vezes chamado de alfanumrico, cadeia (ou cordo) de caracteres, ou ainda, do ingls STRING. Usualmente, os dados literais so representados nos algoritmos pela coleo de caracteres, delimitada em seu incio e trmino com o caractere aspas ("). Diz-se que o dado do tipo literal possui um comprimento dado pelo nmero de caracteres nele contido. Exemplos de dados do tipo literal: "QUAL ?" - literal de comprimento 6

12

"" "qUaL ?!$" "AbCdefC Hi" "1-2+3=" "0"

- literal - literal - literal - literal - literal

de comprimento 1 de comprimento 8 de comprimento 9 de comprimento 6 de comprimento 1

Note que, por exemplo, "1.2" representa um dado do tipo literal de comprimento 3, constitudo pelos caracteres "1","." e "2", diferindo de 1.2 que e um dado do tipo real

3.3

Dados Lgicos

A existncia deste tipo de dado e, de certo modo, um reflexo da maneira como os computadores funcionam. Muitas vezes, estes tipos de dados so chamados de booleanos, devido a significativa contribuio de BOOLE a rea da 1gica matemtica. O tipo de dados lgico e usado para representar dois nicos valores 1gicos possveis: verdadeiro e falso. E comum encontrar-se em outras referncias outros tipos de pares de valores lgicos como sim/no, 1/0, true/false. Nos algoritmos apresentados neste texto os valores 1gicos sero delimitados pelo caractere ponto (.). Exemplo: .V. - valor 1gico verdadeiro .F. - valor 1gico falso

3.4

Sntese

Os dados numricos dividem-se em duas classes: inteiros, que no possuem parte fracionria e podem ser positivos ou negativos; reais, que podem possuir parte fracionria e podem ser positivos ou negativos. Os dados do tipo literal podem conter seqncias de letras, dgitos ou smbolos especiais, delimitados por aspas ("). Seu comprimento dado pelo nmero de caracteres em STRING. Os dados do tipo lgico s possuem dois valores possveis (.V. e .F.) e so sempre delimitados por pontos (.). A rvore abaixo resume a classificao dos dados com relao aos tipos de dados apresentados. Tipos de Dados

Numrico Inteiro Real

Literal

Lgico

Figura 5 - Representao dos diversos tipos de dados

3.4.1 Exerccio B
1) Classifique os dados especificados abaixo de acordo com seu tipo, assinalando com I os dados do tipo inteiro, com R os reais, com L os literais, com B os lgicos (booleanos), e com N aqueles para os quais no possvel definir a priori um tipo de dado. ()0 ()1 ( ) 0.0 ( ) 0. ( ) -1 ( ) - 32 ( ) + 36 ( ) + 32. ( ) - 0.001 ( ) + 0.05 ( ) + 3257 ( ) "a" 13 ( ) "+3257" ( ) "+3257." ( ) "-0.0" ( ) ".F." ( ) - 0.0 ( ) .V. ()V ( ) "abc" ()F ( ) .F. ( ) "V" ( ) .F.

( ) 613.0 ( ) -613

( ) 613 ( ) -3.012 * 1015

( ) 17*1012 ( ) -28.3 *10 -23

( ) Fim de Questo

14

4.

Variveis

A todo momento durante a execuo de qualquer tipo de programa os computadores esto manipulando informaes representadas pelos diferentes tipos de dados descritos anteriormente. Para que no se "esquea" das informaes, o computador precisa guard-las em sua memria.

4.1

Arquitetura de Memria

De maneira bem simplificada, a memria de um computador pode ser vista como um conjunto ordenado de clulas, cada uma identificada unicamente por um nmero inteiro distinto, conhecido como endereo (Figura 6 ). Endereo 0 1 2 3 4 5 6 7 Figura 6 - Representao esquemtica das clulas de memria de um computador. Cada clula de memria mais conhecida como byte. Como mostrado na Figura 7, um byte um agrupamento de 8 bits, numerados em ordem decrescente de 7 at 0. Diz-se que o bit 7 o mais significativo (do ingls, MSB - Most Significant Bit) e o Bit 0 o menos significativo (do ingls, LSB - Lest Significant Bit). Informao

0 bit

Figura 7 - Representao esquemtica das clulas de memria de um computador Por sua vez, cada bit capaz de armazenar uma informao binria (0 ou 1). Como um bit possui dois estados possveis, e como um byte formado por 8 bits, ento um byte possui 28 = 256 estados possveis Apesar dos bytes serem subdivididos em pedaos menores, os bits, a menor poro acessvel de memria o byte. Em outras palavras, se quisermos escrever (ou ler) algum dado da (na) memria do computador, teremos de faz-lo byte a byte.

4.2

Tipos de Dados
Dados - Elementos conhecidos de um problema Informao - Um conjunto estruturado de dados, transmitido conhecimento

15

4.3

Armazenamento de Dados na Memria

Cada um dos diversos tipos de dados apresentados no captulo anterior necessita de uma certa quantidade de memria par armazenar a informao representada por eles. Esta quantidade e funo do tipo de dado considerado, do tipo de mquina (computador) e do tipo de linguagem de programao. Por isso, o que ser exposto nos subitens seguintes no deve ser tomado como padro, mas apenas como exemplo.

4.3.1 Armazenamento de Dados do Tipo Literal


Devemos sempre ter em mente que um byte consegue representar 256 ( = 28) possibilidades diferentes. Uma informao do tipo literal nada mais e do que um conjunto de caracteres que podem ser letras, dgitos ou smbolos especiais. A unio de todos os caracteres existentes nos computadores resulta num conjunto com um nmero de elementos menor que 256. Deste resultado surgiu a idia de associar a cada caractere um nmero (cdigo) diferente, variando de 0 a 255 (256 possibilidades). No princpio, cada fabricante de computador adotava uma conveno diferente pare este cdigo. Mais recentemente, esta conveno foi padronizada a fim de facilitar a portabilidade (migrao) de programas entre mquinas diferentes. Esta conveno e representada na forma de uma tabela de mapeamento de caracteres em nmeros. O padro mais universalmente aceito e o ASCII. Assim, cada clula de memria (byte) pode conter um caractere, representado pelo seu cdigo ASCII. Retornando a questo do armazenamento de informaes do tipo literal na memria, deve-se lembrar que um dado deste tipo possui um certo comprimento dado pelo nmero de caracteres nele contido. Portanto, para guardar um dado do tipo literal devemos alocar (reservar) um espao contguo de memria igual ao comprimento do mesmo , destinando um byte pare cada caractere da informao. Exemplificando, a informao do tipo literal "banana" possui seis caracteres e, portanto, seis bytes so necessrios pare reter a referida informao na memria. Em princpio, estes bytes podem estar em qualquer lugar na memria mas e conveniente que estejam juntos (posies contguas). A primeira posio deste conjunto de bytes e absolutamente arbitrria e sua escolha geralmente e feita automaticamente pelo compilador (isto e, pelo programa que traduz um outro escrito em alguma linguagem de programao para outra, em geral, a linguagem de mquina do computador com que se trabalha). Endereo 0 1 2 3 4 5 Informao b (98) a (97) n (110) a(97) n (110) a (97)

Figura 8 - Armazenamento da Literal "banana" memria de um computador A Figura 8 mostra o caso em que se armazena a literal "banana" no conjunto de seis bytes contguos de memria iniciando pela posio de memria 0. Na verdade, ao invs dos caracteres da literal, os cdigos correspondentes aos mesmos e que so guardados na memria.

4.3.1.1 Manipulao de caracteres individuais em Literais


Muitas vezes necessrio manipular caracteres individuais em um literal. O Pascal possui uma forma toda especial de permitir tal operao, atravs do uso de colchetes( [ ] ) logo aps o Nome da varivel do tipo literal, e o nmero do caracter que se deseja manipular entre os colchetes. Iremos adotar o mesmo procedimento para o algoritmo. Exemplo: Atribuir o primeiro caracter de um literal a uma varivel do tipo literal[1] ALGORITMO AtribuiString Var

16

Incio Fim.

Letra Nome Nome Letra

: LITERAL[1] : LITERAL "Joao" Nome[1]

Quando definimos uma varivel como sendo do tipo literal no estamos alocando 1 posio de memria apenas ( uma caixa, pela analogia inicial ), mas na verdade, estamos alocando at 255 caixas, uma para cada caracter da literal ( lembre-se que uma literal pode ter no mximo 255 caracteres ). Ao utilizarmos o smbolo de colchete , estamos na verdade indicando qual o caracter ( qual a caixa ) desejamos manipular. De acordo com o Exemplo acima , teramos na memria a seguinte situao : a) Alocamos 255 bytes ( caracteres ) na memria . A estas posies de memria dado o Nome de Nome. Inicialmente estas posies de memria ( Caixas ) possuem o contedo indefinido. b) Alocamos 1 byte ( caracter ) na memria . A este caracter dado o Nome de Letra. Inicialmente esta posio de memria possu o contedo indefinido. c) Na memria temos a seguinte situao : 1 2 3 Nome

Letra

255

d) Atribumos a varivel Nome o valor Joao, obtendo na memria a seguinte configurao Nome 1 2 3 4 255 J o a o e) Atribumos a varivel Letra o primeiro caracter da varivel Nome, ou seja, o contedo da primeira posio de memria ( caixa ). Na memria teremos a seguinte configurao : 1 J 2 o 3 a Nome 4 o Letra J Obs.: possvel definir variveis do tipo literal com menos de 255 caracteres . Para isto, basta colocar, aps a palavra literal, o nmero de caracteres desejados entre colchetes ( [ ] ). Exemplo:

255

ALGORITMO Define
Var

Nome: LITERAL[80]
Incio Fim. Desta forma, o espao ocupado por uma varivel literal passa de 255 bytes para apenas 80 bytes, na memria.

17

4.3.2 Armazenamento de Dados do Tipo Lgico


Uma informao do tipo lgico s possui dois valores possveis: .V. ou .F.. Assim, em princpio, um nico bit seria suficiente pare armazenar uma informao deste tipo. Contudo, deve-se lembrar que a menor poro de memria que se pode acessar e o byte. Portanto, uma informao do tipo 1gico e armazenada em um byte de memria. De certa forma, se por um lado isto pode ser como um "desperdcio" de memria por outro simplifica bastante a arquitetura de mem6ria dos computadores (por motivos que fogem ao escopo deste texto). Alem do mais, isto no e to relevante, uma vez que na pratica o nmero de ocorrncias de dados do tipo 1gico e bastante inferior ao de ocorrncias de dados do tipo literal ou numrico.

4.3.3 Armazenamento de Dados do Tipo Inteiro


O Conjunto dos nmeros inteiros (Z) contm um nmero infinito de elementos: Z = { -, ..., -3, -2, -1, 0, 1, 2, 3, +} Obviamente e invivel o armazenamento de todos os nmeros deste conjunto num computador. Faz-se necessrio realizar um estudo para que se limite o nmero de elementos representveis deste conjunto. Se apenas um byte fosse utilizado para armazenar os dados do tipo inteiro, existiriam apenas 256 nmeros diferentes neste conjunto: {-128,-126, ...,-2,-1,0,1,2, ...,127,127} Esta restrio e bastante forte, uma vez que boa parte das aplicaes prticas necessitam de nmeros inteiros maiores que estes. Se forem utilizados dois bytes para armazenar um nmero inteiro, o universo de nmeros representveis cresce para 28 x 28 = 216 = 65536 possibilidades: {-32768,-32766, ..., -2,-1,0,1,2,...,32767,32767} Este conjunto satisfaz a grande maioria das necessidades prticas. Assim, em geral utilizam-se dois bytes para representar os nmeros inteiros em computadores. Contudo, restam algumas aplicaes muito especficas em que se precisa de um conjunto ainda maior. Para estes casos, algumas linguagens de programao fornecem mecanismos para trabalhar nmeros inteiros com quatro bytes. Nestes casos os dados so ditos inteiros longos ou estendidos.

4.3.4 Armazenamento de Dados do Tipo Real


(O conjunto dos nmeros reais (R) contm um nmero infinito de elementos e, pelas mesmas razes que o conjunto dos nmeros inteiros, precisa ser limitado. Para dados deste tipo julgou-se apropriado adotar quatro bytes para sua representao interna nos computadores. So muito comuns situaes como as aplicaes cientficas em que e necessria uma maior preciso de clculo, intimamente ligada ao nmero de casas decimais dos dados. Para este caso, em analogia com o que acontece com os dados do tipo inteiro, algumas linguagens de programao decidiram criar dados do tipo real estendido (com oito bytes).

4.4

Conceito e Utilidade de Variveis

Como visto anteriormente, informaes correspondentes a diversos tipos de dados so armazenadas nas memrias dos computadores. Para acessar individualmente cada uma destas informaes, em princpio seria necessrio saber o tipo de dado desta informao (ou seja, o nmero de bytes de memria por ela ocupados) e a posio inicial deste conjunto de bytes na memria. Percebe-se que esta sistemtica de acesso a informaes na memria e bastante ilegvel e difcil de se trabalhar. Para contornar esta situao criou-se o conceito de varivel, que e uma entidade destinada a guardar uma informao. Basicamente, uma varivel possui trs atributos: um nome, um tipo de dado associado a mesma e a informao por ela guardada.

18

Nome

Tipo de Dado

Infomao Figura 9 - Atributos de uma varivel Toda varivel possui um nome que tem a funo de diferenci-la das demais. Cada linguagem de programao estabelece suas prprias regras de formao de nomes de variveis. Adotaremos neste texto as seguintes regras: - um nome de varivel deve necessariamente comear com uma letra em maiscula e seguidas por um nmero ou letra todas em minscula; - um nome de varivel no deve conter nenhum smbolo especial, exceto a sublinha (_). Exemplos: Salrio 1ano Ano1 A casa Sal/hora Sal_hora _desconto - Correto - Errado (no comeou com uma letra) - Correto - Errado (contm o caractere branco) - Errado (contm o caractere "/") - Correto - Errado (no comeou com uma letra)

Obviamente interessante adotarmos nomes de variveis relacionadas s informaes que ela vai armazenar em um programa. Exemplo: uma varivel para armazenar o salrio dos funcionrios em uma empresa num programa de processamento de folha de pagamento, seria interessante utilizar uma varivel chamada Salrio. Outro atributo caracterstico de uma varivel e o tipo de dado que ela pode armazenar. Este atributo define a natureza das informaes contidas na varivel. Por ltimo, ha o atributo informao que nada mais e do que a informao til contida na varivel Uma vez definidos, os atributos nome e tipo de dado de uma varivel no podem ser alterados e assim permanecem durante toda a sua existncia, desde que o programa que a utiliza no seja modificado. Por outro lado, o atributo informao esta constantemente sujeito a mudanas, de acordo com o fluxo de execuo do programa. Por exemplo, se definirmos que uma determinada varivel e chamada Salrio e destinada a guardar nmeros reais, e possvel que seu contedo seja, num dado instante, igual a 1.500,00 e posteriormente modificado para 3.152,19, de acordo com o programa executado. Em resumo, o conceito de varivel foi criado para facilitar a vida dos programadores, permitindo acessar informaes na memria dos computadores por meio de um nome, em vez do endereo de uma clula de memria.

4.5

Definio de Variveis em Algoritmos

Todas as variveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se fez necessrio pare permitir que o compilador reserve um espao na memria pare as mesmas. Algumas linguagens de programao (como BASIC e FORTRAN) dispensam esta definio, uma vez que o espao na memria e reservado a medida que novas variveis so encontradas no decorrer do programa. Nos algoritmos apresentados neste texto ser adotada a seguinte conveno:

19

- todas as variveis utilizadas em algoritmos sero definidas no incio do mesmo, por meio de um comando de uma das formas seguintes: VAR ou VAR <lista_de_variveis> : <tipo_das_variaveis> <nome_da_varivel> : <tipo_da_varivel>

- a palavra-chave VAR dever estar presente sempre e ser utilizada uma nica vez na definio de um conjunto de uma ou mais variveis; - numa mesma linha podero ser definidas uma ou mais variveis do mesmo tipo; Para tal, deve-se separar os nomes das mesmas por vrgulas; - variveis de tipos diferentes devem ser declaradas em linhas diferentes. A forma de utilizao deste comando ficar mais clara quando da utilizao da representao de algoritmos em linguagem estruturada (pseudocdigo). Esta conveno e vlida para a representao de algoritmos na forma de pseudocdigo. Em termos de fluxograma, no e usual adotar-se qualquer forma de definio de variveis. Exemplo de definio de variveis: VAR Nome Idade Salrio Tem_filhos : literal[10] : inteiro : real : lgico

No exemplo acima foram declaradas quatro variveis: - a varivel - a varivel - a varivel - a varivel Nome, capaz de armazenar dados literais de comprimento 10 (dez caracteres); Idade, capaz de armazenar um nmero inteiro; Salrio, capaz de armazenar um nmero real; Tem_filhos, capaz de armazenar uma informao lgica.

4.6

Definio de Variveis em Pascal

Para definir uma ou mais variveis, devemos utilizar, em Pascal , a palavra VAR. Para manter uma compatibilidade , utilizaremos a mesma nomenclatura em nossos algoritmos. Abaixo segue Exemplo de algumas definies de variveis: a) ALGORITMO Teste VAR Palavra : Literal INICIO <comandos> FIM ALGORITMO Teste VAR Letra, Caracter: Literal[1] INICIO <comandos> FIM ALGORITMO Teste VAR Letra, Caracter: Literal[1] Nmero: Inteiro INICIO 20 PROGRAM Teste; VAR

Palavra: String;
BEGIN <comandos>; END. PROGRAM Teste; VAR Letra, Caracter: CHAR; BEGIN <comandos>; END. PROGRAM Teste; VAR Letra, Caracter: CHAR; Nmero: INTEGER; BEGIN

b)

c)

<comandos> <comandos>; FIM END. Obs.: Os nomes dados as variveis no podem ser os mesmos nomes de palavras reservadas do Pascal , tais como PROGRAM, BEGIN, END, VER, etc

4.7

Mapeamento de Variveis na Memria

O computador no e capaz de trabalhar diretamente com nomes simblicos, como os nomes de variveis. Pelo contrrio, o computador s consegue tratar com clulas de memria por meio do conhecimento de seus endereos. Para intermediar esta situao, o tradutor (compilador ou interpretador) monta uma tabela de mapeamento dos nomes simblicos em posies de memria. Esta tabela e denominada Tabela de Smbolos e esquematizada na Figura 10. Nome Simblico Posio Inicial Tipo de Dado

Figura 10 - Forma geral de uma tabela de smbolos. Dentre as informaes contidas na tabela de smbolos encontram-se: - o nome simblico de cada uma das variveis do programa; - a posio inicial do conjunto de bytes contguous de memria onde esta armazenada a informao da varivel; - o tipo de dado da varivel, a partir do qual e possvel determinar o tamanho do espao de memria consumido pela mesma. Eventualmente a informao concernente ao tipo de dado da varivel pode ser complementada ou simplesmente substituda na tabela de Smbolos pelo tamanho da varivel. De posse da definio das variveis utilizadas num programa, o tradutor e capaz de montar com pequeno esforo a referida tabela. A cada varivel do programa corresponde uma linha da tabela. As informaes contidas na tabela so absolutamente suficientes pare localizar qualquer uma das variveis definidas no programa dentro da memria do computador. Inicialmente, toda a memria esta disponvel e, a medida que novas variveis vo sendo definidas, as clulas de memria vo sendo reservadas, comeando pela primeira posio disponvel. Para exemplificar, a tabela de Smbolos correspondente as variveis definidas no exemplo anterior e dada abaixo: Nome Simblico Posio Inicial Tipo de Dado Nome 0 Literal[10] Idade 10 Inteiro Salrio 12 Real Tem_filhos 16 Lgico Figura 11 - Tabela de smbolos das variveis definidas no exemplo anterior Supondo que a primeira posio de memria disponvel e o byte 0, ao encontrar a definio da varivel Nome como um literal de 10 caracteres, o tradutor reservar os 10 bytes iniciais da memria (posies 0 a 9) pare a informao da referida varivel. Ao encontrar a definio da varivel Idade como um inteiro, o tradutor reservar dois bytes de memria pare a mesma, iniciando pela primeira posio livre de memria, ou seja, os bytes 10 e 11. Prosseguindo no mesmo raciocnio, o tradutor reservar pare a varivel Salrio as posies de memria 12 a 15 e pare a varivel Tem_filhos a posio 16.

21

4.8

Tipos de Dados em Pascal

O Pascal exige que no momento que formos trabalhar com variveis, indiquemos o tipo de informao que uma varivel pode conter, isto , se uma dada posio de memria armazenar um nmero ou uma letra etc. Para isto, a linguagem Pascal possui definido alguns tipos que devero ser usados quando formos trabalhar com variveis. Alguns tipos so:

Algoritmo Pascal a) Inteiro a) INTEGER: b) Real c) Literal d) Lgica

Descrio Representa nmeros entre -32768 at +32767. ocupa 2 bytes na memria . b) REAL: Representa os nmeros entre 2.9 x 10 -39 at 1.7 x 1038 . Ocupa 6 bytes na memria . f) STRING: Conjunto de caracteres ( CHAR ). Ocupa de 1 a 255 bytes na memria . g) BOOLEAN: Valor lgico . Assuma somente dois valores: TRUE(Verdade) ou FALSE(Falso). ocupa 1 byte na memria. e) CHAR: Representa um dos caracteres , da tabela ASCII. Ocupa 1 byte na memria . c) WORD: Nmeros de 0 at 65535. Ocupa 2 bytes na memria. d) BYTE: Nmeros de 0 at 255. Ocupa 1 byte na memria . h) Shor Int Representa os nmeros entre -128 at 128 . Ocupa 1 bytes na memria . i) LongInt Representa os nmeros entre - 2.147.483.648 at 2.147.483.648 . Ocupa 4 bytes na memria. j) Single Representa os nmeros entre 1.5 x 10 -45 at 3.4 x 1038 . Ocupa 4 bytes na memria . l) Double Representa os nmeros entre 5 x 10 -324 at 1.7 x 10308 . Ocupa 8 bytes na memria .

4.9

Sntese

A memria dos computadores e composta por clulas numeradas ordenadamente denominadas bytes. Cada byte e constitudo por 8 bits. Cada tipo de dado requer um nmero diferente de bytes pare armazenar a informao representada por ele na memria Esta quantidade tambm pode variar em funo do tipo de computador considerado. Uma varivel e uma entidade dotada de um nome pare diferenci-la das demais e um tipo de dado que define o tipo de informao que ela e capaz de guardar. Uma vez definidos, o nome e o tipo de uma varivel no podem ser alterados no decorrer de um programa. Por outro lado, a informao til da varivel e objeto de constante modificao durante o decorrer do programa, de acordo com o fluxo de execuo do mesmo.

4.9.1 Exerccio C
1. Na lista seguinte, assinale com V os nomes de variveis vlidos e com I os invlidos: ( ) 3abc ( ) _a ( ) Aa ( ) _1 ( ) _a123 ( ) Etc... ()A ( ) Acd1 ()1 ( ) A0123 ( ) B312 ( ) Guarda_chuva ( ) Abc ( ) 123a ()_ ( ) A123 ( ) A123 ( ) Abcde 2. (a)

Dadas as declaraes de variveis abaixo, monte as tabelas de smbolos correspondentes, como seria feito por um tradutor: VAR A, B, C : real

22

Delta Positivo Raiz1, Raiz2 (b) VAR X, Y Nome, Profisso Rua Nmero Renda

: real : lgico : real : inteiro : literal[20] : literal[30] : inteiro : real

23

5.

Expresses

O conceito de expresso em termos computacionais esta intimamente ligado ao conceito de expresso (ou frmula) matemtica, onde um conjunto de variveis e constantes numricas relacionamse por meio de operadores aritmticos compondo uma formula que, uma vez avaliada, resulta num valor.

B Figura 12 - Tringulo de base (B) e altura (H). Por exemplo, a frmula de clculo da rea do tringulo da Figura 12 dada por: rea = 0.5 x B x H Esta frmula utiliza trs variveis: B e H. que contm as dimenses tringulo, e REA onde e guardado o valor calculado (resultado da avaliao da expresso). Ha, tambm, uma constante (0.5) e o operador de multiplicao (x), que aparece duas vezes na expresso. O conceito de expresso aplicado a computao assume uma conotao mais ampla: uma expresso e uma combinao de variveis, constante operadores, e que, uma vez avaliada, resulta num valor.

5.1

Operadores

Operadores so elementos funcionais que atuam sobre operandos e produzem um determinado resultado. Por exemplo, a expresso 3 + 2 relaciona dois operandos (os nmeros 3 e 2) por meio do operador (+) que representa operao de adio. De acordo com 0 nmero de operandos sobre os quais os operador atuam, os ltimos podem ser classificados em: - binrios, quando atuam sobre dois operandos. Ex.: os operador das operaes aritmticas bsicas (soma, subtrao, multiplicao diviso); - unrios, quando atuam sobre um nico operando. Ex.: o sinal de na frente de um nmero, cuja funo e inverter seu sinal. Outra classificao dos operadores e feita considerando-se o tipo dado de seus operandos e do valor resultante de sua avaliao. Segundo esta classificao, os operadores dividem-se em aritmticos, lgicos e literais Esta diviso esta diretamente relacionada com o tipo de expresso onde aparecem os operadores. Um caso especial e o dos operadores relacionais, que permitem comparar pares de operandos de tipos de dados iguais, resultando sempre num valor lgico. Mais adiante sero apresentados formalmente os operadores dos diversos tipos acima relacionados.

24

5.2

Tipos de Expresses
As expresses so classificadas de acordo com o tipo do valor resultante de sue avaliao.

5.2.1 Expresses Aritmticas


Expresses aritmticas so aquelas cujo resultado da avaliao e do tipo numrico, seja ele inteiro ou real. Somente o uso de operadores aritmticos e variveis numricas e permitido em expresses deste tipo. Os operadores aritmticos relacionados as operaes aritmticas bsicas esto sumarizados na Tabela 1. Tabela 1 - Operadores aritmticos e sua ordem de prioridade Operador + * / ** + Tipo Binrio Binrio Binrio Binrio Binrio Unrio Unrio Operao Adio Subtrao Multiplicao Diviso Exponenciao Manuteno de sinal Inverso de sinal Prioridade 4 4 3 3 2 1 1

A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expresso. Este assunto ser tratado com major profundidade numa seo posterior. O caractere (*) e adotado na maioria das linguagens de programao pare representar a operao de multiplicao, ao invs do caractere (x), devido a possibilidade da ocorrncia do mesmo no nome de variveis. Pela mesma razo, o smbolo (**) e adotado pare representar a operao de exponenciao Algumas linguagens de programao adotam o smbolo (A) (circunflexo) pare esta finalidade, mas isto e pouco freqente. As variveis usadas em expresses aritmticas podem somente ser do tipo inteiro ou real. Se sodas as variveis que aparecem numa expresso so do tipo inteiro, ento o valor resultante da expresso e tambm do tipo inteiro. Se ao menos uma das variveis da expresso aritmtica for do tipo real, ento o valor resultante da avaliao da expresso e necessariamente do tipo real. Nos exemplos seguintes, assumiremos que: - A, B e C so variveis do tipo inteiro; - X, Y e Z so variveis do tipo real. Exemplos: 1) A+B*C 2) A+B+Y 3) A/B 4) X/Y - expresso de resultado inteiro - expresso de resultado real - expresso de resultado inteiro - expresso de resultado real

O leitor deve estranhar o fato de no terceiro exemplo ser apresentada uma expresso onde se dividem dois nmeros inteiros e se obtm como resultado um valor inteiro. Obviamente, o resultado da diviso entre dois nmeros inteiros no e necessariamente inteiro. Na verdade, a operao representada no terceiro item e a diviso inteira, onde o resto da diviso e desprezado.

5.2.2 Expresses Lgicas


Expresses lgicas so aquelas cujo resultado da avaliao e um valor lgico. (.V. ou .F.). Os operadores lgicos e sues relaes de precedncia so mostrados na Tabela 2. Existem outros operadores lgicos, como por exemplo o OU_EXCLUSIVO., mas suas funes podem ser exercidas por combinaes dos trs tipos de operadores da Tabela 2. Tabela 2 - Operadores lgicos e suas relaes de prioridade Operador Tipo 25 Operao Prioridade

.OU. .E. .NO

Binrio Binrio Unrio

Disjuno Conjuno Negao

3 2 1

Para exemplificar o uso de operadores lgicos, a Tabela 5.3 apresenta duas variveis lgicas A e B. Uma vez que cada varivel lgica possui somente dois valores possveis, ento ha exatamente quatro combinaes para estes valores, razo pela qual a tabela tem quatro linhas. As diversas colunas contm os resultados das operaes lgicas sobre as combinaes possveis dos valores das variveis A e B. Tabela 3 - Tabela-verdade dos operadores apresentadas na Tabela 2 A .F. .F. .V. .V. B .F. .V. .F. .V. .NO. A .V. .V. .F. .F. .NO.B .V. .F. .V. .F. A .OU. B .F. .V. .V. .V. A .E. B .F. .F. .F. .V. A .OU_EXCLUSIVO. B .F. .F. .F. .V.

Tabelas como a da Tabela 3 so chamadas de Tabelas-verdade. Convm salientar as seguintes concluses que podem ser extradas por observao da Tabela 3: - O operador lgico .NO. sempre inverte o valor de seu operando. Ex.: .NO..V. =.F. e .NO. .F. = .V.; - para que a operao lgica .OU. tenha resultado verdadeiro basta que um de seus operandos seja verdadeiro; Para melhor visualizar este efeito, podemos imaginar que as variveis lgicas A e B so como dois interruptores ligados em paralelo num circuito de acionamento de uma lmpada (Figura 5.2).

B
Bateria Lmpada

Figura 13 - Representao da operao .OU. por meio de um circuito eltrico com interruptores em paralelo. Neste exemplo, um interruptor fechado (e que, portanto, permite a passagem de corrente eltrica) representa uma varivel lgica cujo valor e verdadeiro (.V.). Por outro lado, um interruptor aberto representa uma varivel lgica com valor falso (.F.). No circuito da Figura 13, para que a lmpada acenda basta que um dos interruptores esteja fechado. Analogamente, para que a operao lgica .OU. tenha resultado verdadeiro (.V.) basta que apenas um dos operandos possua valor lgico .V. Por outro lado, para que a operao lgica .OU. possua resultado .F. (para que a lmpada esteja apagada) e necessrio que os dois operandos possuam valor .F. (e necessrio que os dois interruptores estejam abertos). - para que a operao lgica .E. tenha resultado verdadeiro e necessrio que seus dois operandos tenham valor lgico .V. . Em termos de um circuito eltrico, uma operao lgica .E. pode ser representada _A_ dois interruptores ligados em srie. como na Figura 5.3.

Bateria

26

Lmpada

Figura 14 - Representao da operao lgica .E. por meio de um circuito eltrico com interruptores em srie. Nota-se no circuito acima que a lmpada somente estar acessa quando os dois interruptores (A e B) estiverem fechados. Por outro lado, basta que um dos interruptores (A ou B) esteja aberto para que a lmpada no acenda. Da mesma forma, a operao lgica E. s resulta em .V. quando A e B forem iguais a .V.; ainda, para que a operao lgica .E. resulte em .F. basta que um de seus operadores seja .F.. Nas expresses lgicas onde aparecem apenas os operadores lgicos da Tabela 2 somente variveis do tipo lgico podem ser usadas. Isto parece bvio, uma vez que os operadores lgicos somente atuam sobre valores (constantes ou variveis) lgicos. Ha, ainda, outro tipo de operador que pode aparecer em operaes lgicas os operadores relacionais, mostrados na Tabela 4. Tabela 4 - Operadores Relacionais Operador = <> < <= > >= Comparao Igual Diferente Menor Menor ou igual Maior Maior ou igual

Estes operadores so somente usados quando se deseja efetuar comparaes. comparaes s podem ser feitas entre objetos de mesma natureza, isto e, variveis do mesmo tipo de dado. O resultado de uma comparao e sempre um valor lgico. O uso de operadores relacionais possibilita o aparecimento em expresses lgicas de variveis de outros tipos de dados que no o lgico. Exemplo: sejam A e B variveis lgicas, X e Y variveis reais, e R. S e T variveis literais, com os respectivos valores: A = .V. , B = .F., X = 2.5, Y = 5.0, R = "JOS", S = "JOO" e T = "JOOZINHO" A tabela seguinte contm algumas expresses lgicas contendo estas variveis.

27

Tabela 5 - Exemplos de avaliaes de expresses lgicas. Expresso A .OU. B A .E. B . NO. A X=Y X = (Y/2) R=S S=T R<>S R>S S>T (( A .OU. B) .OU. (XY) .OU. (ST)) Resultado .V. .F. .F. .F. .V. .F. .F. .V. .V. .F. .V.

Um resultado interessante de ser observado e o da expresso S > T. ou seja, "JOO" > "JOOZINHO", cujo resultado e falso. A primeira pergunta que surge deve ser com relao a maneira como e feita tal comparao. Para tal, deve-se recorrer mais uma vez ao Apndice B. onde esta a tabela de cdigos ASCII. Tal tabela estabelece para cada caractere um cdigo diferente. De acordo com este cdigo e possvel comparar dois dados de tipo literal, comparando os caracteres dos mesmos da esquerda para a direita. Ao comparar os literais "JOS" e "JOO", verificamos que seus dois primeiros caracteres (J e o) so iguais, mas que "S" e maior que "A", segundo a tabela ASCII. Portanto "JOS" e maior que "JOO". Estes tipos de comparao so muito teis na ordenao alfabtica de variveis literais.

5.2.3 Expresses Literais


Expresses literais so aquelas cujo resultado da avaliao e um valor literal Este tipo de expresso e bem menos freqente que os anteriores. Os tipos de operadores existentes variam de uma linguagem de programao para outra, no havendo uma padronizao. Para que o assunto no passe em branco, considere-se como exemplo a operao de concatenao de strings: tome-se duas strings e acrescenta-se (concatena-se) a segunda delas ao final da primeira. Em algumas linguagens esta operao e representada pelo smbolo (operador) (+). Por exemplo, a concatenao das strings "REFRIGERA" e "DOR" e representada por "REFRIGERA" + "DOR" e o resultado de sue avaliao e "REFRIGERADOR". Obs.: O operador + caso seja usado entre variveis do tipo literal , causar uma ao conhecida por concatenao , ou seja, juntar os caracteres ou literais usados na operao em uma s literal. Exemplo: ALGORITMO Concatena Var Letra1, Letra2 : Literal[1] Nome1, Nome2, Nome : Literal Incio Letra1 "D" Letra2 "a" Nome1 "Joo" Nome2 "Silva" Nome Nome1 + Letra1 + Letra2 + Nome2 Fim. As instrues acima resultaro no armazenamento do Nome "Joo Da Silva" na varivel rotulada de "nome".

28

5.3

Avaliao de Expresses

Expresses que apresentam apenas um nico operador podem ser avaliadas diretamente. No entanto, a medida que as mesmas vo-se tornando mais complexas com o aparecimento de mais de um operando numa mesma expresso, e necessria a avaliao da mesma passo a passo, tomando um operador por vez. A seqncia destes passos e definida de acordo com o formato geral da expresso, considerando-se a prioridade (precedncia) de avaliao de seus operadores e a existncia ou no de parnteses na mesma. As seguintes regras so essenciais pare a correta avaliao de expresses: 1. Deve-se observar a prioridade dos operadores, conforme mostrado nas Tabela 1 e Tabela 2: operadores de major prioridade devem ser avaliados primeiro. Se houver empate com relao a precedncia, ento a avaliao se fez considerando-se a expresso da esquerda pare a direita. 2. Os parnteses usados em expresses tem o poder de "roubar" a prioridade dos demais operadores, forando a avaliao da subexpresso em seu interior. 3. Entre os quatro grupos de operadores existentes, a saber, aritmtico, lgico, literal e relacional, ha uma certa prioridade de avaliao os aritmticos e literais devem ser avaliados primeiro; a seguir, so avaliadas as subexpresses com operadores relacionais e, por ltimo, os operadores lgicos so avaliados. Exemplos: suponha que X, Y e Z so variveis reais, e A e B variveis lgicas, com os respectivos valores: X = 2.0, Y = 3.0, Z = 0.5, A = .V. e B = .F. Considere as seguintes expresses e o resultado de suas avaliaes: 1) X*Y-Z 2) X*(Y-Z) 3) X + Y * Z 4)X+(Y*Z) 5) (X+Y)*Z 6) X ** Y - 1 7) (X**Y)-1 8) X ** (Y - 1) 9) B.E.A.OU.X<>Y/2 10) B.E.(A.OU.X<>Y/2) - 5.5 - 5.0 - 3.5 - 3.5 - 2.5 - 7.0 - 7.0 - 4.0 - .V. - .F.

Das expresses do exemplo acima podemos observar que: - a aplicao da regra 2 fez com que a expresso 2) tenha um resultado diferente da expresso 1). O mesmo acontece com as expresses 3) e 5), 6) e 8), e 9) e 10); - o agrupamento de subexpresses usando parnteses, contendo operadores de prioridade major que a dos operadores que permaneceram fora dos parnteses, no altera a ordem de avaliao das expresses e, portanto, no modifica seus resultados, como acontece em 3) e 4), e 6) e 7); - a aplicao da regra 3 define a nica seqncia correta pare se avaliar as expresses 9) e 10). De fato, esta regra define que a subexpresso Y / 2 deve ser avaliada antes de se comparar seu resultado com X ( em X <> Y / 2). De fato, se a comparao X <> Y fosse feita, seu resultado seria um valor lgico, que posteriormente seria dividido por 2, o que e impossvel.

5.4

Sntese

Uma expresso e uma combinao de variveis, constantes e operadores, que resulta num valor quando avaliada. Operadores so elementos funcionais que atuam sobre operandos. Segundo o nmero de operandos sobre os quais atua, um operador pode ser classificado em unrio ou binrio. Segundo os tipos de dados de seus operandos e do valor resultante de sue avaliao, os operadores podem ser classificados em aritmticos, lgicos ou literais. 29

Um tipo especial de operador e o relacional, que e usado na comparao de operandos de um mesmo tipo de dado e cujo resultado da avaliao e sempre um valor lgico. As expresses so classificadas de acordo com o valor resultante de sue avaliao em: - aritmticas, que resultam num valor numrico (real ou inteiro); - lgicas, que resultam num valor lgico; - literais, que resultam num valor literal. Ha trs regras bsicas que definem a seqncia correta de avaliao passo a passo de expresses: 1. Operadores de major prioridade devem ser avaliados primeiro. Em caso de empate, a avaliao se fez da esquerda pare a direita. 2. O uso de parnteses em subexpresses force a avaliao das mesmas com major prioridade. 3. Os diversos tipos de operadores devem ser avaliados na seguinte seqncia dentro de uma expresso complexa: primeiro os aritmticos e literais; a seguir, os relacionais e, por ltimo, os lgicos.

5.5

Exerccio Resolvido

Dada a tabela-verdade correspondente a operao lgica .OU_EXCLUSIVO. A .F. .F. .V. .V. B .F. .V. .F. .V. A .OU_EXCLUSIVO. B .F. .V. .V. .F.

encontre uma expresso lgica equivalente a mesma e que utilize apenas os operadores lgicos .OU., .E. e .NO.. Soluo: Observando-se a tabela dada, nota-se que o resultado da operao lgica em questo e verdadeiro (.V.) somente quando A e .F. e B e .V., ou ento, quando A e .V. e B e .F.. Formalmente, pode-se fazer: A.OU_EXCLUSIVO. B = ((.NO. A).E. B).OU. (A.E. (.NO. B))

5.5.1 Exerccios D
1. Dada a declarao de variveis VAR A, B, C X, Y, Z Nome, Rua LI, L2 : inteiro : real : literal[20] : lgico

classifique as expresses seguintes de acordo com o tipo de dado do resultado de sue avaliao, em I (inteiro), R (real), L (literal), B (lgico) ou N (quando no for possvel defini-lo): ( )A+B+C ( )A+B+Z ( ) Nome + Rua ( ) L1 .OU. L2 ( ) (Rua < > Nome) .E. (.NO. (A=B)) ( ) A + B /C ()A+X/Z ()A+Z/A ( )A>B ( )A>Y ( ) Nome > Rua ( ) A > B = L1 ()X+Y/Z ()X+Z/A ( ) L1 ** L2

2. Para as mesmas variveis declaradas no exerccio 1, s quais so dados os valores seguintes 30

A=1 B=2 C=3 X = 2.0

Y = 10.0 Z = -1.0 L1 = .V. Nome = "PEDRO"

Rua = "PEDRINHO" L2 = .F.

Determine o resultado da avaliao das expresses abaixo: a) A + C / B b) A + B /C c) C / B / A d) A ** B ** A e) Z * X ** B f) -X ** B g) ( X ** B) h) ( - X ) ** B i) Nome + Rua j) Nome = Rua k) L1 .OU. L2 l) ( L1 .E. (.NO. L2)) m) ( L2 .E. (.NO. L1)) n) ( L1 .E. (.NO. L2)) .OU. (L2 .E. (.NO. L1)) o) X > Y .E. C < = B p) ( C -3 * A) < (X +2 * Z) 3. Dada a tabela - verdade A .F. .F. .V. .V. B .F. .V. .F. .V. A .op. B .V. .F. .V. .F.

Encontre uma expresso lgica equivalente mesma e que utilize apenas os operadores lgicos .E., .OU. e . NO. .

31

6.

Instrues Primitivas

Como o prprio nome diz, instrues primitivas so os comandos bsicos que efetuam tarefas essenciais pare a operao dos computadores, como entrada e sada de dados (comunicao com o usurio e com os dispositivos perifricos), e movimentao dos mesmos na memria. Estes tipos de instruo esto presentes na absoluta maioria das linguagens de programao. De fato, um programa que no utilize nenhuma instruo primitiva - como as que sero definidas neste captulo - e incapaz de se comunicar com o mundo exterior e, portanto no tem utilidade alguma. Antes de passar a descrio das instrues primitives, e necessria a definio de alguns termos que sero utilizados mais a frente: dispositivo de entrada e o meio pelo qual as informaes (mais especificamente os dados) so transferidas pelo usurio ou pelos nveis secundrios de memria ao computador. Os exemplos mais comuns so: o teclado, o carto perfurado (j obsoleto), as fitas e os discos magnticos, entre outros; dispositivo de sada e o meio pelo qual as informaes (geralmente, os resultados da execuo de um programa) so transferidas pelo computador ao usurio ou aos nveis secundrios de memria. Exemplos: monitor de vdeo, impressora, fitas e discos magnticos, entre outros: sintaxe e a forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor de programas. A violao das regras sintticas e considerada um erro sujeito a pena do no-reconhecimento do comando por parte do tradutor; semntica e o significado, ou seja, o conjunto de aes que sero exercidas pelo computador durante a execuo do referido comando. Daqui em diante, todos os comandos novos sero apresentados por meio de sue sintaxe e sue semntica, isto , a forma como devem ser escritos e a(s) ao(es) que executam.

6.1

Instruo Primitiva de Atribuio

A instruo primitiva de atribuio, ou simplesmente atribuio, e a principal maneira de se armazenar uma informao numa varivel. Sua sintaxe e: <nome_de_varivel> <expresso> Em termos de fluxograma, os comandos de atribuio so representados como na Figura 15.

<Varivel> <Expresso>

Figura 15 - Forma de representao de comandos de atribuio em fluxograma O modo de funcionamento (semntica) de uma atribuio consiste 1) na avaliao da expresso e 2) no armazenamento do valor resultante na posio de memria correspondente a varivel que aparece a esquerda do comando. A expresso presente no comando de atribuio pode ser de qualquer um dos tipos descritos no captulo anterior. Uma implicao bastante sria, pare qual a ateno deve ser dirigida, e a necessidade da compatibilidade entre o tipo de dado resultante da avaliao da expresso e o tipo de dado da varivel, no sentido em que esta deve ser capaz de armazenar o resultado da expresso. Mais explicitamente, se uma expresso resulta num valor lgico, ento a varivel deve ser tambm do tipo lgico. O mesmo acontece no caso de dados literais e reais. Uma exceo, ao e o cave em que a varivel e do tipo real e a expresso resulta num valor inteiro. Nesta situao, o resultado (dado do tipo inteiro) e convertido pare o tipo real e posteriormente armazenado na varivel. Esta operao de converso de tipos de dados e conhecida por coero.

32

A Figura 16 mostra um exemplo de algoritmo onde algumas atribuies so feitas: os valores 5.0 e 10 so atribudos as variveis Preo_unit e Quant, respectivamente; posteriormente, o resultado do produto entre as duas anteriores e armazenado em Preo_tot. Quando definimos uma varivel natural atribuirmos a ela uma informao . Uma das formas de colocar um valor dentro de uma varivel , consequentemente colocado este dado na memria do computador, atravs da atribuio direta, do valor desejado que a varivel armazena . Para isto utilizaremos o smbolo ( (Algoritmo), : = (Pascal)), que significa : recebe , ou seja, a posio , de memria que uma varivel representa, receber uma informao , a qual ser armazenada no interior desta varivel .

Exemplo:
ALGORITMO Teste Var Nmero: INTEIRO Incio Nmero 10 Fim. O Exemplo acima nos informa que: a) Foi definido uma varivel , a qual demos o Nome de Nmero, e informamos que esta varivel , ou posio de memria , s poder aceitar dados, que sejam numricos e que estejam entre -32768 a +32767 ( tipo INTEGER ). b) Atribumos varivel Nmero o valor 10 A memria se comportaria da seguinte forma, de acordo com os itens acima : a) b) Varivel Nmero Varivel Nmero Contedo indefinido Contedo 10 PROGRAM Teste; VAR Nmero: INTEGER; BEGIN Nmero: =10; END.

6.1.1 Exerccios E
1. Faa um algoritmo para atribuir a variveis as seguintes informaes: a) 12345.0 b) 123456 c) -1122 d) 10 e) VERDADE f) 12345605 2. No seguinte algoritmo existe algum erro? Onde?

ALGORITMO Teste
Var Maria idade letra Maria Incio idade idade

: LITERAL[100] : INTEIRO : LITERAL[1] : REAL


23 678 33

Fim.

idade letra letra letra

letra ABC A 2

3. Qual a diferena existente nas seguintes atribuies ? a) b) Letra Nome Letra Nome A Joo A Joo

4. correto definir uma varivel como sendo literal[1] e atribuirmos a ela o valor: PEDRO ? E se a varivel fosse definida como LITERAL[100], a mesma poderia receber um valor do tipo

LITERAL[1]?
5. Dar o valor da varivel Resultado aps execuo da seguinte seqncia de operaes (Suponha que todas as variveis seja reais): a) Resultado 3.0 * 6 b) X 2.0 Y 3.0 Resultado X ** Y - X c) Resultado 4 X 2 Resultado Resultado * X 6. Suponha que A, B e C sejam variveis reais e que I, J e K sejam variveis inteiras. Dados A = 4.0, B = 6.0 e I = 3, qual seria o valor final dos comandos seguintes? a) C A * B I C= _______ b) K I / 4 * 6 K = _______ c) C B / A + 1.5 C = _______ d) K ( B / A + 4.7) K = _______ e) J ( A / ( 5 / I)) J = _______ f) K ( A B) * 2 + 1 K = _______ 7. Construa o algoritmo que calcule as seguintes expresses, utilize parnteses: a) 2 + 3 * { 23 - 12 + [ { ( 123 / 34 ) + 10 } / 2 - 1 * ( 45 - 12 ) ] / 3 } b) [ ( 2 * 3 ) **2 - 1 ] ** 4 c) ( 2 + [ 2 * 3 - ( 4 / 20 ) ** 2 ] )/ (10 * { [ ( 7 * 3 ) - 2 ] ** 3 }) 8. Escreva o comando de atribuio e resolva a expresso das seguintes formulas matemticas. a)

a +1 b a +b c d a+

d) a +

b c d c d

b)

e) (a + b)

b c c) e d f

B C f) X = E D F A+

34

2 X 2 3 X ( X +1) + g) 2 Y= 2X
h) X =

X +1 X

i) Y = 2 H j) X =

45 4H ( 3 H ) 3X

2H

2 B 4 A + 2 F 3 3 2A

(a b ) + ( e + f ) i * (c d ) + (g + h ) j

6.2

Instruo Primitiva de Sada de Dados

O algoritmo da Figura 16 no e prtico, pois, apesar do computador ter calculado um determinado valor ou armazenado o mesmo na varivel Preo_tot, este valor ficou retido na memria do computador e no foi mostrado ao usurio, o major interessado no mesmo. As instrues primitivas de sada de dados so o meio pelo qual informaes contidas na memria dos computadores so colocadas nos dispositivos de sada, pare que o usurio posse aprecilas. Ha duas sintaxes possveis pare esta instruo: Escreva <lista_de_variveis> ou Escreva <literal>

35

Incio

Preo_Unit 5.0 Quant 10 Preo_Tot Preo_Unit * Quant. (a) Fim Algoritmo EXEMPLO_6_1 Var Preo_unit Preo_tot : real Quant : inteiro Incio Preo_unit 5.0 Quant 10 Preo_tot Preo_unit * Quant Fim. Program EXEMPLO_6_1; Var Preo_unit Preo_tot : real; Quant : inteiro; Begin Preo_unit := 5.0; Quant := 10; Preo_tot := Preo_unit * Quant; End.

(b)

(c)

Figura 16 - Exemplo de aplicao de comandos de atribuio: (a) Fluxograma; (b) pseudocdigo; (c) pascal. Daqui por diante, Escreva ser considerada uma palavra reservada no mais poder ser utilizada como nome de varivel (ao menos nos algoritmo apresentados neste texto), de modo que toda vez que for encontrada em algoritmos ser identificada como um comando de sada de dados. Uma lista_de_variveis e um conjunto de nomes de variveis separados por vrgulas. Um literal e simplesmente um dado do tipo literal delimita por aspas.

36

Em termos de fluxograma, uma instruo de sada de dados e representada como na Figura 17.

<Lista_de_Variveis> ou <Literal>

Figura 17 - Forma de representao de uma instruo de sada de dados em fluxograma Repare que a representao no fluxograma dispense o uso da palavra reservada Escreva, uma vez que a mesma j esta embutida na forma geomtrica da figura. A semntica da instruo primitiva de sada de dados e muito simples: os argumentos do comando so enviados pare o dispositivo de sada. No cave de uma lista de variveis, o contedo de cada uma delas e pesquisado na posio de memria correspondente a varivel e depois enviado pare o dispositivo de sada. No cave de argumentos do tipo string, estes so enviados diretamente ao referido dispositivo. H, ainda, a possibilidade de se misturar nomes de variveis com literais na lista de um mesmo comando. O efeito obtido e bastante til e interessante: a lista e lida da esquerda pare a direita e cada elemento da mesma e tratado separadamente; se um nome de varivel for encontrado, ento a informao da mesma e pega da memria e colocada no dispositivo de sada; no caso de um literal, o mesmo e escrito diretamente no dispositivo de sada. O exemplo da Figura 16 torna-se muito mais interessante com a aplicao de instrues de sada de dados, como na Figura 17.

6.3

Instruo Primitiva de Entrada de Dados

O algoritmo da Figura 18 ainda carece de uma melhoria essencial. Toda vez que ele e executado, o mesmo valor e calculado, j que os valores das variveis Preo_unit Quant permanecem inalterados. Seria interessante que estes valores pudessem ser fornecidos ao computador pelo usurio do programa toda vez que o programa fosse executado, pare que o usurio tivesse um maior controle sobre o valor calculado. A instruo primitiva de entrada de dados foi criada pare suprir esta necessidade.

37

Sua sintaxe : Leia <lista_de_variveis> Incio

Preo_Unit 5.0 Quant 10 Preo_Tot Preo_Unit * Quant.

Preo Tot (a) Fim Algoritmo EXEMPLO_6_2 Var Preo_unit, Preo_tot : real Quant : inteiro Incio Preo_unit <- 5.0 Quant <- 10 Preo_tot <- Preo_unit * Quant Escreva Preo_tot Fim. Program EXEMPLO_6_2; Var Preo_unit, Preo_tot : real; Quant : integer; Begin Preo_unit := 5.0; Quant := 10; Preo_tot := Preo_unit * Quant; Write(Preo_tot); End.

(b)

(c)

Figura 18 - Exemplo de aplicao da instruo primitiva de sada de dados: (a) fluxograma; (b)pseudocdigo; (c) Pascal. Da mesma forma que Escreva, daqui em diante Leia ser tratada como uma palavra-reservada e no mais poder ser usada como nome de varivel em algoritmos. A lista_de_variveis e um conjunto de um ou mais nomes de variveis, separados por vrgulas A Figura 19 mostra como uma instruo de entrada de dados e representada em fluxogramas. Esta representao dispense o uso da palavra-reservada Leia, pelo fato da mesma j estar de certo modo embutida na forma geomtrica da figura.

38

<Lista_de_Variveis>

Figura 19 - Forma de representao de uma instruo de entrada de dados em fluxograma A semntica da instruo de entrada (ou leitura) de dados e, de certa forma, inversa a da instruo de escrita: os dados so fornecidos ao computador por meio de um dispositivo de entrada e armazenados nas posies de memria das variveis cujos nomes aparecem na lista_de_variveis. O algoritmo da Figura 18 , modificado para que os valores das variveis Preo_unit e Quant sejam lidos no dispositivo de entrada, esta na Figura 20. O algoritmo da Figura 20 ainda precise sofrer algumas modificaes pare ficar perfeito. Em sua forma atual, ao Incio de sue execuo, ele procure ler os valores para as variveis Preo_unit e Quant. Um usurio diferente daquele que criou o programa, a no ser que esteja bem treinado no uso do mesmo, poder encontrar dificuldades na interao com o programa. Ele pode confundir a ordem em que os dados devem ser fornecidos ou simplesmente esquecer o que o programa deseja que ele digite. Ao trmino da execuo o programa escreve como resultado um nmero que pode no possuir nenhum significado ao usurio se este no souber a finalidade pare a qual o algoritmo foi concebido.

39

Incio

Preo_Unit, Quant Preo_Tot Preo_Unit * Quant.

Preo Tot (a) Fim Algoritmo EXEMPLO_6_2 Var Preo_unit Preo_tot : real Quant : inteiro Incio Leia Preo_unit, Quant Preo_tot Preo_unit, * Quant Escreva Preo_tot Fim.

(b)

Program EXEMPLO_6_2; Var Preo_unit Preo_tot : real; Quant : integer; Begin Read(Preo_unit, Quant); Preo_tot : = Preo_unit, * Quant; Write(Preo_tot); (c) End. Figura 20 - Exemplo de aplicao da instruo primitiva de entrada de dados num algoritmo: (a) Fluxograma; (b) pseudocdigo; (c) Pascal. Uma preocupao constante de um bom programador deve ser a de conceber um programa "amigo do usurio". Esta preocupao e traduzida no planejamento de uma interface com o usurio (meio pelo qual um programa e o usurio "conversam") bastante amigvel. Em termos prticos, isto se resumem a aplicao de duas regras bsicas: - toda vez que um programa estiver esperando que o usurio fornea a ele um determinado dado (operao de leitura), ele deve ante enviar uma mensagem dizendo ao usurio o que ele deve digitar, por meio de uma instruo de sada de dados; - antes de enviar qualquer resultado ao usurio, um programa deve escrever uma mensagem explicando o significado do mesmo. Estas medidas tornam o dilogo entre o usurio e o programador muito mais fcil. A verso final do algoritmo estudado mostrado na Figura 21.

6.4

Sntese

A instruo primitiva de atribuio avalia uma expresso e armazena o valor resultante numa varivel. O valor resultante da expresso e a varivel devem ter tipos compatveis. A instruo primitiva de sada de dados admite como argumentos uma lista de variveis, um literal, ou uma mistura de ambos. No primeiro caso, o valor de cada uma das variveis e buscado na 40

memria e colocado no dispositivo de sada. No cave de literais, estes so copiados diretamente no dispositivo de sada. A instruo primitiva de entrada de dados busca, no dispositivo de entrada, dados que so guardados nas posies de memria correspondentes as variveis da lista que Ihe so passadas como argumento.

6.5

Exerccios Resolvidos

1. Escreva um algoritmo (fluxograma e pseudocdigo) pare calcular a mdia entre dois nmeros quaisquer. soluo: A idia principal do algoritmo esta centrada na expresso matemtica utilizada no clculo da media (M) entre dois nmeros, N1 e N2, dada por: M= (N1 +N2)/2 Para que o valor de M posse ser calculado pelo algoritmo, e necessrio que os valores de N1 e N2 tenham sido fornecidos ao mesmo com antecedncia. Portanto, a primeira etapa do algoritmo consiste da obteno (leitura) dos valores de N1 c N2 e armazenamento dos mesmos em posies distintas de memria (variveis).

41

Incio "Digite o preo unitrio"

Preo_unit.

"Digite a quantidade"

Quantidade Preo_Tot Preo_Unit * Quant. "Preo total :"" Preo Tot (a)

Fim Algoritmo EXEMPLO_6_2 Var Preo_unit, Preo_tot : real Quant : inteiro Incio Escreva "Digite o Preo unitrio" Leia Preo_unit, Escreva "Digite a quantidade" Leia Quant Preo_tot <- Preo_unit * Quant Escreva " Preo total : ", Preo_tot Fim. Program EXEMPLO_6_2; Var Preo_unit, Preo_tot : real; Quant : integer; Begin Write ('Digite o Preo unitrio'); Read (Preo_unit); Write ('Digite a quantidade'); Read (Quant); Preo_tot := Preo_unit * Quant; Write ('Preo total :' , Preo_tot); End.

(b)

(c)

Figura 21 - Exemplo de aplicao das instrues primitivas de atribuio, entrada e sada de dados num algoritmo: (a) fluxograma; (b) pseudocdigo; (c) pascal. Na seqncia, o valor da media deve ser calculado por meio de uma expresso apropriada e atribudo a uma terceira varivel (M). Por fim, deve-se relatar ao usurio o valor calculado por meio de uma instruo primitive de sada de dados.

42

O fluxograma do algoritmo descrito e mostrado a seguir. Note que ele esta enriquecido com instrues para informar sue finalidade, os dados que devem ser fornecidos ao usurio e o significado do valor calculado. Incio

" Algoritmo para calcular a mdia entre dois nmero"

"Digite o primeiro nmero"

N1 "Digite o segundo nmero"

N2 M (N1 + N2) /2 "O Valor da mdia :" ,M Preo Tot

Fim A transformao do fluxograma em pseudocdigo exige a disponibilidade de algumas informaes adicionais concernentes ao tipo das variveis utilizadas. Como o algoritmo opera apenas com dados numricos, certamente variveis utilizadas sero do tipo inteiro ou real. Como se deseja calcular media entre dois nmeros quaisquer, ento as variveis N1 e N2 devem ser capazes de armazenar nmeros com ou sem parte fracionria e, portanto necessrio que estas sejam do tipo real. Como o valor mdio entre dois nmeros reais e um nmero que pode ou no ter parte fracionria, ento a varivel tambm deve ser do tipo real.

43

De posse dessa informao, pode-se escrever o pseudocdigo do algoritmo em questo, a partir de seu fluxograma. Algoritmo Mdia VAR N1, N2, M : real Incio Escreva "Algoritmo pare calcular nmeros" Escreva "Digite 0 primeiro nmero" Leia N1 Escreva "Digite o segundo nmero" Leia N2 M <- (N1+ N2) / 2 Escreva "O valor da media e:", M Fim.

mdia

entre

dois

2. Escreva um algoritmo pare calcular o valor de y como funo de segundo a funo y(x) = 3x + 2, num domnio real. Soluo: Essencialmente o algoritmo usado na soluo deste problema consiste na obteno do valor de x pare o qual se deseja calcular a funo, o clculo desta propriamente dito e a mostra do resultado obtido ao usurio. Veja fluxograma correspondente a seguir: Incio

" Algoritmo para calcular y = 3x + 2"

"X = "

X Y 3 * X + 2

"Y = ", Y

Fim Para que se possa escrever o pseudocdigo do algoritmo deve-se decidir qual ser o tipo das variveis X e Y. Como especificado no enunciado do problema, o algoritmo deve operar num domnio real e, portanto, as variveis X e Y devem ser do tipo real. ento, o pseudocdigo fica assim:

44

Algoritmo Funo_de_x VAR X, Y : real Incio Escreva "Algoritmo pare calcular y = 3x + 2" Escreva "X = " Leia X y <- 3 * X + 2 Escreva "Y = ", Y Fim. 3. Escreva um algoritmo pare calcular o consumo mdio de um automvel (medico em Km/l), dado que so conhecidos a distncia total percorrida e o volume de combustvel consumido pare percorr-la (medido em litros). Soluo: A principal questo a ser levantada na obteno do algoritmo pedido consiste na formulao da expresso usada pare calcular o consumo mdio (CM) a partir da distncia total percorrida (DIST) e do volume de combustvel consumido (VOL), que e dada por: CM = DIST / VOL Uma vez obtida esta expresso, a formulao do algoritmo desejado consiste em uma simples repetio daqueles apresentados nas questes anteriores: deve-se obter o valor das variveis DIST e VOL, calcular o consumo pela expresso acima e, finalmente, mostrar ao usurio 0 valor calculado. O fluxograma correspondente ao algoritmo e o seguinte: Incio " Algoritmo para calcular o consumo"

"Distncia total percorrida (Km): "

Dist

"Volume de combutvel gasto (1) : "

Vol CM Dist / Vol

"Consumo mdio = ", CM, "Km/l "

Fim Assumindo que sodas as variveis utilizadas (CM, DIST e VOL) so do tipo real, pode-se escrever o pseudocdigo seguinte pare o fluxograma anterior: Algoritmo Consumo_mdio VAR

45

CM, DIST, VOL : real Incio Escreva "Algoritmo pare calcular o consumo" Escreva "distncia total percorrida (Km):" Leia DIST Escreva "Volume de Combustvel Gasto (1):" Leia VOL CM <- DIST / VOL Escreva "Consumo mdio = ", CM, " Km/l" Fim.

6.5.1 Exerccios F
Para cada um dos problemas propostos a seguir, expresse um algoritmo que pode ser usado em sua soluo na forma de um fluxograma e de um pseudocdigo. 1. Ler as seguintes informaes de uma pessoa: Nome, Idade, Sexo, Peso, Altura, Profisso, Rua, Bairro, Cidade, Estado, CEP, Telefone. 2. Clculo da mdia de quatro nmeros inteiros dados. 3. clculo do quadrado de um nmero, ou seja, o produto de um nmero por si mesmo. 4. Clculo da funo f(x, y) = 2x + 3y2, num domnio real. 5. Clculo do preo mdio do quilmetro rodado (em US$/litro) para uma dada distncia percorrida (em Km) e um certo volume de combustvel consumido (em litros). Nota: uma vez que o preo do combustvel tambm pode variar, ele tambm deve ser fornecido como dado para o algoritmo. 6. Ler as seguintes informaes de um funcionrio: Nome, idade cargo e o seu salrio bruto considere: a) O salrio bruto teve um reajuste de 38%. b) O funcionrio receber uma gratificao de 20% do salrio bruto. c) O Salrio total descontado em 15% E escrever os seguintes resultados: Imprimir Nome, idade e cargo. Imprimir o salrio bruto. Imprimir o salrio lquido. 7. Ler a base e a altura de um tringulo. Em seguida, escreva a rea do mesmo. Obs.: rea = ( Base * Altura ) / 2 8 .Uma empresa tem para um determinado funcionrio uma ficha contendo o nome, nmero de horas trabalhadas e o n0 de dependentes de um funcionrio. Considerando que: a) A empresa paga 12 reais por hora e 40 reais por dependentes. b) Sobre o salrio so feito descontos de 8,5% para o INSS e 5% para IR. Leia o Nome, nmero de horas trabalhadas e nmero de dependentes de um funcionrio. Aps a leitura, escreva qual o Nome, salrio bruto, os valores descontados para cada tipo de imposto e finalmente qual o salrio lquido do funcionrio. 9. O preo de um automvel calculado pela soma do preo de fbrica com o preo dos impostos (45% do preo de fbrica) e a percentagem do revendedor (28% do preo de fbrica). Leia o nome do automvel e o preo de fbrica e escreva o nome do automvel e o preo final.

46

7.

Controle do Fluxo de Execuo

At o momento os algoritmos estudados utilizam apenas instrues primitive de atribuio, e de entrada e sada de dados. Qualquer conjunto de dada fornecido a um algoritmo destes ser submetido ao mesmo conjunto de instrues, executadas sempre na mesma seqncia. No entanto, na prtica muitas vezes e necessrio executar aes diversas em funo dos dados fornecidos ao algoritmo. Em outras palavras, dependendo do conjunto de dados de entrada do algoritmo, deve-se executar um conjunto diferente de instrues. Alm disso, pode ser necessrio executar um mesmo conjunto de instrues um nmero repetido de vezes. Em resumo necessrio controlar o fluxo de execuo das instrues (a seqncia em que instrues so executadas num algoritmo) em funo dos dados fornecidos com entrada ao mesmo. Neste captulo sero estudadas as estruturas bsicas de controle de fluxo de instrues de um algoritmo. De acordo com o modo como este controle feito, estas estruturas so classificadas em: estruturas seqenciais; estruturas de deciso; estruturas de repetio.

7.1

Comandos Compostos

Um comando composto um conjunto de zero ou mais comandos (ou instrues) simples, como atribuies e instrues primitives de entrada ou sada de dados, ou alguma das construes apresentadas neste captulo. Este conceito e bastante simples e ser til e conveniente nos itens seguintes, na definio das estruturas bsicas de controle de execuo.

7.2

Estrutura Seqencial

Na estrutura seqencial os comandos de um algoritmo so executados numa seqncia prestabelecida. Cada comando e executado somente aps o trmino do comando anterior. A Figura 22 exemplifica um trecho seqencial de um algoritmo. Em termos de fluxogramas, a estrutura seqencial e caracterizada por um nico fluxo de execuo (um nico caminho orientado) no diagrama. Em pseudocdigos, a estrutura seqencial caracteriza-se por um conjunto de comandos dispostos ordenadamente. Como exemplos de aplicao desta estrutura de controle tem-se os algoritmos do capitulo anterior, onde no ha estruturas de deciso ou de repetio.

7.3

Estruturas de deciso

Neste tipo de estrutura o fluxo de instrues a ser seguido e escolhido em funo do resultado da avaliao de uma ou mais condies. Uma condio e uma expresso lgica. A classificao das estruturas de deciso e feita de acordo com o nmero de condies que devem ser testadas pare que se decide qual o caminho a ser seguido. Segundo esta classificao tem-se dois tipos de estruturas de deciso:

- Se

47

- Escolha <Comando 1> <Comando 2> <Comando 1> (a)

... <Comando 1> <Comando 2> <Comando 3> ...

(b)

Figura 22 - Trecho seqencial de um algoritmo: (a) fluxograma; (b) pseudocdigo.

7.3.1 Estruturas de deciso do Tipo Se


Nesta estrutura uma nica condio (expresso lgica) e avaliada. Se o resultado desta avaliao for verdadeiro (.V.), ento um determinado conjunto de instrues (comando composto) e executado. Caso contrrio, ou seja, quando resultado da avaliao for falso (.F.), um comando diferente e executado. Em termos de fluxogramas, uma construo do tipo Se pode ser encarada como uma bifurcao onde h dois caminhos que podem ser seguidos (Figure 7.2 (a)). A execuo do algoritmo prosseguir necessariamente por um deles. Esta escolha e feita em funo do resultado da expresso: um dos caminhos e rotulado com (.V.) e ser seguido quando a condio for verdadeira o outro e rotulado com (.F.) e ser seguido quando a condio for falsa. A sintaxe da estrutura de deciso do tipo SE e mostrada na Figura 23.

48

.V. <Condio> <Comando Composto 1>

.F.

<Comando Composto 2>

(a)

Se <Condio> Ento <Comando_Composto_1> Seno <Comando_Composto_1> Fim_se If <Condio> Then Begin <Comandos>; End Else Begin <Comandos>;

(b)

(c)

End;
Figura 23 - Sintaxe da estrutura de deciso Se-Ento-Seno-Fim_se: (a) fluxograma; (b) pseudocdigo e (c) pascal. Note-se o aparecimento de novas palavras-reservadas Se, Ento, Seno e Fim_se. A semntica desta construo e a seguinte: a condio e avaliada. Se o resultado for verdadeiro, ento o comando_composto_1 e executado. Ao trmino de sue execuo o fluxo do algoritmo prossegue pela instruo seguinte a construo, ou seja, o primeiro comando aps o Fim_se. Nos casos em que a condio e avaliada como false, o comando_composto_2 e executado e, ao trmino do mesmo, o fluxo de execuo prossegue pela primeira instruo seguinte ao Fim_se. H casos particulares e muito comuns desta construo, onde o comando_composto_2 e um conjunto vazio de instrues. Neste caso, a poro relativo ao Seno pode ser omitida, resumindo a sintaxe da construo forma mostrada na Figura 24.

49

.V. <Condio> .F.

<Comando Composto 1>

(a)

Se <Condio> Ento <Comando_Composto_1> Fim_se If <Condio> Then <Comando_Composto_1>; (c) (b)

Figura 24 - Sintaxe da estrutura de deciso Se-Ento-Fim_se: (a) Fluxograma; (b) pseudocdigo; (c) pascal. A semntica desta construo e a seguinte: no caso da condio seja verdadeira, o comando_composto_1 executado e, aps seu trmino, o fluxo de execuo prossegue pela prxima instruo aps o Fim_se. Quando a condio e false, o fluxo de execuo prossegue normalmente pela primeira instruo aps o Fim_se. A Figura 25 exemplifica 0 uso da construo Se-Ento-Seno Fim_se num algoritmo para determinar se uma pessoa maior ou menor de idade

50

Incio Idade

.V. Idade > = 18

.F.

"Maior de Idade"

"Menor de Idade"

Fim Algoritmo Exemplo_7_1 Var Idade : inteiro Incio Leia Idade Se Idade >= 18 Ento Escreva "Maior de idade" Seno Escreva "Menor de idade" Fim_se Fim. Program Exemplo_7_1; Var Idade : integer; Begin Read(Idade); If Idade >= 18 Then Write ('Maior de idade') Else Write ('Menor de idade'); End. Figura 25 - Exemplo de aplicao da estrutura de deciso Se-Ento-Seno-Fim_se.

7.3.2 Exerccios G
1. Faa um algoritmo que leia os valores A, B, C, e diga se a soma de A + B menor que C. 2. Faa um algoritmo que leia dois valores inteiros A e B, e se os valores forem iguais dever se somar os dois, caso contrrio multiplique A por B ao final do calculo atribuir o valor para uma varivel C. 3. Faa um algoritmo que leia o nome e as trs notas de uma disciplina de uma aluno e ao final escreva o nome do aluno, sua mdia e se ele foi aprovado a mdia 8.

51

4. Faa um algoritmo que leia 2 nmeros inteiros e escreva o menor deles. 5. Faa um algoritmo que leia 3 nmeros inteiros e escreva o menor deles. 6. Faa um algoritmo que leia 4 nmeros inteiros e escreva o menor deles. 7. Dados trs valores distintos, fazer um algoritmo que, aps a leitura destes dados coloque-os em ordem crescente. 8. Dado trs valores X, Y, Z, verificar se eles podem ser os comprimentos dos lados de um tringulo, e se forem, verificar se um tringulo equiltero, issceles ou escaleno. Se eles no formarem um tringulo, escrever uma mensagem. Antes da elaborao do algoritmo, torna-se necessria a reviso de algumas propriedades e definies. Propriedade - O comprimento de cada lado de um tringulo menor do que a soma dos comprimentos dos outros dois lados. Definio 1 - Chama-se tringulo equiltero os que tem os comprimentos dos trs lados iguais, Definio 2 - Chama-se tringulo issceles ao tringulo que tem os comprimentos de dois lados iguais. Definio 3 - Chama-se tringulo escaleno ao tringulo que tem os comprimentos dos trs lados diferentes. 9. Uma empresa decide dar um aumento de 30% aos funcionrios cujo salrio inferior a R$ 5.000,00 . Escreva um algoritmo que possa ser utilizado para o calculo de reajuste do salrio de um funcionrio. 10. Uma empresa decide dar um aumento de 25,5 % aos funcionrios cujo o salrio inferior a R$ 2.000,00 e tenha mais de 2 dependentes e 15% para os que ganham acima de R$ 2.000,00 e tenha um dependente e 7,5% para os que acima e no tenham dependente.

52

7.3.3 Estruturas de deciso do Tipo Escolha


Este tipo de estrutura e uma generalizao da estrutura Se, onde somente uma condio era avaliada e dois caminhos podiam ser seguidos. Na estrutura de deciso do tipo Escolha pode haver uma ou mais condies a serem testadas e um comando composto diferente associado a cada uma destas. A sintaxe da construo de Escolha e mostrada na Figura 26:

.V. <Condio_1> .F. .V. <Condio_2> .F. <Comando Composto 2> <Comando Composto 1>

.V. <Condio_N> .F. <Comando Composto S> (a) <Comando Composto N>

Escolha Caso <Condio_1> <Comando_composto 1> Caso <Condio_2> <Comando_composto_2> ... Caso <Condio_n> <Comando_composto_n> Seno <Comando_composto_s> Fim_escolha

(b)

53 (c)

Case <Varivel> Of <Condio_1> : <Condio_2> : ... <Condio_n> : Else Begin <Comandos>; End; End;

Begin <Comandos_compos_1>; End; Begin <Comandos_compos_2>; End; Begin <Comandos_compos_s>; End;

Figura 26 - Sintaxe usada em (a) fluxogramas; (b) pseudocdigo e (c) pascal para a construo Escolha. Seu funcionamento e o seguinte: ao entrar-se numa construo do tipo Escolha, a Condio_1 testada: se for verdadeira, o comando_composto_1 e executado e, aps seu trmino, o fluxo de execuo prossegue pela primeira instruo aps o final da construo (Fim_escolha); se a Condio 1 for falso, a condio_2 testada: se esta for verdadeira, o comando_composto_2 e executado e, ao seu trmino, a execuo prossegue normalmente pela instruo seguinte ao Fim escolha. O mesmo raciocnio e estendido a sodas as condies da construo. No cave em que sodas as condies so avaliadas como falsas, o comando composto_s (correspondente ao Seno da construo) e executado. Um exemplo de aplicao desta construo e mostrado na Figura 27, baseado num algoritmo de reajuste salarial varivel em funo da profisso.

54

Algoritmo Exemplo_7_2 Var Salrio, Sal_reaj : real Prof : literal[20] Incio Leia Salrio, Prof Escolha Caso Prof = "Tcnico" Sal_reaj <- 1.5 * Salrio Caso PROF = "Gerente" Sal_reaj <- 1.3 * Salrio Seno Sal_reaj <- 1.1 * Salrio Fim_escolha Escreva SALRIO Reajustado = ", Sal_reaj Fim. Incio Salrio, Prof.

.V. Prof.= "Tcnico .F. .V. Prof.="Gerente" Sal.Reaj 1.3 * Salrio Sal.Reaj 1.5 * Salrio

.F. Sal.Reaj 1.1 * Salrio

"Salrio Reajustado =", Reaj

Figura 27 - Exemplo de aplicao da construo Escolha. Fim Um caso particular desta construo e aquele em que o comando_composto_s no contm nenhuma instruo. Isto ocorre nas situaes em que no se deseja efetuar nenhuma ao quando sodas as condio testadas so falsas. Assim, pode-se dispensar o uso do Seno na construo como acontece tambm na construo Se.

7.3.4 Exerccios H
1. Faa um algoritmo que leia um nmero que represente um determinado ms do ano. Aps a leitura escreva por extenso qual o ms lido. Caso o nmero digitado no esteja na faixa de 1..12 escreva uma mensagem informando o usurio do erro da digitao . 55

2. Faa um algoritmo que leia um nmero qualquer. Caso o nmero seja par menor que 10, escreva Nmero par menor que Dez, caso o nmero digitado seja mpar menor que 10 escreva Nmero mpar menor que Dez, caso contrrio Escreva Nmero fora do Intervalo. 3. Uma empresa ir dar um aumento de salrio aos seus funcionrios de acordo com a categoria de cada empregado . O aumento seguir a seguinte regra: a) Funcionrios das categorias A, C, F, e H ganharo 10% de aumento sobre o salrio b) Funcionrios das categorias B, D, E, I, J e T ganharo 15% de aumento sobre o salrio c) Funcionrios das categorias K e R ganharo 25% de aumento sobre o salrio d) Funcionrios das categorias L, M, N, O, P, Q e S ganharo 35% de aumento sobre o salrio e) Funcionrios das categorias U, V, X, Y, W e Z ganharo 50% de aumento sobre o salrio Faa um algoritmo que Escreva Nome, categoria e salrio reajustado de cada Empregado.

7.4

Estruturas de Repetio

So muito comuns as situaes em que se deseja repetir um determinado trecho de um programa um certo nmero de vezes. Por exemplo, pode-se citar o caso em que se deseja realizar um mesmo processamento para conjuntos de dados diferentes. Exemplo: processamento de folha de pagamentos de uma empresa, em que o mesmo clculo e efetuado pare cada um dos funcionrios. As estruturas de repetio so muitas vezes chamadas de Laos ou, tambm, de Loops. A classificao das estruturas de repetio e feita de acordo com o conhecimento prvio do nmero de vezes que o conjunto de comandos ser executado. Assim, os laos dividem-se em: laos contados, quando se conhece previamente quantas vezes o comando composto no interior da construo ser executado; laos condicionais, quando no se conhece de antemo o nmero de vezes que o conjunto de comandos no interior do lao ser repetido, pelo fato de o mesmo estar amarrado a uma condio sujeita a modificao pelas instrues do interior do lao.

7.4.1 Laos Contados


Os laos contados so teis quando se conhece previamente o nmero de vezes que se deseja executar um determinado conjunto de comandos. ento, este tipo de lao nada mais e que uma estrutura dotada de mecanismos para contar o nmero de vezes que o corpo do lao (ou seja, o comando composto em seu interior) e executado. A sintaxe usada em pseudocdigos para os laos contados e mostrada na Figura 28. Para <var> de <Incio> at <final> incr de <inc> faa <Comando_composto> (a) Fim_para For <Varivel > : = <INICIO> TO <FIM> DO Begin <Comando>; End;

(b)

Figura 28 - Sintaxe usada em laos contados: (a) pseudocdigo e (b) pascal. Em termos de fluxograma, h varias representaes possveis e, ate o momento, no h um consenso quanto a forma mais conveniente. A Figura 29 apresenta duas formas bastante usadas, sendo que aquela mostrada na Figura 29 (a) ser a adotada neste texto. <Var> <Incio> <Var> <Var>+<Inc> 56 <Comando Composto>

<Var>=<Incio> <Fim>, <Inc>

<Var> > <Fim> .F.

.V.

<Comando Composto>

(a)

(b)

Figura 29 - Duas formas possveis de representao de laos contados em algoritmos. A semntica do lao contado e a seguinte: no Incio da execuo construo o valor <Incio> e atribudo a varivel <var>. A seguir, o valor varivel <var> e comparado com o valor <final>. Se <var> for maior <final>, ento o comando composto no e executado e a execuo do algoritmo prossegue pelo primeiro comando seguinte ao Fim_para. Por outro lado, se valor de <var> for menor ou igual a <final>, ento o comando composto interior da construo e executado e, ao final do mesmo, o valor e adicionada varivel <var>. Feito isso, retorna-se a comparao entre <var> e <final> repetese o processo at que <var> tenha um valor maior que <final>, quando o lao e finalizado e a execuo do algoritmo prossegue pela instruo imediamente seguinte ao Fim_para. Algumas observaes interessantes devem ser feitas: <var> necessariamente uma varivel, uma vez que seu valor alterado a cada iterao (volta do lao); <Incio>, <fim> e <inc> podem ser constantes ou variveis. segundo cave (variveis), algumas linguagens de programa probem que seus valores sejam modificados durante a execuo do lao; <inc> e 0 valor que e adicionado a varivel <var> ao final de cada iterao do lao. H linguagens de programao que permitem que Ihe seja atribudo um valor negativo, de modo que o valor da varivel <var> diminui a cada iterao. Neste caso, deve-se atentar necessidade de inverso do sinal da comparao (de > para <) que e feito cada volta do lao, pare seu correto funcionamento. Contudo, e texto assumir que <inc> possui um valor sempre positivo, o que no cause perda de generalidade, j que um resultado anlogo pode ser obtido com o uso das construes enquanto e repita, apresentadas a seguir; na grande maioria dos casos <inc> tem o valor 1 (incremento unitrio). Portanto, admite-se a omisso do trecho incr de <inc> da sintaxe do comando Para e, quando isto ocorre, assume-se um incremento de 1.

7.4.1.1 Exerccios I
1. Faa um algoritmo para ler base e altura de 50 tringulos e escreva a sua rea. 2. Faa um algoritmo para calcular N!. 3. Faa um algoritmo para calcular um valor A elevado a um expoente B. Os valores A e B devero ser lidos. No usar A** B. 4. Faa um algoritmo para: a) Ler um valor x qualquer b) Calcular Y = ( x+1)+(x+2)+(x+3)+(x+4)+(x+5)+(x+100). 5. Faa um algoritmo para somar os nmeros pares positivos < 1000 e ao final imprimir o resultado. 6. Faa um algoritmo para gerar os termos da seguinte P.G.: 3,9,27,81,,calcule o 100 termo. 7. Ampliando o exerccio acima, faa um algoritmo para calcular a soma dos termos da P.G.. 8. Faa um algoritmo para calcular a srie Fibonacci at 0 N-simo termo. A srie tem a seguinte forma: 1,1,2,3,5,8,13,21,34, 9. Faa um algoritmo para ler um valor X e calcular Y = X+2X+3X+4X+5X++20X

57

10. Para cada nota de compra , tem-se o Nome do produto comprado, o valor e o imposto. Faa um algoritmo que escreva o valor total bruto, o imposto total cobrado e o valor total lquido de todas as notas. Considere 500 notas 11. Faa um algoritmo que calcule a hipotenusa de 10 tringulos. hipotenusa2 = cateto1 2 + cateto2 2 12. Faa um algoritmo para calcular a rea de N quadrilteros. Frmula: rea = Lado * Lado 13. Faa um algoritmo para calcular a rea de N Crculos . Frmula : rea = raio 2 = 3,141592. 14. Fazer um algoritmo que calcule escreva a soma dos 50 primeiros termos das seguinte srie:

1000 997 994 991 + +... 1 2 3 4 15. Faa um algoritmo para ler N nmeros inteiros e ao final escrever sua mdia.

16. Uma turma possui N alunos, e para cada aluno tem-se uma mdia para cada disciplina. O professor de Matemtica precisa saber a mdia geral de sua disciplina em um turma. Faa um algoritmo para auxiliar a encontrar este valor.
17. Faa um algoritmo para calcular: a)

N 1 50

2 N
2

50

b)

N 1 50

N
N 1 50

c)

N
1

d)

N 1 50

2 N N
1
2

e)

N 1

18. Uma empresa possui 100 vendedores que ganham por comisso sobre cada produto vendido. Cada vendedor em um determinado ms vendeu X produtos, onde cada produto pode ou no ter preos iguais. A empresa deseja obter um relatrio com o Nome, o total de vendas e o valor a ser pago a cada vendedor. A comisso paga pela empresa de 30% sobre o valor de cada produto vendido. 19. Dado uma relao de 1000 nmeros em graus Clcius, faa um algoritmo que imprima o seguinte relatrio : Graus Fahrenheit xxxxxx Obs.: Graus Clcius xxxxxx

F =

9 C + 32 5

58

20. Escrever um programa para gerar e escrever uma tabela com os valores de seno de um Angulo A em radianos, utilizando a srie de Mac-Laurin Truncada apresentada a seguir:

SenA = A

A3 A5 A7 + 6 120 5040

Condies: os valores dos ngulos devem variar de 0.0 a 6.3, inclusive, de 0.1 em 0.1

7.4.2 Laos Condicionais


Laos condicionais so aqueles cujo conjunto de comandos em seu interior e executado ate que uma determinada condio seja satisfeita. Ao contrrio do que acontece nos laos contados, nos laos condicionais no se sabe de antemo quantas vezes o corpo do lao ser executado. As construes que implementam laos condicionais mais comuns nas linguagens de programao modernas so: Enquanto Repita

7.4.2.1 Construo Enquanto


Sua sintaxe e mostrada na Figura 30. Sua semntica e a seguinte: ao Incio da construo Enquanto a condio e testada. Se seu resultado for falso, ento o comando composto no seu interior no e executado e a execuo prossegue normalmente pela instruo seguinte ao Fim_enquanto. Se a condio for verdadeira o comando composto e executado e ao seu trmino retorna-se ao teste da condio. Assim, o processo acima ser repetido enquanto a condio testada for verdadeira. Quando esta for false, o fluxo de execuo prosseguir normalmente pelas instrues posteriores ao Fim_enquanto.

.V. <Condio> .F. Enquanto <condico> Faa <comando composto> Fim_enquanto PROGRAM ExEnquanto; WHILE <Condio for verdadeira> DO BEGIN <Comandos>; END.

<Comando Composto> (a)

(b)

(c)

Figura 30 - Sintaxe da Enquanto para laos condicionais, sendo (a) fluxograma; (b) pseudocdigo e (c) Pascal Uma vez dentro do corpo do lao, a execuo somente abandonar mesmo quando a condio for falsa. O usurio deste tipo de construo deve estar atento a necessidade de que em algum momento a condio dever que avaliada como falsa. Caso contrrio, o programa permanecer indefinidamente no interior do lao, o que e conhecido como Lao infinito.

7.4.2.1.1

Exerccios J

1. Faa um algoritmo para ler base e altura de 50 tringulos e escreva a sua rea.

59

2. Faa um algoritmo para calcular N!. 3. Faa um algoritmo para calcular um valor A elevado a um expoente B. Os valores A e B devero ser lidos. No usar A** B. 4. Faa um algoritmo para: a) Ler um valor x qualquer b) Calcular Y = ( x+1)+(x+2)+(x+3)+(x+4)+(x+5)+(x+100). 5. Faa um algoritmo para somar os nmeros pares positivos < 1000 e ao final imprimir o resultado. 6. Faa um algoritmo para gerar os termos da seguinte P.G.: 3,9,27,81,,calcule o 100 termo. 7. Ampliando o exerccio acima, faa um algoritmo para calcular a soma dos termos da P.G.. 8. Faa um algoritmo para calcular a srie Fibonacci at 0 N-simo termo. A srie tem a seguinte forma: 1,1,2,3,5,8,13,21,34, 9. Faa um algoritmo para ler um valor X e calcular Y = X+2X+3X+4X+5X++20X 10. Faa um algoritmo para ler e escrever o Nome, idade e sexo de um nmero indeterminado de alunos. Ao final escreva o total de alunos lidos. 11. Para cada nota de compra , tem-se o Nome do produto comprado, o valor e o imposto. Faa um algoritmo que escreva o valor total bruto, o imposto total cobrado e o valor total lquido de todas as notas. Considere 500 notas 12. O valor aproximado de PI pode ser calculado usando-se a srie

1 1 1 1 1 + 3 + 3 + 3 + 3 +... 3 1 3 5 7 9 sendo = 3 S 32 S=

fazer um algoritmo para calcular e escrever o valor de PI com 51 termos 13. Faa um algoritmo para ler um valor X e um valor n. Aps, calcule a seguinte expresso: ( X + 1) ( X + 2) ( X + 3) ( X + N) Y= + + +.. .+ 1! 2! 3! N! 14. Faa um algoritmo para somar os restos da diviso por 3 de 200 nmeros. 15. Faa um algoritmo que calcule a hipotenusa de 10 tringulos. hipotenusa2 = cateto1 2 + cateto2 2 16. Faa um algoritmo para calcular a rea de N quadrilteros. Frmula: rea = Lado * Lado 17. Faa um algoritmo para calcular a rea de N Crculos . Frmula : rea = raio 2 = 3,141592. 18. Fazer um algoritmo que calcule escreva a soma dos 50 primeiros termos das seguinte srie:

1000 997 994 991 + +... 1 2 3 4 19. Faa um algoritmo para ler N nmeros inteiros e ao final escrever sua mdia. 20. Uma turma possui N alunos, e para cada aluno tem-se uma mdia para cada disciplina. O professor de Matemtica precisa saber a mdia geral de sua disciplina em um turma. Faa um algoritmo para auxiliar a encontrar este valor. 21. Uma empresa com X funcionrios precisa saber a mdia de seus salrios. Faa um algoritmo para ler a quantidade de funcionrios e o salrio de cada um e escrever a mdia dos salrios.
60

22. Faa um algoritmo que calcule e escreva o valor de S onde:

S=

1 3 5 7 99 + + + + ... + 50 49 48 46 1

23. Uma empresa possui um conjunto indeterminado de funcionrios e precisa saber a mdia de seus salrios e a quantidade de funcionrios. 24. Uma turma possui um conjunto indeterminado de alunos e para cada aluno tem-se uma mdia para cada disciplina. Os professores de matemtica e portugus desejam saber a mdia geral de sua disciplina nesta turma. 25. Dado um conjunto indeterminado de alunos sendo que para cada aluno tem-se uma ficha contendo Nome e Idade. Escreva o nome do aluno mais velho e mais novo.

61

7.4.2.2 Construo Repita


Sua sintaxe e mostrada na Figura 31.

<Comando Composto>

.F. <Condio> .V. Repita <comando composto> at que <condio> REPEAT (a)

(b)

<Comandos> UNTIL <Condio for verdadeira>;

(c)

Figura 31 - Sintaxe da construo Repita pare laos condicionais, sendo (a) fluxograma; (b) pseudocdigo e (c) Pascal. Seu funcionamento e bastante parecido ao da construo Enquanto. O comando e executado uma vez. A seguir, a condio e testada: se ela for false, o comando composto e executado novamente e este processo e repetido ate que a condio seja verdadeira, quando ento a execuo prossegue pelo comando imediatamente seguinte ao final da construo. Esta construo difere da construo Enquanto pelo fato de o comando composto ser executado uma ou mais vezes (pelo menos uma vez), ao passo que na construo Enquanto o comando composto e executado zero ou mais vezes (possivelmente nenhuma). Isto acontece porque na construo Repita o teste da condio e feito ao final da construo, ao contrrio do que acontece na construo Enquanto, onde o teste da condio e feito no Incio da mesma.

7.4.2.2.1

Exerccios L

1. Faa um algoritmo para ler base e altura de 50 tringulos e escreva a sua rea. 2. Faa um algoritmo para calcular N!. 3. Faa um algoritmo para calcular um valor A elevado a um expoente B. Os valores A e B devero ser lidos. No usar A** B. 4. Faa um algoritmo para: a) Ler um valor x qualquer b) Calcular Y = ( x+1)+(x+2)+(x+3)+(x+4)+(x+5)+(x+100). 5. Faa um algoritmo para somar os nmeros pares positivos < 1000 e ao final imprimir o resultado. 6. Faa um algoritmo para gerar os termos da seguinte P.G.: 3,9,27,81,,calcule o 100 termo. 7. Ampliando o exerccio acima, faa um algoritmo para calcular a soma dos termos da P.G.. 62

8. Faa um algoritmo para calcular a srie Fibonacci at 0 N-simo termo. A srie tem a seguinte forma: 1,1,2,3,5,8,13,21,34, 9. Faa um algoritmo para ler um valor X e calcular Y = X+2X+3X+4X+5X++20X 10. Leia 20 valores reais e escreva o seu somatrio. 11. Dado um nmero indeterminado de funcionrios, onde fornecido o Nome, nmero de dependentes e o nmero de horas trabalhadas. Pede-se que seja impresso, para cada funcionrio, o seu Nome, salrio bruto, salrio lquido e o valor descontado. A empresa, paga R$ 2.250,00 por hora de trabalho, e R$ 125,55 por dependente, e ainda faz um desconto de 12% sobre o salrio bruto. Pede-se ainda que seja impresso o total de funcionrios da empresa, o total gasto com salrios, e o total descontado. 12. Faa um algoritmo para: a) Leia um valor X e um valor N. b) Calcular: Y = X - 2X + 4X - 6X + 8X - 10X + NX. 13. Faa um algoritmo para ler um valor X e um Valor N. Aps, calcule a seguinte expresso: ( X + 1) ( X + 2) ( X + 3) ( X + N) Y= + + +.. .+ 1! 2! 3! N! 14. Faa um algoritmo que calcule a hipotenusa de 10 tringulos. hipotenusa2 = cateto 2 + cateto 2 15. Faa um algoritmo para calcular a rea de N quadrilteros. Frmula: rea = Lado * Lado 16. Faa um algoritmo para calcular a rea de N Crculos . Frmula : rea = raio 2 = 3,141592. 17. Fazer um algoritmo que calcule escreva o valor de S onde:

1 3 5 7 99 S = + + + +...+ 1 2 3 4 50
18. Fazer um algoritmo que calcule escreva o valor de S onde:

S=

1 2 3 4 5 10 + + ... 1 4 9 16 25 100

19. Dado um conjunto indeterminado de alunos sendo que para cada aluno tem-se uma ficha contendo Nome e Idade. Escreva o nome do aluno mais velho e mais novo.

7.5

Aninhamentos

Um aninhamento ou embutimento e o fato de se ter qualquer um dos tipos de construo apresentados anteriormente dentro do conjunto de comandos (comando composto) de uma outra construo. Em qualquer tipo de embutimento e necessrio que a construo interna esteja completamente embutida na construo externa. A Figura 7.11 ilustra aninhamentos vlidos e invlidos.

(a)

(b)

63

Figura 32 - Exemplos de aninhamentos (a) vlidos e (b) invlidos

7.6

Sntese

As estruturas de controle do fluxo de execuo so essenciais pare que se pode alterar a seqncia de execuo dos comandos de um programa em funo dados do mesmo. Um comando composto e um conjunto de zero ou mais comandos simples, sejam eles instrues primitives ou construes como as estuda neste captulo. Uma estrutura Seqencial e aquela em que os comandos vo se executados numa seqncia pr-estabelecida, um aps o outro. As estruturas de deciso permitem escolher qual o caminho a seguido num algoritmo em funo de uma ou mais condies. A construo utilize apenas uma condio, ao passo que a construo Escolha utiliza uma ou mais condies As estruturas de repetio so usadas quando se deseja repetir trecho de um algoritmo (comando composto). Quando o nmero de vezes que trecho ser repetido e conhecido diz-se que o lao e do tipo contado (construo Para). Quando este nmero no conhecido, mas e funo de uma determinada condio ento tm-se os laos condicionais (construo Enquanto e Repita). As construes Repita e Enquanto diferem uma da outra pelo fato de a primeira efetuar o teste da condio no final da construo e, portanto, executar o comando composto ao menos uma vez. Por outro lado, a construo Enquanto efetua o teste da condio em seu Incio e execute o comando composto zero ou mais vezes. Os aninhamentos podem usar qualquer uma das construes apresentadas neste captulo desde que atendam, a uma regra nica: a construo mais interna deve estar inteiramente contida na construo imediatamente mais externa.

7.6.1 Exerccios M
1. Dado um conjunto de n registros cada registro contendo um valor real, faa um algoritmo que calcule a mdia dos valores maiores que 4. 2. Dado uma relao de 100 carros escreva quantos so da cor azul. Sendo para cada carro tem-se uma ficha contento o nome e a cor. 3. Dado uma srie de 20 valores reais, faa uma algoritmo que calcule e escreva a mdia aritmtica destes valores, entretanto se a mdia obtida for maior que 8 dever ser atribuda 10 para a mdia. 4. Faa um algoritmo para somar os nmeros pares < 1000 e ao final escreva o resultado. 5. Dado um conjunto de 20 valores reais, faa um algoritmo que: a) Imprima os valores que no so negativos. b) Calcule e imprima a mdia dos valores < 0. 6. Suponha que para cada aluno de sua sala exista uma ficha contendo o nome e a idade do aluno. Supondo que exista 50 alunos, faa uma algoritmo que determine quantos alunos tem idade maior que 30. 7. Dado modelo, ano de fabricao, cor e placa de 1000 carros, faa um algoritmo que: a) Imprima quantos so, da cor verde e o percentual em relao ao total. b) Imprima quantos foram fabricados antes de 1990 e o percentual em relao ao total. c) Imprima quantos so FIAT UNO e o percentual em relao ao total. d) Imprima quantos carros tem na placa o digito 5 e o percentual em relao ao total. Considere placas com seguinte formato AANNNN. 8. Dado Nome e notas ( total de 6 ) de n alunos, faa um algoritmo que: 64

a) Imprima Nome e mdia dos alunos aprovados. Mdia > = 7.0. b) Imprima Nome e mdia dos alunos em recuperao. 5.0 >= Mdia <7.0. c) Imprima Nome e mdia dos alunos reprovados. Mdia <5.0. 9. Faa um algoritmo que simule um cronometro com horas, minutos e segundos. A simulao dever mostrar no vdeo o cronometro no seguinte formato HH: MM: SS. Inicialmente o cronometro ser zerado ( 00: 00: 00 ), sendo que os segundos comearo a ser incrementados, depois os minutos e depois as horas. Lembre-se que a cada 60 segundos os minutos devero ser incrementados, depois os minutos voltaro a zero. Quando as horas estiverem prestes a chegar em 25, o cronometro dever voltar a zero ( 00: 00: 00 ). 10. Dado Nome e salrio de um nmero indeterminado de funcionrios, escreva o Nome e o salrio de quem tem o maior salrio, bem como o Nome e o salrio que possui o menor salrio. 11. Um hotel cobra R$ 300,00 por diria e mais uma taxa adicional de servios. Se a diria for menor que 15 a taxa e de R$ 20,00. Se o nmero de dirias for igual a 15 a taxa de R$ 14,00 e se o nmero for maior que 15 a taxa de R$ 12,00. Considerando-se que se tenha 200 pessoas e para cada pessoa tenha-se um registro contendo seu nome e o nmero de dirias. Faa um algoritmo que imprima o nome e o total a pagar de cada pessoa e imprimir tambm o total ganho pelo hotel e o nmero total de dirias. 12. Dado que cada pessoa tenha o seu nome e a sua idade e o seu peso em uma ficha, faa uma algoritmo que: a) Imprimir o nome da pessoa cujo a idade esta na faixa de 20 a 30 anos inclusive os extremos; b) Calcule a idade mdia das pessoas com peso maior que 80 Kg, considere que exista N pessoas. 13. Faa um algoritmo que calcule o salrio e o imposto de renda de um grupo de pessoas, considerando: a) Para cada pessoa tem-se: Nome, Nmero de Dependentes, Renda Bruta Anual; b) O imposto calculado segundo a tabela abaixo: Renda Liquida % at R$ 10.000,00 isento > R$ 10.000,00 at R$ 30.000,00 5% > R$ 30.000,00 at R$ 60.000,00 10% > R$ 60.000,00 15% c) H um desconto de R$ 600,00 para cada dependente. d) Sendo que a renda liquida igual a renda bruta menos o abatimento de cada dependente. 14. O Departamento de transito do estado anotou dados de acidentes de transito no ltimo ano. Para cada motorista envolvido no acidente, tem-se as seguintes informaes: - Ano de nascimento; - Sexo (M - Masculino, F - Feminino) - Procedncia ( 0 - Capital, 1 - Interior, 2 - Outro estado); Faa um algoritmo que : a) Calcule a porcentagem de motoristas com menos de 21 anos; b) Calcule quantas mulheres so da capital; c) Calcule quantos motoristas do interior do estado tem idade maior que 60 anos; d) Verifique se existe alguma mulher com idade maior que 60 anos; R. 15 . Suponha que para cada tipo de computador fabricado, a SEI, tem os seguintes informaes: - Nome do computador; - O nome do fabricante; - e a sua capacidade de armazenamento; Faa um algoritmo que: a) Determine qual o valor da maior capacidade de memria; b) Determine quantos computadores diferentes a IBM fabrica; c) Verifique se tem algum computador chamado PS/1. Se tiver qual o seu fabricante; 16. Dado um conjunto N nmeros inteiros escreva quantos nmeros e mpares existem no conjunto.

65

17. Uma empresa possui um nmero indeterminado de clientes. Para cada cliente tem-se uma ficha contendo Nome, Estado Civil. Estado Civil um nmero codificado da seguinte forma: 1 Solteiro, 2 Casado, 3- Divorciado e 4 Vivo. A empresa deseja saber a quantidade de clientes para cada estado civil.

7.6.2 Exerccios N
1. Ler um LITERAL em forma de data. Exemplo : 26/09/95 e escrever o dia , ms e ano desta data todos em separados. 2. Dado uma relao de 100 literais no formato de data ( Exemplo "10/12/95" ), imprima aquelas que correspondem ao ms 09. 3. Dado um conjunto indeterminado de palavras , sendo que cada palavra possui um tamanho indeterminado, sendo que as mesmas sempre terminam com o caracter $, o qual dever ser lido pelo teclado , faa um algoritmo que imprima um relatrio como mostrado no Exemplo abaixo: Suponha que a palavra digitada foi MARIA. M A R I A A I R A M

4. Dado uma frase de exatamente 80 caracteres, escreva a frase de trs para frente, um caracter por linha. 5. Dado uma quantidade indeterminada de palavras, sendo que as mesmas sempre terminam com o caracter $, escreva o tamanho de cada uma das mesmas ( o sinal de $ no deve ser considerado na contagem ). 6. Dado uma palavra terminada com o sinal $, faa um algoritmo para criar uma nova literal, a ser formada com os caracteres da primeira palavra invertidos. 7. Dado uma relao de 100 literais no formato de data ( Exemplo "10/12/95" ), imprima um relatrio no seguinte formato: Data 26/09/95 Por Extenso 26 de setembro de 1995

8. Dados uma relao de n literais, todas terminadas com o caracter $, faa um algoritmo que escreva a literais e o seu tamanho. 9. Dado uma relao de n literais, todas terminadas com o caracter $, faa um algoritmo que imprima aquelas que tem tamanho par. 10. Dado uma relao de n literais, todas terminadas com o caracter $, faa um algoritmo que escreva as literais mpares cujo caracter central uma vogal. 11. Dado uma relao de n literais, todas terminadas com o caracter $, faa um algoritmo que imprima aquelas que so palndromes (Ex. ANA, ARARA, OTTO). 12. Faa um algoritmo para ter uma frase terminada em $. Aps a leitura identificar e escrever quantas letras A, E, I, O e U existem em separado. 13. Dado uma literal terminada com o caracter $ faa um algoritmo que imprima quantas vogais existem nesta literal. 14. Dado uma literal terminada com o caracter $ faa um algoritmo que imprima quantas Ocorrncias de cada vogal em separado existe nesta literal. 66

67

8.

Smbolos Usados em Fluxogramas

Terminal - O ponto de incio, trmino ou interrupo de um programa.

Direo do Fluxo - A direo do fluxo de dados ou de processamento.

Conexo - Uma entrada ou uma sada de ou para uma outra parte do fluxograma

Processamento - Um grupo de instrues que executam uma funo de processamento do programa.

Carto Perfurado - Todas as variedades de carto perfurado. Funo generalizada neste texto para indicar entrada de dados.

Documento - Documentos relatrios de todas as variedades. Funo generalizada neste texto para indicar sada de dados.

Deciso - Indica a possibilidade de desvios para diversos outros pontos do fluxograma, de acordo com situaes variveis.

Fita Magntica - Algum tipo de dispositivo de armazenamento seqencial.

68

Teclado de linha - Informao fornecida ou recebida de ou por um computador utilizando um dispositivo.

Entrada/Sada - Qualquer funo de um dispositivo de entrada/sada, fornecendo informaes para processamento, gravao, posicionamento da fita etc.

Entrada/Sada - Qualquer tipo de documento ou dados.

Fita Perfurada - Fita de papel ou plstico.

Acesso arbitrrio de disco ou de tambor.

Exibio - Informaes exibidas por dispositivos visuais.

Disco magntico - Dispositivo de disco magntico para armazenamento de dados

69

9.

Funes pr-definidas do Pascal

O Pascal , possui muitas funes/Rotinas pr-definidas, sendo que iremos estudar algumas das principais . Caso haja necessidade , o manual da linguagem Pascal pode, e deve, ser usado como fonte de pesquisa de outras funes. Dentre as Rotinas que iremos abordar, algumas necessitam que um comando especial seja colocado no incio do PROGRAMA. Tal comando mostrado abaixo: PROGRAM Teste; USES CRT; BEGIN <Comandos>; END. Obs.: As funes que necessitarem o comando especial mostrado acima tero colocados ao lado a palavra CRT.

9.1

Descrio das Funes/Rotinas:

Rotina : ABS() Funo : Retorna o valor absoluto de um valor numrico . Sintaxe : Resultado: =ABS(Valor) Exemplo: PROGRAM Teste; VAR X1 : REAL; X2 : INTEGER ; BEGIN X1: =ABS( -2.3 ); ( 2.3 ) X2: =ABS( -157 ); ( 157 ) END. Rotina : CHR() Funo : Retorna um caracter da tabela ASCII de acordo com um determinado valor numrico Sintaxe : Resultado: =CHR(Valor) Exemplo: PROGRAM Teste; VAR X1 : CHAR; BEGIN X1: =CHR( 65 ); ( A ) END.

70

Rotina : CLRSCR Funo : Limpa a tela de vdeo Sintaxe : CLRSCR Exemplo: PROGRAM Teste; USES CRT; BEGIN CLRSCR; END. Rotina : CONCAT() Funo : Concatena ( Junta ) uma seqncia de STRINGs Sintaxe : Resultado: =CONCAT( s1,s2,,sn) Exemplo: PROGRAM Teste; VAR s1,s2 : STRING; BEGIN s1: =CONCAT(Joo,Mineiro); s2: = CONCAT(ABC,DEFG,HIJ); END.

(Joo Mineiro ) (ABCDEFGHIJ)

Rotina : COPY() Funo : Copia n caracteres de uma STRING a partir de uma posio especfica Sintaxe : Resultado: =COPY(s1, posio , quantidade) Exemplo: PROGRAM Teste; VAR s1 :STRING; BEGIN s1: =COPY(ABCDEFGH,2,3); (BCD) END. Rotina : COS() Funo : Retorna o cosseno de um valor numrico Sintaxe : Resultado: = COS(Valor) Exemplo: PROGRAM Teste; VAR x : REAL; BEGIN x: =COS(10); END.

71

Rotina : DEC() Funo : Decrementa uma varivel numrica Sintaxe : DEC(Valor) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: =10; DEC(x) ; (9) END. Rotina : DELAY() ( CRT ) Funo : Interrompe o processamento por um nmero especificado de milisegundos Sintaxe : DELAY(Tempo) Exemplo: PROGRAM Teste; USES CRT; BEGIN DELAY(200); END. Rotina : DELETE () Funo : Deleta n caracteres de uma STRING, a partir de uma posio inicial Sintaxe : DELETE (s ,posio , quantidade) Exemplo: PROGRAM Teste; VAR s : STRING; BEGIN s: =Joo da Silva; DELETE (s,5,3); (Joo Silva) END. Rotina : EXP() Funo : Retorna e elevado a um determinado valor numrico Sintaxe : Resultado: =EXP(Valor) Exemplo: PROGRAM Teste; VAR x : REAL; BEGIN x: : =EXP(10); END.

72

Rotina : FRAC() Funo : Retorna a parte fracionria de um valor numrico Sintaxe : Resultado: =FRAC(Valor) Exemplo: PROGRAM Teste VAR x: REAL BEGIN x: =FRAC(2.345) ( 345 ) END Rotina : GOTOXY() ( CRT ) Funo : Posiciona o cursor no vdeo em uma determinada coluna ( x ) e linha ( y ) Sintaxe : GOTOXY( coluna, linha ) Exemplo: PROGRAM Teste; USES CRT; BEGIN GOTOXY(10,20); END. Rotina : INC() Funo : Incrementa uma varivel numrica Sintaxe : INC(Valor) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: =10; INC(x); (11) END. Rotina : INSERT () Funo : Insere uma STRING dentro de outra STRING a partir de uma determinada posio Sintaxe : INSERT (STRING_Fonte, STRING_Destino, posio ) Exemplo: PROGRAM Teste; VAR s : STRING; BEGIN s: =Joo Silva; INSERT (Da ,s,6); (Joo Da Silva) END.

73

Rotina : INT() Funo : Retorna a parte inteira de um valor numrico Sintaxe : REsultado : =INT(Valor) Exemplo: PROGRAM Teste; VAR x : REAL; BEGIN x: =INT(2.345); END.

(2)

Rotina : KEYPRESSED ( CRT ) Funo : Retorna TRUE se uma tecla foi pressionada, FALSE caso contrrio Sintaxe : KEYPRESSED Exemplo: PROGRAM Teste; USES CRT; BEGIN REPEAT UNTIL KEYPRESSED; END. Rotina : LENGTH() Funo : Retorna o nmero de caracteres de uma STRING Sintaxe : Resultado: = LENGTH(s) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: = LENGTH(Joo); END.

(4)

Rotina : LN() Funo : Retorna o logaritmo natural de um determinado valor numrico Sintaxe : Resultado: =LN(Valor) Exemplo: PROGRAM Teste; VAR x : REAL; BEGIN x: =EXP(LN(2)*3); (* 2**3 ( 8 ) *) END.

74

Rotina : ODD() Funo : Retorna TRUE se uma determinado valor numrico FOR impar, FALSE caso contrrio Sintaxe : Exemplo: PROGRAM Teste; VAR x : Boolean; BEGIN c: =odd(65); ( TRUE ) END. Rotina : ORD() Funo : Retorna qual o nmero na tabela ASCII de um determinado caracter Sintaxe : Resultado: =ORD(Caracter) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: =ORD(A); ( 65 ) END. Rotina : PI Funo : Retorna o valor de PI Sintaxe : Resultado: =PI Exemplo: PROGRAM Teste; VAR x : REAL; BEGIN x: =PI; ( 3.1415926535) END. Rotina : POS() Funo : Retorna a posio da primeira ocorrncia dos caracteres de uma STRING dentro de outra STRING Sintaxe : Resultado: =POS(Caracteres ,STRING_A_SER_PROCURADA) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: =POS(ABC,DEABCDFG); (3) END.

75

Rotina : READKEY ( CRT ) Funo : Faz a leitura de um caracter do teclado , no sendo necessrio pressionar ENTER Sintaxe : Resultado: =READKEY Exemplo: PROGRAM Teste; USES CRT; VAR tecla: CHAR; BEGIN tecla: =READKEY; END. Rotina : SIN() Funo : Retorna o seno de um valor numrico Sintaxe : Resultado: =SIN(Valor) Exemplo: PROGRAM Teste; VAR x : REAL; BEGIN x : = SIN(10); END. Rotina : SQR() Funo : Retorna um valor numrico elevado ao quadrado Sintaxe : Resultado: =SQR(Valor) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: =SQR(3); (9) END. Rotina : SQRT() Funo : Retorna a raiz quadrada de um valor numrico Sintaxe : Resultado: =str(Valor) Exemplo: PROGRAM Teste VAR x: INTEGER BEGIN x: =SQRT(9) (3) END

76

Rotina : STR() Funo : Converte um valor numrico para a sua representao em STRING Sintaxe : STR(Valor, STRING_Resultante ) Exemplo: PROGRAM Teste; VAR s : STRING; BEGIN STR(2.345,s); END. Rotina : TEXTBACKGROUND() ( CRT ) Funo : Altera a cor de fundo nas operaes de E/S Sintaxe : TEXTBACKGROUND(Cor) Exemplo: PROGRAM Teste; USES CRT; BEGIN TEXTBACKGROUND(0); TEXTBACKGROUND(1); TEXTBACKGROUND(2); TEXTBACKGROUND(3); TEXTBACKGROUND(4); TEXTBACKGROUND(5); TEXTBACKGROUND(6); TEXTBACKGROUND(7); END. Rotina : TEXTCOLOR() ( CRT ) Funo : Altera a cor das letras nas operaes de E/S Sintaxe : TEXTCOLOR(Cor) Exemplo: PROGRAM Teste; USES CRT; BEGIN TEXTCOLOR (0); TEXTCOLOR(1); TEXTCOLOR (2); TEXTCOLOR(3); TEXTCOLOR(4); TEXTCOLOR(5); TEXTCOLOR(6); TEXTCOLOR(7); END.

(Preto) (Azul) (Verde) (Ciano) (Vermelho) (Mangenta) (Marrom) (Cinza)

(Preto) (Azul) (Verde) (Ciano) (Vermelho) (Mangenta) (Marrom) (Cinza)

77

Rotina : TRUNC() Funo : Trunca um valor REAL para um valor Inteiro Sintaxe : Resultado: =TRUNC(Valor) Exemplo: PROGRAM Teste; VAR x : INTEGER ; BEGIN x: =TRUNC(2.345); END

(2)

Rotina : UPCASE() Funo : Converte um caracter minsculo para maisculo Sintaxe : Resultado: =UPCASE(Caracter) Exemplo: PROGRAM Teste; VAR x : CHAR; BEGIN x: =UPCASE(a); ( A ) END. Rotina : VAL() Funo : Converte uma STRING para a sua representao numrica Sintaxe : VAL(STRING_ORIGEM,VALOR_RESPOSTA,CODIGO_ERRO) Exemplo: PROGRAM Teste; VAR x, e : INTEGER; BEGIN VAL(12345,x,e); ( 12345 ) END.

78

10.

Problemas Resolvidos em Algoritmos, Pascal e C


Alguns Exemplos de problemas resolvidos em Algoritmos, Pascal e C.

10.1

Algoritmo do Triangulo

Faa um algoritmo para ler a base e a altura de um tringulo. Em seguida, escreva a rea do mesmo. Obs: rea = ( Base * Altura ) / 2 Em Algoritmo: Algoritmo Triangulo Var base, altura, area : real; Inicio Leia(Base) Leia(Altura) Area (Base * Altura)/2 Escreva (Area) Fim Em Pascal: program triangulo; var area, base, altura: real; begin { Entrada } write ('Digite a base: '); readln (base); write ('Digite a altura: '); readln (altura); { Calculos } area:= (base*altura)/2; { Saida} writeln ('A area do triangulo e: ',area:10:2); end. Em C: #include <stdio.h> main () { /* declaracao de variaveis */ float area,base,altura; /* Entrada de dados */ printf ("Digite base: "); scanf ("%f", &base) ; printf ("Digite altura: "); scanf ("%f", &altura); 79

/* Calculos */ area = (base*altura)/2; /* Resultados */ printf ("A area do triangulo e: %10.2f\n", area); }

10.2

Algoritmo Preco Automvel

O preo de um automvel calculado pela soma do preo de fbrica com o preo dos impostos (45% do preo de fbrica) e a percentagem do revendedor (28% do preo de fbrica). Faa um algoritmo que leia o nome do automvel e o preo de fbrica e imprima o nome do automvel e o preo final. Em Algoritmo: Algoritmo automovel Var Nome : literal Precofabrica, Precofinal, Imposto : real Inicio Leia (Nome, Precofabrica) Imposto Precofabrica * (0,45 + 0,28) Precofinal Precofabrica + Imposto Escreva (Nome, Precofinal) Fim. Em Pascal: program preco; var nome: string; Precofabrica, PrecoFinal, imposto : real; begin write ('Digite nome: '); readln (nome); write ('Digite preco de fabrica: '); readln (Precofabrica); Imposto := Precofabrica * (0.45 + 0.28); PrecoFinal := PrecoFabrica + imposto; writeln ('Automovel:', nome); writeln ('Preco de venda:', PrecoFinal:10:2); end. Em C: #include <stdio.h> main () { /* declaracao de variaveis */ char nome[60] ; float precofabrica, precofinal, imposto ; /* Entrada de dados */ printf ("Digite nome: "); scanf ("%s", &nome) ; 80

printf ("Digite preco de fabrica: "); scanf ("%f", &precofabrica); /* Calculos */ imposto = precofabrica *(0.45 + 0.28); precofinal = precofabrica + imposto; /* Resultados */ printf ("Automovel: %s\n", nome); printf ("Preco de venda: %10.2f\n", precofinal); }

10.3

Algoritmo Media Valor

Dado uma srie de 20 valores reais, faa uma algoritmo que calcule e escreva a mdia aritmtica destes valores, entretanto se a mdia obtida for maior que 8 dever ser atribuda 10 para a mdia. R. Algoritmo Serie Var Contador: Inteiro N,Soma, Media :Real Inicio Contador 0 Soma 0 Enquanto Contador < 20 faca Leia (N) Soma Soma + N Contador Contador + 1 Fim Enquanto Media Soma / 20 Se Media > 8 Entao Media 10 Fim Se Escreva (Media) Fim. Em Pascal: Program MEDIA_20; Uses crt; var conta:integer; media,num,soma:real; Begin Clrscr; conta := 0; soma := 0; Writeln ('Digite 20 nmeros'); While conta < 20 do Begin read (num); soma := soma + num; conta := conta + 1; End; media := (soma / 20); if media > 8 then 81

Writeln ('media =10'); else Writeln ('A media '); Writeln (media); End. Em C: #include<stdio.h> #include<conio.h> main() { float media,num,soma; int cont; soma=0; cont=0; clrscr(); printf("\nDigite 20 nmeros\n"); while (cont<20) { scanf("%f",&num); soma=soma+num; num=soma; cont++; } media=num/20; if (media > 8) { printf("Media igual a 10"); } else { printf("Media igual a: %2.2f\n",media); { } } return(0); }

10.4

Algoritmo 3 Menores
Faa um algoritmo que leia 3 nmeros inteiros e imprima o menor deles.

Em Algoritimo: Algoritmo Menor Var A, B, C, Menor : Inteiro Inicio Leia ( A,B,C) Se (A < B) E (A <C) Entao Menor A Senao Se B < C Entao Menor B Senao Menor C Fim se Fim se 82

Escreva (Menor) Fim. Em Pascal: Program MENOR_N; Uses crt; var n1,n2,n3,menor:integer; Begin Clrscr; Writeln ('Digite 3 valores'); Read (N1,N2,N3); If (N1<N2) And (N1<N3) Then menor:=N1 Else If (N2<N1) And (N2<N3) Then menor:=N2 Else menor:=N3 Writeln ('O menor valor '); Writeln (menor); End. Em C: #include<stdio.h> #include<conio.h> main() { int n1,n2,n3; clrscr(); printf("\nDigite 3 valores\n"); scanf("%d",&n1); scanf("%d",&n2); scanf("%d",&n3); if ((n1<n2) && (n1<n3)) { printf("\nO menor nmero :%d\n",n1); } else { if ((n2<n1) && (n2<n3)) { printf("\nO menor nmero :%d\n",n2); } else { printf("\nO menor nmero :%d\n",n3); } } return(0); }

10.5

Algoritmo Media Maior que 4

Dado um conjunto de n registros cada registro contendo um valor real, faa um algoritmo que calcule a mdia dos valores maiores que 4. 83

Em Algoritmo: Algoritmo Media Var N, Conta, Maior4 : Inteiro Soma, Media, Nmero :Real Inicio Conta 1 Maior4 0 Soma 0 Leia (N) Enquanto Conta < N Faa Leia (Nmero) Se Nmero > 4 Entao Soma Soma + Nmero Maior4 Maior4 + 1 Fim Se Conta Conta + 1 Fim Enquanto Media Soma / Maior4 Escreva (Media) Fim. Em Pascal: program maior4; uses CRT; var n, aux: integer; soma, media, nmero: real; begin Clrscr; write ('Digite valores diferentes de 999'); writeln; aux := 0; soma := 0; read (nmero); while nmero <> 999 do begin if nmero > 4 then begin soma:= soma + nmero; aux := aux + 1; end; read (nmero); end; media := (soma/aux); write ('MEDIA='); write (media); end. Em C: #include <iostream.h> #include <conio.h> main () { clrscr();

84

int n; float soma,media,nmero,aux; cout <<"digite valores diferentes de 999 -> "; cin >> nmero; aux =1; soma =0; while (nmero != 999) { if (nmero > 4) { soma = soma + nmero; aux =aux+1; } media = (soma/aux); cout << "\nEntre com o proximo ->"; cin >> nmero; } cout << media; return 0; }

10.6

Algoritmo Salrio

Uma empresa tem para um determinado funcionrio uma ficha contendo o nome, nmero de horas trabalhadas e o n0 de dependentes de um funcionrio. Considerando que: a) A empresa paga 12 reais por hora e 40 reais por dependentes. Sobre o salrio so feito descontos de 8,5% para o INSS e 5% para IR. Faa um algoritmo para ler o Nome, nmero de horas trabalhadas e nmero de dependentes de um funcionrio. Aps a leitura, escreva qual o Nome, salrio bruto, os valores descontados para cada tipo de imposto e finalmente qual o salrio lquido do funcionrio. Em Algoritmo: Algoritmo salario var nome : literal dependente : inteiro horas, salariol, salariob, DescontoI, DescontoR : real; Inicio Leia(nome,horas, dependente) salariob (12 * horas) + (40 * dependente) DescontoI (salariob*0,085) DescontoR (salariob*0,05) salariol (salariob - DescontoI, DescontoR) Escreva(nome,salarioB, DescontoI, DescontoR, salarioL) Fim. Em Pascal: Program Salario; Uses Crt; Var Nome:String; Numhora, Salbruto, Salliq:Real; Numdep:Integer; Begin Clrscr; Write ('Digite O Nome Do Funcionario:'); 85

Read (Nome); Writeln; Write ('Nmero De Horas Trabalhadas:'); Read (Numhora); Writeln; Write ('E Nmero De Dependentes:'); Read (Numdep); Writeln; Salbruto:=(12*Numhora)+(40*Numdep); Salliq:=Salbruto-((Salbruto*0.085)+(Salbruto*0.05)); Write ('Nome Do Funcionario:'); Write (Nome); Writeln; Write ('Salario Liquido:'); Write (Salliq); End. Em C: #include <iostream.h> #include <conio.h> #include <stdio.h> main () { clrscr(); int numdep; float numhora,salbruto,salliq; char nome[20]; cout << "Digite o nome do funcionario -> "; scanf ("%s", &nome); cout << "Nmero de horas trabalhadas -> "; scanf ("%f", &numhora); cout << "Nmero de dependentes -> "; scanf ("%f", &numdep); salbruto = (12*numhora)+(40*numdep); salliq = salbruto -((salbruto*0.085)+(salbruto*0.05)); cout << "\nNome do Funcionario: "<< nome; cout << "\nSalario Liquido: " << salliq; return 0; }

10.7

Algoritmo 50 Triangulos

1) Faa um algoritmo para ler base e altura de 50 tringulos e imprimir a sua rea. Em Algoritmo: Algoritmo Triangulo Var Contador: Inteiro Base, Haltura, Area :Real Inicio Contador 1 Enquanto Contador < 51 faca 86

Leia (Base Leia (Haltura) Area (Base * Haltura)/2 Escreva( Area) Contador Contador + 1 Fim Enquanto Fim. Em Pascal: program triangulo; uses crt; var base,altura,area:real; contador:integer; begin clrscr; contador:=1; while contador < 51 do begin writeln('Digite a Base'); read(base); writeln('Digite a Altura'); read(altura); area:=(base*altura)/2; write('Esta e a area do triangulo writeln (area); contador:=contador+1; end; repeat until keypressed; end. Em C: /*program triangulo*/ #include <stdio.h> main () { float base,altura,area; int contador = 1; while (contador < 51) { printf ("\nDigite a Base\n"); scanf ("%f",&base); printf ("\nDigite a Altura\n"); scanf ("%f",&altura); area=(base*altura)/2; printf ("\nA area do triangulo de nmero %d eh %f",area); contador++; } return (0); }

');

10.8

Algoritmo Media Menores

Dado um conjunto de 20 valores reais, faa um algoritmo que: 87

a) Imprima os valores que no so negativos. b) Calcule e imprima a mdia dos valores < 0. Em Algoritmo: Algoritmo Conjunto20 Var N, SomaMenor, MediaMenor : Real ContaMenor, Contador : Inteiro Inicio Contador 0 ContaMenor 0 SomaMenor 0 Enquanto Contador < 20 faca Leia(N) Se N >= 0 Entao Escreva (N) Senao SomaMenor SomaMenor + N ContaMenor ContaMenor + 1 Fim Se Contador Contador + 1 Fim Enquanto MediaMenor SomaMenor / ContaMenor Fim. Em Pascal: program nmeros; uses crt; var valor,media,soma:real; cont,contpos:integer; begin clrscr; cont:=1; while cont < 21 do begin writeln('Digite um valor real'); read(valor); if valor < 0 then begin media:=media+valor; contpos:=contpos+1; end else begin write (valor); writeln (' e um valor maior que Zero'); end; cont:=cont+1; end; media:=media/contpos; write ('O nmero de valores menores que Zero sao '); writeln (contpos); write ('A media do valores menores que Zero e '); writeln (media); repeat until keypressed; end.

88

Em C: /* nmeros */ #include <stdio.h> main() { float int

valor ,media; cont = 1, contpos= 0;

while (cont < 21) { printf ("\nDigite um valor real\n"); scanf ("%f", &valor); if (valor < 0) { media=media+valor; contpos++; } else { printf ("\n %f",valor); printf (" e um valor maior que Zero"); } cont++; } media = media / contpos; printf ("\nO nmero de valores menores que Zero eh %d",contpos); printf ("\nA media dos valores menores que Zero e %f",media); return (0); }

89

Você também pode gostar