• Nenhum resultado encontrado

Um bloco de comandos ´e um conjunto de instruc¸˜oes que vai ser considerado como sendo um comando ´unico. Desta forma, ´e poss´ıvel compor estruturas, como no caso do comando if, envolvendo mais comandos. Um bloco de comandos ´e definido pelas palavras begin e end.

begin Comando1; Comando2; Comando3; .. . end

Aqui parece ser o momento para apresentar mais uma pr´atica de programac¸˜ao estruturada. Sempre que um comando atuar sobre um bloco de comandos, dispomos este bloco de comandos deslocados mais a direita. Os comandos dentro de um bloco, entre begin e end estar˜ao alinhados e tamb´em estar˜ao deslocados mais a direita. Isto facilita muito a visualizac¸˜ao da atuac¸˜ao de cada comando.

program maximo3; vara,b: integer; begin

write(’Entre com o primeiro n´umero: ’); readln(a); write(’Entre com o segundo n´umero: ’); readln(b); if(a > b)

then begin

writeln(’O maior est´a na vari´avel a’); writeln(’O maior ´e ’,a)

end else

begin

writeln(’O maior esta na vari´avel b’); writeln(’O maior ´e ’,b)

end end.

Exemplo 3.2 No exemplo seguinte apresentamos um programa que lˆe os coeficientes de uma equac¸˜ao de segundo grau,a, b e c (equac¸˜ao ax2+ bx + c = 0), e imprime as raizes desta equac¸˜ao (se existir).

program equacaosegundograu; vara, b, c: real;

varx1, x2, delta: real; begin

writeln(’Programa para resolver uma equac¸˜ao de segundo grau.’); writeln(’Equac¸˜ao na forma: a*x*x + b*x+c = 0’);

write(’Entre com o valor de a (diferente de zero): ’); readln(a); write(’Entre com o valor de b: ’); readln(b);

write(’Entre com o valor de c: ’); readln(c); delta := b ∗ b − 4 ∗ a ∗ c; if(delta >= 0) then begin x1 := (−b + sqrt(delta))/(2 ∗ a); x2 := (−b − sqrt(delta))/(2 ∗ a);

writeln(’O valor de x1 = ’,x1,’ e o valor de x2 = ’,x2); end

else

writeln(’n˜ao ´e poss´ıvel calcular raizes reais para esta equac¸˜ao’); end.

3.4 Comando Case

O comando case ´e um comando que permite selecionar um conjunto de operac¸˜oes conforme uma express˜ao de resultado escalar. Neste comando o resultado escalar ´e usado para selecionar um comando ou bloco de comandos atrav´es de v´arias listas de escalares constantes. No m´aximo uma lista pode contemplar o resultado. Os valores das listas podem ser tanto de valores escalares como faixas de valores de escalares. Al´em disso, todos os valores das listas devem ser disjuntos (sem intersec¸˜oes). Se o valor escalar ´e igual ao valor (ou est´a dentro de uma faixa) de uma lista ent˜ao os comandos associados a ela s˜ao executados.

A seguir apresentamos a sintaxe do caso onde n˜ao definimos comandos para o caso de n˜ao haver corres- pondˆencia com os valores escalares de cada caso.

case (Express˜ao Escalar) of

Lista Constantes Escalares1: Comando ou Bloco de Comandos1; Lista Constantes Escalares2: Comando ou Bloco de Comandos2;

.. .

Lista Constantes EscalaresK: Comando ou Bloco de ComandosK; end

A sintaxe para a situac¸˜ao onde definimos comandos para o caso onde n˜ao h´a correspondˆencia com os valores escalares de cada caso ´e apresentada a seguir:

case (Express˜ao Escalar) of

Lista Constantes Escalares1: Comando ou Bloco de Comandos1; Lista Constantes Escalares2: Comando ou Bloco de Comandos2;

.. .

Lista Constantes EscalaresK: Comando ou Bloco de ComandosK; else ComandoE1; ComandoE2; .. . ComandoEE; end

Cada Lista Constantes Escalares pode ser uma seq¨uˆencia de escalares ou faixas de escalares separados por v´ırgula.

Exemplo 3.3 O seguinte programa mostra um exemplo de uso do comando case. program exemplo;

var c: char; begin

write(’Entre com um caracter: ’); readln(c);

case c of

’A’..’Z’,’a’..’z’:

writeln(’Caracter lido ´e letra.’); ’0’..’9’: begin

writeln(’Caracter lido ´e d´ıgito.’); writeln(’i.e., um caracter em [0,9].’); end;

’+’,’-’,’*’,’/’:

writeln(’Caracter ´e um operador matem´atico.’); ’$’: writeln(’Caracter ´e o s´ımbolo $.’);

else

writeln(’O caracter lido n˜ao ´e letra, nem digito.’);

writeln(’nem operador matem´atico e nem ´e o s´ımbolo $.’); end;

Exemplo 3.4 O seguinte programa mostra um exemplo de menu implementado com o comando case. Program ExemploMenu;

var Opcao : char; begin

{ Escolha de uma opc¸˜ao do Menu }

writeln(’Entre com uma opc¸˜ao do menu abaixo: ’);

writeln(’[1] - Inserir dados de aluno novo no cadastro.’); writeln(’[2] - Remover aluno do cadastro.’);

writeln(’[3] - Alterar os dados de um aluno.’); writeln(’[4] - Sair do sistema de cadastro.’); write(’Opcao: ’); readln(Opcao); writeln;

case Opcao of ’1’: begin

writeln(’Inserir Funcion´ario.’); writeln(’Opc¸˜ao a ser implementada.’); end;

’2’: begin

writeln(’Remover Funcion´ario.’); writeln(’Opc¸˜ao a ser implementada.’); end;

’3’: begin

writeln(’Alterar Funcion´ario.’); writeln(’Opc¸˜ao a ser implementada.’); end;

’4’: writeln(’Fim da execuc¸˜ao do sistema.’); else

writeln(’Opc¸˜ao inv´alida.’); end;{ case }

writeln; end.

3.5 Exerc´ıcios

1. Escreva um programa que determina a data cronologicamente maior de duas datas fornecidas pelo usu´ario. Cada data deve ser fornecida por trˆes valores inteiros onde o primeiro representa um dia, o segundo um mˆes e o terceiro um ano.

2. Fac¸a um programa que lˆe uma medida em metros e escreve esta medida em polegadas, p´es, jardas e milhas. Obs.:

1 polegada = 25.3995 mil´ımetros 1 p´e = 12 polegadas 1 jarda = 3 p´es

1 milha = 1760 jardas

3. Sabendo que o valor num´erico de uma letra na codificac¸˜ao ASCII ´e dada pela func¸˜ao ord, fac¸a um programa que leia uma letra e escreva a codificac¸˜ao em hexadecimal desta letra.

Exemplo: Suponha que a letra a ser lida ´e a letra ’m’. A func¸˜ao ord(’m’) retorna o valor 109 e o programa deve imprimir: 6D. Note que6 · 161+ D · 160 = 109, onde D em hexadecimal ´e igual a 13 em decimal.

4

Estruturas de Repetic¸˜ao

As estruturas de repetic¸˜ao permitem que um comando ou bloco de comandos seja executado repetidas vezes. Os comandos que veremos diferem principalmente na forma como estas repetic¸˜oes s˜ao interrompidas.

4.1 Comando For

O comando For permite que um comando ou bloco de comandos seja repetido um n´umero espec´ıfico de vezes. Neste comando uma vari´avel de controle ´e incrementada ou decrementada de um valor inicial em cada iterac¸˜ao at´e um valor final.

A sintaxe do comando for que incrementa a vari´avel de controle ´e dada como:

for vari´avel de controle := express˜ao 1 to express˜ao 2 do Comando ou bloco de comandos; Para a forma que decrementa a vari´avel de controle, temos a seguinte sintaxe:

for vari´avel de controle := express˜ao 1 downto express˜ao 2 do Comando ou bloco de comandos; Na figura 15 apresentamos o fluxograma de uma das formas do comando for.

Comando ou Bloco de Comandos VC := VC + 1; Comando ou Bloco de Comandos {VC = Variável de Controle} {VI = Valor Inicial}

{VF = Valor Final} Condição VC:=VI; VC>VF false true For VC := VI to VF do {OBS:}

Figura 15: Fluxograma e sintaxe de uma forma do comando for.

Exemplo 4.1 Fac¸a um programa para calcular o fatorial de um n´umero lido pelo teclado. program fat;

var n,i,fatorial :integer; begin

write(’Entre com um n´umero: ’); readln(n);

fatorial := 1; for i:=2 to n do

fatorial:=fatorial ∗ i;

writeln(’O fatorial de ’,n,’ ´e igual a ’,fatorial); end.

Exemplo 4.2 Fac¸a um programa que lˆe um valor inteiro positivon e em seguida lˆe uma seq¨uˆencia de n valo- res reais. O programa deve imprimir o maior valor da seq¨uˆencia.

program Maximo; var n,i : integer; x : real; maximo : real; begin

ReadLn(n); {Sup˜oe todos os dados n˜ao negativos.} maximo := 0.0

for i:=1 to n do begin

ReadLn(x);

if x>maximo then maximo := x end;

WriteLn(maximo) end.

Exemplo 4.3 (Tabuada) Fac¸a um programa que imprima uma tabela, com 9 linhas e 9 colunas. Na intersec¸˜ao da linhai com a coluna j deve conter um valor que ´e a multiplicac¸˜ao do i com j. Isto ´e, o programa deve imprimir uma tabela da seguinte forma:

1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 program ProgramaTabuada; var i,j : integer;

begin for i:=1 to 9 do begin for j:=1 to 9 do write(i∗j:3); writeln; end; end.

Exerc´ıcio 4.1 (Tabela de potˆencias) Fac¸a um programa que lˆe dois inteiros positivosn e k e imprime uma tabela de tamanhon × k onde a posic¸˜ao (i, j) da tabela cont´em o n´umero ij.

x x2 x3 x4 x5 1 1 1 1 1 2 4 8 16 32 3 9 27 81 243 4 16 64 256 1024 5 25 125 625 3125 6 36 216 1296 7776

Exemplo 4.4 (Triˆangulo de Floyd) O seguinte triˆangulo formado por6 linhas de n´umeros consecutivos, cada linha contendo um n´umero a mais que na linha anterior, ´e chamado de Triˆangulo de Floyd.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

Fac¸a um programa que imprime o Triˆangulo de Floyd comn linhas (o valor de n ´e lido). program Floyd;

var i : integer; {´ındice da linha} j : integer; {´ındice da coluna} k : integer; {pr´oximo n´umero} m : integer; {n´umero de linhas} begin ReadLn(m); k := 0; for i:=1 to m do begin for j:=1 to i do begin k := k+1; Write(k:3) end; WriteLn end end.

Exerc´ıcio 4.2 Fac¸a um programa que lˆe um inteiro positivon e imprime um triˆangulo constitu´ıdo por n´umeros com o seguinte formato.

6 5 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1

4.2 Comando While

O comando while permite repetir a execuc¸˜ao de um comando ou bloco de comandos enquanto a condi’˜ao estiver satisfeita. Tal condic¸˜ao ´e sempre testada antes do comando ou bloco de comandos a ser repetido. Na figura 16, apresentamos o fluxograma e a sintaxe do comando While.

Comando ou Bloco de Comandos Comando ou Bloco de Comandos While (C) do C false true Condição

Figura 16: Fluxograma e sintaxe da rotina While.

Exemplo 4.5 (Validac¸˜ao de entrada) Em determinado momento, um programa deve ler a partir do teclado um n´umero que deve estar necessariamente no intervalo[10, 50]. Fac¸a um programa que fique lendo n´umeros do teclado e pare quando o usu´ario entrar com o primeiro n´umero entre[10, 50].

program Validacao; var n:integer; begin

write(’Entre com um n´umero no intervalo [10,50]: ’); readln(n); while ((n<10) or (n>50)) do begin

writeln(’ERRO: N´umero inv´alido.’);

write(’Entre com um n´umero no intervalo [10,50]: ’); readln(n); end;

writeln(’O n´umero positivo lido foi: ’,n); end.

Exemplo 4.6 Fac¸a um programa que leia uma quantidade n, (vamos supor que n ≥ 0) e em seguida o programa deve lern idades inteiras e ent˜ao deve imprimir a m´edia das idades lidas.

program MediaIdades; var x,soma,lidos,n : integer; begin

write(’Entre com a quantidade de idades a ler: ’); readln(n);

lidos:=0; soma := 0;

while (lidos<n) do begin

write(’Entre com uma idade: ’); readln(x);

soma := soma + x; lidos := lidos + 1; end;

if (lidos>0) then writeln(’A m´edia das idades ´e ’,soma/lidos) else writeln(’N˜ao foi lido nenhuma idade.’);

Exemplo 4.7 O c´alculo da raiz quadrada de um n´umero positivon pode ser aproximado usando se a seguinte s´erie: n2 = 1 + 3 + 5 + · · · + (2 · n − 1) = n X k=1 (2 · k − 1)

Sen ´e um quadrado perfeito, ent˜ao podemos calcular a raiz usando-se o seguinte c´odigo: ...

readln(n);

soma := 0; i := 1; raiz := 0; while soma<>n do begin

soma := soma+i; i := i+2; raiz := raiz+1 end; writeln(raiz); ...

Cason n˜ao seja um quadrado perfeito podemos obter uma aproximac¸˜ao considerando a parte inteira da raiz. Sejar = ⌊n⌋. Ent˜ao r2 ≤ n < (r + 1)2Fazendo duas modificac¸˜oes no trecho acima:

...

readln(n);

soma := 0; i := 1; raiz := 0;

while soma<=n do begin { <======= } soma := soma+i; i := i+2; raiz := raiz+1; end; raiz := raiz−1; { <======= } writeln(raiz); ...

Note que a atribuic¸˜ao raiz:=raiz-1; foi feita para voltar o valor da raiz de uma unidade, uma vez que a condic¸˜ao de parada do comando while ´e soma<=n; . Uma vers˜ao que atualiza a vari´avel soma com atraso ´e apresentada a seguir:

...

readln(n);

soma := 0; i := 1; raiz := −1; {atraso na soma} while soma<=n do begin

soma := soma+i; i := i+2; raiz := raiz+1; end; writeln(raiz); ...

Exerc´ıcio 4.3 Fac¸a um programa para calcular a raiz aproximada, como no exemplo 4.7, mas usando o comando repeat em vez do comando while.

Exerc´ıcio 4.4 Para calcular a raiz quadrada den com uma casa decimal basta calcular a raiz de 100·n como no exemplo 4.7, e dividir o resultado por 10. Fac¸a um programa que calcula a raiz de um valorn (n ≥ 0)

4.3 Comando Repeat

O comando repeat permite repetir comandos at´e que uma condic¸˜ao seja satisfeita. Tal condic¸˜ao ´e sempre testada no fim do bloco de repetic¸˜ao. Note que neste comando n˜ao ´e preciso usar begin e end para especificar os v´arios comandos a serem repetidos, pois as palavras repeat e end j´a delimitam o conjunto de comandos a serem repetidos. Na figura 17, apresentamos o fluxograma e a sintaxe do comando Repeat.

Comandok Comando2 Comando1 Repeat Comando2 Until (C); Comandok Comando1 C Condição true false

Figura 17: Fluxograma e sintaxe do comando Repeat.

Exemplo 4.8 (Validac¸˜ao de entrada) Em determinado momento, um programa deve ler a partir do teclado um n´umero que deve estar necessariamente no intervalo[10, 50]. Fac¸a um programa que fique lendo n´umeros do teclado e pare quando o usu´ario entrar com o primeiro n´umero entre[10, 50].

program Validacao; var n:integer; begin

repeat

write(’Entre com um n´umero no intervalo [10,50]: ’); readln(n); if ((n<10) or (n>50)) then writeln(’ERRO: N´umero inv´alido.’);

until (n>=10) and (n<=50);

writeln(’O n´umero positivo lido foi: ’,n); end.

Exemplo 4.9 A seguir apresentamos a implementac¸˜ao do Algoritmo de Euclides usando o comando repeat. program Euclides;

var x,y,r,m,n : integer; begin Readln(m,n); x := m; y := n; repeat r := x mod y; x := y; y := r until r=0; Writeln(x) end.

Exemplo 4.10 (Seq¨uˆencia de n´umeros positivos) Fac¸a um programa para ler uma seq¨uˆencia de n´umeros positivos (pode ser vazia) e seguido pela leitura de um n´umero negativo. O programa deve parar de ler n´umeros quando o usu´ario entrar com o n´umero negativo. O programa deve imprimir a soma, m´edia e quantidade dos n´umeros n˜ao negativos.

program SequenciaPositivos2; var x,soma : real;

nelementos : integer; begin

soma := 0; nelementos := 0; repeat

write(’Entre com um n´umero: ’); readln(x); if (x>=0) then begin

soma := soma + x;

nelementos := nelementos + 1; end;

until (x<0);

if (nelementos>0) then begin

writeln(’A soma dos elementos ´e: ’,soma);

writeln(’A media dos elementos ´e: ’,soma/nelementos); writeln(’A quantidade de elementos ´e: ’,nelementos); end

else writeln(’N˜ao foi lido nenhum elemento positivo.’); end.

Exemplo 4.11 A raiz quadrada de um n´umero positivox pode ser calculada pelo seguinte m´etodo de aproximac¸˜oes. As aproximac¸˜oesx1, x2, . . . s˜ao tais que limi→∞xi =√x, onde

xi= ( 1, se i = 1, (xi −1) 2 +x 2xi1 , caso contr´ario.

Fac¸a um programa que calcula a raiz de um n´umero atrav´es deste m´etodo parando quando a diferenc¸a entre o n´umeron e (xi)2 ´e no m´aximo0,00001.

program raizquadrada; var i : integer;

x, raiz, quadrado : real; begin

write(’Entre com um n´umero: ’); readln(x);

raiz := 1; repeat

quadrado := sqr(raiz);

raiz := (quadrado + x)/(2∗raiz); until (abs(x−quadrado) < 0.000001);

writeln(’A raiz de ’,x:20:10,’ ´e ’,raiz:20:10); end.

Exemplo 4.12 Fac¸a um programa que escreve individualmente os d´ıgitos de um n´umero inteiro positivo da direita para a esquerda.

program Digitos1; var n,d : Integer; begin

write(’Entre com um n´umero inteiro positivo: ’); Readln(n); repeat d := n mod 10; n := n div 10; Write(d:2) until n=0; writeln; end.

Exerc´ıcio 4.5 Fac¸a um programa que escreve individualmente os d´ıgitos de um n´umero inteiro positivo da esquerda para a direita.

Exemplo 4.13 O valorπ pode ser calculado atrav´es da s´erie π = 41 43 +45 47 + 49 − · · ·. Cada termo desta s´erie tem um formato(−1 )k+1 ·2k−14 ,k = 1, 2, . . .. A medida que k cresce, o termo vai se tornando cada vez menor, e sua contribuic¸˜ao para o valor deπ se torna menor. Fac¸a um programa que calcula o valor deπ atrav´es da s´erie acima, somando termo a termo, parando quando a diferenc¸a absoluta entre o valor de π calculado em uma iterac¸˜ao e o valor de π calculado na iterac¸˜ao anterior for menor que 0, 0001.

program pi;

var pi,piant,termo,sinal : real ;

i : integer; begin pi := 0; i := 1; sinal := −1; termo := 4; repeat piant := pi; pi := pi + termo; i := i+2; termo := sinal∗4/i; sinal := sinal∗(−1);

until abs(pi−piant) < 0.00001; writeln(’pi = ’,pi);

end.

Exerc´ıcio 4.6 Um programa deve ler um inteiro positivon e em seguida ler mais n valores reais sendo que o programa deve imprimir a soma, a m´edia, o menor valor e o maior valor dosn valores reais lidos. Fac¸a trˆes vers˜oes deste programa, usando os comandos while, repeat e for.

4.4 Exerc´ıcios

1. Fac¸a um programa que descubra um n´umero entre0 e 1000 imaginado pelo usu´ario. O programa deve fazer iterac¸˜oes com o usu´ario. A cada iterac¸˜ao, o programa deve tomar um n´umero e perguntar para o usu´ario se este n´umero ´e igual, menor ou maior do que o valor imaginado. O usu´ario deve responder de forma correta. A execuc¸˜ao do programa deve terminar assim que o programa ”adivinhar”o valor imaginado pelo usu´ario. O programa deve imprimir o n´umero imaginado e o n´umero de perguntas feitas pelo programa. Seu programa n˜ao pode fazer mais que 10 perguntas.

2. Fac¸a um programa que leia uma seq¨uˆencia de n´umeros inteiros positivos e termine com um n´umero negativo (este ´ultimo n˜ao deve ser considerado, serve apenas para finalizar a seq¨uˆencia). O programa deve verificar se os n´umeros positivos:

(a) Est˜ao em ordem crescente. (b) Est˜ao em ordem decrescente.

(c) Se a seq¨uˆencia ´e uma progress˜ao aritm´etica, neste caso dizer a raz˜ao. (d) Se a seq¨uˆencia ´e uma progress˜ao geom´etrica, neste caso dizer a raz˜ao.

3. O desvio padr˜ao dp e a variˆancia var dos n´umerosx1, . . . , xnpodem ser calculados usando as seguintes f´ormulas dp(x1, . . . , xn) = v u u u t 1 n − 1   n X i=1 x2i 1 n n X i=1 xi !2  var(x1, . . . , xn) = (dp(x1, . . . , xn))2.

Fac¸a um programa que lˆe o valor n e a seq¨uˆencia dos n n´umeros reais e depois imprime a m´edia, o desvio padr˜ao e a variˆancia dosn n´umeros lidos.

Obs.: O desvio padr˜ao tamb´em pode ser obtido atrav´es da f´ormula

dp(x1, . . . , xn) = v u u t 1 n − 1 n X i=1 (xi− X)2,

ondeX ´e a m´edia dos n´umeros x1, . . . , xn. Mas note que o c´alculo do desvio padr˜ao, atrav´es desta f´ormula, exige o c´alculo pr´evio da m´edia e portanto os n´umeros devem estar todos dispon´ıveis ao mesmo tempo, na mem´oria do computador, para o c´alculo do desvio padr˜ao.

4. Um banco faz empr´estimos com uma taxa de juros mensal igual at, 0 < t ≤ 1. Fac¸a um programa que imprime quanto uma pessoa que toma emprestadoq reais ficar´a devendo ap´os m meses. Os valores de q, t e m s˜ao lidos.

5

Desenvolvendo Programas

5.1 Simulac¸˜ao de programas

Uma simulac¸˜ao de um programa nada mais ´e que simular o comportamento de um programa em um computa- dor. As simulac¸˜oes que faremos tem por objetivo verificar se o programa est´a realmente correto ou encontrar o erro de um programa incorreto.

´

E aconselh´avel que se fac¸a sempre uma simulac¸˜ao do programa antes de implement´a-lo no computador. Isto permitir´a que o programador possa tratar poss´ıveis erros no momento em que estiver projetando o pro- grama e saber como consert´a-lo mais facilmente uma vez que as id´eias e estrat´egias usadas no desenvolvimento do programa estar˜ao mais “frescas” em sua mem´oria.

Muitos compiladores que integram ambientes de editorac¸˜ao possibilitam a execuc¸˜ao de um programa passo a passo e a observac¸˜ao de todo o processamento dos dados existentes na mem´oria. Com isso, as simulac¸˜oes podem ser feitas diretamente neste software integrado. Outros compiladores podem inserir informac¸˜oes dentro do c´odigo execut´avel do programa contendo as informac¸˜oes necess´arias para se fazer uma execuc¸˜ao passo a passo no programa fonte.

Para fazer uma simulac¸˜ao em papel, precisamos ter o programa e uma “mem´oria” em papel. Nesta simulac¸˜ao vocˆe estar´a desempenhando o papel da CPU acompanhando o programa e processando os dados que est˜ao na mem´oria de papel. A seguir iremos descrever como fazer esta simulac¸˜ao.

Primeiramente, descreva uma tabela, colocando na primeira linha os nomes de todas as vari´aveis declaradas no programa, como apresentado abaixo. Caso seja uma func¸˜ao ou procedimento (veja sec¸˜ao 7) n˜ao esquec¸a de colocar tamb´em os parˆametros declarados nestas rotinas.

Vari´avel-1 Vari´avel-2 · · · Vari´avel-K Parˆametro-1 · · · Parˆametro-M

Em seguida coloque os valores iniciais destas vari´aveis e parˆametros. Caso n˜ao tenha sido atribu´ıdo nenhum valor a elas, coloque a palavra lixo (j´a que ´e um valor que vocˆe desconhece). No caso de parˆametros, coloque os valores que foram passados como parˆametros (alguns podem ser lixo tamb´em). Qualquer operac¸˜ao que utilize o valor lixo tamb´em resulta em lixo.

Vari´avel-1 Vari´avel-2 Vari´avel-3 Parˆametro-1 Parˆametro-2

lixo lixo lixo valor-param1 lixo

Vamos fazer a simulac¸˜ao de um programa para ler uma seq¨uˆencia de n´umeros inteiros n˜ao negativos terminada com um n´umero inteiro negativo. O programa deve imprimir a soma e quantidade dos n´umeros n˜ao negativos.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’);

12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

Marcaremos o comando que acabou de ser executado com uma marca→ (inicialmente marcado no begin do bloco de comandos do programa principal). Vamos supor que a entrada ´e a seq¨uˆencia: 1,2,3,-1.

1. program Sequencia; 2. var x,soma,n : integer; → begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

In´ıcio da Simulac¸˜ao Seq¨uˆencia a testar: 1,2,3,-1

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); → readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo 1

Execuc¸˜ao dos passos 4 e 5. Leitura do valor 1.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; → n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0 Execuc¸˜ao dos passos 6 e 7. Inicializac¸˜ao de Soma e n. 1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; → while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0

Teste da condic¸˜ao do while.

Elemento lido ´e≥ 0 ? 1 ≥ 0 ?

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; → n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0

1 1 Execuc¸˜ao dos

passos 9 e 10.

Acumular valor em Soma. Incrementarn.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); → readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0 2 1 1 Execuc¸˜ao dos passos 11 e 12. Leitura do valor 2. 1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; → while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0

2 1 1 Teste da condic¸˜ao

do while.

Elemento lido ´e≥ 0 ? 2 ≥ 0 ?

Sim. Entrar no loop.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; → n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0

2 1 1

3 2

Execuc¸˜ao dos passos 9 e 10.

Acumular valor em Soma. Incrementarn.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); → readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0

2 1 1

3 3 2 Execuc¸˜ao dos

passos 11 e 12. Leitura do valor 3.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; → while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0

2 1 1

3 3 2

Teste da condic¸˜ao do while.

Elemento lido ´e≥ 0 ? 3 ≥ 0 ?

Sim. Entrar no loop.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; → n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0 2 1 1 3 3 2 6 3 Execuc¸˜ao dos passos 9 e 10.

Acumular valor em Soma. Incrementarn.

1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; 8. while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); → readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.

x Soma n

lixo lixo lixo

1 0 0 2 1 1 3 3 2 -1 6 3 Execuc¸˜ao dos passos 11 e 12. Leitura do valor -1. 1. program Sequencia; 2. var x,soma,n : integer; 3. begin

4. write(’Entre com um n´umero: ’); 5. readln(x); 6. soma := 0; 7. n := 0; → while (x>=0) do begin 9. soma := soma + x; 10. n := n + 1;

11. write(’Entre com um n´umero: ’); 12. readln(x);

13. end;

14. writeln(’Soma=’,soma,’ Quantidade=’,n); 15. end.