Você está na página 1de 17

Estruturas de repetio 1.

ESTRUTURAS DE REPETIO A estrutura de repetio permite que uma seqncia de comandos seja executada repetidamente enquanto uma determinada condio seja satisfeita. No Pascal, existe trs tipos de estrutura de repetio: com teste no incio (WHILE), com teste no final (REPEAT) e automtica (FOR). 1.1 REPETIO COM TESTE NO INCIO ( WHILE-DO )

A estrutura de controle WHILE permite que um comando simples ou composto seja executado repetidamente, enquanto uma condio de controle seja VERDADEIRA. equivalente ao comando ENQUANTO da linguagem algortmica. A forma geral do WHILE : WHILE <condio> DO <comando> A <condio> deve ser uma expresso lgica. O <comando> pode ser um comando simples ou um comando composto. Como o teste da <condio> realizado no incio do lao, o <comando> ser executado zero ou mais vezes, dependendo da avaliao da <condio>. EXEMPLO: program EXEMPLO_DE_WHILE; {escrever os nmeros inteiros de 1 a 100} var N : integer; begin N := 1; while N <= 100 do

Grupo da Disciplina

Estruturas de repetio begin writeln(N); N := N + 1 end end. Neste exemplo, o comando writeln ser executado repetidas vezes enquanto a varivel N possuir um valor igual ou inferior a 100. O algoritmo ter como sada a sequncia dos nmeros inteiros de 1 a 100. Toda estrutura de repetio deve possuir uma condio de parada. Quando isso no acontece, ocorre o que chamamos de "loop infinito". Existem basicamente dois tipos de controle de estruturas de repetio: controle por contador e controle por entrada (flag). 1.1.1 CONTROLE POR CONTADOR

Quando o nmero de repeties for previamente conhecido, devemos utilizar um contador para controlar o nmero de repeties do lao. Um contador uma varivel do tipo inteiro que deve receber inicialmente (antes do lao) o valor 1 e dentro do lao (no final dele) deve ser incrementada em 1, ou seja, adicionar o valor 1 ao contedo da prpria varivel. A condio para interromper o lao ser: contador nmero de repeties. Exemplo: este programa l um conjunto de 100 nmeros inteiros e exibe a soma dos mesmos. program SOMA100; var NUM,SOMA,CONT : integer; begin SOMA := 0; CONT := 1; while CONT <= 100 do begin

Grupo da Disciplina

Estruturas de repetio write('Digite um nmero inteiro: '); readln(NUM); SOMA := SOMA + NUM; CONT:=CONT+1; end writeln('A soma ',SOMA); end. 1.1.2 CONTROLE POR ENTRADA (FLAG)

Quando no conhecemos o nmero de repeties e este for determinado por um valor que ser lido (que chamamos de flag), devemos utilizar um controle de repeties por entrada, tambm conhecido como controle por sentinela. Para controle por flag, a melhor estratgia utilizar um "loop infinito" com a condio de parada sendo aplicada atravs do comando BREAK, dentro de um comando IF logo aps a leitura da varivel a ser comparada com o flag. Obs: o comando BREAK funciona com uma "sada forada" de qualquer comando de repetio. Porm, s recomendado o seu uso dentro de um "loop infinito", seno pode quebrar a forma estruturada que prpria dos comandos de repetio. Exemplo: este programa l um conjunto de nmeros inteiros e exibe o valor mdio dos mesmos. Obs: a condio de sada do lao ser a leitura do valor 0 (flag). program LACO_COM_FLAG; var NUM,CONT,SOMA,MEDIA : integer; begin SOMA := 0; CONT := 0;

Grupo da Disciplina

Estruturas de repetio while TRUE do {loop infinito} begin write('Digite um nmero inteiro (0 para encerrar): '); readln(NUM); if NUM = 0 then break SOMA := SOMA + NUM; CONT := CONT + 1; end; MEDIA := SOMA div CONT; Writeln('Mdia = ',MEDIA); end. 1.2 REPETIO COM TESTE NO FINAL ( REPEAT-UNTIL )

A estrutura de controle REPEAT permite que um comando simples ou composto seja executado repetidamente at que uma condio de controle seja FALSA. A forma geral do REPEAT : REPEAT <comando> UNTIL <condio> A <condio> deve ser uma expresso lgica. O <comando> pode ser um comando simples ou um comando composto. No h a necessidade dos delimitadores BEGIN e END no comando composto em um REPEAT. Como o teste da <condio> realizado no final do lao, o <comando> ser executado uma ou mais vezes, dependendo da avaliao da <condio>. EXEMPLO: program EXEMPLO_DE_REPEAT; {escrever os nm. inteiros de 1 a 100} var

Grupo da Disciplina

Estruturas de repetio N : Integer; begin N := 1; repeat writeln(N); N := N + 1 until N > 100 end. O exemplo anterior equivalente ao exemplo do WHILE, onde o comando WRITELN ser executado repetidas vezes at que a varivel N possua um valor superior a 100. A estrutura REPEAT tambm bastante utilizada para repetirmos um programa diversas vezes, at que o usurio deseje sair do mesmo. EXEMPLO: program EXEMPLO_DE_REPEAT_2; {calcula a mdia de 2 nmeros dados repetidas vezes} uses CRT; var N1,N2,MEDIA : real; RESP : char; begin clrScr; repeat write('Digite os dois nmeros: '); readln (N1,N2); MEDIA := (N1+N2)/2; writeln (MEDIA); write ('Deseja repetir o programa (s/n)? '); RESP := readkey;

Grupo da Disciplina

Estruturas de repetio until (RESP='N') or (RESP='n') end. 1.3 REPETIO AUTOMTICA ( FOR )

A estrutura de controle FOR permite que um comando simples ou composto seja repetido um nmero especfico de vezes. A sua forma geral : FOR <var> := <vi> TO <vf> DO <comando> Onde <var> uma varivel de controle, do tipo inteira, que assumir inicialmente o valor inicial <vi> e ser incrementada do valor 1 aps cada repetio do lao. A repetio ser finalizada quando o contedo de <var> for superior ao valor final <vf>. O <comando> tambm pode ser simples ou composto. EXEMPLO: program EXEMPLO_DE_FOR; {escreve os nmeros inteiros de 1 a 100} var N : integer; begin for N := 1 to 100 do writeln(N); readln; end. Observe, no exemplo acima, que no foi necessrio utilizar um comando para atribuir um valor inicial a varivel N, nem tambm um outro comando para increment-la com o valor 1. Isto feito automaticamente pela estrutura FOR. A estrutura de repetio FOR especialmente indicada para quando o nmero de repeties previamente conhecido.

Grupo da Disciplina

Estruturas de repetio Caso contrrio, devemos utilizar o WHILE ou o REPEAT, dependendo do caso. Uma outra forma da estrutura FOR a seguinte: FOR <var> := <vi> DOWNTO <vf> DO <comando> Neste caso, a varivel de controle <var> ser decrementada do valor 1 aps cada repetio do lao e a repetio ser finalizada quando o contedo de <var> for inferior ao valor final <vf>. EXEMPLO: program EXEMPLO_DE_FOR_COM_DOWNTO; {escreve os nmeros inteiros de 100 a 1} var N : integer; begin for N := 100 downto 1 do writeln(N); readln; end. 2. MANIPULAO DE STRINGS 2.1 O TIPO DE DADO STRING

Strings, como trechos de texto, so os tipos de dados mais familiares aos seres humanos. Podemos utiliz-lo de forma completa ou apenas um caracter por vez. Nesse caso, usamos colchetes com um valor indicando a posio do caracter que queremos acessar. Observe o exemplo abaixo: S := 'COMPUTADOR';

Grupo da Disciplina

Estruturas de repetio write(s[3]); {ser exibida a letra M (3 letra da string S)} O tamanho de uma string pode variar entre 0 e 255 caracteres. Se na declarao de uma varivel string no especificarmos o tamanho mximo da string, ser assumido o valor 255. Por exemplo: var S1 : string; S2 : string[10]; No exemplo acima, a varivel S1 pode conter at 255 caracteres, enquanto a varivel S2 pode conter no mximo 10 caracteres. Esse tamanho mximo ns denominamos de comprimento fsico da string, que o que determina o espao reservado para a varivel. Se na varivel S2 for armazenado um string de 4 caracteres, por exemplo, o comprimento fsico continua sendo de 10 caracteres, enquanto que o espao ocupado, no caso 4 caracteres, o que denominamos comprimento lgico do string. O comprimento lgico de uma string pode variar conforme o valor recebido pela varivel durante o programa. Resumindo, temos ento que um string pode ter o seu comprimento fsico variando de 1 a 255 caracteres, e o seu comprimento lgico variando de 0 at o valor do comprimento fsico. 2.2 FUNES E PROCEDIMENTOS PREDEFINIDOS

O Turbo Pascal dispe de algumas funes e procedimentos que visam em essncia, optimizao do trabalho do programador na parte que se refere utilizao de strings: LENGTH UPCASE CONCAT POS COPY DELETE

Grupo da Disciplina

Estruturas de repetio INSERT VAL STR CHR ORD

LENGTH Funo que retorna o nmero de caracteres de uma string. Sua sintaxe : LENGTH (str : string) : byte; Exemplo: tam := length('TURBO PASCAL'); writeln (tam); {ser exibido o valor 12} UPCASE Funo que retorna o caractere contido no parmetro em maisculo. Sua sintaxe : UPCASE (ch : char) : char; Exemplo: letra := 'a'; maiusc := upcase (letra); writeln (maiusc); {ser exibida a letra 'A' (maiscula) } CONCAT Funo que retorna a unio de duas ou mais strings passadas como parmetros. Sua sintaxe : CONCAT (str1 , str2 , ... , strn : string) : string; Exemplo: pal1 := 'TURBO'; pal2 := 'PASCAL'; uniao := concat (pal1,' ',pal2); writeln (uniao); {ser exibido o string 'TURBO PASCAL'}

Grupo da Disciplina

Estruturas de repetio A funo CONCAT tem efeito semelhante ao operador + (operador de concatenao). Exemplo: pal1 := 'TURBO'; pal2 := 'PASCAL'; uniao := pal1 + ' ' + pal2; writeln (uniao); {ser exibido o string 'TURBO PASCAL'} POS Funo que retorna a posio que uma substring ocupa dentro de uma string passadas como parmetro. Sua sintaxe : POS (substr , str : string) : byte; Exemplo: frase := 'VAMOS ESTUDAR MAIS'; pesq := 'ESTU'; posicao := pos (pesq,frase); writeln (posicao); {ser exibido o valor 7} COPY Funo que retorna uma substring de uma string passadas como parmetro, de acordo com sua posio e quantidade de caracteres especificados. Sua sintaxe : COPY (str:string; pos:byte; quant:byte) : string; Exemplo: frase := 'VAMOS ESTUDAR MAIS'; pedaco := copy(frase,7,4); writeln (pedaco); {ser exibido o string 'ESTU'} DELETE Procedimento que exclui um pedao de uma string passada como parmetro, de acordo com uma posio e quantidade de caracteres especificados. Sua sintaxe : DELETE (var str:string; pos:byte; quant:byte); Exemplo:

Grupo da Disciplina

10

Estruturas de repetio frase := 'TURBO PASCAL 7.0'; delete (frase,7,7); writeln (frase); {ser exibido o string 'TURBO 7.0'} INSERT Procedimento que permite inserir uma substring dentro de uma string, em uma posio especificada. Sua sintaxe : INSERT (substr:string; var str:string; pos:byte); Exemplo: frase := 'CURSO DE INFORMATICA'; insert ('MICRO',frase,10); writeln (frase); {ser exibido o string 'CURSO DE MICROINFORMATICA'} VAL Procedimento que converte uma string passada como parmetro para valor numrico. Caso o contedo da string no seja possvel de ser convertido, o fato ser informado em uma varivel de retorno de erro. Se o retorno de erro for diferente de 0 (zero), implica que houve um erro de converso, e este valor de retorno a posio onde ocorreu o primeiro erro. Sua sintaxe : VAL (str:string; var num:integer|real; var erro:integer); Exemplo 1: codigo := '017348'; val (codigo,numero,erro); writeln (numero); {ser exibido o valor 17348} writeln (erro); {ser exibido o valor 0} Exemplo 2: codigo := '12X345' val (codigo,numero,erro); writeln (erro) {ser exibido o valor 3}

Grupo da Disciplina

11

Estruturas de repetio STR Procedimento que converte uma varivel numrica em um string, determinando o tamanho do string e a quantidade de casas decimais. Sua sintaxe : STR (num [:tam [:dec]]; var str:string); Exemplo: numero := 12.3; str (numero:6:2,conv); writeln (conv); {ser exibido o string ' 12.30'} CHR Funo que retorna o caracter correspondente ao valor ASCII especificado. Sua sintaxe : CHR (codigo:byte) : char; Exemplo: codigo := 65; caracter := CHR(codigo); writeln (caracter); {ser exibido o caracter 'A'} ORD Funo que retorna o valor ASCII correspondente ao caracter especificado. Sua sintaxe : ORD (caracter:char) : byte; Exemplo: caracter := 'A'; codigo := ORD(caracter); writeln (codigo); {ser exibido 65}

Grupo da Disciplina

12

Estruturas de repetio EXERCCIOS DE APLICAO 1. Escreva um programa para ler trs nmeros inteiros distintos e determinar o menor deles. 2. Faa um programa que, dado as trs notas de um aluno, determine e exiba a sua mdia final e o seu conceito, sabendo-se que: a mdia final calculada pela mdia aritmtica das 3 notas; o conceito determinado de com base na tabela abaixo: Mdia Final 8,0 5,0 e < 8,0 < 5,0 Conceito A B C

3. Escreva um programa que determine o grau de obesidade de uma pessoa, sendo fornecido o peso e a altura da pessoa. O grau de obesidade determinado pelo ndice da massa corprea (Massa = Peso / Altura2 ) atravs da tabela abaixo: MASSA CORPREA < 26 26 e < 30 30 GRAU OBESIDADE Normal Obeso Obeso Mrbido DE

4. Faa um programa para calcular a conta final de um hspede de um hotel, considerando que: a) sero lidos o nome do hspede, o tipo do apartamento utilizado (A, B, C ou D), o nmero de dirias utilizadas pelo hspede e o valor do consumo interno do hspede; b) o valor da diria determinado pela seguinte tabela:
TIPO DO APTO. A B C D VALOR DA DIRIA (R$) 150,00 100,00 75,00 50,00

c) o valor total das dirias calculado pela multiplicao do nmero de dirias utilizadas pelo valor da diria; d) o subtotal calculado pela soma do valor total das dirias e o valor do consumo interno; e) o valor da taxa de servio equivale a 10% do subtotal; 13

Grupo da Disciplina

Estruturas de repetio f) o total geral resulta da soma do subtotal com a taxa de servio. g) escreva a conta final contendo: o nome do hspede, o tipo do apartamento, o nmero de dirias utilizadas, h) o valor unitrio da diria, o valor total das dirias, o valor do consumo interno, o subtotal, o valor da taxa i) de servio e o total geral 5. Dado o trecho de programa abaixo: ... readln(N) R := 1; I := 2; while I <= N-1 do begin R := R * 2; I := I + 1; end; write(R); ... Reescreva-o utilizando: a) o comando FOR b) o comando REPEAT 6. Faa um programa que mostre todos os nmeros inteiros pares de 2 a 100. 7. Faa um programa para gerar e exibir os nmeros inteiros de 20 at 10, decrescendo de 1 em 1. 8. Escreva um programa que leia um conjunto de 100 nmeros inteiros positivos e determine o maior deles. 9. Escreva um programa que leia um nmero inteiro N e uma lista de N nmeros inteiros positivos e determine o maior nmero da lista. 10. Escreva um programa que leia um conjunto de nmeros inteiros positivos e determine o maior deles. A leitura do valor 0 (zero) indica o fim dos dados (flag). 11. Faa um programa que leia uma lista de nmeros inteiros positivos terminada pelo nmero 0 (zero). Ao final, o programa deve mostrar a mdia aritmtica de todos os nmeros lidos (excluindo o zero). 12. Faa um programa que leia uma lista de letras terminada pela letra Z. Ao final, o programa deve mostrar a quantidade lida de cada vogal. 13. O que uma string? 14. Qual o tamanho que uma string pode assumir? Grupo da Disciplina 14

Estruturas de repetio 15. Qual a diferena entre comprimento fsico e comprimento lgico? Qual o tamanho mnimo e mximo de cada um deles? 16. Escreva a finalidade e d um exemplo de cada um dos comandos abaixo: a) LENGTH b) UPCASE c) CONCAT d) POS e) COPY f) DELETE g) INSERT h) VAL i) STR j) CHR k) ORD 17. Escreva um programa que l uma frase pelo teclado e diz quantos caracteres foram digitados na mesma. 18. Escreva um programa que receba uma frase pelo teclado e determina a quantidade de cada vogal contida na mesma. 19. Escreva um programa que receba uma string do teclado e a exiba invertida. Exemplo: Entrada MARIA BONITA Sada ATINOB AIRAM 20. Escreva um programa que leia o nome de uma pessoa e exiba-o conforme o exemplo abaixo. Obs: Suponha que o nome lido no possua nenhuma preposio, artigo, etc. Exemplo: Entrada FLAVIO RIBEIRO COUTINHO Sada COUTINHO, F. R. 21. Escreva um programa que leia trs strings: FRASE, S1 e S2. Em seguida, substitua a primeira ocorrncia de S1 dentro de FRASE por S2. Depois da modificao, exiba FRASE. 22. Escreva um programa que leia uma frase de no mximo 20 caracteres e o exiba de acordo com o exemplo seguinte. Exemplo: Entrada ABCDE Sada ABCDE BCDEA CDEAB DEABC

Grupo da Disciplina

15

Estruturas de repetio EABCD 23. Escreva um programa que, a partir da digitao do infinitivo de um verbo regular, faa a conjugao do mesmo no presente do indicativo para as pessoas do singular e plural . Exemplo: Entrada CANTAR Sada Eu canto Tu cantas Ele canta Ns cantamos Vs cantais Eles cantam

Grupo da Disciplina

16

Estruturas de repetio EXERCCIOS RESOLVIDOS 1. Escreva um programa que leia uma string S e a exiba em letras maisculas. program R8_01; uses CRT; var S : string; I,TAM : byte; begin clrscr; writeln('Digite uma frase:'); readln(S); TAM := length(S); writeln('A frase em maisculas :'); for I := 1 to TAM do write(upcase(S[I])); readkey; end; 2. Escreva um programa que leia uma palavra e uma frase S, e calcule e exiba o nmero de ocorrncias da palavra dentro da frase. program R8_02; uses CRT; var PAL, FRASE : string I,CONT,TPAL,TFRASE : byte; begin clrscr; CONT := 0; writeln('Digite uma frase:'); readln(FRASE); writeln('Digite uma palavra:'); readln(PAL); TPAL := length(PAL) TFRASE := length(FRASE); for I := 1 to (TFRASE-TPAL+1) do if copy(FRASE,I,TPAL) = PAL then CONT := CONT + 1; writeln('A palavra ',PAL,' aparece ',CONT,' vezes na frase'); readkey; end;

Grupo da Disciplina

17

Você também pode gostar