Você está na página 1de 13

Captulo 1

1.2. ALGORITMOS EM PORTUGOL Como no item 1 ".... um algoritmo de forma geral, uma descrio passo a passo de como um problema pode ser solucionado. A descrio deve ser finita, e os passos devem ser bem definidos sem ambiguidades" [Terada] . A razo da existncia do algoritmo vem da dissonncia entre um estado desejado e aquele observado na realidade. Algoritmo no a soluo de um problema, mas o meio de obt-la. A resoluo de um problema envolve vrios parmetros que devem ser organizados atravs de alguma tcnica formal. As tcnicas de desenvolvimento estruturado de algoritmos, tem o objetivo de: Facilitar o desenvolvimento de algoritmos; Facilitar o seu entendimento pelos operadores; Antecipar a correo; Facilitar manuteno e modificaes; Permitir que o desenvolvimento seja feita por uma equipe de pessoas.

Uma tcnica formal afasta a possibilidade de uma ambiguidade. Ou seja, a partir de dadas condies iniciais a execuo do algoritmo ser realizada por um mesmo "caminho" (sequncia de aes), que deve resultar num mesmo estado final. Uma destas tcnicas o portugol. 1.3. PORTUGOL Portugol uma pseudolinguagem que permite ao programador pensar no problema em si e no no equipamento que ir executar o algoritmo. Devem ser considerados a sintaxe (em relao forma) e a semntica (em relao ao contedo ou seu significado). Em portugol a sintaxe definida pela linguagem e a semntica depende do significado que quer se dar ao algoritmo. No portugol e nas linguagens de programao, basicamente tm-se comandos e variveis que operacionalizam a execuo de um algoritmo. Estes comandos so

12

Captulo 1

executados sequencialmente, de forma que um comando s ser executado aps a finalizao do comando anterior. A estrutura de um algoritmo em portugol pode ser dada como: Exemplo: incio <declaraes de variveis> <comandos> fim

1.4. Variveis 1.4.1. Declarao de Variveis Uma varivel um local (rea na memria do computador) que armazena um tipo especfico de contedo. Uma varivel contm um valor que se modifica durante a execuo do programa. A varivel possui um identificador (nome), que pode ser representado da seguinte forma:

13

Captulo 1

1.4.1.1. Tipos de Variveis Variveis so componentes das linguagens de programao, que identificam os valores que esto sendo manipulados pelos programas. Uma varivel, como o prprio nome sugere, contm valores que variam de acordo com a execuo do programa. Uma varivel deve possuir um tipo especfico. As variveis em portugol, so divididas em 4 tipos principais, (embora na linguagem C existam modificaes para estes tipos principais). No portugol, os tipos bsicos de variveis so: Inteiro: Qualquer nmero inteiro (negativo, nulo ou positivo). Exemplo: -100, 0, 1, 2, 1250. Real : Qualquer nmero real, nulo ou positivo. Exemplo: -10, -1.5, 11.2, 0,1, 2, 50. Caracter: Caracteres alfanumricos. Exemplo: casa, Win31, 123, alfa#2, etc... Lgico: valor lgico verdadeiro ou falso Exemplo: x > y ? Exemplos: inteiro: valor; // a varivel valor do tipo inteiro real: media; // a varivel media do tipo real caracter: nome_aluno; // a varivel nome_aluno do tipo caracter lgico: maior; // a varivel maior do tipo booleano 1.4.1.2. Identificadore s de Variveis O identificador de uma varivel, se refere ao nome de como ela vai ser conhecida no programa. importante no esquecer que: a) No possvel definir variveis de diferentes tipos com o mesmo identificador (nome); O exemplo: real A; inteiro A; causaria erro na programao, mas pode ser

14

Captulo 1

usado real A1; inteiro A2; ou normalmente um nome mais significativo, como real media, inteiro valor, caracter nome, etc. b) Tomar alguns cuidados em relao sintaxe da linguagem, por exemplo, no possvel ter identificador como: caracter ?nome, real valor*, inteiro 1x, . c) .Letras maisculas e minsculas so tratadas de forma diferente, ento Media diferente de media, como tambm de MEDIA. Cada varivel definida no programa usa um local da memria, que acessada atravs do nome dado a varivel. O espao de memria ocupado pelo contedo da varivel, depende do tamanho destes tipos de dados, que variam de acordo com o tipo do processador a com a implementao do compilador. Como referncia inicial para este estudo sobre variveis, pode-se considerar pelo ANSI C, o seguinte: Exemplo: Pode-se supor a memria como uma matriz, como a figura abaixo, onde cada clula possui tamanho de 1 byte (8 bits): rea ocupada por outros programas. A B Tipo Inteiro com 2 bytes; Tipo real com 4 bytes; Tipo caracter com 1 byte;

Para armazenar o valor inteiro A= 1, necessita-se de 2 bytes (1 inteiro = 2 bytes na memria * ); Para armazenar o valor real B= 1, necessita-se de 4 bytes (1 real = 4 bytes na memria * ); * no C ANSI; no C++ Builder os tamanhos das variveis so diferentes.

15

Captulo 1

1.4.2 Constantes Uma constante um valor fixo, que no se modifica ao longo do tempo, durante a execuo do programa. Em algoritmos representaremos constantes pelo tipo const, constante ou #define (eventualmente, na elaborao dos algoritmos, alguns elementos da linguagem C podem ser escritos no algoritmo). Exemplo: const M 10;

1.5. Estrutura do Algoritmo em Portugol 1.5.1. Comando de Atribuio (<-) A sintaxe do comando dada por:

Exemplos: a) atribuio de um valor constante b) atribuio entre variveis inteiro valor; valor <- 10; inteiro valor; inteiro x <- 10; valor <- x; c) resultado de expresses: inteiro valor; inteiro x <- 10; y <- 5; valor <- x + y * 2; x, y; x;

16

Captulo 1

1.5.2. Operadores Aritmticos Os smbolos das operaes bsicas so: A multiplicao dada atravs do operador * (asterisco); Exemplo: z <- x * y; A soma realizada atravs do operador + ; Exemplo: z <- x + y; A subtrao dada atravs do operador -; Exemplo: z <- x - y; A diviso para real ser dada por / ; Exemplo: z <- x / y; A diviso para inteiro ser dada por div ; Exemplo: z <- x div y; O resto de uma diviso dada pelo comando mod . Exemplo: z <- x mod y; O clculo de xy dado pelo smbolo ^ . Exemplo: z <- x^y; A raiz de uma valor extrada atravs do comando raiz() . Exemplo: z <- raiz(x); Exemplos a) Desenvolva um algoritmo em portugol para somar dois valores inteiros (10 + 5)

inicio inteiro x,y,z; x = 10; y = 5; z fim <- x + y;

Reservar 3 espaos de memria do tipo inteiro, chamados x, y e z. Atribuio de valores iniciais s variveis.

O resultado da soma de x + y ser armazenado no espao de memria z

17

Captulo 1

Obs: O incoveniente deste algoritmo que sempre fornecer o mesmo resultado, o que no interessante. De maneira mais correta, os valores de x e y podem ser fornecidos pelo usurio, permitindo ao algoritmo que efetue a soma de dois nmeros quaisquer. Neste exemplo podemos observar que o resultado da soma de x + y ser armazenado em z. Como o usurio ficar sabendo da resposta ? necessrio usar comandos de escrita, para apresentar os resultados. 1.5.3. Entrada e Sada de Dados Na construo de algoritmos, conveniente que o usurio possa informar dados externos, para serem operados pelo programa. Assim, um programa pode receber um dado informado por um operador atravs de um comando de leitura. Da mesma forma, pode ser necessrio conhecer o resultado de determinada operao executada pelo computador, ento ser necessria uma forma de exibir os dados. Cada linguagem tem uma forma especfica para entrada e sada de dados. Em algoritmos usaremos os comandos genricos leia() e escreva(), para realizar a interface com o usurio. Exemplo: incio real A, B, C; leia(A); leia(B); c <- A + B; escreva(B); fim Apresenta a resposta (tela, impressora, arquivo, etc) L os valores fonecidos pelo usurio e armazena em A e B.

18

Captulo 1

1.5.4. Regras para escrever algoritmos em portugol Incluir comentrios pelo menos nas linhas mais importantes do programa; Usar nomes significativos para as variveis e constantes, que possam identificar o contedo; Grifar as palavras chaves do portugol; Alinhar os comandos facilita a legibilidade do algoritmo e reduz a possibilidade de erros. 1.5.5. Exerccios 1 Desenvolva um algoritmo em portugol para calcular xy . Os valores de x e y sero fornecidos pelo usurio do programa; 2 Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo usurio. [ V = 4 /3 R3 ] 3 Desenvolva um programa que transforme um valor de temperatura fornecido pelo usurio, de Farenheit ( F ) para Graus Celcius ( C ). [V = 5 /9 (F 32)] 4 Desenvolva um algoritmo para calcular a mdia entre 4 valores fornecidos pelo usurio. 5 Desenvolva um algoritmo para encontrar as razes de uma equao do tipo Ax2 + Bx + C. 1.6. Comandos de Controle Os comandos de controle permitem alterar a direo tomada por um programa (desvio), ou fazer com que partes especficas de um algoritmo seja executada mais de uma vez (loop). 1.6.1. Desvio Condicional Muitas vezes ser necessrio desviar a execuo do programa segundo uma condio. (Exemplo: ir a universidade de carro ou de nibus ?). Para se testar condies necessrio utilizar operadores lgicos e relacionais. 1.6.1.1. Operadores Lgicos

19

Captulo 1

Os operadores "e", "ou" e "no" permitem realizar a combinao lgica de variveis do tipo booleana (lgico). Para isto utilizam-se as tabelas verdade: Var1 Var2 V V F F V F V F E V F F F Var1 Var2 V V F F V F V F OU V V V F Var1 V F No F V

1.6.1.2. Operadores Relacionais Permitem realizar a comparao de contedos das variveis: A igualdade dada por A desigualdade dada por Maior que, pelo smbolo Menor que, pelo smbolo 1.6.1.3. Desvio Condicional Simples Para que a execuo de um algoritmo seja desviada para uma outra ao, necessrio um comando de desvio. Este comando dado pelas palavras reservadas se e fim se. Dentro deste bloco podemos ter vrios comandos de atribuio, operaes lgicas e aritmticas, e tambm novos blocos de desvio condicional. se (condio) ento lista de comandos... fim se =; <> ; >; <; Maior ou igual, pelo smbolo Menor ou igual, pelo smbolo No !; >=; <=;

20

Captulo 1

Desvio Condicional Simples incio inteiro A, B; A <- 100; B <- 20; se A > B ento A <- B; B <- 0; fim se fim Exerccios 1 Desenvolva um algoritmo em portugol para calcular xy . Os valores de x e y sero fornecidos pelo usurio do programa, e o maior valor deve estar em x e o menor em y; 2 Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo usurio. Observe que R no pode ser menor que 0 (zero). [ V = 4 /3 R3 ] . 3 Desenvolva um p rograma que transforme um valor de temperatura fornecido pelo usurio, de Farenheit ( F ) para Graus Celcius ( C ), ou Graus Celcius para Farenheit, de acordo com uma opo fornecida pelo usurio. [V = 5 /9 (F 32)] 4 Desenvolva um algoritmo para encontrar as razes de uma equao do tipo Ax2 + Bx + C. Observe que o valor de A no pode ser 0 (zero) e o valor do delta no pode ser menor que 0. 1.6.1.4. Desvio Condicional Composto Neste caso as condies, verdadeiro ou falso, podem gerar aes atravs de um nico comando de desvio condicional, adicionando-se o operador seno na estrutura condicional, como apresentado abaixo: se (condio) ento lista de comandos... seno lista de comandos... fim se

21

Captulo 1

Desvio Condicional Composto ... se A > B ento A <- B; B <- 0; seno B <- A; A <- 1; fim se ... Exerccios 1 Desenvolva um algoritmo que apresente como resposta se um valor inteiro fornecido pelo usurio par ou mpar; 2 Dado o grfico abaixo, testar se um valor T qualquer fornecido pelo usurio, pertence ao intervalo T0 T T1 . Dados T0 = 5, T1 = 10, V0 = 1, V1 = 2; V V1 V0 T0 T1 T

3 Dado o grfico do exerccio 2, desenvolva um algoritmo que apresente o valor de V para um dado valor de T, fornecido pelo usurio. 4 Modifique os exerccios 3 e 4 do item 2.5.1.3. composto, se for o caso. para utilizar um desvio condicional

22

Captulo 1

1.6.2. Laos de Repetio (loop) Uma sequncia de aes repetida por um nmero especfico de vezes, at que uma condio seja satisfeita. Enquanto a condio for verdadeira, as instrues sero executadas. O lao de repetio tambm pode ser chamado de loop. Exemplo 1: Durante uma semana, um ms, etc, vc pode realizar a mesma seqncia de aes, como no exemplo: 1 Dia Acordar levantar tomar caf pegar o nibus Ou pegar o carro 2 Dia Acordar levantar tomar caf pegar o nibus Ou pegar o carro chegar ao destino chegar ao destino

. . .
N simo Dia Acordar levantar tomar caf pegar o nibus Ou pegar o carro chegar ao destino

Como as aes se repetem durante um perodo ou at que um evento ocorra (chegar ao fim de semana) , pode-se melhorar escrita da sequncia do exemplo acima, como:

23

Captulo 1

Exemplo 2: Enquanto ( no chegar ao fim de semana) faa Acordar levantar tomar caf pegar o nibus Ou pegar o carro Exemplo 3: Enquanto ( dia < N) faa Acordar levantar tomar caf pegar o nibus Ou pegar o carro Ento, pode-se observar que as construes dos exemplos 2 e 3, representam as N repeties do exemplo 1. Em termos prticos da programao, a forma dos exemplos 2 e 3, de escrever aes que se repetem, so corretas. A forma de escrever as aes do exemplo 1 que se repetem incorreta, apesar de levar o mesmo resultado, pois imagine reescrever as mesmas aes para 365 dias, ou mais... 1.6.2.1. Comando: enquanto/faa Em portugol, escreve-se o comando enquanto / faa, da forma apresentada abaixo. Note que se forma um bloco de comandos, delimitado ente o incio e o fim do loop. Veja o exemplo: A condio se refere a um critrio de parada do loop, ou seja, at quando o loop vai ser executado. Um ou mais comandos que sero executados enquanto a condio for verdadeira. chegar ao destino chegar ao destino

enquanto (condio) faa ... lista de comandos; ... fim enquanto

24

Você também pode gostar