Post on 10-Nov-2018
1
Algoritmos e Estrutura de Dados I
Prof. Dr. Alceu de Souza Britto Jr (UEPG/PUCPR)
Material cedido por:Prof. Dr. Edson E. Scalabrin.
PUCPR
2
Por que construir algoritmos?
• Construir algoritmos é a atividade fundamental em programação de computadores.
• Algoritmo é:
– “É uma seqüência de passos que visam atingir um objetivo bem-definido.”
– É um conjunto comandos, que executados em uma seqüência bem-definida, realizam um objetivo.
• Comando é:
– É uma instrução que resulta na execução de uma operação.
3
Aptidões I
• Conceituar e empregar:– variáveis;– constantes;– operadores aritméticos;– fórmulas matemáticas;– operadores lógicos;
4
Tipos Primitivos
• Inteiro é:– toda e qualquer informação numérica que pertence ao conjunto dos
números inteiros relativos (negativa, nula ou positiva).• Real é:
– toda e qualquer informação numérica que pertence ao conjunto dos números reais (negativa, nula ou positiva).
• Caractere é:– toda e qualquer informação composta por um conjunto de caractere
alfanuméricos (0..9) e/ou especiais (por exemplo, # $ % & ? - < ! @).• Lógico é:
– toda e qualquer informação que pode apenas assumir duas situações ou estados (por exemplo, aberta ou fechada, acesa ou apagada, verdadeiro ou falso).
5
Constante e Variável• Constante é:
– Toda e qualquer informação que não sofre nenhuma variação no decorrer do tempo (por exemplo, “PI = 3,14”).
• Variável é:– Toda e qualquer informação que oferece a possibilidade de ser
alterada em algum instante no decorrer do tempo (por exemplo, cotação do dólar, índice da bolsa).
• As regras para a formação de identificadores de variável/constantesão:– devem começar por um caractere alfabético;– podem ser seguidos por mais caracteres alfabéticos e/ou numéricos;– não é permitido o uso de caracteres especiais;
– Ex: identificadores válidos: PI, X, Y, X9, MEDIAidentificadores inválidos: X$, Y-Z, 9X, P&D
6
Declaração de Variável
• Cada informação guardada na memória do computador recebe um identificador e um tipo.
• Como na memória do computador podem haver inúmeras informações, então precisa-se diferenciar os locais aonde tais informações são guardadas por meio de identificadores diferentes.
Exemplos:
– inteiro: IDADE;– caractere: NOME, SOBRENOME, ENDERECO;– real: PESO, COTACAODODOLAR;– lógico: RESPOSTA, INTERRUPTOR;
7
Exercícios de Fixação1. Assinale os identificadores válidos:
– (a) (X) (b) U2 (c) AH! (d) “ALUNO”– (e) #55 (f) KM/L (g) KQML (h) JAVA– (i) AB*C (j) O&O (l) P|O| (m) H2O
2. Supondo que as variáveis NB, NA, NMAT, SX sejam utilizadas para armazenar ou guardar a nota do aluno, o nome do aluno, o número da matrícula e o sexo, declare-as corretamente.
3. Encontre os erros da seguinte declaração de variáveis:– inteiro: ENDERECO, NFILHOS;– caractere: IDADE, X;– real: REAIS, APTO, C, PESO, OUT;– lógico: LÂMPADA, C;
8
Expressões e OperadoresAritméticos
Expressão aritmética é:– Toda e qualquer expressão cujos operadores são aritméticos e cujos
operandos são constantes e/ou variáveis do tipo numérico (inteiro e/oureal).
Operador Aritmético é:– Todo e qualquer símbolo que representa uma operação básica da
matemática.– a saber: + (adição) - (subtração)
* (multiplicação) / (divisão)** (potenciação) // (radiciação)
– operadores não-convencionais: mod (resto da divisão)div (quociente da divisão inteira)
9
Exemplos: Expressões e Operadores Aritméticos
Exemplos:
2 + 2XPTO / 5X ** 2X – 33 ** 23 // X2 * NOTA3 // 9
Exemplos:
15 div 7 resulta 215 mod 7 resulta 127 div 5 resulta 527 mod 5 resulta 2
10
Funções MatemáticasFunção Descriçãosen(x) fornece o valor do seno de x.cos(x) fornece o valor do cosseno de x.tg(x) fornece o valor do tangente de x.arctg(x) fornece o valor do arco cuja tangente é x.arccos(x) fornece o valor do arco cujo cosseno é x.arcsen(x) fornece o valor do arco cujo seno é x.abs(x) fornece o valor absoluto (módulo) de x.int(x) fornece a parte inteira de um número fracionário x.frac(x) fornece a parte fracionária x. ard(x) transforma, por arredondamento, um número fracionário x
em inteiro.sinal(x) fornece o valor -1, +1 ou zero conforme o valor de x seja
negativo, positivo ou nulo.rnd(x) valor randômico a x.
onde x pode ser um número,uma variável, uma
expressão aritmética ou também outra função matemática.
11
Exemplos: Funções Matemáticas
Constantes Numéricas:
– int(34.886) resulta 34– frac(34.886) resulta 886– ard(34.886) resulta 35– ard(34.386) resulta 34– abs(-27) resulta 27
– sinal(-44) resulta -1
Variáveis:
– abs(X - 5)
– int(Y / 7)
– frac(3 // K)
– abs(int(Y / 7))
12
Resolução de Expressões Aritméticas
Prioridade:– as operações e
funções matemáticas guardam entre si uma hierarquia.
parênteses mais internosfunções matemáticas** //* / div mod+ -
Nota:– para operações de mesma prioridade, segue-se a ordem
especificada, isto é, primeiro resolve-se os operadores mais àesquerda e depois os mais à direita da tabela e, para alterar a prioridade da tabela, utiliza-se parênteses mais internos.
13
Exemplos:
Resolução de Expressões Aritméticasc) 3 ** 2 – 4 / 2 + abs(5 – 3 * 5) / 2
3 ** 2 – 4 / 2 + abs(5 – 15 ) / 23 ** 2 – 4 / 2 + abs(-10) / 23 ** 2 – 4 / 2 + 10 / 29 – 4 / 2 + 10 / 29 – 2 + 5 = 12
a) 5 + 9 + 7 + 8 / 45 + 9 + 7 + 2 = 23
b) 1 – 4 * 3 / 6 – 2 ** 31 – 4 * 3 / 6 – 81 – 12 / 6 – 8 1 – 2 – 8 = -9
14
Exercícios de Fixação
Supondo A, B e C variáveis de tipo inteiro, com valores iguais a 5, 10 e -8, e uma variável real D, com valor de 1,5, quais os resultados das expressões abaixo?
a) 2 * A mod 3 – Cb) 2 // (2 * abs( C )) div 4c) (frac( A / B) + sinal( C )) ** 3d) ard(abs( C / 2 + D)) – int ( A / 2 )e) 3 + (3 // (C + 16)) * ((3 mod D + 0,5) * 2)f) (A + B) div A * ard(sinal( C ) + D) – int(D * 2)
15
Expressões e OperadoresLógicos/Relacionais
Expressão lógica é:– Toda e qualquer expressão cujos:
• operadores são lógicos e/ou relacionais e • operandos são relações e/ou variáveis e/ou constantes do tipo
lógico.
Operador Relacional é:– Todo e qualquer símbolo que representa uma operação básica de
comparação.– a saber: = (igual a) <> (diferente de)
> (maior que) >= (maior igual a)< (menor que) <= (menor igual a)
– utilizado para realizar comparações entre dois valores de mesmo tipo primitivo. Tais valores são representados por constantes, variáveis ou expressões aritméticas.
16
(cont.)
Operador Lógico é:– Todo e qualquer símbolo que representa um conectivo
básico para a formação de novas proposições a partir de outras já conhecidas
– a saber:e (conjunção)ou (disjunção não-exclusiva)xou (disjunção exclusiva)não (negação)
17
Exemplos: Expressões e Operadores Relacionais
d) 2 + 8 mod 7 >= 3 * 6 – 15 2 + 1 >= 18 – 15
3 >= 3V
a) 2 * 4 = 24 / 38 = 8
V
b)15 mod 4 < 19 mod 63 < 1
F
c) 3 * 5 div 4 <= 3 **2 / 0.515 div 4 <= 9 / 0.5
3 <= 18V
18
Tabela Verdade
Definição:É o conjunto de todas as possibilidades combinatórias entre os valores de diversas variáveis lógicas, as quais se encontram em apenas duas situações, e um conjunto de operadores lógicos.
A B A e B
F
F
V
V
F
V
F
V
F
F
F
V
A B A ou B
F
F
V
V
F
V
F
V
F
V
V
V
A B A xou B
F
F
V
V
F
V
F
V
F
V
V
F
A não A
F
V
V
F
Exemplos:
19
Exemplos:Expressões Lógicas
d) falso ou 20 div 18 / 3 <> 18 / 3 div 20F ou 20 div 6 <> 6 div 20
F ou 3 <> 0F ou V
V
f) não verdadeiro xou 3**2/3 < 15 – 35 mod 7F xou 9 /3 < 15 – 0
F xou 3 < 15F xou V
V
a) 2 < 5 e 15 / 3 = 5V e 5 = 5
V e VV
b) 2 < 5 ou 15 / 3 = 5V ou 5 = 5
V ou VV
c) 2 < 5 xou 15 / 3 = 5V xou 5 = 5
V xou VF
20
Resolução de Expressões Lógicas
Prioridade:– Entre operadores
lógicos
– Entre todos os operadores:
nãoe ouxou
parênteses mais internosfunções matemáticasoperadores aritméticosoperadores relacionaisoperadores lógicos
21
Exercícios de Fixação
Determine os resultados obtidos na avaliação das expressões lógicas seguintes, sabendo que A, B, C, D e E contém respectivamente 2, 7, 3.5, “noite” e “frio” e que existe uma variável lógica L cujo valor é falso:
a) B = A * C e L ou verdadeirob) “dia” = D xou “frio” <> “clima”c) L e B div A >= C ou não A <= Cd) 3 // 7 ** 2 = 14 / A xou (B – 3 <= C + 0.5)e) não L ou verdadeiro e sinal( C ) >= A div Af) abs(B + ( -2 )) = ard(((2 * C) ** 2) / 10
22
Aptidões II
• Conceituar, representar e aplicar – atribuição de um valor a uma variável;– entrada de dados;– saída de dados; e– bloco de comandos;
23
Comando de Atribuição
Definição:– É uma instrução que permite que um valor seja fornecido a certa variável.
Símbolo: ←
Exemplo:
lógico: A, B;
inteiro: X;
A ← verdadeiro;
X ← 8 + 13 div 5;
B ← 5 = 3;
Estes comandos atribuem às variáveis
A, X e B os valores fornecidos à direita
do símbolo de atribuição.
Nota:• O tipo do dado deve ser compatível com o tipo da variável.
24
Exercícios de Fixação
Encontre os erros dos seguintes comandos de atribuição:
a) lógico: A;b) real: B, C;c) inteiro: D;
d) A ← B = C;e) D ← B;f) C + 1 ← B + C;g) B ← 10 + 2 // 9 – int(15 / (abs(-4 div 2))) <= (5 ** (sinal( -1 ));h) C e B ← 3.5;
25
Comandos de Entrada e Saída
Entrada de dados:– É importante construir algoritmos que permitam ao usuário fornecer
qualquer tipo de valor as variáveis que serão utilizados pelo computador para produzir o resultado desejado.
Exemplos: leia ( X );
leia ( A, XPTO, NOTA );
Saída de dados:– É importante construir algoritmos que permitam ao usuário recuperar
o resultado de um processamento. Exemplos: escreva ( Y );
escreva ( B, XPTO, MEDIA );escreva ( “Bom Dia ”, NOME );escreva ( “Você pesa ”, X * 2, “ quilos”);
26
Blocos
Definição:
É um conjunto de ações com um objetivo bem-definido.
Nota: – Pode-se então dizer que
um algoritmo é COMO UM BLOCO.
– Um bloco serve também para definir os limites nos quais as variáveis declaradas em seu interior são conhecidas.
Exemplo:
início {início do bloco (algoritmo)}||| {declaração de variáveis}|| {seqüência de ações / comandos}||fim; {fim do bloco (algortimo)}.
27
Exercíciosinício:
[...]inteiro: X, Y;real: Z;leia ( X );escreva (X, “ao cubo = ”, X ** 3);leia ( Y );escreva ( X + Y );Z ← X / Y;escreva ( Z );Z ← int( Z );escreva( Z );Z ← Z + 1;Z ← ( Y + Z ) mod 2;escreva( X );
[ ...]fim;
1. Utilizando o trecho de algoritmo ao lado, explique o que estáacontecendo em cada linha e qual é o resultado de cada ação executada.
2. Cite e discorra sobre três exemplos de seu dia-a-dia nos quais você encontra explicitados: Entrada, Processamento e Saída.
3. Faça uma analogia de Entrada, Processamento e Saída de dados com o que acontece quando você lê e sintetiza um livro e quando você dialoga com outra pessoa.
28
Aptidões III
• Compreender e aplicar estruturas:– de controle seqüencial;– de controle de seleção simples*, composta e de múltipla
escolha;– de controle de repetição.
* desvios condicionais
29
Estrutura de Controle
Como são construídos os algoritmos?– Eles são construídos por meio da combinação de uma ou mais
estruturas básicas de controle. – Tais estruturas são dos seguintes tipos:
• Seqüencial;
• Seleção simples, composta e de múltipla escolha; e
• Repetição.
30
Estrutura Seqüencial
Definição:– É conjunto de ações primitivas que
são executadas numa seqüência linear de cima para baixo e da esquerda para a direita.
início: {começo do algoritmo}
{declaração de variáveis}comando a;comando b;comando c; comando d;comando e;
.
.
.comando n;
fim. {algoritmo}
Nota:Todas as ações devem ser seguidas por um ponto-e-vírgula (;) que objetiva separar uma ação de outra e auxiliar a organização seqüencial das ações.
31
Exemplo: Construa um algoritmo que calcule a média aritmética entre quatro notas quaisquer fornecidas pelo usuário.
Passo 1: dados de entrada: quatro notas bimestrais (N1, N2, N3, N4);Passo 2: dados de saída: média aritmética anual (MA);Passo 3: O que devemos fazer para transformar quatro notas bimestrais
numa média anual?
Resposta: utilizar média aritmética.O que é média aritmética?
É a soma dos elementos divididos pela quantidade deles. Em nosso caso particular: (N1+N2+N3+N4)/4;
Passo 4: Construção do algoritmo:início {começo do algoritmo}
real: N1, N2, N3, N4, MA; {declaração de variáveis}leia(N1, N2, N3, N4); {entrada de dados}
MA ← (N1 + N2 + N3 + N4)/4; {processamento}
escreva( MA ); {saída de dados}fim. {término do algoritmo}
32
Exemplo: Construa um algoritmo que calcule a quantidade de latas de tinta necessárias e o custo para pintar tanques cilíndricos de combustível, onde são fornecidos a altura e o raio desses cilindros. Sabendo que:
a) A lata de tinta custa R$ 50,00;b) Cada lata contém 5 litros;c) Cada litro de tinta pinta 3 metros quadrados.
Passo 1: dados de entrada: altura (H) e raio (R);Passo 2: dados de saída: custo (C) e quantidade (QTDE);Passo 3: Utilizando planejamento reverso, sabemos que:
– custo é dado por quantidade de latas * R$ 50,00;– quantidade de latas é data por quantidade total de litros / 5;– quantidade total de litros é dada por área do cilindro / 3;– área do cilindro é dada por área da base + área lateral;– área da base é (PI * R ** 2);– área lateral é altura * comprimento: (2 * PI * R * H);– sendo que R (raio) e H (altura) são dados de entrada e PI é uma constante
de valor conhecido: 3,14.
33
continuação
Passo 4: Construção do algoritmo:início {começo do algoritmo}
real: H, R; {declaração de variáveis}real: C, QTDE, AREA, LITRO; {declaração de variáveis}leia(H, R); {entrada de dados}
AREA ← (3,14 * R ** 2) + (2*3,14*R*H); {processamento}
LITRO ← AREA / 3; {processamento}
QTDE ← LITRO / 5; {processamento}
C ← QTDE * 50,00; {processamento}
escreva( C, QTDE ); {saída de dados}fim. {término do algoritmo}
34
Exercícios de Fixação
1. Construa um algoritmo para calcular as raízes de uma equação do 2º grau, sendo que os valores A, B, C são fornecidos pelo usuário.
2. Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer do plano, P(x1,y2) e Q(x2,y2), imprima a distância entre eles. A fórmula que efetua tal cálculo é: d=2//( (x2-x1)**2 + (y2-y1)**2)
3. Faça um algoritmo para calcular o volume de uma esfera de raio R, em que R é um valor lido. A fórmula que efetua tal cálculo é: V = 4/3 * (PI * R**3)
35
Estrutura de Seleção: É uma estrutura que permite a escolha de um grupo de ações e estruturas a serem executadas quando determinadas
condições, representadas por expressões, são ou não satisfeitas.
Seleção Simples
se <condição> então
C; {comando único (ação primitiva)}fimse;
onde:<condição> é uma expressão lógica, que, quando avaliada, pode
gerar um resultado verdadeiro ou falso.Se <condição> for verdadeira, a ação primitiva sob a cláusula então
será executada; caso contrário (<condição> for falsa), encerrao comando (fimse), neste caso, sem executar nenhum comando.
36
Exemplo:Estrutura de seleção simples e bloco de comandos
se <condição>
então
início {bloco verdade}
C1;
C2;
...
Cn;
fim {bloco}
fimse;
Se <condição> for verdadeira, então
o “bloco verdade” (seqüência de
comandos C1...Cn) será executada;
caso contrário (<condição> for
falsa), nada será executado,
encerrando o comando (fimse).
A existência do bloco (demarcado
por início e fim) faz-se
necessária devido à existência de
um conjunto de ações primitivas
sob a mesma cláusula então.
37
Exemplo: Sendo N1, N2, N3, N4 as quatro notas bimestrais de um aluno, pode-se avaliar sua situação quanto à aprovação, neste caso, obtida
atingindo-se média superior ou igual a sete.
início {começo do algoritmo}{declaração de variáveis}
real: N1, N2, N3, N4; {notas bimestrais}real: MA; {média anual}{entrada de dados}
leia(N1, N2, N3, N4);{processamento ou cálculo da média aritmética}
MA ← (N1 + N2 + N3 + N4)/4;
{saída de dados}
escreva( MA );se MA >= 7
então escreva (“aluno(a) aprovado(a)”);fimse;
fim. {término do algoritmo 38
Seleção Composta
se <condição> então
início {bloco verdade}C1;C2; {seqüência de comandos}...Cn;fim {bloco}
senão
C; {ação primitiva}fimse;
onde:Se <condição> for verdadeira, então o “bloco verdade” (seqüência de comandos C1...Cn) seráexecutada; caso contrário (<condição> for falsa), será executado o comando C (ou ação primitiva) que segue a cláusula senão.
39
Exemplo:Estrutura de seleção composta e bloco de comandos
se <condição> então
início {bloco verdade}C1;C2;C3;fim {bloco verdadeiro}
senãoinício {bloco falso}C1;C2;fim {bloco falso}
fimse;
Se <condição> for verdadeira, então o “bloco verdade”(seqüência de comandos C1...C3) será executado;
caso contrário (<condição> for falsa), o “bloco falso” (seqüência de comandos C1...C2) seráexecutado.
40
início {começo do algoritmo}real: N1, N2, N3, N4, MA; {notas bimestrais e média anual}leia(N1, N2, N3, N4);
MA ← (N1 + N2 + N3 + N4) / 4;
escreva( “Media anual = ”, MA );se MA >= 7 então início {bloco verdade}
escreva (“aluno(a) aprovado(a)”);escreva (“Parabéns!”);fim {bloco verdade}
senão início {bloco falso}escreva (“aluno(a) reprovado(a)”);escreva (“Estude mais!”);
fim {bloco falso}fimse;
fim. {término do algoritmo}
Exemplo: Será incluído, no exemplo anterior, a informação que provém do resultado falso da condição (MA >= 7), a reprovação do aluno.
41
Passo 1: dados de entrada: senha suposta pelo usuário (S);Passo 2: dados de saída: “Acesso Permitido” ou “Acesso Negado”;Passo 3: montando uma tabela de decisão:
S=”ASDFG” Açãoverdadeiro escreva “Acesso Permitido”falso escreva “Acesso Negado”
Passo 4: Construção do algoritmoinício {começo do algoritmo}
caractere: S; {senha fornecida pelo usuário}leia(S);se S = “ASDFG”
então escreva(“Acesso Permitido”);senão escreva(“Acesso Negado”);
fimse;fim. {término do algoritmo}
Exemplo: Construa um algoritmo que verifique a validade de uma senha fornecida pelo usuário. A senha é um conjunto de cinco caracteres que são: “ASDFG”.
42
Exemplo: Dados três valores A, B, C, verificar se eles podem ser os comprimentos dos lados de um triângulo e, se forem, verificar se compõem um triângulo eqüilátero, isósceles ou escaleno. Informar se não compuserem nenhum triângulo.
Passo 1: entrada de dados: três lados de um suposto triângulo (A, B, C).Passo 2: saída de dados: “não compõem triângulo”, “triângulo
eqüilátero”, “triângulo isósceles” ou “triângulo escaleno”.Passo 3:
• O que é um triângulo?É uma figura geométrica de três lados, onde cada um é menor do que a soma dos outros dois.
• O que é um triângulo eqüilátero?É um triângulo com três lados iguais.
• O que é um triângulo isósceles?É um triângulo com dois lados iguais.
• O que é um triângulo escaleno?É um triângulo com todos os lados diferentes.
43
é triângulo? é eqüilátero? é isósceles? é escaleno? Ações
V V F F “tr. eq.”
V F V – “tr. is.”
V F F V “tr. es.”
F – – – “Não Tr.”
Passo 4: Montagem da tabela de decisão
é triângulo:
(A < B + C) e (B < A + C) e (C < A + B);
é eqüilátero:
(A = B) e (B = C);
é isósceles:
(A = B) ou (A = C) ou (B = C);
é escaleno:
(A <> B) e (B <> C);
Traduzindo as condições para expressões lógicas:
44
Passo 6: Construção do algoritmo
início {começo do algoritmo}inteiro: A,B,C; {lados de um suposto triângulo }leia(A,B,C);se (A < B + C) e (B < A + C) e (c < A + B)então se (A = B) e (B = C)
então escreva(“Triângulo Eqüilátero”);senão se (A = B) ou (A = C) ou (B = C)
então escreva(“Triângulo Isósceles”);senão escreva(“Triângulo Escaleno”);
fimsefimse
senãoescreva(“Estes valores não formam um triângulo”);
fimse;fim. {término do algoritmo}
45
Seleção de Múltipla Escolhaescolha X
caso V1: C1;caso V2: C2;caso V3: C3;caso V4: C4;
fimescolha
Caso, o conteúdo da variável X seja igual ao valor Vi, então o comando Ci será executado: caso contrário será inspecionado até se encontrar a igualdade ou terminarem os casos
escolha Xcaso V1: C1;caso V2,V3: C2;caso V4: C3;caso V5: C4;caso contrário: C5;
fimescolha
Para executar um comando que possui mais de um valor que se verifica sua necessidade, agrupa-se todos esses valores em um único caso. E, para executar um comando que se verifica com todos os outros valores, exceto os discriminados caso a caso, incluí-se outra situação: caso contrário.
46
Seleção de Múltipla Escolha em Cswitch ( X ) {
case V1: C1; break;case V2: C2; break;case V3: C3; break;case V4: C4; break;
}
Caso, o conteúdo da variável X seja igual ao valor Vi, então o comando Ci será executado: caso contrário será inspecionado até se encontrar a igualdade ou terminarem os casos
switch( X ) {case V1: C1; break;case V2:case V3: C2; break;case V4: C3; break;case V5: C4; break;default : C5;
}
Para executar um comando que possui mais de um valor que se verifica sua necessidade, agrupa-se todos esses valores em um único break. E, para executar um comando que se verifica com todos os outros valores, exceto os discriminados caso a caso, incluí-se outra situação: default
47
Exercício usando Escolha
Construa um algoritmo que, tendo como dados de entrada o preço de um produto e um código de origem, emita o preço junto de sua procedência. Caso o código não seja nenhum dos especificados, o produto deve ser visto como importado.
Código de origem:1 – Sul 5 ou 6 – Nordeste2 – Norte 7, 8 ou 9 – Sudeste3 – Leste 10 até 20 – Centro-Oeste4 – Oeste 25 até 50 – Nordeste
48
início {começo do algoritmo}{declaração de variáveis}real: PRECO;inteiro: ORIGEM;
{entrada de dados}leia(PRECO, ORIGEM);escolha ORIGEM
caso 1: escreva (PRECO, “ – produto do Sul“);caso 2: escreva (PRECO, “ – produto do Norte“);caso 3: escreva (PRECO, “ – produto do Leste“);caso 4: escreva (PRECO, “ – produto do Oeste“);caso 7,8,9: escreva (PRECO, “ – produto do Sudeste”);caso 10..20: escreva (PRECO, “ – produto do Centro-Oeste”);caso 5,6,25..50: escreva (PRECO, “ – produto do Nordeste”);caso contrário: escreva (PRECO, “ – produto Importanto”);
fimescolhafim. {término do algoritmo}
continuação
Exercício
• Implementar na linguagem de programação C o exemplo escrito em Portugol do slide anterior.
49 50
Aptidões IV
• Compreender e aplicar:– estruturas de repetição controlada por uma
variável; e– estruturas de repetição controlada por uma
condição:
51
Estruturas de Repetição
• Repetição controlada por uma variável;– para I de 1 até N passo 1 faça [...]
• Repetição controlada por uma condição:– condição no início do bloco de comandos;
• enquanto <condição C for verdadeira> faça [...]
– condição no final do bloco de comandos.• repita [...] até <condição C seja verdadeira>
52
Repetição com variável de controle
Exemplo: Obter a soma dos n primeiros números pares positivos.
Entrada: um número inteiro n.Saída: soma dos números pares positivos entre 2 e n.Detalhamento:• Todo número par diferente de zero pode ser obtido por meio da fórmula 2i,
onde i pertence ao conjunto N* = {1,2,3,4, ...}.• Para obter os n primeiros números pares, atribuí-se à variável i os valores
1,2,3, ..., n, o que resulta na seqüência 2, 4, 6, ..., 2n.• Matematicamente, o problema é descrito por:
nS = ∑ 2i
i=1• Para calcular esta soma pode-se simplesmente guardar cada resultado
parcial obtido, sem necessariamente guardar todos os números utilizados. Na verdade, basta guardar o último resultado acumulado para depois somá-lo ao número par seguinte, repetindo estas operações até somar o último número.
53
Repetição com variável de controle
Estratégia Detalhada:– para cada valor de i, pertencente ao conjunto {1,2,3, .., n} , calcula-se o
número par correspondente e o adiciona ao valor da soma S, previamente ajustada com valor zero. I.e., deve-se repetir n vezes as duas operações:
calcular o número par t pela fórmula t = 2i e somar t em S.
– pode-se representar tal operação de repetição por:para i de 1 até n passo 1 faça <bloco>
– Dizemos que tal comando de repetição (operação básica) é uma instrução de repetição controlada por variável.
entrada de dados (valor de n)
repetir n vezes
saída do resultado
Esboço do Algoritmo
calcular um número paracumular numa soma
54
Repetição com variável de controle
Algoritmo SomaParObjetivo: Dado um número n, calcular
a soma dos n primeiros números pares.
Entrada: N (inteiro)Saída : S (inteiro)início:
inteiro: N, I, T, S;[1] leia(N);[2] S ← 0;[3] para I de 1 até N passo 1 faça
início[4] T ← 2 * I;[5] S ← S + T;
fim[6] escreva( S );
fim.
A instrução de repetição écontrolada pela variável i, que é
denominada variável de controle da instrução. A variável i recebe valor inicial 1 e é incrementada
de uma unidade até atingir o valor final N. Enquanto o valor de i for menor ou igual ao valor de N, as instruções contidas no bloco são
executadas sucessivamente. Para cada valor atribuído a i, se
este valor não supera N, as instruções do bloco são
executadas e, em seguida, o valor de i é incrementado de uma
unidade.
55
Repetição com variável de controle – escrito em C
Algoritmo SomaParObjetivo: Dado um número n, calcular
a soma dos n primeiros números pares.
Entrada: N (inteiro)Saída : S (inteiro)void somarPar() {
int N, I, T, S;scanf(“%d”, &N); /*Entrada*/S = 0;for(I=1; i <= N; I++) /*Repetição*/{
T = 2 * I;S = S + T;
}printf(“S = %d\n”); /*Saida*/
}
A instrução de repetição écontrolada pela variável i, que é
denominada variável de controle da instrução. A variável i recebe valor inicial 1 e é incrementada
de uma unidade até atingir o valor final N. Enquanto o valor de i for menor ou igual ao valor de N, as instruções contidas no bloco são
executadas sucessivamente. Para cada valor atribuído a i, se
este valor não supera N, as instruções do bloco são
executadas e, em seguida, o valor de i é incrementado de uma
unidade.
56
Simulação do algoritmo para N = 3.
escreva 12F31234613
fim do laçoF31234512
T31263511
T3663410
T364339
execução do laço para i = 3 (valor final)T364258
T324247
T322236
execução do laço para i = 2T322155
T302144
T30-133
execução do laço para i = 1 (valor inicial)30--22
3---11I ≤ NNSTI[ ]#
testevariáveis
57
Simulação do algoritmo para N = 1.
escreva 2F1222613
fim do laçoF1222512
T122155
T102144
T10-133
execução do laço para i = 1 (valor inicial)10--22
1---11
I ≤ NNSTI[ ]#
testevariáveis
58
Escrever um algoritmo para gerar os n primeiros
números impares.
Algoritmo EscrevaImparObjetivo: Dado um número n, escrever os n primeiros números
impares.Entrada: N (inteiro)Saída: T (inteiro)início:
inteiro: N, I, T;[1] leia(N);[2] para I de 1 até N passo 1 faça
início[3] T ← 2 * I - 1;[4] escreva( T );
fimfim.
59
Escrever um algoritmo para gerar os n primeiros
números impares: Escrito em C.
Algoritmo EscrevaImparObjetivo: Dado um número n, escrever os n primeiros números
impares.Entrada: N (inteiro)Saída: T (inteiro)
void escrevaImpar() {int N, I, T;scanf(“%d”, &N); /*Entrada*/for(I=1; I <= N; I++) /*Repetição*/{
T = 2 * I - 1;printf(“%d\n”, T); /*Saida*/
}}
60
Escrever um algoritmo para gerar os n primeiros
números impares em ordem opostas.
Algoritmo EscrevaImparInvertidoObjetivo: Dado um número n, escrever os n primeiros números
impares em ordem opostas.Entrada: N (inteiro)Saída: T (inteiro)início:
inteiro: N, I, T;[1] leia(N);[2] para I de N até 1 passo -1 faça
início[3] T ← 2 * I - 1;[4] escreva( T );
fimfim
61
Escrever um algoritmo para gerar os n primeiros
números impares em ordem opostas: Escrito em C
Algoritmo EscrevaImparInvertidoObjetivo: Dado um número n, escrever os n primeiros números
impares em ordem opostas.Entrada: N (inteiro)Saída: T (inteiro)void escrevaImparInvertido() {
int N, I, T;scanf(“%d”, &N);for( I = N; I >= 1; I--){
T = 2 * I - 1;printf(“%d\n”, T);
}}
62
Exercícios de Fixação1. Dado a serie, S = 1 + 1/2 + 1/3 + 1/4 + . . . + 1/N, escreva um algoritmo
para calcular e imprimir a soma dos N primeiros termos de S.2. Dado a serie, S = 1 – 1/2 + 1/4 – 1/6 + 1/8 – . . . + 1/200, escreva um
algoritmo calcular e imprimir a soma dos 200 primeiros termos de S.3. Calcular as somas:
a) b) c)
4. Escreva um algoritmo que realiza as seguintes operações:• lê N números INTEIROS do teclado; • encontra e imprime o menor e o maior valor.
∑=
=
20
1
2k
kS ∑=
=
50
5
2
k
kT ∑=
=
100
0k
kU
63
Exercícios de Fixação5. Partindo-se de um único casal de coelhos filhotes recém-nascidos e
supondo que um casal de coelhos torna-se fértil após dois meses de vida e, a partir de então, produz um novo casal a cada mês e que os coelhos nunca morrem, a quantidade de casal de coelhos após n meses é dado pelo n-ésimo termo da seguinte seqüência:– Fn = Fn-2 + Fn-1, n>= 2– F0 = 1,– F1 = 1
Esta seqüência chama-se seqüência de Fibonacci.a) escreva um algoritmo para calcular a quantidade de casais de coelhos após n meses.
6. Tabelar N! para N variando de 0 até 10. Por definição k! = k(k-1)(k-2) ... 3,2,1 para k ∈ N* e 0! = 1.
64
Exercícios de Fixação
7. Escreva um algoritmo que
realiza as seguintes operações:
– lê o valor da etiqueta de um
produto;
– calcula o valor a pagar para
o cliente de acordo com os
códigos: 1, 2, 3, e 4 (ver
tabela ao lado); e
– imprime o valor a pagar do
produto.
Código Descrição da Política
1 10% de desconto para pagamento à
vista em cheque ou dinheiro.
2 5% de desconto para pagamento à
vista no cartão.
3 0% para pagamento em duas vezes.
4 10% de acréscimo para pagamento
em três vezes ou mais.
65
Exercícios de Fixação8. Escrever um algoritmo que calcule e imprima a tabela de amortização de
empréstimo para um de principal 6.000, 10% de juros, período de reembolso de quatro anos.
PVA = 6000k = 10% n = 4
))1(
11(
1),(
nkk
nkFJVFA+
−×=
FJVFA
VPAPMT =
66
Continuação, exercício 8.
6.000,00 1.571,30 7.571,30
0,00 1.720,75 172,07 1.720,75 1.892,82 4
1.720,75 1.564,32 328,51 3.285,07 1.892,82 3
3.285,07 1.422,11 470,72 4.707,18 1.892,82 2
4.707,18 1.292,82 600,00 6.000,00 1.892,82 1
Principal no fim do ano
[(2)-(4)] (5)Principal
[(1)-(3)] (4)Juros
[0,10x(2)] (3)Principal no começo
do ano (2)Pagamento do empréstimo (1)Fim do ano
Pagamentos
(PRINCIPAL $6.000, 10% DE JUROS, PERÍODO DE REEMBOLSO DE QUATRO ANOS)
TABELA DE AMORTIZAÇÃO DE EMPRÉSTIMO
Legenda: (1) = PMT (2) = PVA (3) = PVA * k (4) = (1) – (3) (5) = (2) – (4)
Exercício Extra
• Implementar na linguagem de programação C o exercício do slides anterior sobre amortização.
67 68
Repetição controlada por uma condição
Exemplo: Obter a soma dos números pares positivos menores que 500.
Entrada: um número inteiro 500. Saída: soma dos números pares positivos menores que 500. Detalhamento:• Todo número par diferente de zero pode ser obtido por meio da fórmula 2i,
onde i pertence ao conjunto N* = {1,2,3,4, ...}. Para obter os números pares menores que 500, testa-se a condição que número gerado seja menor ou igual 500, o que resulta na seqüência 2, 4, 6, ..., 2n, onde 2n ≤ 500.
• Matematicamente, o problema é descrito por:n
S = ∑ 2ii=1
• Para calcular esta soma pode-se simplesmente guardar cada resultado parcial obtido, sem necessariamente guardar todos os números utilizados.
para 2i ≤ 500
69
Repetição controlada por uma condição
Estratégia Detalhada:– para cada valor de 2i, pertencente ao conjunto {2, 4, .., n} , testa-se se o
valor de 2i é um número par e é menor que 500. Se a condição for satisfeita, então adicionamos ao valor de 2i a soma S, previamente ajustada com valor zero.
– pode-se representar tal operação de repetição por:enquanto <condição for verdadeira faça <bloco>
– Dizemos que tal comando de repetição (operação básica) é uma instrução de repetição controlada por uma condição.
entrada de dados (número par n)repetir enquanto o número par gerado for menor que n
saída do resultado
Esboço do Algoritmo
calcular um número paracumular numa soma
70
Repetição controladapor uma condiçãoObjetivo: Calcular a soma dos números
pares menores que 500.Entrada: N = 500 (inteiro)Saída : S (inteiro)início:
inteiro: N, I, T, S;[1] leia(N); {N = 500}[2] S ← 0;[3] I ← 1;[4] T ← 2 * I;[5] enquanto (T <= N) faça
início[6] S ← S + T;[7] I ← I + 1;[8] T ← 2 * I;
fim[9] se N = 2[10] então S ← T;[11] escreva( S );
fim.
A instrução de repetição écontrolada pela condição
T ≤ 500. Enquanto o valor de T for menor ou igual ao valor de 500, as instruções contidas no
bloco são executadas sucessivamente. Para cada valor
atribuído a T, se este valor não supera 500, as instruções do bloco são executadas e, em
seguida, o valor de T érecalculado.
Algoritmo SomaPar
71
Repetição controladapor uma condiçãoObjetivo: Calcular a soma dos números
pares menores que 500.Entrada: N = 500 (inteiro)Saída : S (inteiro)
void somaPar() {int N, I, T, S;scanf(“%d”, &N) /*N = 500*/S = 0;I = 1;T = 2 * I;while (T <= N) {
S = S + T;I = I + 1;T = 2 * I;
}if (N == 2) S = T;printf(“Soma = %d\n”, S);
}
A instrução de repetição écontrolada pela condição
T ≤ 500. Enquanto o valor de T for menor ou igual ao valor de 500, as instruções contidas no
bloco são executadas sucessivamente. Para cada valor
atribuído a T, se este valor não supera 500, as instruções do bloco são executadas e, em
seguida, o valor de T érecalculado.
Algoritmo SomaPar: Escrito em C
72
Escrever um algoritmo para gerar os números impares menores que 1000.
Algoritmo EscrevaImparMenorQue1000Objetivo: Escrever os números impares que 1000.Entrada: N = 1000 (inteiro)Saída : T (inteiro)início:
inteiro: N, I, T;[1] leia(N); {N = 1000}[2] I ← 1;[3] T ← 2 * I - 1;[4] enquanto (T < N) faça
início[5] escreva( T );[6] I ← I + 1;[7] T ← 2 * I - 1;
fim[8] se N = 1 então[9] escreva( 1 );
fim.
73
Escrever um algoritmo para gerar os números impares menores que 1000: Escrito em C
Algoritmo EscrevaImparMenorQue1000Objetivo: Escrever os números impares que 1000.Entrada: N = 1000 (inteiro)Saída : T (inteiro)void EscrevaImparMenorQue1000() {
int N, I, T;scanf(“%d”, &N); /* N = 1000 */I = 1;T = 2 * I - 1;while (T < N){
printf(“%d ”, T);I = I + 1;T = 2 * I - 1;
}if (N == 1) printf(“1”);
}74
Escrever um algoritmo para gerar os números impares em ordem opostas de 1 até 1000.
Algoritmo EscrevaImparInvertidoObjetivo: Escrever os números impares em ordem opostas de 1 até 1000Entrada: N = 1000 (inteiro)Saída : T (inteiro)início:
inteiro: N, I, T;[1] leia(N); {N = 1000}[2] se N mod 2 = 0[3] então I ← N / 2;[4] senão I ← (N + 1) / 2;[5] T ← 2 * I - 1;[6] enquanto (T > 0) faça
início[7] escreva( T );[8] I ← I - 1;[9] T ← 2 * I - 1;
fimfim.
75
Escrever um algoritmo para gerar os números impares em ordem opostas de 1 até 1000: Escrito em C.
Algoritmo EscrevaImparInvertidoObjetivo: Escrever os números impares em ordem opostas de 1 até 1000Entrada: N = 1000 (inteiro)Saída : T (inteiro)
void EscrevaImparInvertido() {int N, I, T;scanf(“%d”, &N); /*N = 1000*/if (N % 2 == 0) I = N / 2; else I = (N + 1) / 2;T = 2 * I - 1;while (T > 0){
printf(“%d ”, T );I = I - 1;T = 2 * I - 1;
}}
76
Exercícios de Fixação
• Fazer algoritmos dos exercícios 1 a 8 utilizando o laço de repetição enquanto e compará-los como o que já foi feito utilizando o laço de repetição para.
77
Exercícios de Fixação1. Dado a serie, S = 1 + 1/2 + 1/3 + 1/4 + . . . + 1/N, escreva um algoritmo
para calcular e imprimir a soma dos N primeiros termos de S.2. Dado a serie, S = 1 – 1/2 + 1/4 – 1/6 + 1/8 – . . . + 1/200, escreva um
algoritmo calcular e imprimir a soma dos 200 primeiros termos de S.3. Calcular as somas:
a) b) c)
4. Escreva um algoritmo que realiza as seguintes operações:• lê N números INTEIROS do teclado; • encontra e imprime o menor e o maior valor.
∑=
=
20
1
2k
kS ∑=
=
50
5
2
k
kT ∑=
=
100
0k
kU
78
Exercícios de Fixação5. Partindo-se de um único casal de coelhos filhotes recém-nascidos e
supondo que um sacal de coelhos torna-se fértil após dois meses de vida e, a partir de então, produz um novo casal a cada mês e que os coelhos nunca morrem, a quantidade de casal de coelhos após n meses é dado pelo n-ésimo termo da seguinte seqüência:– Fn = Fn-2 + Fn-1, n>= 2– F0 = 1,– F1 = 1
Esta seqüência chama-se seqüência de Fibonacci.a) escreva um algoritmo para calcular a quantidade de casais de coelhos após n meses.
6. Tabelar N! para N variando de 0 até 10. Por definição k! = k(k-1)(k-2) ... 3,2,1 para k ∈ N* e 0! = 1.
79
Exercícios de Fixação
7. Escreva um algoritmo que
realiza as seguintes operações:
– lê o valor da etiqueta de um
produto;
– calcula o valor a pagar para
o cliente de acordo com os
códigos: 1, 2, 3, e 4 (ver
tabela ao lado); e
– imprime o valor a pagar do
produto.
Código Descrição da Política
1 10% de desconto para pagamento à
vista em cheque ou dinheiro.
2 5% de desconto para pagamento à
vista no cartão.
3 0% para pagamento em duas vezes.
4 10% de acréscimo para pagamento
em três vezes ou mais.
80
Exercícios de Fixação8. Escrever um algoritmo que calcule e imprima a tabela de amortização de
empréstimo para um de principal 6.000, 10% de juros, período de reembolso de quatro anos.
PVA = 6000k = 10% n = 4
))1(
11(
1),(
nkk
nkFJVFA+
−×=
FJVFA
VPAPMT =
81
Continuação, exercício 8.
6.000,00 1.571,30 7.571,30
0,00 1.720,75 172,07 1.720,75 1.892,82 4
1.720,75 1.564,32 328,51 3.285,07 1.892,82 3
3.285,07 1.422,11 470,72 4.707,18 1.892,82 2
4.707,18 1.292,82 600,00 6.000,00 1.892,82 1
Principal no fim do ano
[(2)-(4)] (5)Principal
[(1)-(3)] (4)Juros
[0,10x(2)] (3)Principal no começo
do ano (2)Pagamento do empréstimo (1)Fim do ano
Pagamentos
(PRINCIPAL $6.000, 10% DE JUROS, PERÍODO DE REEMBOLSO DE QUATRO ANOS)
TABELA DE AMORTIZAÇÃO DE EMPRÉSTIMO
Legenda: (1) = PMT (2) = PVA (3) = PVA * k (4) = (1) – (3) (5) = (2) – (4)
82
Aptidões V
• Conceituar e aplicar estruturas de dados compostas:– homogêneas unidimensionais (vetor);– homogêneas multidimensionais (matriz); e– heterogêneas (registro).
83
Estrutura de Dados
• Variáveis Compostas Homogêneas• Variáveis Compostas Unidimensionais
• Variáveis Compostas Multidimensionais
• Variáveis Compostas Heterogêneas
84
Variáveis Compostas Unidimensionaisou Vetor
Portugol prevê quatro tipos de dados: inteiro, real, cadeia de caracteres e lógico. As palavras-chave que os definem são as seguintes (observe que elas não têm acentuação):
– inteiro: define variáveis numéricas do tipo inteiro (ex: sem casas decimais).
– real: define variáveis numéricas do tipo real (ex: com casas decimais).– caractere: define variáveis do tipo cadeia de caracteres. – logico: define variáveis do tipo binária (ex: valor VERDADEIRO ou
FALSO).Em Portugol pode-se também declarar variáveis estruturadas por meio da palavra-chave vetor.
As estruturas de dados organizam e armazenam logicamente os dados, os quais serão manipulados posteriormente por um algoritmo. Estas estruturas são genericamente classificadas em homogêneas (de um mesmo tipo de dado) e heterogêneas (tipos diferentes).
85
Exemplo de algoritmo sem o uso de Vetor!
O algoritmo inclui a declaração e a instanciação de várias variáveis reais. Estas últimas armazenam as notas de seis alunos.
algoritmo Le6Notasreal : NOTA1, NOTA2, NOTA3, NOTA4, NOTA5, NOTA6;
inicioescreva("Digite a nota do aluno 1: "); leia (NOTA1);escreva("Digite a nota do aluno 2: "); leia (NOTA2);escreva("Digite a nota do aluno 3: "); leia (NOTA3);escreva("Digite a nota do aluno 4: "); leia (NOTA4);escreva("Digite a nota do aluno 5: "); leia (NOTA5);escreva("Digite a nota do aluno 6: "); leia (NOTA6);
fim
86
Exemplo de algoritmo sem o uso de Vetor!: Escrito em C
O algoritmo inclui a declaração e a instanciação de várias variáveis reais. Estas últimas armazenam as notas de seis alunos.
void Le6Notas() {
float NOTA1, NOTA2, NOTA3, NOTA4, NOTA5, NOTA6;
puts("Digite a nota do aluno 1: "); scanf(“%f”, &NOTA1);puts ("Digite a nota do aluno 2: "); scanf(“%f”, &NOTA2);puts ("Digite a nota do aluno 3: "); scanf(“%f”, &NOTA3);puts ("Digite a nota do aluno 4: "); scanf(“%f”, &NOTA4);puts ("Digite a nota do aluno 5: "); scanf(“%f”, &NOTA5);puts ("Digite a nota do aluno 6: "); scanf(“%f”, &NOTA6);
}
87
Comentário (continuação)
• Por meio do algoritmo Le6Notas seria possível ler 6 notas de 6 alunos e armazená-las em 6 variáveis diferentes?– Uma instrução de repetição não melhoraria muito esta lógica, dada a
independência das variáveis.• Como seria se a leitura de todas as notas dos alunos do
módulo de “algoritmo e estrutura de dados I” tivessem que serem lidas pelo seu algoritmo?
• É em situação como esta que as estruturas de dados são fundamentais para o processamento dos dados.
• A estrutura de dados é do tipo: homogênea. Este tipo pode assumir duas formas básicas, a saber: Vetor e Matriz.
88
ESTRUTURA DE DADOS COMPOSTA HOMOGÊNEA - VETOR
Uma estrutura de dados composta homogênea consiste em uma única variável que pode armazenar vários valores do mesmo tipo.
Suas principais características são:– contém vários valores; – todos valores são do mesmo tipo de dado (ex: inteiro); – possui um único identificador; – cada valor do conjunto é acessível independentemente, de
acordo com o seu índice (ou posição na estrutura).
89
Exemplo de Vetor• Suponha a existência de uma estrutura que armazena as notas de 6
alunos. O nome do identificado da variável homogênea unidimensional éNOTAS.
• Os valores ou as notas correspondem aos conteúdos lidos, por exemplo, do teclado. Os índices correspondem às posições que identificam os valores armazenados. Por exemplo, se desejar mostrar a nota do quarto aluno, assim o conteúdo desta posição (4) é igual a 8.0 (nota do aluno).
• Um vetor é uma variável composta porque ele pode armazenar vários valores. Ele é unidimensional porque possui variação em uma dimensão. E finalmente, ele é homogêneo porque só armazena um único tipo de dado.
valores 5.0 6.4 7.2 8.0 9.0 8.0
índices 1 2 3 4 5 6
NOTAS
90
A sintaxe para a declaração e criação de uma estrutura de dados composta unidimensional em Portugol é da seguinte forma:
Formato da declaração de uma estrutura de dados composta unidimensional ou vetor:
tipo <identificador> = vetor[1..N] : <tipo básico>
onde:<tipo básico> é o tipo de dado que será armazenado na
estrutura, por exemplo, real;<identificador>é o nome atribuído ao vetor;[1..N] é a quantidade de elementos que o vetor
poderá armazenar, onde N representa o tamanho do vetor.
Exemplo:
tipo notas = vetor[1..6] : real notas : NOTAS;
91
A sintaxe para a declaração e criação de uma estrutura de dados composta unidimensional em C é da seguinte forma:
Formato da declaração de uma estrutura de dados composta unidimensional ou vetor:
<tipo básico> <identificador> [ N ];
onde:<tipo básico> é o tipo de dado que será armazenado na
estrutura, por exemplo, float, int, char, short;<identificador>é o nome atribuído ao vetor;[1..N] é a quantidade de elementos que o vetor
poderá armazenar, onde N representa o tamanho do vetor.
Exemplo:
float NOTAS[ 6 ];
92
A variável NOTAS é um vetor que pode armazenar até 6 números reais diferentes.
A operação, tanto de leitura como de escrita de um elemento em um vetor,pode ser realizada por meio da combinação do nome do vetor seguida do índice desejado entre colchetes. Por exemplo, o valor de NOTAS[ 6 ] é 8.0, o valor de NOTAS[ 4 ] é 7.5, e assim por diante.
Exemplos de comandos em Portugol:escreva( NOTAS[ 6 ] ) // Deve mostrar na tela o valor 8.0escreva( NOTAS[ 4 ] ) // Deve mostrar na tela o valor 7.5NOTAS[ 6 ] ← 9.5 // Deve alterar na posição 6 para 9.5NOTAS[ 4 ] ← 8.6 // Deve alterar na posição 4 para 8.6
escreva( NOTAS[ 6 ] ) // Deve mostrar na tela o valor 9.5escreva( NOTAS[ 4 ] ) // Deve mostrar na tela o valor 8.6
NOTAS 5.0 6.4 7.2 7.5 9.0 8.0
1 2 3 4 5 6
NOTAS 5.0 6.4 7.2 8.6 9.0 9.5
1 2 3 4 5 6
93
A variável NOTAS é um vetor que pode armazenar até 6 números reais diferentes: Escrito em C.
A operação, tanto de leitura como de escrita de um elemento em um vetor,pode ser realizada por meio da combinação do nome do vetor seguida do índice desejado entre colchetes. Por exemplo, o valor de NOTAS[ 6 ] é 8.0, o valor de NOTAS[ 4 ] é 7.5, e assim por diante.
Exemplos de comandos em C:printf(“%f”, NOTAS[ 6 ] ) // Deve mostrar na tela o valor 8.0printf(“%f”, NOTAS[ 4 ] ) // Deve mostrar na tela o valor 7.5NOTAS[ 6 ] = 9.5 // Deve alterar na posição 6 para 9.5NOTAS[ 4 ] = 8.6 // Deve alterar na posição 4 para 8.6
printf(“%f”, NOTAS[ 6 ] ) // Deve mostrar na tela o valor 9.5printf(“%f”, NOTAS[ 4 ] ) // Deve mostrar na tela o valor 8.6
NOTAS 5.0 6.4 7.2 7.5 9.0 8.0
1 2 3 4 5 6
NOTAS 5.0 6.4 7.2 8.6 9.0 9.5
1 2 3 4 5 6
94
continuação
real: SOMA, MEDIA;
SOMA ← 0;SOMA ← SOMA + NOTAS[ 1 ];SOMA ← SOMA + NOTAS[ 2 ];SOMA ← SOMA + NOTAS[ 3 ];SOMA ← SOMA + NOTAS[ 4 ];SOMA ← SOMA + NOTAS[ 5 ];SOMA ← SOMA + NOTAS[ 6 ];
MEDIA ← SOMA / 6;
95
continuação
void calcularMedia(){
float SOMA, MEDIA;
SOMA = 0;SOMA = SOMA + NOTAS[ 1 ];SOMA = SOMA + NOTAS[ 2 ];SOMA = SOMA + NOTAS[ 3 ];SOMA = SOMA + NOTAS[ 4 ];SOMA = SOMA + NOTAS[ 5 ];SOMA = SOMA + NOTAS[ 6 ];
MEDIA = SOMA / 6;
printf(“Media = %5.2f \n”, MEDIA);}
96
Exemplo: Escrever um programa que declare um vetor de reais e leia as notas de 45 alunos.
algoritmo calculoMediatipo notas = vetor[1..45] : real {vetor de reais}
início
notas : NOTAS;inteiro : I;real : S ← 0;para I de 1 até 45 passo 1 faça
escreva("Digite a nota do aluno [",I,”] : ”);leia (NOTAS[ I ]);S ← S + NOTAS[ I ];
fimpara;escreva(“MEDIA = ”, S / 45)
fim
97
Exemplo: Escrever um programa que declare um vetor de reais e leia as notas de 45 alunos:
Escrito em Cvoid calculoMedia()
{
float S = 0, NOTAS[ 45 ];
int I;
for (I = 0; I < 45; I++)
{
printf("Digite a nota do aluno [%d”] : ”, I);
scanf(“%d”, NOTAS[ I ]);
S = S + NOTAS[ I ]
}
printf(“MEDIA = %f”, S / 45);
}98
Escrever um programa que declare um vetor de cadeia de caracteres e leia os nomes de 45 alunos. O identificador do vetor será NOMES. Ele terá a capacidade para armazenar 45 nomes.
algoritmo listaDeAlunostipo nomes = vetor[1..45] : caractere {vetor de cadeias de caracteres}início
nomes : NOMES;inteiro : I;I ← 1;repita
escreva("Digite o nome do aluno [",I,”] : ”);leia (NOMES[ I ]);I ← I + 1;
até que i > 45;fim
99
Escrever um programa que declare um vetor de cadeia de caracteres e leia os nomes de 45 alunos. O identificador do vetor será NOMES. Ele terá a capacidade para armazenar 45 nomes:
Escrito em Cvoid listaDeAlunos() {
char nomes [45][100];int i;for (i = 0; i < 5; i++){
printf ("\n\nDigite um nome: ");scanf (“%s”,nomess[ i ]);
}printf ("\n\nOs nomes que voce digitou foram:\n");for (i = 0; i < 5; i++)
printf ("%s\n", nomes[ i ]);}
100
ComentáriosO algoritmo listaDeAlunos utiliza a estrutura de controle repita <comandos> até que <condição>.
repita enquanto <condição> comando 1; comando 1;comando 2; comando 2;comando 3; comando 3;
até que <condição> fim
A estrutura de controle repita é similar à estrutura de controle enquanto. A diferença básica consiste na posição do teste que decide pela continuação ou não da execução do bloco de comandos. Na estrutura repita, primeiramente, o bloco de comandos é executa e depois a condição é verificada. É importante notar que o bloco de comandos dentro da estrutura repita executará sempre pelo menos uma vez.
101
Exercícios de FixaçãoEm cada um dos exercícios propostos, deve-se apresentar a análise do problema, definir o objetivo, dar as especificações de entrada e saída e descrever o algoritmo em linguagem algorítmica.
1) Dado um vetor com os resultados da MEGA SENA, identifique se cada número é par, ímpar, múltiplo de três, múltiplo de cinco ou múltiplo de sete.
ExemploEntrada: 27, 16, 42, 30, 10, 35Saída: 27 ímpar, múltiplo de 3
16 par42 par, múltiplo de 3, múltiplo de 730 par, múltiplo de 3, múltiplo de 510 par, múltiplo de 535 ímpar, múltiplo de 5, múltiplo de 7
102
continuação2) Uma empresa decidiu dar uma gratificação de Natal a seus funcionários,
baseada no número de horas extras e no número de horas que o empregado faltou ao trabalho.
Dados os números de identificação dos funcionários, o número de horas extras e o número de horas-faltas, imprimir uma relação com duas colunas, a primeira contendo o número do funcionário e a segunda o valor do prêmio a que faz jus. Os dados de entrada e saída devem ser organizados em vetores de dados.
TABELA I
O valor de prêmio é obtido pela consulta à Tabela I, em que H éo número de horas-extras subtraído de dois terços do número de horas-faltas.
H (horas) Prêmio (R$)
(40, 100] 100,00
(30, 40] 80,00
(20, 30] 60,00
(10, 20] 40,00
(0, 10] 20,00
103
continuação
3) Dado o vetor de números inteiros X que contem, respectivamente, aos dígitos do número de CPF de um contribuinte, calcular os dígitos verificadores.
Se S1 mod 11 > 9 então X10 ← 0 senão X10 ← S1 mod 11.
Se S2 mod 11 > 9 então X11 ← 0 senão X11 ← S2 mod 11.
ixSi
i ×=∑=
9
1
1)1(
10
2
2 −×=∑=
ixSi
i