




























Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostilas de Informática sobre a Linguagem de Programação Pascal, Fundamentos de programação, O que são algoritmos, Por que precisamos de algoritmos, Método para construir um algoritmo, Tipos de informação, Tipos inteiros, Tipos reais, Tipos lógicos.
Tipologia: Notas de estudo
1 / 36
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























onde condição é uma expressão booleana. Se a condição for verdadeira, isto é, for avaliada em TRUE, então será executado o comando1; se a condição for falsa (FALSE), será executado o comando2. Na sua segunda forma (sem o ELSE), o IF não executará nenhuma ação se a condição for falsa.
+-----
O comando1 ou comando2 acima podem ser comandos compostos ou outras estruturas de decisão. Exemplo: Consideremos a seguinte estrutura de decisão:
IF (x > 0) THEN BEGIN WRITE(Sqrt(x)); END ELSE BEGIN x := 1; END;
Neste caso, se x for um valor numérico positivo, então será mostrado o valor da sua raiz quadrada. Em caso contrário, será atribuído a x o valor constante 1. A condição neste caso é a expressão lógica x > 0, o comando1 é o WRITE(Sqrt(x)) e o comando2 é a atribuição x := 1. A condição lógica deste exemplo não precisaria estar entre parênteses.
OBSERVAÇÃO IMPORTANTE: Não deve haver ponto-e-vírgula antes do ELSE. Se houvesse, o ponto-e-vírgula seria considerado o nal do IF e, neste caso, o ELSE seria considerado o comando seguinte ao IF e seria rejeitado.
Exemplo: Suponhamos que x seja uma variável real de um programa e consideremos o seguinte IF:
IF (x > -1) AND (x < 1) THEN BEGIN Writeln('X tem modulo menor do que 1');
Writeln('X tem modulo >= 1'); END;
Se x em determinado momento valer 2, então a expressão booleana (x > -1) AND (x < 1) será falsa e, assim, será mostrada na tela a mensagem X tem modulo >= 1. Os parênteses dessa expressão booleana são essenciais. Sem eles, teríamos
x > -1 AND x < 1
Veja que o AND tem prioriade sobre os operadores de comparação > e < , caríamos com uma expressão sem sentido equivalente a x > (-1 AND x) < 1.
Exemplo: Consideremos o seguinte fragmento de um programa, no qual estão denidas a variável booleana CONTINUAR, a variável do tipo char RESPOSTA, e as variáveis inteiras A e B.
Write('Continua? (s/n) '); Readln(resposta); Continuar := (resposta = 'S') OR (resposta = 's'); (* CONTINUAR será TRUE somente quando RESPOSTA for um S, maiúsculo ou minúsculo ) IF Continuar THEN BEGIN ( Inicio do comando composto 1 ) Write('Forneca o valor de A : '); Readln(A); Write('Forneca o valor de B : '); Readln(B); END ( Fim do comando composto 1. Nao pode ter ponto-e-vírgula aqui ) ELSE BEGIN ( Inicio do comando composto 2 ) Writeln; Writeln('Pressione ENTER para encerrar'); Readln; END; ( Fim do comando composto 2 e fim do IF *) ...
No IF acima, se CONTINUAR for verdadeira, então serão solicitados valores para A e B. Em caso contrário, o programa esperará ser pressionado a tecla ENTER para encerrar. Nas constantes do tipo char ou string, é feita distinção entre letras minúsculas e maiúsculas. Logo, 'S' é considerado diferente de 's'.
Exemplo: Queremos, neste exemplo, elaborar um programa que solicite do usuário um número real qualquer x e que seja mostrado na tela a sua raiz quadrada. Se, por exemplo, x for igual a 4, queremos ver na tela uma mensagem como:
A raiz quadrada de 4.000 é 2.
IF (nome1 > nome2) THEN BEGIN nome1 := nome2; nome2 := nome1; END; ...
não faria a troca desejada. Neste caso, nome1 e nome2 cariam ambas iguais a 'Ana' e o valor 'Joao' estaria perdido.
Exemplo: O programa a seguir, testa se três números reais fornecidos pelo usuário podem ser usados como medidas dos lados de um triângulo retângulo. Exige-se que os valores sejam todos positivos e fornecidos em ordem crescente. Uma vez fornecido os números, o teste para saber se eles formam um triângulo retângulo ou não será testar se o quadrado do maior deles é a soma dos quadrados dos menores.
PROGRAM TrianguloRetangulo; VAR a, b, c: real; teste: boolean; BEGIN Write('Forneca 3 números positivos em ordem crescente: '); Readln(a, b, c); teste := (a > 0) and (b > 0) and (c > 0) and (a < b) and (b < c); (* TESTE será TRUE somente quando as condições desejadas forem satisfeitas *) IF teste THEN BEGIN IF (Sqr(c) = Sqr(a) + Sqr(b)) THEN BEGIN Writeln(a:6:2, ',', b:6:2, ' e ', c:6:2, ' formam um', ' triangulo retangulo.'); END ELSE BEGIN Writeln(a:6:2, ',', b:6:2, ' e ', c:6:2, ' nao ', 'formam um triangulo retangulo.'); END; END; ELSE BEGIN Writeln('Os valores fornecidos devem ser positivos e ', 'em ordem crescente.'); END; END.
Observe que temos dois IF's encaixados. O IF mais interno (IF (Sqr(c)...) só será executado quando TESTE for TRUE.
Exemplo: Sendo fornecidos 3 números reais, o programa a seguir mostra o maior entre eles.
PROGRAM MaiorDeTres; VAR x, y, z, maior: real; BEGIN Write('Digite tres numeros: '); Readln(x, y, z); Writeln; IF (x > y) THEN BEGIN IF (x > z) THEN BEGIN maior := x; END; ELSE BEGIN maior := z; END END ELSE BEGIN IF (y > z) THEN BEGIN maior := y; END ELSE BEGIN maior := z; END; END; Writeln('O maior dos tres é' ', maior:6:2) END.
Observe a ausência do ponto-e-vírgula em muitas das linhas acima. Exemplo: Resolver uma equação do segundo grau, sendo fornecidos seus coecientes a, b e c. Nosso roteiro na elaboração do programa será o seguinte:
x 1 = −b+
√ ∆ 2 a x 2 = −b−
√∆ 2 a
Estamos colocando o módulo na parte imaginária simplesmente porque queremos que x1 tenha parte imaginária positiva e x2 a parte imaginária negativa, independentemente de a ser positivo ou não.
Após a execução desse programa, temos na tela mensagens como:
2 EQUACAO: ( 1.00)x + ( -2.00)x + ( 3.00) = 0 Raizes complexas: 1.00 + 1.41 i 1.00 - 1.41 i
Deixamos aos usuários com uma disposição maior de trabalho o exercício de melhorar a saída desses resultados, fazendo-a mais próxima do usual. Por exemplo, no exemplo executado acima, seria mais interessante (e mais trabalhoso) mostrar uma linha como
2 EQUACAO: x - 2 x + 3 = 0.
Observação: Um dos aspectos que mais causam confusão com relação ao IF em qualquer linguagem de programação é o IF encaixado (também chamado de IF aninhado). O problema consiste na diculdade de se indenticar que ELSE está relacionado com qual IF. Nestes casos uma boa endentação pode ajudar. Observe o seguinte IF:
IF condição1 THEN BEGIN IF condição2 THEN BEGIN comando1; END; END ELSE BEGIN comando2; END;
A qual dos dois IF's anteriores o ELSE se refere? A forma na qual os IF's foram escritos sugere erroneamente que o ELSE está relacionado com o primeiro IF. No entanto, ele está relacionado com o segundo IF. Em geral, o ELSE está ligado ao IF mais próximo. Assim, uma forma melhor de escrever o fragmento acima é:
IF condição1 THEN BEGIN IF condição2 THEN BEGIN comando1; END ELSE BEGIN comando2; END; END;
Se quiséssemos realmente que o ELSE estivesse relacionado com o primeiro IF, então a forma correta de se escrever seria:
IF condição1 THEN BEGIN IF condição2 THEN BEGIN comando1; END; END ELSE BEGIN comando2; END;
Este tipo de erro lógico em um programa, em geral, é difícil de se detectar. Ele costuma ser chamado de "armadilha dos IF's encaixados".
4.2.1 EXERCÍCIOS DE FIXAÇÃO
1 a^ Questão) Escreva o programa referente ao uxograma da gura 4.1.
Figura 4.1: Fluxograma A
2 a^ Questão) Para os valores (a=5) (b=7) e (c=9), assinale com X a seqüência de execução dos Algoritmos abaixo:
a) SE a = 5 E b = 7 Entao ( ) c: c + 1 ( ) senão ( ) c := c - 1; ( ) fim-se ( )
fim-se Escrever X
c) Resposta: ______ Se (A > 2) E (B < 7) entao X := (A + 2) * (B - 2) senao X := X := (A + B) * D / (C + D) fim-se Escrever X
d) Resposta: ______ Se (A >= 2) OU (C < 1) Entao X := (A + D) / 2; senao X := D * C; fim-se Escrever X
e) Resposta: ______ Se nao (A > 2) ou nao (B < 7) entao X := A + E; senao X := A / E; fim-se Escrever X
f) Resposta: ______ Se nao (A > 3) e nao (B < 5) entao X := A + D; senao X := D / B fim-se Escrever X
1 a^ Questão) Faça um programa que leia dois números inteiros A e B da entrada padrão (teclado) e retorne o quociente da divisão entre A e B. O programa deve vericar, previamente à divisão, se o valor de B é diferente de zero.
2 a^ Questão) Leia um valor inteiro X e diga se ele é par ou ímpar. 3 a^ Questão) Escreva um algoritmo para receber o sexo e a idade de uma pessoa. Se a pessoa for do sexo feminino e tiver menos de 25 anos, imprimir o nome e a mensagem: ACEITA. Caso contrário, imprimir o nome e a mensagem não aceita. (Considerar para o Sexo as letras F,f,M ou m).
4 a^ Questão)Faça um programa que leia dois números inteiros A e B da entrada padrão (teclado) e imprima o maior deles. Dê um tratamento caso estes números forem iguais.
5 a^ Questão)Escreva um algoritmo para receber a sigla e o Estado de uma pessoa e imprimir uma das seguintes mensagens:
6 a^ Questão)Faça um programa que leia dois inteiros A e B e imprima a soma destes valores se eles forem iguais, senão, ou seja, se forem diferentes imprima o seu produto.
7 a^ Questão)Leia três lados de um triângulo e diga que:
i. O triângulo é equilátero se todos os lados forem iguais;
ii. O triângulo é escaleno se todos os lados forem diferentes;
iii. O triângulo é isóceles se apenas dois lados forem iguais.
8 a^ Questão) Escreva um algoritmo para o calcula das raízes de uma equação do segundo grau. 9 a^ Questão)Escreva um algoritmo que leia o código de um aluno e suas três notas. Calcule a média ponderada do aluno, considerando que o peso para a maior nota seja 4 e para as duas restantes,
10 a^ Questão) Faça um algoritmo que leia um no^ inteiro e mostre uma mensagem indicando se este número é par ou ímpar, e se é positivo ou negativo.
11 a^ Questão) Tendo como dados de entrada a altura e o sexo de uma pessoa (M masculino e F Feminino), construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:
12 a^ Questão)Um usuário deseja um algoritmo onde possa escolher que tipo de média deseja calcular a partir de 3 notas. Faça um algoritmo que leia as notas, a opção escolhida pelo usuário e calcule a média.
1 - aritmética 2 - ponderada (3,3,4)
13 a^ Questão) Elaborar um algoritmo que lê 3 valores a,b,c e verica se eles formam ou não um triângulo. Supor que os valores lidos são inteiros e positivos. Caso os valores formem um triângulo, calcular e escrever a área deste triângulo. Se não formam triângulo escrever os valores lidos. ( se a > b + c não formam triângulo algum, se a é o maior).
14 a^ Questão) O departamento que controla o índice de poluição do meio ambiente mantém 3 grupos de indústrias que são altamente poluentes do meio ambiente. O índice de poluição aceitável varia de 0,05 até 0,25. Se o índice sobe para 0,3 as indústrias do 1o grupo são intimadas a suspenderem suas atividades, se o índice cresce para 0,4 as do 1o e 2o grupo são intimadas a suspenderem suas atividades e se o índice atingir 0,5 todos os 3 grupos devem ser noticados a paralisarem suas atividades. Escrever um algoritmo que lê o índice de poluição medido e emite a noticação adequada aos diferentes grupos de empresas.
15 a^ Questão) Escrever um algoritmo que leia o tempo de duração em segundos de um determinado evento em uma fábrica e informe-o expresso no formato horas:minutos:segundos.
O comando IF-THEN-ELSE permite que um entre dois comandos seja executado. O comando CASE permite que seja selecionado um entre vários comandos. Desse modo, o CASE funciona como uma generalização do IF com a seguinte restrição: a expressão que é usada para selecionar os comandos deve ser do tipo ordinal. Sua sintaxe é:
CASE expressão OF val_1 : comando1; val_2 : comando2; ... ... ELSE comandoN; END;
O valor da expressão ordinal é avaliado e comparado com cada valor alvo val_1, val_2, .... Se existir algum valor alvo que coincida com o valor da expressão, então será executado apenas o comando que estiver associado aquele valor. Se o valor da expressão não coincidir com nenhum valor alvo, então será executado o comando que estiver associado ao ELSE, se esse comando existir. O ELSE de um CASE é opcional. Para encerrar o CASE deveremos ter um END, mas não temos um BEGIN para iniciar.
+---+ val_1 +----------+ | e |--------->----| comando1 |---->----+ | x | +----------+ | | p | val_2 +----------+ | | r |--------->----| comando2 |---->----+ | e | +----------+ | | s | ... ... | | s | | | ã | ELSE +----------+ | | o |--------->----| comandoN |---->----+ +---+ +----------+ | v
Exemplo: Suponhamos que x seja uma variável inteira. Então o comando CASE abaixo executará o comando1 quando tivermos x = 5, o comando2 quando x = 11, o comando3 quando x = -4 e o comando4 quando x for diferente desses três valores anteriores.
CASE x OF 5 : comando1; 11 : comando2; -4 : comando3; ELSE comando4; END;
Em um CASE, no lugar de um único valor alvo, podemos ter um lista de valores alvo associados a um mesmo comando. Nessa lista, os valores devem ser separados por vírgulas ou fornecidos em forma de intervalo valor1..valor2, onde valor1 e valor2 são, respectivamente, os limites inferior e superior do intervalo. Por exemplo, 1..1000 é uma forma abreviada de se referir aos inteiros de 1 a 1000 e 'A'..'G' é o mesmo que 'A', 'B', 'C', 'D', 'E', 'F', 'G'.
Exemplo: Seja N inteiro que possa assumir em um programa valores de 0 a 100. Consideremos o seguinte CASE:
7, 9 : Write('N impar, N <= 10'); 2, 4, 6, 8, 10 : Write('N par, N <= 10'); 11..20 : Write('11 <= N <= 20'); 21..100 : Write('21 <= N <= 100'); END;
De acordo com o valor de N, será mostrada apenas uma das mensagens "N impar, N <= 10", "N par, N <= 10", "11 <= N <= 20"ou "21 <= N <= 100".
Exemplo: Consideremos no CASE abaixo, CH como uma variável do tipo ordinal char.
CASE Ch OF 'A'..'Z', 'a'..'z' : Writeln('E'' uma letrá); '0'..'9': Writeln('E'' um algarismó); '+', '-', '/', '*': Writeln('E'' uma operacaó); ELSE Writeln('E'' um caracter especial'); END;
De acordo com o valor de CH, será mostrada uma mensagem especíca, dizendo se CH é letra, digito, operador ou símbolo especial ('<', ' ?', '[', '$', '%', ...)
Exemplo: O programa a seguir lê dois números reais A e B do teclado e mostra na tela um menu onde o usuário poderá selecionar uma das operações A+B, A-B, A/B, A*B ou A elevado a B. Uma vez feita a escolha da operação, seu resultado será mostrado na tela. Para ler qual foi o número da opção do menu, poderíamos usar um READLN(opcao), mas não vamos usá-lo. Vamos usar um outro comando de entrada chamado READKEY. Sua sintaxe é:
Variável := READKEY;
O READKEY espera que seja digitado um caracter do teclado e o associa à variável do tipo char escrita antes do símbolo de atribuição ( := ). Além disso, READKEY não mostra o caracter digitado na tela, nem espera ser pressionado ENTER. Os comandos CASE e READKEY são ideais para serem usados em menus.
PROGRAM Menu;
1 a^ Questão) Em que situações é mais indicado o uso da estrutura CASE-OF? 2 a^ Questão) Em que situações não podemos utilizar a estrutura CASE-OF? 3 a^ Questão)Desenvolva um programa que leias dois números inteiros da entrada padrão com os nomes A e B e, em seguida, implemente um menu principal com as seguintes opções:
a. A + B b. A - B c. A * B d. A / B
Em seguida, efetue e mostre o resultado da operação determinada pela opção escolhida.
4 a^ Questão) Faça um programa em Pascal que leia um número que represente um mês do ano. Após a leitura, imprima o mês correspondente por extenso. Caso o número entrado não esteja na faixa de 1 até 12, imprima uma mensagem informando ao usuário que o mês é inválido.
5 a^ Questão) Faça um programa em pascal que leia a idade de uma pessoa e informe o seu grau de maturidade de acordo com a tabela abaixo:
Idade Classificação 0 até 3 Bebê 4 até 10 Criança 11 até 18 Adolescente Acima de 18 Adulto
6 a^ Questão) Supondo que a cobrança de imposto de renda na fonte seja feita com base na tabela abaixo, elabore um programa que mostre na tela o valor do imposto, quando o usuário fornecer o valor do salário (inteiro).
| salario (em Cr$) | alíquota | parcela a deduzir | +------------------------+----------+-------------------+ | até 200000 | ---- | ----- | | de 200001 a 300000 | 5% | 10000 | | de 300001 a 400000 | 10% | 25000 | | de 400001 a 500000 | 15% | 45000 | | a partir de 500001 | 20% | 70000 | +------------------------+----------+-------------------+
Por exemplo, para um salário de 350000, temos uma alíquota de 10valor do imposto, segundo a tabela, deverá ser de
350000 * 0.10 - 25000 = 10000 cruzeiros.
7 a^ Questão) Em cada caso abaixo, determine o valor do inteiro x após a execução do seguinte CASE, sabendo que o valor do inteiro y antes da execução do CASE é:
a) y = 7; CASE y OF -10..0 : x := 5; b) y = -7; 2, 4 : x := y div 2 + Sqr(y - 1); 5..10 : BEGIN c) y = 2; IF Odd(y) THEN y := 12; x := Round(Sqrt(y + 5)) d) y = -2; END; ELSE e) y = 20 IF y > 4 THEN x := 0 ELSE x := 1; END;
ii. Antes de cada iteração subseqüente, a variável de controle recebe o próximo valor (no caso do FOR-TO) ou o valor anterior (no caso do FOR-DOWNTO) do intervalo ValorInicial..ValorFinal (ou ValorFinal..ValorInicial).
iii. O laço assim criado termina após a iteração corresponde ao ValorFinal.
Exemplo: FOR i := 1 TO 5 DO Writeln(Sqr(i)); onde i é do tipo inteiro, funciona da seguinte forma:
i. É atribuído o valor 1 a i e, como 1 < 5, é executado o comando escrito após o DO, o Writeln(Sqr(i)). Assim, é mostrado o quadrado de 1 na tela;
ii. A variável i passa a ter o valor seguinte ao anterior, ou seja, i passa a valer 2 e o comando é executado. É mostrado, então, o quadrado de 2 na tela.
iii. A variável de controle i vai ser aumentada de uma em uma unidade e a cada acréscimo o WRITELN é executado. Esse processo acaba quando a variável atingir o valor 5.
Quando esse FOR for completamente executado, teremos os valores 1, 4, 9, 16 e 25 mostrados na tela, um em cada linha.
Exemplo: FOR i := 5 DOWNTO 1 DO Writeln(Sqr(i)); Este exemplo funciona de forma semelhante ao anterior mas com uma diferença: os valores de i vão variar de 5 até 1, diminuindo de 1 em 1. É mostrado na tela os valores 25, 16, 9, 4 e 1, nessa ordem, um em cada linha.
Exemplo: Seja x uma variável do tipo char. O FOR a seguir mostra na tela todas as letras maiúsculas ABC...XYZ.
FOR x := 'A' TO 'Z' DO BEGIN Write(x); END;
No entanto,
FOR x := 'z' DOWNTO 'a' DO Write(x);
mostra o conjunto de todas as letras minúsculas: zyxv...cba. Veja o exemplo abaixo:
FOR i := 100 TO 50 DO BEGIN comando; END;
FOR j := 1 DOWNTO 20 DO BEGIN comando; END;
No FOR i... e no FOR j... acima, o comando escrito após o DO não será executado nenhuma vez. Exemplo: A variável de controle do FOR, quando for numérica, terá de ser do tipo inteiro e só poderá aumentar ou diminuir de 1 em 1. Podemos multiplicar ou dividir essa variável todas as vezes em que ela aparecer no comando, como forma de aumentar ou diminuir o valor do incremento em cada iteração. Por exemplo,
FOR i := 0 TO 100 DO Writeln(2*i)
lista todos os pares de 0 a 100, e FOR i := 200 DOWNTO 100 DO Writeln(ArcTan(i/100)) lista os valores de ArcTan(2), ArcTan(1.99), ArcTan(1.98),... até ArcTan(1).
Exemplo: Os tipos pré-denidos byte e char ambos têm 256 valores. As funções que estabelem uma bijeção entre esses valores são as funções ORD e CHR, inversas uma da outra.
CHR(n) ---> n-ésimo caracter do tipo char; ORD(x) ---> Ordinal do caracter x.
Os valores que o n acima podem assumir são de 0 a 255 e o x desde o primeiro ao último caracter pré-denido do computador (de um total de 256).
CHR(n) também pode ser denotado como #n. Alguns valores particulares dessas funções são:
ORD('$') = 36 CHR(36) = '$' ou #36 = '$' ORD('+') = 43 CHR(43) = '+' ou #43 = '+' ORD('7') = 55 CHR(55) = '7' ou #55 = '7' ORD('A') = 65 CHR(65) = 'A' ou #65 = 'A' ORD('B') = 66 CHR(66) = 'B' ou #66 = 'B' ORD('C') = 67 CHR(67) = 'C' ou #67 = 'C' ORD('Z') = 90 CHR(90) = 'Z' ou #90 = 'Z' ORD('') = 92 CHR(92) = '' ou #92 = '' ORD('a') = 97 CHR(97) = 'a' ou #97 = 'a' ORD('z') = 122 CHR(122) = 'z' ou #122 = 'z'
As tabelas de valores de CHR ou ORD costumam ser chamadas de tabelas ASCII (American Standard Code for Information Interchange). O programa a seguir, gera na tela uma tabela ASCII.
PROGRAM TabelaASCII; { ---------------------------------------- } { TABELA ASCII } { ---------------------------------------- } USES Crt; VAR i: byte; BEGIN ClrScr; Writeln(' n Chr(n)'); Writeln('-----------'); FOR i := 0 TO 255 DO BEGIN