Conceito de algoritmo e programao. Algoritmos: representao, tcnicas e estruturas de elaborao. Tcnicas de projeto e desenvolvimento de algoritmos. Representao de dados. Tipos de dados. Cadeia de caracteres, vetores e registros. Instrues simples e compostas. Subprogramao. Recursividade. Elaborao e implementao de programas em uma linguagem estruturada de alto nvel. Alocao dinmica de memria. Listas lineares, pilha, fila, rvores e grafos. Mtodos de ordenao. Definio e manipulao de arquivos externos. Aplicaes prticas utilizando uma linguagem estruturada de alto nvel (Pascal e C). Sentenas, Instrues, Comandos Codificao Aes, o que executado Definies bsicas (1/2) dispositivo de entrada (usurio computador) meio pelo qual as informaes so transferidas pelo usurio ou pelos nveis secundrios de memria ao computador teclado, discos magnticos, fitas, carto perfurado dispositivo de sada (computador usurio) meio pelo qual as informaes so transferidas pelo computador ao usurio ou aos nveis secundrios de memria monitor de vdeo, impressora, fitas, discos magnticos Definies bsicas (2/2) sintaxe (escrita do comando) forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor (compilador, interpretador) de programas. a violao das regras sintticas considerada um erro sujeito pena do no-reconhecimento do comando por parte do tradutor. semntica (lgica do comando) significado, conjunto de aes que sero exercidas pelo computador durante a execuo do referido comando. Interface com o usurio Meio pelo qual um programa e o usurio conversam. I n t e r f a c e
Usurio Programa readln (teclado) writeln (vdeo) input output Estrutura mnima de um programa escrito em Linguagem Pascal: program AloMundo; begin *** end. ponto inicial da execuo de um programa escrito em Linguagem Pascal uses crt; A clusula uses instrui o compilador a ler (ou incluir) uma biblioteca de cdigos ao programa biblioteca = conjunto de subprogramas (procedures e/ou functions) reutilizveis
Crt tratamento de video Dos rotinas (funes) do sistema operacional DOS Comentrios, { } { Isto um comentrio. } (* Isto um comentrio. *) { 15% de reajuste no salrio mnimo } SalarioMinimo := SalarioMinimo * 1.15;
Nota: {$, indica diretiva de compilao Ex.: {$I-} {$I+} Ponto-e-vrgula (;) separador de comandos (um por comando) comando 1; comando 2; comando 3; comando 4; { comando 5; } comando 6; comando 7; na instruo imediatamente anterior a clusula end no exigido Comandos (instrues) Simples (atmicas) comando vazio, atribuio, controle de desvios, comandos de entrada / sada Compostos (estruturados) sequncia (ou composio): begin - end condio: if - then e if - then - else seleo: case repetio: while, repeat e for Comandos (ou instrues) Simples Compostos Sequncia Deciso Repetio Comando vazio no demanda tempo de execuo no necessita de recursos computacionais begin ... ; ; ; ; ; ... repeat until Keypressed; ... end. Atribuio (:=) Onde: Identificador NomeDeVarivel, NomeDeFuno Expresso valor atribudo ao identificador Identificador := Expresso; Exemplos de expresses (1/3):
Tendo as seguintes variveis: var n, result: integer; nota1, nota2, media, raizq: real;
{ quadrado de n } result := n * n; ou result := sqr(n);
{ raiz quadrada de n } raizq := sqrt(n);
{ mdia aritmtica simples de duas notas } media := (nota1 + nota2) / 2; Exemplos de expresses (2/3):
Tendo as seguintes variveis: var vlr, novovlr, salario, novosalario: real;
{ 90% do valor } novovlr := vlr * (90 / 100);
{ reajustar o salrio em 10% } novosalario := salario + (salario * (10 / 100));
{ desconto de 10% no valor } novovlr := vlr - (vlr * (10 / 100)); Exemplos de expresses (3/3):
Tendo as seguintes variveis: var n, digito, novon, a, b, aux: integer;
{ retornando o ltimo dgito do nmero } digito := n mod 10;
{ retirando o ltimo dgito do nmero } novon := n div 10;
{ fazendo a troca (swap) de dois valores } aux := a; a := b; b := aux; Tipos de variveis frequentes:
{ Contadores } i := 0; j := 1; i := i + 1; { ou } inc(i); j := j + 2;
{ Somatrios, ou acumuladores } sm := 0; for i := 1 to 10 do begin readln(idade); S := S + idade; end;
{ Produtrios. Fatorial de 4 = 1 * 2 * 3 * 4 } p := 1; for i := 1 to 4 do p := p * i; Controles de desvios objetivo = desviar a seqncia natural do cdigo fonte dos programas
goto (v para): desvio incondicional break: quebra instrues repetitivas (for, while e repeat) continue: interrompe apenas a interao corrente da instruo repetitiva (for, while e repeat) exit: quebra o bloco de cdigo halt: termina a execuo de um aplicativo Limpa a tela (clrscr) CLeaR SCReen, limpa a tela e posiciona o cursor no canto superior esquerdo (1,1) prepara o vdeo para iniciar um processo de entrada ou sada de dados uses Crt; uses WinCrt; program LimpaTela; uses Crt; begin clrscr; ... end. Posiciona o cursor (gotoxy) este procedimento, disponvel na biblioteca crt, permite posicionar o cursor em um determinado ponto da tela
gotoxy(coluna, linha);
onde: coluna, valor numrico inteiro positivo entre 1 e 80 linha, valor numrico inteiro positivo entre 1 e 24 (01, 01) x y (80, 25) (80, 01) (01, 25) Terminal de Vdeo (tela do computador) gotoxy(01, 01); canto superior esquerdo gotoxy(01, 24); canto inferior esquerdo gotoxy(80, 01); canto superior direito gotoxy(80, 24); canto inferior direito 1 25 80 25 Comando de entrada (readln) permite ao usurio do programa fornecer valores ao computador ln, indica line new (linha nova) readln identificador ; ( ) , Comando de sada (writeln) permite ao computador exibir os resultados, determinados pelo programa, ao usurio writeln expresso ; ( ) , Para justificar (ou alinhar) o resultado direita no comando de sada (writeln):
write(n:3); writeln(vlr:6:2); writeln(s:15);
1 1.00 Brasil 2 2.00 Pato Branco ... ... Curitiba 9 9.00 UTFPR 10 10.00 Mater Dei 11 11.00 Programar Bom ... ... 99 99.00 100 100.00 101 101.00 ... ... 999 999.99 Formatao da sada Os tipos de dados reais so impressos em notao cientfica, por exemplo: 9.5075000000E+02 = 9.5075 x 10 2 = 950.75 Como apresentar este tipo de valor em Pascal ? var vlr: real; begin vlr := 950.75; writeln('Na notao decimal ', vlr:6:2); { Onde: 999.99
6- tamanho total, incluindo casas decimais e o ponto decimal 2- nmero de casas decimais } end. 6 2 Exemplos de Formatao da sada
var vlr: real; n: integer;
9999.99 writeln(..., vlr:7:2);
99.9999 writeln(..., vlr:7:4);
99999.9 writeln(..., vlr:7:1);
9999999 writeln(..., vlr:7:0);
.99 writeln(..., vlr:3:2);
999 writeln(..., n:3); program CalculaMedia; uses Crt; var Nota1, Nota2, Media: real; begin clrscr; gotoxy(10, 01); write('Digite a nota do 1 Bimestre: '); readln(Nota1);
gotoxy(10, 03); write('Digite a nota do 2 Bimestre: '); readln(Nota2);
Media := (Nota1 + Nota2) / 2; gotoxy(10, 05); writeln('A mdia calculada : ', Media:5:2); ... end. Tamanho total que ser utilizado para exibir a informao, incluindo o ponto decimal (99.99) Nmero de casas decimais. ex. 7.50 Entendendo o Cdigo (1/2) readln(n); onde: readln comando de entrada (input) n nome da varivel, ou seja, endereo de memria
semntica de funcionamento: interrompe a execuo do programa e atravs do dispositivo de entrada (teclado) o usurio dever fornecer um nmero inteiro que ser armazenado no endereo de memria correspondente a varivel n. Entendendo o Cdigo (2/2) writeln(i:2, ' * ', n, ' = ', (i*n):3); onde: writeln comando de sada (output)
semntica de funcionamento: exibe no dispositivo de sada padro (terminal de vdeo) cinco valores: 1) o valor inteiro da varivel i usando duas posies do vdeo 2) exatamente a literal * entre espaos 3) o valor inteiro da varivel n 4) exatamente a literal = entre espaos 5) o resultado da expresso i*n usando trs posies do vdeo Interface amigvel programa amigo do usurio regras bsicas: toda vez que um programa estiver esperando que o usurio fornea a ele um determinado dado (operao de leitura), ele deve enviar uma mensagem dizendo ao usurio o que ele deve digitar, por meio de uma instruo de sada de dados (writeln); antes de enviar qualquer resultado ao usurio, um programa deve escrever uma mensagem explicando o significado do mesmo. Meios para interromper o fluxo normal de execuo do programa e aguardar uma interveno do usurio: readln; necessrio teclar <Enter> para prosseguir repeat until keypressed; necessrio pressionar qualquer tecla para prosseguir inkey, readkey utilizados para identificar a tecla pressionada (leitura do teclado) Interrupes (paradas) Estruturas de Controle (1/2) Um programa de computador uma sequncia de instrues organizadas de forma a produzir a soluo de um determinado problema; o que representa uma das habilidades bsicas da programao, que a sequenciao.
Naturalmente, as instrues de um programa so executadas em sequncia, o que se denomina fluxo sequencial de execuo. Mas, em inmeras circunstncias, necessrio executar as instrues de um programa em uma ordem diferente da estritamente sequencial.
Tais situaes so caracterizadas pela necessidade da repetio de instrues individuais ou conjuntos de instrues, e tambm pelo desvio do fluxo de execuo, tarefas que podem ser realizadas por meio das estruturas de controle da linguagem. estruturas que controlam a sequncia, ou fluxo, de execuo das instrues no programa estrutura de sequncia um comando aps o outro estruturas de deciso (ou condio) seleciona um, e somente um, conjunto de comandos a serem executados estruturas de repetio executa os comandos um nmero repetido de vezes Estruturas de Controle (2/2) Estruturas de Controle (comandos compostos) Sequncia Deciso Repetio if - then if - then - else case - of while - do repeat - until for - to - do begin - end Sequncia (ou composio) Na estrutura sequencial os comandos so executados em uma sequncia pr-estabelecida. Cada comando executado somente aps o trmino do comando anterior. begin - end begin Comando 1; Comando 2; ... Comando N; end; comando begin end ; Exemplo da estrutura de controle sequencial, ou composio (begin - end)
begin ... A := B;
if A < C then A := C;
for i := 1 to 10 do dec(C); ... end; Operadores relacionais (1/2) = igual a <> diferente de > maior que < menor que >= maior igual a <= menor igual a Operadores relacionais (2/2) Variveis: Atribuies: var a, b: integer; a := 2; b := 3;
Expresses lgicas (testes lgicos) resultado a = b falso a <> b verdadeiro a > b falso a < b verdadeiro a >= b falso a <= b verdadeiro Operadores lgicos (ou booleanos) not negao lgica and e lgico conjuno or ou lgico disjuno T a b e l a
V e r d a d e
Instrues condicionais Simples (if - then)
Composta (if - then - else)
Seletiva (case - of) if ExpressoLgica (EL) then Comando; verdadeira Comando falsa EL Semntica da instruo condicional na sua forma simples (if - then):
if ExpressoLgica (EL) then Comando;
No caso da Expresso Lgica (condio) avaliada ser verdadeira, o comando ou um conjunto de comandos executado e, aps seu trmino, o fluxo de execuo prossegue pela prxima instruo aps a instruo if - then.
Quando a condio falsa, nenhum comando executado e o fluxo prossegue normalmente pela primeira instruo aps a instruo if - then. Exemplificando as Relaes (1/3) program Exemplos_de_relacoes; uses crt; var n: integer; begin clrscr; writeln('Informe um nmero inteiro:'); readln(n);
if (n = 5) then writeln(n, ' igual a 5');
writeln; write('Pressione [algo] para prosseguir.'); readkey; end. 5 n = 5
if (n = 5) then writeln(n, ' igual a 5');
Representao matemtica: Representao computacional: Exemplificando as Relaes (2/3) 5 n = 5
if (n = 5) then writeln(n, ' igual a 5');
Representao matemtica: Representao computacional: 5 n < 5
if (n < 5) then writeln(n, ' menor que 5');
5 n 5
if (n <= 5) then writeln(n, ' menor ou igual a 5');
5 n > 5
if (n > 5) then writeln(n, ' maior que 5');
5 n 5
if (n >= 5) then writeln(n, ' maior ou igual a 5');
Exemplificando as Relaes (3/3) 5 n # 5
if (n <> 5) then writeln(n, ' diferente de 5');
Representao matemtica: Representao computacional: 5 n # 5, e n # 9 if ((n <> 5) and (n <> 9)) then writeln(n, ' diferente de 5', ' e diferente de 9');
9 n = 5, ou n = 9 if ((n = 5) or (n = 9)) then writeln(n, ' igual a 5', ' ou igual a 9');
5 9 n < 5, ou n > 9 if ((n < 5) or (n > 9)) then writeln(n, ' est fora do intervalo', ' entre 5 e 9.');
5 9 n 5, e n 9 if ((n >= 5) and (n <= 9)) then writeln(n, ' pertence ao intervalo', ' de 5 at 9.');
5 9 Exemplos de Distrbios e Complicaes Metablicas associadas a Terapia Nutricional:
Hipoglicemia, suspenso sbita da infuso de glicose glicose srica < 80mg/ 100ml se o exame de glicose srica for menor que 80 mg/ 100ml ento verdadeiro afirmar que o paciente est sujeito a uma Hipoglicemia
Hiperglicemia, oferta de glicose excede o montante que o organismo consegue metabolizar glicose srica > 200mg/ 100ml Exemplo da utilizao da instruo condicional na sua forma simples (if - then)
if Exame_Glicose < 80 then writeln('Hipoglicemia.');
if (Idade = 18) and (Sexo = 'M') then writeln('Servio Militar Obrigatrio');
if Salario < (2 * SalarioMinimo) then begin Salario := Salario * 1.15; writeln('Salrio: ', Salario:10:2); end; { Efetuar a leitura de um valor inteiro positivo ou negativo e apresentar o nmero lido como sendo um valor positivo, ou seja, o programa devera apresentar o mdulo de um nmero fornecido. Lembre-se de verificar se o nmero fornecido e menor que zero, sendo multiplique-o por -1. } program ValorAbsoluto; uses Crt; var Numero: integer; begin clrscr; write('Digite o nmero.: '); readln(Numero); writeln;
if Numero < 0 then Numero := Numero * (-1);
writeln('O mdulo do Nmero eh igual a ', Numero); writeln('Pressione [algo] para prosseguir.'); readkey; end. verdadeiro numero < 0 numero := numero * (-1); falso if ExpressoLgica (EL) then Comando 1 else Comando 2; verdadeira Comando 1 EL falsa Comando 2 Semntica da instruo condicional na sua forma composta (if - then - else):
if ExpressoLgica (EL) then Comando 1 else Comando 2;
No caso da Expresso Lgica (condio) avaliada ser verdadeira, a seqncia de comandos 1 executada e, aps seu trmino, o fluxo de execuo prossegue pela prxima instruo aps a instruo if - then - else.
Quando a condio falsa, a seqncia de comandos 2 executada e o fluxo prossegue normalmente pela primeira instruo aps a instruo if - then - else. Exemplo da utilizao da instruo condicional na sua forma composta (if - then - else)
if Exame_Glicose < 80 then writeln('Hipoglicemia.') else writeln('No tem Hipoglicemia.');
if Salario < (2 * SalarioMinimo) then begin Salario := Salario * 1.15; writeln('Salrio: ', Salario:10:2); end else writeln('Sem direito ao Reajuste.'); Exemplo da utilizao da instruo condicional na sua forma composta (if - then - else)
if Idade < 18
then writeln('Menor de Idade.')
else begin
if (Idade = 18) and (Sexo = 'M') then writeln('Servio Militar.');
writeln('Maior de Idade.');
end;
true Imprima Menor de Idade. Idade < 18 false (Idade = 18) .e. (Sexo = M) Imprima Servio Militar. Imprima Maior de Idade. false true Exemplo da utilizao da instruo condicional na sua forma composta (if - then - else)
if Sexo = 'M' then begin writeln('Homens.'); GEB := 66.47+(13.75*PC)+(5*Alt)(6.76*I); end
else begin writeln('Mulheres.'); GEB := 655.1+(9.56*PC)+(1.85*Alt)(4.67*I); end;
writeln('Gasto Energtico Basal : ', GEB:10:2); { Ler dois valores numricos e apresentar a diferena do maior pelo menor. } program DiferencaEntreNumeros; uses Crt; var a, b, dif: integer; begin clrscr; write('Digite o 1 nro: '); readln(a);
write('Digite o 2 nro: '); readln(b);
if a > b then dif := a - b else dif := b - a;
writeln('Diferena do maior pelo menor: ', dif); writeln('Pressione [algo] para prosseguir.'); readkey; end. a > b dif = a b; falso verdadeiro dif = b a; a > b b a Definir o maior entre 2 (dois) nmeros: 2 n-1 = 2 2-1 = 2 1 = 2 caminhos na rvore de deciso. rvore de deciso: Representao computacional: if (a > b) then writeln("O maior valor ", a) else writeln("O maior valor ", b); V F Definir o maior entre 3 (trs) nmeros: 2 n-1 = 2 3-1 = 2 2 = 4 caminhos na rvore de deciso. rvore de deciso: Representao computacional: if (a > b) then if (a > c) then writeln("O maior valor ", a) else writeln("O maior valor ", c)
else if (b > c) then writeln("O maior valor ", b) else writeln("O maior valor ", c); a > b b > c a > c b c a c V F V F V F Definir o maior entre 4 (quatro) nmeros: 2 n-1 = 2 4-1 = 2 3 = 8 caminhos na rvore de deciso. rvore de deciso: Representao computacional: if (a > b) then if (a > c) then if (a > d) then writeln("O maior valor ", a) else writeln("O maior valor ", d)
else if (c > d) then writeln("O maior valor ", c) else writeln("O maior valor ", d)
else if (b > c) then if (b > d) then writeln("O maior valor ", b) else writeln("O maior valor ", d)
else if (c > d) then writeln("O maior valor ", c) else writeln("O maior valor ", d); a > b b > c c > d b > d a > c c > d a > d c b c d d a d d V V V V V V V F F F F F F F Outras Relaes Impontantes (1/3) program Par_ou_Impar; uses crt; var n: integer; begin clrscr; writeln('Informe um nmero inteiro:'); readln(n);
if ((n mod 2) = 0) then writeln(n, ' um nmero par.') else writeln(n, ' um nmero mpar.');
writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Outras Relaes Impontantes (2/3) program Multiplo_de_5; uses crt; var n: integer; begin clrscr; writeln('Informe um nmero inteiro:'); readln(n);
if ((n mod 5) = 0) then writeln(n, ' mltiplo de 5.') else writeln(n, ' no mltiplo de 5.');
writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Outras Relaes Impontantes (3/3) program Multiplo_de_2_e_3; uses crt; var n: integer; begin clrscr; writeln('Informe um nmero inteiro:'); readln(n);
if (((n mod 2) = 0) and ((n mod 3) = 0)) then writeln(n, ' mltiplo de 2 e 3.') else writeln(n, ' no mltiplo de 2 e 3.');
writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Uso Aninhado de if else (1/2) Neste caso o comando1 executado qdo a condio1 e a condio2 forem verdadeiras, e o comando2 executado quando a condio1 for verdadeira e a condio2 for falsa. if (condio1) then if (condio2) then comando1; else comando2; Isso porque a regra bsica que uma clusula else sempre pertence ao comando if imediatamente anterior. O uso de estruturas seqenciais (begin end) permite modificar esta regra. Agora o comando1 continua sendo executado quando a condio1 e a condio2 forem verdadeiras, entretanto, o comando2 executado, simplesmentes, quando a condio1 for falsa. if (condio1) then begin if (condio2) then comando1; end else comando2; Uso Aninhado de if else (2/2) if (condio1) then if (condio2) then comando1; else comando2; if (condio1) then begin if (condio2) then comando1; end else comando2; Comando 1 Condio 1 e 2- Verdadeiro Comando 2 Condio 1- Verdadeiro Condio 2- Falso Comando 1 Condio 1 e 2- Verdadeiro Comando 2 Condio 1- Falso comando1 condio1 falso verdadeiro comando2 condio2 falso verdadeiro comando1 condio1 falso verdadeiro comando2 condio2 falso verdadeiro Um aninhamento o fato de se ter qualquer um dos tipos de construo de comandos dentro de em conjunto de comandos compostos (if, case, while, for e repeat).
Regra: A construo mais interna deve estar inteiramente contida na construo imediatamente mais externa. Vlido Invlido Aninhamentos (ou Embutimentos) { Ler um valor inteiro que representa o ms de uma data e apresentar o trimestre correspondente. } program DefineOTrimestre; uses crt; var Mes: integer; begin clrscr; write('Digite o valor do ms : '); readln(Mes); if (Mes >= 1) and (Mes <= 3) then writeln('Primeiro Trimestre.') else if (Mes >= 4) and (Mes <= 6) then writeln('Segundo Trimestre.') else if (Mes >= 7) and (Mes <= 9) then writeln('Terceiro Trimestre.') else if (Ms >= 10) and (Ms <= 12) then writeln('Quarto Trimestre.') else writeln('Ms invlido.'); writeln('Pressione [algo] para prosseguir.'); readkey; end. Instruo condicional seletiva (case - of) case Seletor of Rtulo 1: Comando 1; Rtulo 2: Comando 2; ... Rtulo N: Comando N;
[ else Comando; ]
end; Semntica da instruo condicional seletiva (case - of):
Ao entrar numa construo seletiva, o Seletor comparado com o valor do Rtulo 1, se a relao de igualdade for verdadeira, a seqncia de comandos 1 executada e, aps seu trmino, o fluxo de execuo prossegue pela prxima instruo aps a instruo case - of.
Se relao anterior falsa, o seletor ento comparado ao Rtulo 2, se esta for verdadeira,a seqncia de comandos 2 executada e o fluxo prossegue normalmente pela primeira instruo aps a instruo case - of.
O mesmo racicnio estendido a todas as condies da construo. No caso em que todas as condies so avaliadas como falsas, a seqncia de comandos correspondente a clusula else executada. true Seletor Rtulo 2 Rtulo N Comando 2 Comando N Comando Comando 1 Rtulo 1 Instruo condicional seletiva (case - of) Seletor false Rtulo 2 Rtulo N Comando 2 Comando N Comando true Comando 1 Rtulo 1 Instruo condicional seletiva (case - of) Seletor Rtulo 2 Rtulo N Comando 2 Comando N Comando false ... true Comando 1 Rtulo 1 false Instruo condicional seletiva (case - of) Seletor Rtulo 2 Rtulo N Comando 2 Comando N Comando false Comando 1 Rtulo 1 false ... false Instruo condicional seletiva (case - of) Exemplo da utilizao da instruo condicional seletiva (case - of)
repeat
writeln('Escolha a opo (I, A, E, F):'); readln(Opcao);
case Opcao of 'I': Inclusao; 'A': Alteracao; 'E': Exclusao; else writeln('Opo Invlida !'); end;
until Opcao = 'F'; Instrues repetitivas (loops) Laos condicionais: com avaliao a priori (while - do) com avaliao a posteriori (repeat - until)
Laos contados: repetio automtica (for - to - do) while ExpressoLgica (EL) do Comando; true Comando EL false loop Laos condicional (com avaliao a priori): Instruo WHILE - DO Semntica da instruo repetitiva com com avaliao a priori (while - do):
while ExpressoLgica (EL) do Comando;
Ao incio da construo while a expresso lgica (condio) testada. Se seu resultado for falso, ento o comando no seu interior no executado e a execuo prossegue normalmente pela instruo seguinte a instruo while - do.
Se a condio for verdadeira a seqncia de comandos executada 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 falsa, o fluxo de execuo prosseguir normalmente pelas instrues posteriores a instruo while - do. Onde: i- varivel de controle (controla o nmero de repeties) Inicializa a varivel de controle Verifica o trmino ou a continuidade da instruo repetitiva Incrementa (passo) a varivel de controle Exemplo da utilizao da instruo repetitiva com avaliao a priori (while - do):
program Enquanto_Faca; var i: integer; begin ... i := 1; while i <= 10 do begin
writeln(i); i := i + 1;
end; ... end. i := 1; i <= 10 writeln(i); i := i + 1; true false loop while do
(10 repeties) { Elaborar um programa que apresente no final o somatrio dos valores pares existentes na faixa de 1 at 500. }
program SomatorioDosParesDe1a500; uses Crt; var i: integer; S: longint; begin clrscr;
S := 0; { inicializa o somatrio } i := 2; while (i <= 500) do begin S := S + i; i := i + 2; end;
writeln('O somatrio dos nmeros pares de 1..500 = ', S); readln; end. Laos contados (repetio automatica): Instruo FOR - TO - DO de Limite Inicial para Limite Final for VarivelDeControle (VC) := LimiteInicial (LI) to LimiteFinal (LF) do Comando;
de Limite Final para Limite Inicial for VarivelDeControle (VC) := LimiteFinal (LF) downto LimiteInicial (LI) do Comando; true Comando VC <= LF false loop inc(VC) VC := LI for VC := LI to LF do Comando; Semntica da instruo repetitiva automtica (for - to - do):
for VC := LI to LF do Comando;
No incio da execuo da construo LI- Limite Inferior atribuido a varivel VC- Varivel de Controle. A seguir, VC comparado com LF- Limite Final. Se VC for maior que LF, ento a sequncia de comandos no executada e o fluxo de controle transferido para o primeiro comando seguinte a construo for - to - do.
Por outro lado, se o VC for menor ou igual a LF, ento a sequncia de comandos no interior da construo executada e, ao final do mesmo, o valor de VC incrementado. Feito isso, retorna-se comparao entre VC e LF e repete-se o processo at que VC tenha um valor maior que LF, quando o lao finalizado e a execuo do programa prossegue pela instruo imediatamente a construo for - to - do. Onde: i- varivel de controle (conta o nmero de repeties) Inicializa a varivel de controle Determina o nmero de repeties Incrementa automaticamente a varivel de controle Exemplo da utilizao da instruo repetitiva automtica (for - to - do):
program Para_Ate_Que; var i: integer; begin ... for i := 1 to 10 do begin
... writeln(i);
end; ... end. true i <= 10 false loop inc(i) i := 1; for i:=1 to 10 do
(10 repeties) writeln(i); Onde: i- varivel de controle (conta o nmero de repeties) Inicializa a varivel de controle Determina o nmero de repeties Decrementa automaticamente a varivel de controle Exemplo da utilizao da instruo repetitiva automtica (for - downto - do):
program Para_Ate_Que; var i: integer; begin ... for i := 10 downto 1 do begin
... writeln(i);
end; ... end. true i >= 1 false loop dec(i) i := 10; for i:=10 downto 1 do
(10 repeties) writeln(i); { A converso de graus Fahrenheit para centgrados e obtida pela frmula C=5/9(F-32). Escreva um algoritmo que calcule e escreva uma tabela de graus centgrados em funo de graus Fahrenheit de 50 a 150 de 1 em 1. } program ConversaoFahrenheit; uses Crt; var f: integer; c: real; begin clrscr; for f:=50 to 150 do begin c := 5 / 9 * (f - 32); writeln(f:3, ' Fahrenheit = ', c:5:2, ' centgrados.'); if (f mod 20) = 0 then begin { interrompe a cada 20 execues } writeln('Pressione [Algo] p/ prosseguir.'); readkey; clrscr; end; end; writeln('Fim...'); readln; end. Contadores- quantificar coisas: Qtde de funcionrios do sexo masculino Qtde de alunos aprovados VariavelContador := VariavelContador + 1; ou inc(VariavelContador);
program Quantificar_Coisas; uses crt; var i, ct, num: integer; begin clrscr; ct := 0; { inicializa o contador } for i:=1 to 10 do begin write('Informe o ', i, 'o. nmero: '); readln(num); { verifica "se" o i-simo valor informado menor que 10 } if (num < 10) then ct := ct + 1; end; { exibe o resultado } writeln; writeln('Foram informados ', ct, ' valores menores que 10.'); writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Somatrios- somar coisas: Soma dos salrios dos funcionrios do sexo masculino Qtde de peas em estoque
program Somar_Coisas; uses crt; var i, sm, num: integer; begin clrscr; sm := 0; { inicializa o somatrio } for i:=1 to 10 do begin write('Informe o ', i, 'o. nmero: '); readln(num); { verifica "se" o i-esimo valor informado par } if ((num mod 2) = 0) then sm := sm + num; end; { exibe o resultado } writeln; writeln('Soma dos pares = ', sm); writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Mdias- calcular mdias: Salrio mdio dos funcionrios do sexo masculino Idade mdia dos alunos da disciplina de algoritmos
Mdia := Soma / Quantidade de valores; program Media_dos_Pares; uses crt; var i, sm, ct, num: integer; media: real; begin clrscr; sm := 0; ct := 0; media := 0; { inicializa as variveis } for i:=1 to 10 do begin write('Informe o ', i, 'o. nmero: '); readln(num); { verifica "se" o i-simo valor informado par } if ((num mod 2) = 0) then begin sm := sm + num; { soma os pares } ct := ct + 1; { conta os pares } media := sm / ct; { calcula a mdia dos nros pares } end; end; { exibe os resultados } writeln; writeln('Soma dos pares = ', sm:3); writeln('Qtd. de pares = ', ct:3); writeln('Mdia dos pares = ', media:6:2); writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Percentuais- calcular valores percentuais: % de funcionrios do sexo masculino % de nmeros pares
Percentual := Valor Parcial / Valor Total * 100;
program Percentual; uses crt; var i, ct: integer; p: real; begin clrscr; ct := 0; p := 0; { inicializa as variveis } for i:=1 to 10 do begin write('Informe o ', i,'o. nmero: '); readln(num); { verifica "se" o i-simo valor informado par } if ((num mod 2) = 0) then begin ct := ct + 1; p := ct / 10 * 100; { calcula o percentual de nros pares } end; end; { exibe o resultado } writeln('Qtd. de pares = ', ct, ', ou seja,', p:6:2, '%'); writeln; write('Pressione [algo] para prosseguir.'); readkey; end. Lao condicional (com avaliao a posteriori): Instruo REPEAT - UNTIL repeat Comando until ExpressoLgica (EL); true Comando EL false loop Semntica da instruo repetitiva com com avaliao a posteriori (repeat - until):
repeat Comando until ExpressoLgica (EL);
Seu funcionamento bastante parecido ao da contruo while. O comando executado uma vez. A seguir, a condio testada: se ela for falsa, a seqncia de comandos executada novamente e este processo repetido at que a condio seja verdadeira, quando ento a execuo prossegue pelo comando imediatamente seguinte ao final da construo.
Esta construo difere da construo while pelo fato de a seqncia de comandos ser executada uma ou mais vezes (pelo menos uma vez), ao passo que na construo while o comando executado zero ou mais vezes (possivelmente nenhuma). Isto acontece porque na construo repeat o teste da condio feito ao final da construo, ao contrrio do que acontece na construo while, onde o teste da condio feito no incio da mesma. Onde: i- varivel de controle (controla o nmero de repeties) Inicializa a varivel de controle Verifica o trmino ou a continuidade da instruo repetitiva Incrementa a varivel de controle Exemplo da utilizao da instruo repetitiva com avaliao a posteriori (repeat - until):
program Repita_AteQue; var i: integer; begin ... i := 1; repeat
writeln(i); i := i + 1;
until i > 10; ... end. i := 1; i > 10 writeln(i); i := i + 1; true false loop repeat until
(10 repeties) { Fulano aplicou R$ 100,00 com rendimento de 5% ao ms. Quantos meses sero necessrios para que o capital investido ultrapasse a R$ 200,00. } program Aplicacao; uses crt; var Capital: real; Meses: integer; begin clrscr;
Capital := 100.00; Meses := 0; repeat Capital := Capital * 1.05; { reajusta em 5% o capital } Meses := Meses + 1; until Capital > 200;
writeln('Em ', Meses:2, ' meses.); writeln('O capital investido ser R$ ', Capital:5:2); readln; end. program ComparandoComandosDeRepeticao; uses crt; var i: integer; begin clrscr;
writeln('Usando o comando "for"'); for i:=1 to 5 do begin writeln(i); end;
writeln('Usando o comando "while"'); i:=1; while (i<=5) do begin writeln(i); i:=i+1; end;
writeln('Usando o comando "repeat"'); i:=1; repeat writeln(i); i:=i+1; until (i>5);