Escolar Documentos
Profissional Documentos
Cultura Documentos
b a
= =φ =1,61803...
a (a+ b)
A menor parte está para a maior assim
como a maior está para o todo...
1
1 1/1 = 1,0
2 2/1 = 2,0
3 3/2 = 1,5
5 5/3 = 1,6666
8 8/5 = 1,6000
13 13 / 8 = 1,6250
21 21 / 13 = 1,6154
34 34 / 21 = 1,6190
55 55 / 34 = 1,6176
89 89 / 55 = 1,6182
1
Algoritmos IFSP prof. Claudio.
Índice
1 - Programação..................................................................................................3
1.1 - Conceitos........................................................................................................................ 3
1.2 - Linguagens e Programas................................................................................................ 3
1.3 - Representação Numérica............................................................................................... 3
1.3.1 - Mudanças de Base................................................................................................... 4
1.4 - Algoritmos...................................................................................................................... 5
1.4.1 - Descrição Narrativa................................................................................................. 6
1.4.2 - Fluxograma............................................................................................................. 6
1.4.3 - Pseudo-código (Português estruturado ou Portugol)...............................................7
1.4.4 - Relação entre Português Estruturado e Fluxograma...............................................8
1.5 - Tipos de Dados............................................................................................................. 13
1.5.1 - Variáveis................................................................................................................ 13
1.5.2 - Constantes............................................................................................................ 13
2 - Linguagem Pascal.........................................................................................14
2.1 - Introdução.................................................................................................................... 14
2.2 - Operações.................................................................................................................... 15
2.3 - Variáveis em Pascal...................................................................................................... 18
2.3.1 - Constantes............................................................................................................ 18
2.3.2 - Declaração de Variáveis........................................................................................ 18
2.3.3 - Enumeração.......................................................................................................... 19
2.3.4 - Tipos Primitivos Padrão em Pascal........................................................................19
2.4 - Entrada e Saída de Dados............................................................................................ 22
2.4.1 - Entrada de Dados.................................................................................................. 22
2.4.2 - Saída de dados...................................................................................................... 22
2.5 - Comandos e Blocos...................................................................................................... 24
2.6 - Decisão......................................................................................................................... 24
2.6.1 - Decisão Simples.................................................................................................... 24
2.6.2 - Decisão Composta................................................................................................. 26
2.7 - Laços............................................................................................................................ 27
2.7.1 - For......................................................................................................................... 27
2.7.2 - While..................................................................................................................... 30
2.7.3 - Repeat Until .......................................................................................................... 31
2.8 - Estruturas de Dados..................................................................................................... 35
2.8.1 - Vetores.................................................................................................................. 35
2.8.2 - Matrizes................................................................................................................. 38
2.9 - Procedimentos e Funções............................................................................................. 42
2
Algoritmos IFSP prof. Claudio.
1 - Programação
1.1 - Conceitos
Computador:
autômato que executa processos computacionais segundo regras precisamente
estabelecidas;
possui um número limitado de instruções conhecidas, que entende e obedece;
processa com rapidez e confiabilidade;
processa (incansavelmente) sequências longas de instruções que se transformam em
um conjunto quase infinito de ações;
O ato de agrupar sequências de instruções em “receitas” representando tarefas com -
putacionais é chamado de programação.
3
Algoritmos IFSP prof. Claudio.
Exercícios:
1.Converta cada número abaixo para a base 10:
a)1011 2 b)100101 2 c)1110101 2
d)108 e)1318 f)10148
g)FF16 h)100016 i)ABCD16
2.Converta cada número abaixo da base 10 para a base indicada:
a)10 → base2 b)33 → base2 c)256 → base2
d)100 → base8 e)64 → base8 f)1001 → base8
g)256 → base16 h)762 → base16 i)51966 → base16
4
Algoritmos IFSP prof. Claudio.
1.4 - Algoritmos
Conjunto de regras de operação cuja aplicação permite resolver um problema enunciado
por meio de um número finito de operações. Um algoritmo pode ser traduzido segundo uma
linguagem de programação em um programa que pode ser executado por um computador.
O exemplo mais corriqueiro de algoritmo é
BISCOITOS DE NOZES
uma receita culinária (veja Quadro 1.1): cada Ingredientes:
passo deve ser detalhado e executado em • 1 xícara de manteiga ou margarina
sequência para se atingir o resultado final • 1/2 xícara açúcar de confeiteiro
desejado. • 1 colher (chá) baunilha
• 2 1/4 xícaras de farinha de trigo
Ao descrever um algoritmo devemos definir • 1 pitada de sal
as ações de modo claro e específico. Partimos de • 3/4 xícara de nozes bem picadas
um estado inicial e, após um período de tempo • Açúcar de confeiteiro para enfeitar
previsto, chegamos a um resultado previsto e Preparo:
definido. 1 – Misture bem a manteiga e o açúcar. 2 – Junte a
baunilha e a farinha peneirada com o sal. 3 – Misture
Um algoritmo estabelece uma norma de novamente. 4 – Adicione as nozes e leve a massa à
execução e um final previsto que sempre será geladeira por uns 15 minutos. 5 – Aqueça o forno em
alcançado se o mesmo algoritmo for executado temperatura média (200 graus). 6 – Faça bolinhas de
novamente. 2 cm de diâmetro e 7 – coloque numa assadeira sem
untar. 8 – Leve para assar por uns 10 a 12 minutos.
Um exemplo seria a definição de como 9 – Passe no açúcar de confeiteiro enquanto estão
mornos.
desenhar um quadrado. Podemos dizer que, para
desenhar um quadrado, podemos fazer quatro Quadro 1.1: Exemplo de Algoritmo
vezes as ações de riscar um traço e mudar a
direção em 90° para a direita. Vejamos como fica no programa Scratch (scratch.mit.edu):
4 3 2 1 0
5
Algoritmos IFSP prof. Claudio.
Há diversos modos de expressar um algoritmo:
1.4.2 - Fluxograma
Comandos são representados por símbolos gráficos e uma indicação do fluxo:
6
Algoritmos IFSP prof. Claudio.
Repare que se o número for menor ou igual a zero ele nem calcula, vai direto
para “Acabei!”.
Repetir/Enquanto: Inicia um grupo de comandos e só volta a repetir se a condição
de Enquanto for verdadeira.
Exemplo Escreva “Digite um numero:”
Leia numero
Repetir
Escreva numero, “ ao quadrado é “, numero * numero
numero numero – 1
Enquanto (numero > 0)
Escreva “Acabei!”
Repare que ele só vai checar se continua a repetição depois de ter executado
seus comandos. Se o número for negativo, ele escreve e depois vai pra “Acabei!”
Faça para: Repete uma interação um número fixo e conhecido de vezes.
Exemplo Faça para numero de 1 até 10
Escreva numero, “ ao quadrado é “, numero * numero
Fim_Faça
Escreva “Acabei!”
Sabe-se que são 10 vezes.
Decisão:
Se uma condição for verdadeira, então realiza uma ação, senão executa outra.
Exemplo 1 Escreva “Digite sua idade:”
2 Leia idade
3 Se (idade > 0 E idade < 12)
4 Então
5 Escreva “A criança tem “, idade, “anos.”
6 Senão
7 Se (idade < 18)
8 Então
9 Escreva “O adolescente precisa de permissão.”
10 Senão
11 Escreva “Adulto, hein? É bom ter juízo.”
12 Fim_Se
7
Algoritmos IFSP prof. Claudio.
13 Fim_Se
Não é obrigatório ter senão.
Escreva x 3
2
xx–1
1
Fim_Enquanto
...
b) Repetir
...
Saída: Saída:
Leia x
4↵ -2 ↵
Repetir
4 -2
Escreva x
3
xx–1 2
Enquanto (x > 0) 1
...
c) Faça
... 4
8
Algoritmos IFSP prof. Claudio.
9
Algoritmos IFSP prof. Claudio.
Exercícios:
1.Faça o fluxograma ou escreva o pseudo-código de um algoritmo que lê três valores a, b e
c e imprime o maior deles.
2.Faça um algoritmo em Português estruturado que lê um valor para o raio, calcula e
imprime os seguintes resultados para este raio: o perímetro de uma circunferência
(perímetro = 2.π.raio), a área (área = π.raio²) e o volume de uma esfera (volume = 4/3.π.raio³).
Considere π= 3,1416.
3.Desenhe o fluxograma de um algoritmo que lê um valor (em graus Fahrenheit) e
imprime o valor convertido para graus Celsius segundo a fórmula: C = (F-32).5/9 .
4.Faça um algoritmo em Português estruturado que leia quatro valores (a, b, c e d) e
imprime a amplitude entre eles (amplitude é a diferença entre o maior e o menor) e a
média deles (média é a soma dos valores pela quantidade de valores).
5.Faça um algoritmo em Português estruturado que lê três valores – dia, mês e ano atual – e
imprime quantos dias faltam até o ano novo.
6.Faça um algoritmo que lê seis valores: dia, mês e ano de nascimento e dia, mês e ano atual. O
algoritmo diz quantos dias aproximadamente de idade a pessoa tem. Considere todos os
meses com 30 dias e todos os anos não-bissextos.
7.Faça um algoritmo em Português estruturado que leia três valores a, b e c. Supondo que
sejam os lados de um triângulo, o algoritmo deve imprimir “equilátero” se os lados
forem iguais, “isósceles” se apenas dois forem iguais ou “escaleno” se não tiver um lado
igual ao outro. Se não for um triângulo (soma dos dois menores lados for menor que o
valor do maior) então deverá escrever:”não é triângulo”.
8.Sabendo-se que a solução de uma equação de 2 o grau a.x2 + b.x + c = 0 é dada pela
−b± b2 −4.a.c
fórmula x= , apresente um fluxograma ou o pseudo-código de um
2.a
algoritmo que, utilizando a fórmula, resolva uma equação de 2 o grau e apresente as
raízes possíveis, em função de a, b e c ou “não há raízes reais” caso não haja raízes.
9.Desenhe o fluxograma ou escreva o pseudo-código de um algoritmo que, dado um
número inteiro positivo n, calcula a soma de todos os número de 1 até n.
10.Desenhe o fluxograma ou escreva o pseudo-código de um algoritmo que calcula a soma
de todos os números que sejam múltiplos de 5 ou de 7 existentes entre 1 e 10000.
10
Algoritmos IFSP prof. Claudio.
11
Algoritmos IFSP prof. Claudio.
13
Algoritmos IFSP prof. Claudio.
1.5.2 - Constantes
São variáveis cujos valores não podem ser alterados:
PI = 3.1415926537 MAE = “Márcia Marques” NATURAL_DO_BRASIL = V
É convenção usar sempre letras maiúsculas para os nomes de constantes.
Exercícios:
1.Diga quais afirmações abaixo são válidas para atribuir valores a variáveis ou constantes.
Se for inválida, diga o porquê.
a) Apto3xSemJuros = 11.22 b) 5xNoCartao = 119.334 c) NomePai = 12
d) _nome_ = “Augusto” e) nUMcONTA = 1343.11224 f) x1847773 = “São Paulo”
g) Nome Mae = “ Marcia” h) PI = “Juscelino” i) 4x4 = “JEEP”
j) EXP = 2.722 k) CONSTANTE_12 = 0.001 l) valor$ = 1.99
m) reuniao_tercas = V n) 0filhos = V o) ZEROfilhos = F
14
Algoritmos IFSP prof. Claudio.
2 - Linguagem Pascal
2.1 - Introdução
A linguagem de programação Pascal foi criada em torno de 1970 pelo professor de
informática suiço Niklaus Wirth. A linguagem, nomeada em homenagem ao matemático
Blaise Pascal, foi construída de modo a encorajar a programação estruturada e ser didática.
Pascal tornou-se popular na década de 80, com o aparecimento de um compilador
popular chamado Turbo Pascal. O Turbo Pascal evoluiu incluindo conceitos de Orientação a
Objetos (a partir da versão 5.5) e deu origem ao Delphi e sua versão atual multiplataforma
conhecida por Lazarus.
Wirth criou a partir do Pascal outras linguagens de programação: Modula, Modula-2
(1978) e Oberon (1986).
Genealogia da linguagem Pascal:
2.2 - Operações
a) Aritméticas
Número de
Operador Ação operandos
+ soma inteira e de ponto flutuante dois
- subtração inteira e de ponto flutuante um ou dois
* multiplicação inteira e de ponto flutuante dois
/ divisão de ponto flutuante dois
DIV divisão inteira dois
MOD resto de divisão inteira dois
b) Relacionais (sempre DOIS oper.) c) Lógicos
Operador Ação Operador Ação Número de
> maior que operandos
>= maior ou igual a () and e (∧) dois
< menor que
or ou (∨) dois
<= menor ou igual a ()
= igual a not não (¬) um
<> diferente de (≠)
16
Algoritmos IFSP prof. Claudio.
e) Precedência
Em geral: Aritméticos > Relacionais > lógicos:
( ) > not - > * / MOD > +- > < <= = <> >= > > and > or > :=
((ano MOD 4 = 0) and (ano MOD 100 <> 0)) or (ano MOD 400 = 0)
0 0 28 0 28 0
= <> =
V V
and
V F
or
V
2028 é bissexto!
17
Algoritmos IFSP prof. Claudio.
Exercícios:
1.Escreva na notação de Pascal as expressões lógicas (∨ é “ou”, ∧ é “e”, ¬ é “não”):
a) 1 x < y b) (-5 < x < 5) ∧ (5 > y > -5)
c) ¬((x > y) ∨ (y < z)) d) 1 < x y z < 100
e) (x = y) ∧ (y ≠ z) f) ¬(a > b) ∧ ((b < c) ∨ ¬(c < d))
g) (sald > saq) ∨ (cred + sald) > saq h) (idade > 18 ∧ ¬casado) ∨ nfilhos = 0
2.Escreva a expressão lógica que retorna verdadeiro se a variável mes (1 mes 12)
representa um mês que tem 31 dias.
3.Escreva a expressão lógica que retorna verdadeiro se o aluno foi aprovado. Para ser
aprovado, o aluno deve obter notas em avaliações. As avaliações são compostas por
duas provas, dois trabalhos e uma prova geral. As notas das provas têm peso 0,8; dos
trabalhos, 0,2 e provas e trabalhos juntos têm peso 0,9. A nota da prova geral tem peso
0,1. O aluno é aprovado se a média final (média das provas com os trabalhos e da geral)
for maior ou igual a 6,0.
4.Escreva a expressão lógica que reproduz a capacidade do(a) aluno(a) ir a uma festa.
Ele(a) precisa, inevitavelmente, da permissão de um dos pais. Tendo a permissão, ou
ele(a) tem dinheiro para o taxi, ou tem carona, ou permissão para usar o carro. Para
entrar na festa ele(a) precisa ou ter dinheiro para a entrada ou convite.
18
Algoritmos IFSP prof. Claudio.
2.3.1 - Constantes
Constantes são valores tidos como fixos e que, portanto, não podem ser alterados
durante a execução do programa.
Constantes são definidas pela palavra reservada Const, seguida por uma lista de nomes
e seus valores.
Por convenção, os nomes de constantes são maiúsculas.
de nomes de variáveis e, entre parênteses, os valores possíveis que podem assumir.
Forma:
Const nome = valor;
Exemplo:
Const PI = 3.14159237;
NUM_DENTES = 32;
NUM_SEGUNDOS_DIA = 86400;
19
Algoritmos IFSP prof. Claudio.
2.3.3 - Enumeração
A enumeração cria um tipo novo através da discriminação, da listagem dos seus
possíveis valores. A declaração é iniciada pela palavra reservada Type, seguida por uma lista
de nomes de variáveis e, entre parênteses, os valores possíveis que podem assumir.
Forma:
Type t = (v1, v2, v3, ... , vn);
Especificando que o novo “tipo” de dados t poderá assumir apenas um dos possíveis
valores v1, v2, v3, ... , vn .
Exemplos:
Type figura = (retangulo, circulo, triangulo, quadrado);
Type cor_primaria = (azul, vermelho, amarelo);
Type semana = (domingo, segunda, terca, quarta,quinta, sexta, sabado);
Type situacao = (erro, inicial, processando, final);
Type sexo = (masculino, feminino);
Type estado_civil = (solteiro, casado, separado, viuvo, junto);
Os novos tipos definem não só o novo identificador ( figura) como também o conjunto
de valores de identificadores possíveis para ele ( retangulo, circulo etc).
É possível então criar variáveis:
VAR s : sexo;
d : semana;
f : figura;
Atribuições válidas:
s := masculino;
d := quarta;
f := triangulo;
Muito mais claras que: s := 1; d := 4; f := 3;
as quais são as representações internas dos valores enumerados.
Outra vantagem é que as atribuições são controláveis:
f := elipse; ou f := 5; não existem.
21
Algoritmos IFSP prof. Claudio.
b) Real
Os números reais armazenam valores com casas decimais.
Exemplo:
VAR peso : Real;
distancia : Real;
tempo : Real;
23
Algoritmos IFSP prof. Claudio.
Exercícios:
1.Defina três constantes e seus valores fixos.
2.Defina um tipo de enumeração com ao menos três valores possíveis e crie uma variável
atribuindo um valor.
3.Crie as variáveis definindo seus tipos e nomes para os seguintes dados:
a) área em metros quadrados de um apartamento;
b) dados de um cachorro;
c) dados de uma locadora de DVDs.
24
Algoritmos IFSP prof. Claudio.
25
Algoritmos IFSP prof. Claudio.
Exemplos:
1 Program teste (input, output);
2 VAR idade : Integer;
3 altura, saldo : Real;
4 sexo : Char;
5 solteiro : Boolean;
6 BEGIN
7 Write ('Idade: ');
8 Readln(idade);
9 Write ('Altura: ');
10 Readln(altura);
11 Write ('Sexo(m/f):');
12 Readln(sexo);
13 Write ('Saldo: ');
14 Readln(saldo);
15 Writeln('* Saída sem formato ou nova linha *');
16 Write('Você tem ', idade, ' anos, ');
17 Write(altura,' metros, ');
18 Write('seu sexo é', UpCase(sexo), ' ');
19 Write('e o saldo é ', saldo, 'R$ ', saldo);
20 Writeln();
21 Writeln();
22 Writeln('* Saída sem formato com nova linha =');
23 Writeln('Você tem ', idade, ' anos, ');
24 Writeln(altura,' metros, ');
25 Writeln('seu sexo é', UpCase(sexo), ' ');
26 Writeln('e o saldo é ', saldo, 'R$ ', saldo);
27 Writeln();
28 Writeln('* Saída com formato e nova linha *');
29 Writeln('Você tem ', idade, ' anos, ');
30 Writeln(altura:6:2, ' metros, ');
31 Writeln('seu sexo é', UpCase(sexo):5, ' ');
32 Writeln('e o saldo é ', saldo:8:2, 'R$ ':15, saldo:0:2);
33 END.
Saída:
26
Algoritmos IFSP prof. Claudio.
Idade: 21
Altura: 1.78
Sexo(m/f):m
Saldo: 214.37
* Saída sem formato ou nova linha *
Você tem 21 anos, 1.78000000000000E+000 metros, seu sexo éM e o saldo é
2.14370000000000E+002R$ 2.14370000000000E+002
27
Algoritmos IFSP prof. Claudio.
Exercícios:
1.Escreva um programa em Pascal que lê um número inteiro entre 1 e 12 (inclusive) e
imprime TRUE se o mês lido tem 31 dias e FALSE caso contrário.
Observações:
- você não pode usar comandos de decisão (if);
- não é necessário checar se o número é válido; supõe-se que sim.
Refaça, agora em Pascal, os exercícios de 1 até 7 para fluxogramas ou Português
estruturado da página 10.
2.6 - Decisão
O comando de decisão é o responsável por, em função de uma condição, desviar o fluxo
de execução do programa.
28
Algoritmos IFSP prof. Claudio.
1 Writeln('Processando a idade:');
2 If (idade > 0) (* Reparar no deslocamento do código. Chama-se indentação e *)
3 Then (* serve para indicar qual comando é mais interno – está dentro – de
qual *)
4 begin
5 If (idade < 13)
6 Then
7 Write('Criança')
8 Else
9 If (idade < 18)
10 Then
11 Write('Adolescente')
12 Else
13 Write('Adulto');
14 Writeln(' com ', idade,' anos.');
15 end
16 Else
17 Writeln('Idade negativa? Não nasceu ainda?');
18 Writeln('Processando a altura:');
O Else é opcional mas se ele aparece, ele sempre se refere ao último If:
1 If ( (x MOD 2) = 0 ) 1 If ( (x MOD 2) = 0 )
2 Then 2 Then
3 If (x > 0) 3 begin
4 Then 4 If (x > 0)
5 Writeln('Par positivo') 5 Then
6 Else 6 Writeln('Par positivo');
7 Writeln('Ímpar'); 7 end
8 Else
se x for zero → Ímpar!!!
9 Writeln('Ímpar');
se x for zero → não imprime nada;
é par mas não positivo...
Exercício:
1.Faça um programa que, dado um número inteiro n, imprime “o número <valor de n> é
maior/menor/igual a zero” conforme o número for maior, menor ou igual a zero.
29
Algoritmos IFSP prof. Claudio.
30
Algoritmos IFSP prof. Claudio.
2.7 - Laços
Os laços são responsáveis pela interação de comandos dentro de um programa. São eles
que controlam quantas vezes, enquanto o que ou até quando os comandos ou blocos de
comandos serão executados. Assim, eles controlam as repetições e interações dentro de um
programa.
2.7.1 - For
O comando For controla as repetições que tenham um número fixo de vezes para
ocorrer. Definem que uma variável irá de um valor inicial até (inclusive) um valor final. Será
um laço crescente se o valor inicial for menor que o final (e for especificado que vai até – to –
valor final) ou decrescente se valor inicial for maior que final e for especificado que vai
diminuir até – downto – valor final.
Forma:
(* Crescente: valor_inicial valor_final; caso contrário não entra no laço *)
For variável := valor_inicial To valor_final do
comando;
ou
(* Decrescente: valor_inicial valor_final; caso contrário não entra no laço *)
For variável := valor_inicial DownTo valor_final do
comando;
Exemplos:
Código:
1 Program FormaMatriz;
2 VAR i, j, k : Integer;
3 BEGIN
4 For i := 1 to 4 do begin
5 For j := 1 to 6 do begin
6 If (i < j)
7 Then k := j – i
8 Else k := i – j;
9 Write(' (',i,',',j,') ',k);
10 end;
11 Writeln();
12 end;
13 END.
Saída:
(1,1) 0 (1,2) 1 (1,3) 2 (1,4) 3 (1,5) 4 (1,6) 5
(2,1) 1 (2,2) 0 (2,3) 1 (2,4) 2 (2,5) 3 (2,6) 4
(3,1) 2 (3,2) 1 (3,3) 0 (3,4) 1 (3,5) 2 (3,6) 3
(4,1) 3 (4,2) 2 (4,3) 1 (4,4) 0 (4,5) 1 (4,6) 2
31
Algoritmos IFSP prof. Claudio.
Código: Saída:
Program DesenhoAsterisco; 22
Var i,j,tam,m, aux, posit : Integer; 5
BEGIN -5 *****#*****
ReadLn(tam); (* recomendado: 22 *) -4 ****###****
ReadLn(m); (* recomendado: 5 *) -3 ***#####***
posit := -1; -2 **#######**
For i := -m to m do begin -1 *#########*
aux := posit * i; 0 ###########
if (i = 0) 1 *#########*
Then 2 **#######**
posit := 1; 3 ***#####***
Write(i:2,' '); 4 ****###****
For j := 1 to aux do 5 *****#*****
Write('*');
For j := 1 to (tam DIV 2) - (2 * aux) do
Write('#');
For j := 1 to aux do
Write('*');
Writeln;
end;
END.
Código:
Program ForAninhado;
Var i, j, k, m, f : Integer;
BEGIN
For i := 1 to 3 do begin
f := 3;
Write(i:3, ' :');
For j := 1 to 4 do begin
Write(j:f,' (');
f := 8;
For k := 1 to 3 do begin
Write(k:2, ' <');
For m := 1 to 2 do
Write(m:2);
Write(' > ');
end;
WriteLn(') ');
end;
Writeln;
end;
END.
32
Algoritmos IFSP prof. Claudio.
2: 1(1<12> 2<12> 3<12> )
2(1<12> 2<12> 3<12> )
3(1<12> 2<12> 3<12> )
4(1<12> 2<12> 3<12> )
Exercícios:
1.Faça um programa que imprime a contagem regressiva de 1000 até 1 e depois imprime
“fogo!”.
2.Faça um programa em Pascal que crie uma escala de um termômetro. A escala impressa
vai de 0 até 100 em incrementos de 1°C. Ao lado de cada gradação em Celsius o
programa também imprime o valor correspondente em Fahrenheit, sendo que a conversão
é F = 9/5.C + 32.
4.Faça um programa que calcula e imprime a soma dos múltiplos de 7 que estão entre 1 e
10000.
5.Faça um programa que lista todos as permutações possíveis de se sortear 'A', 'B' ou 'C'
quatro vezes (com reposição). A resposta seria algo como 'AAAA', 'AAAB', 'AAAC',
'AABA', ... , 'CCCC'.
6.Faça um programa que lê um valor inteiro n, (0 < n < 11) e imprime a tabuada de n.
7.Faça um programa que imprime todas as tabuadas: de 1 ao 10.
8.Faça um programa que lê um valor ímpar inteiro n, (2 < n < 20) e imprime as figuras a
seguir, com n caracteres de lado (os exemplos mostram n = 5):
a) b) c) d) e) f) g)
##### ### # # ##### # #
# # # # ## ## #### # ##
# # # # ### ### ### ##### # #
# # # # #### #### ## # ##
##### ### ##### ##### # # #
Observação: os itens c a g precisam de dois laços e g é particularmente complexo.
9.Faça um programa que imprime todas as equações de segundo grau a.x2 + b.x + c = 0
que têm uma ou duas raízes reais (não imprima as raízes, apenas as equações) para todos
os valores inteiros de a, b e c que estejam entre -3 e 3.
Exemplo: -3.x2 + -3.x + 0 = 0
-3.x2 + -3.x + 1 = 0
-3.x2 + -3.x + 2 = 0
...
Reparar que (a=-3, b=-3, c=-3 / c=-2 / c=-1) não foram impressas por não terem raízes reais!
Note ainda que não deve ser calculado para quando a = 0, pois a equação não é de 2o
33
Algoritmos IFSP prof. Claudio.
grau!
10.Faça um programa que calcula quanto é o valor resultante quando são depositados
R$ 430,00 por 72 meses em uma poupança que rende 1% de juros ao mês.
34
Algoritmos IFSP prof. Claudio.
2.7.2 - While
O comando While é bastante semelhante ao For. Ele mantém a interação enquanto a
condição for verdadeira e a verifica antes de começar o novo ciclo. A principal diferença entre
o While e o For é que o primeiro não sabe de antemão quantas vezes o processo vai se
repetir.
Forma:
While (expressão_lógica) do
comando;
Exemplos:
Código:
1 PROGRAM While_raiz;
2 VAR valor:Double;
3 cnt:Integer;
4 BEGIN
5 Readln(valor);
6 cnt := 1;
7 Write(valor:10:4);
8 While (valor > 1.5) do begin
9 valor := Sqrt(valor);
10 cnt := cnt + 1;
11 Write(valor:10:4);
12 end;
13 Writeln;
14 Writeln('Precisei tirar ',cnt,' raízes: ', valor:10:4);
15 END.
Saída:
100
100.0000 10.0000 3.1623 1.7783 1.3335
Precisei tirar 5 raízes: 1.3335
35
Algoritmos IFSP prof. Claudio.
Saída:
Entre com um custo (custo > 0): 5
Entre com a taxa de juros (0 < juros < 3): 5
Entre com a quantidade de meses (mês > 3): 5
Entre com um custo (custo > 0): 100
Entre com a taxa de juros (0 < juros < 3): 1
Entre com a quantidade de meses (mês > 3): 1
Entre com um custo (custo > 0): 100
Entre com a taxa de juros (0 < juros < 3): 1
Entre com a quantidade de meses (mês > 3): 10
Ok.
custo: 100.00 juros:1.000 meses:10
36
Algoritmos IFSP prof. Claudio.
1 PROGRAM AcharRaiz;
2 VAR delta, x1, x2, xp, y1, y2, yp, xr, yr : Double;
3 int : Integer;
4 BEGIN
5 Write('Entre valor inicial inferior:');
6 Readln(x1);
7 Write('Entre valor inicial superior:');
8 Readln(x2);
9 Write('Entre precisão:');
10 Readln(delta);
11 int := 0;
12 Repeat
13 y1 := x1*x1*x1 - 12*x1*x1 + 47*x1 - 59.3; (* cálculo no ponto x1 *)
14 y2 := x2*x2*x2 - 12*x2*x2 + 47*x2 - 59.3; (* cálculo no ponto x2 *)
15 xp := (x1 + x2) / 2;
16 yp := xp*xp*xp - 12*xp*xp + 47*xp - 59.3;(* cálculo no ponto xp *)
17 int := int + 1;
18 Write(int:3,x1:15:10,'(',y1:12:9,')');
19 Write(xp:15:10,'(',yp:12:9,')',x2:15:10,'(',y2:12:9,')');
20 If ( (yp*y2) < 0 ) (*se o ponto médio e y2 tem sinais diferentes*)
21 Then begin (* então "encolha" puxando x1 *)
22 x1 := xp;
23 y1 := yp; Creator:KDE 4.4.5x²(KDE
f x= x³−12 4.4.5)
47 x−59,3
24 end CreationDate:sex out 15 16:04:17 2010
25 Else begin(* senão puxando x2 *)
26 x2 := xp;
27 y2 := yp;
28 end;(* até que resposta < delta *)
29 Until( (Abs(yp) < delta) );
30 If ( Abs(y1) < Abs(y2) )
31 Then begin
32 xr := x1;
33 yr := y1;
34 end
35 Else begin
36 xr := x2;
37 yr := y2;
38 end;
39 Writeln('A raiz é ', xr:15:10,' (',Abs(yr):-12:10,' < ', delta:12:10,')');
40 END.
37
Algoritmos IFSP prof. Claudio.
10 2.7492187500(-0.006008149) 2.7529296875( 0.007646061) 2.7566406250( 0.021197230)
11 2.7492187500(-0.006008149) 2.7510742188( 0.000831856) 2.7529296875( 0.007646061)
12 2.7492187500(-0.006008149) 2.7501464844(-0.002584919) 2.7510742188( 0.000831856)
13 2.7501464844(-0.002584919) 2.7506103516(-0.000875725) 2.7510742188( 0.000831856)
14 2.7506103516(-0.000875725) 2.7508422852(-0.000021733) 2.7510742188( 0.000831856)
38
Algoritmos IFSP prof. Claudio.
Exercício:
Vocês já estão capacitados para fazer em Pascal os exercícios feitos para Português
estruturado e fluxograma (todos os exercícios da página 10).
1.Faça um programa em Pascal que lê (e faz a validação) dos números reais
juros (0 < juros < 5),
depósito_inicial (depósito_inicial > 100),
depósito_mensal (depósito_mensal > 0),
número_de_meses (número_de_meses > 12)
e imprime o capital_final com o rendimento de juros, a partir de um depósito inicial e o
acréscimo de um depósito mensal ao fim do período de número de meses.
2.Altere o programa do Exercício 1 de modo que opere de modo inverso, ou seja, diga
quantos meses serão necessários para que a partir de um depósito_inicial e um
investimento de depósito_mensal todo mês, com um rendimento de juros mensal, seja
atingido um capital_final pré-definido.
3.“Corredor Cansado”:Faça um programa que conta quantos minutos são necessários para
um corredor correr 1000 metros sendo que, a cada minuto, o corredor cumpre metade
da distância que resta. Faça uma tabela imprimindo os minutos e a distância percorrida
até ali.
4.Faça um programa que joga contra um humano. O programa conta quantos palpites o
jogador precisou até adivinhar um número inteiro sorteado entre 1 e 1000, inclusive.
Cada vez que o jogador erra, o programa diz quantas tentativas já foram feitas e dá uma
dica. A dica informa se o número chutado é maior ou menor que o número sorteado. O
jogo vai estreitando o intervalo de números possíveis conforme as tentativas vão sendo
feitas. O programa ainda imprime uma avaliação do desempenho do jogador, segundo a
seguinte tabela: tentativas avaliação
1a5 excelente!
6 ou 7 bom
8 a 12 normal
13 ou 14 ruim
15 ou mais trágico
Um exemplo de execução pode ser visto a seguir:
Tentativa: 1. Entre um número maior que 0 e menor que 1001 : 150
Muito baixo.
Tentativa: 2. Entre um número maior que 150 e menor que 1001 : 400
Muito baixo.
Tentativa: 3. Entre um número maior que 400 e menor que 1001 : 600
Muito alto.
Tentativa: 4. Entre um número maior que 400 e menor que 600 : 500
Muito alto.
Tentativa: 5. Entre um número maior que 400 e menor que 500 : 430
Muito baixo.
Tentativa: 6. Entre um número maior que 430 e menor que 500 : 480
Muito baixo.
Tentativa: 7. Entre um número maior que 480 e menor que 500 : 490
Muito alto.
Tentativa: 8. Entre um número maior que 480 e menor que 490 : 486
Muito baixo.
Tentativa: 9. Entre um número maior que 486 e menor que 490 : 487
Você acertou o número 487 em 9 tentativas.
Você, como adivinhador, é normal
39
Algoritmos IFSP prof. Claudio.
5.Faça um programa que sorteia 6000 lançamentos de um dado de seis faces e conta
quantas vezes saiu cada face. O programa então imprime um gráfico de barras lateral
com caracteres, onde cada símbolo # corresponde a 30 resultados. A saída seria algo
parecido com a figura a seguir:
1:########################
2:####################
3:#######################
4:#####################
5:##########################
6:#######################
6.fim
40
Algoritmos IFSP prof. Claudio.
2.8.1 - Vetores
A solução é a utilização de uma estrutura de dados que permita referenciar todos os
dados de uma vez indicando cada um individualmente através de um índice. Assim
poderíamos falar da nota do 5º aluno por nota 5 ou, mais simplesmente, por nota[5]. Essa
estrutura é um vetor. A seguir vemos uma representação de um vetor de 50 notas:
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [49] [50]
41
Algoritmos IFSP prof. Claudio.
Exercício:
Vocês já estão capacitados para fazer em Pascal os exercícios feitos para Português
estruturado e fluxograma (todos os exercícios da página 10).
1.Faça um programa em Pascal que lê as notas de 30 alunos, calcula a média e imprime
as notas que estão acima da média.
2.Faça um programa que lê, identifica e imprime o valor máximo, o valor mínimo e a
média de um vetor de n posições de inteiros. O usuário entra com o valor de n (3 n
100).
3.Faça um programa que lê um vetor de n ( 3 n 10) inteiros não negativos e subtrai, de
cada posição, o valor mínimo dos valores do vetor.
[ ]
[7.4, 9.1,5.5, 2.7, 1.3 ] → 7.4−1.3 , 9.1−1.3 , 5.5−1.3 , 2.7−1.3 , 1.3−1.3 , =[ 0.78, 1.0,0.54, 0.18, 0.0 ]
9.1−1.3 9.1−1.3 9.1−1.3 9.1−1.3 9.1−1.3
5.Faça um programa em Pascal que lê um número inteiro positivo n (3 < n < 201), lê n
dados em um vetor e obtém o vetor padronizado na curva normal Z. Para padronizar em
Z, cada elemento deve ser subtraído do valor da média e dividido pelo valor do desvio
padrão.
√
i=n i =n
∑ xi ∑ ( xi −média) ² Usar y = sqrt(x) para y= √x .
i=1
média= desvio= i=1
n n
6.Faça um programa em Pascal que lê um número inteiro positivo n (0 < n < 21), lê n
dados (0 < dado) em um vetor e retira a raiz quadrada ( y = sqrt(x)) de cada dado até que
a soma dos valores do vetor seja menor que 2*n.
8.Faça um programa em Pascal que lê um número inteiro positivo n (0 < n < 21), lê n
dados em um vetor, troca o valor da primeira posição com o valor da posição onde está
o menor dos valores (mínimo) e depois troca o valor da última posição com o valor da
posição onde está o maior dos valores (máximo).
Exemplo: n = 7
ordenados.
10.Faça um programa que lê um vetor de n número reais ( n = 2k+1, 3 < k < 11) e processa
este vetor fazendo com que o conteúdo de cada posição par seja o resultado da soma do
valor nesta posição (par) mais o conteúdo das posições ímpares vizinhas.
11.Faça um programa em Pascal que lê oito valores que podem ser 0 ou 1 e imprime o
número na base dez correspondente àquele número de oito dígitos na base dois.
Exemplo:
001111012 = 0.27 + 0.26 + 1.25 + 1.24 + 1.23 + 1.22 + 0.21 + 1.20=
0.128 + 0.64 + 1.32+ 1.16 + 1.8 + 1.4 + 0.2 + 1.1 = 6110
Observações:
- não utilizar nenhuma função de potência;
- os “bits” devem ser armazenados em um vetor.
12.Faça um programa em Pascal que lê um número inteiro n (0 < n < 101, validar), lê n
valores em um vetor. O programa lê um número x ( -10 < x < 10, validar). Se x for
negativo, o programa cicla os dados do vetor para a esquerda (dado da posição i vai
parar na posição i-1; primeiro vai parar no último); se x for positivo, o programa cicla os
dados para a direita (dado da posição i vai parar na posição i+1; dado da última posição
– n – vai parar na primeira) e se for zero, o programa imprime o vetor e acaba.
43
Algoritmos IFSP prof. Claudio.
2.8.2 - Matrizes
Assim como pode-se criar uma variável com várias posições, podemos também criar
uma estrutura em que cada uma destas posições também possa ter diversas posições, ou
seja, que cada posição de um vetor também seja um vetor. Nesse caso, chamamos o vetor de
vetores de matriz. A seguir temos uma representação de uma matriz:
turmas
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[1] 8.4 1.3 7.2 7.8 9.0 5.8 2.9 6.6 3.6 8.1
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[2] 5.3 9.8 2.9 1.1 8.9 8.6 6.8 4.9 7.7 2.5
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[3] 1.2 8.2 9.6 6.4 9.2 4.8 7.9 5.6 9.1 8.7
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[4] 6.0 7.3 8.9 1.8 3.5 7.8 6.9 6.1 8.8 7.1
Exemplo de utilização:
VAR turmas : Array 4 of Array of 10 of Real ;
(* 4 posições onde cada uma delas guarda 10 valores: matriz4,10 *)
(* o significado seria a nota de cada um dos 10 alunos para cada uma das 4 turmas*)
Exercícios:
1. Faça um programa que faz a soma C = A + B e imprime o valor de C, dado que A e B são
matrizes quadradas de 3 x 3.
2. Faça um programa em Pascal que lê um número inteiro positivos n (0 < n < 21) e cria
uma matriz identidade In x n . A matriz identidade é uma matriz onde: ai , j = 1, se i = j
ai , j = 0, se i ≠ j
3. Faça um programa que faz a soma C = A + B e imprime o valor de C, dado que A e B são
matrizes quadradas de n x n. Tanto n (3 n 10) quanto os valores de A e B são lidos do
teclado.
4. Faça um programa que soma duas matrizes n x m de dados de ponto flutuante. Os dados
das matrizes e os valores n (3 n 10) e m (3 m 10) devem ser lidos do teclado.
5. Faça um programa que codifica um tabuleiro de xadrez em
uma matriz de inteiros. Casas pretas desocupadas são
representadas como 1 e brancas como -1. Peças pretas são
positivas e brancas, negativas. As peças tem a seguinte
codificação: peões 2, cavalos 4, bispos 8, torres 16, rainhas 32
e reis 64.
6. Faça um programa em Pascal que lê um valor n (3 < n < 11), lê
os dados de uma matriz A n,n, lê um valor k (1 < k < n) e calcula
e imprime a soma dos elementos da sub-matriz constituída
pelas linhas que vão de k até n e das colunas que vão de k até
n, inclusive.
7. Faça um programa que lê uma matriz de números reais n x m (1 < n < 21, 1 < m < 21).
Depois lê dois valores a e b. Se a e b forem positivos então o programa troca o conteúdo
da linha a com o conteúdo da linha b, sendo que 1 < a n e 1 < b n. Se a e b forem
negativos, então o programa troca o conteúdo da coluna - a com o conteúdo da coluna - b,
sendo que 1 < -a m e 1 < -b m. Se a ou b forem zero ou tiverem sinais trocados, o
programa acaba.
8. Faça um programa que lê um vetor de n número reais (3 < n < 20) e constrói uma matriz
quadrada n x n onde as colunas da matriz são réplicas do vetor.
9. Faça um programa que lê um número inteiro positivo n (3 < n < 20) e preenche uma
matriz n x n de tal modo que as linhas ímpares sejam compostas
[ ]
dos valores de 1 até n (conteúdo das colunas) e as linhas pares, 1 1 1 1 1 1 1
compostas dos valores decrescentes de n até 1. 1 2 2 2 2 2 1
1 2 3 3 3 2 1
10. Faça um programa que lê um número inteiro impar positivo n A= 1 2 3 4 3 2 1
(2 < n < 22) e cria uma matriz de nível n x n na qual cada lateral 1 2 3 3 3 2 1
da matriz seja um nível – iniciando por 1 – acrescentando 1 até o 1 2 2 2 2 2 1
centro. Assim, para n = 7, a matriz seria como a matriz A, vista
1 1 1 1 1 1 1
ao lado.
[ ]
1 2 3 4
par) e preenche a matriz A n,n com as linhas ímpares crescentes e as 8 7 6 5
linhas pares decrescentes. Exemplo: para n = 4, a matriz ficaria A=
9 10 11 12
como aquela representada na figura ao lado. 16 15 14 13
12. Faça um programa em Pascal que inicia com uma matriz A 8,8 com zero em todas
posições. O programa então lê dois valores: x e y. Se x ou y forem negativos, o programa
termina. Caso contrário, ele soma 8 ao conteúdo da posição x,y da matriz e subtrai 1 dos
seus vizinhos (desde que ainda estejam dentro do limite da matriz 8x8). Ao terminar, o
programa imprime a matriz.
45
Algoritmos IFSP prof. Claudio.
13. Faça um programa em Pascal que lê um valor n (9 < n < 21, validar), lê os dados de uma
matriz An,n. O programa então lê um número x ( -101 < x < 101, validar). O programa
operará nas diagonais conforme o valor de x do seguinte modo:
par positivo soma 1 aos dados da diagonal principal;
par negativo soma 1 aos dados da diagonal secundária;
ímpar positivo subtrai 1 dos dados da diagonal principal;
ímpar negativa subtrai 1 dos dados da diagonal secundária;
zero imprime a matriz e termina o programa.
14. fim
46
Algoritmos IFSP prof. Claudio.
Exercícios:
1. Faça um programa que lê e imprime uma cadeia de caracteres digitada de trás para frente.
Por exemplo, se for digitado AMOR deve imprimir ROMA.
2. Faça um programa que verifica se uma palavra ou número é palíndromo, isto é, se ela é
igual a ela mesma escrita de trás para frente.
3. Faça um programa que conta o número de vogais de uma frase.
4. Faça um programa que exclui todas vogais de uma frase.
47
Algoritmos IFSP prof. Claudio.
48