Buscar

Apostila_Programação (2)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 114 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 114 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 114 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Norte de 
Minas Gerais
INSTITUTO
FEDERAL
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA
E TECNOLOGIA DO NORTE DE MINAS GERAIS
CAMPUS MONTES CLAROS
Apostila Programação para Engenharia Química
Elaborada por:
Daniel Leite Mesquita da Silva
Enzio Dias Carvalho
Gilmar Henrique Barbosa Carvalho
João Paulo Soares Cangussu
Nícollas Priosy Oliveira
Sérgio Vinicius Macedo Resende
Orientador:
Saulo Fernando dos Santos Vidal
Montes Claros
Norte de 
Minas Gerais
INSTITUTO
FEDERAL
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA
E TECNOLOGIA DO NORTE DE MINAS GERAIS
CAMPUS MONTES CLAROS
Apostila Programação para Engenharia Química
Elaborada por:
Daniel Leite Mesquita da Silva
Enzio Dias Carvalho
Gilmar Henrique Barbosa Carvalho
João Paulo Soares Cangussu
Nícollas Priosy Oliveira
Sérgio Vinicius Macedo Resende
Orientador:
Saulo Fernando dos Santos Vidal
Apostila da Disciplina de Programação para En-
genharia Química do curso de Engenharia Quí-
mica do IFNMG - Campus Montes Claros.
Montes Claros
Sumário
1 COMANDOS BÁSICOS DO SCILAB . . . . . . . . . . . . . . . . . . . . . 4
1.1 Utilização do Scilab como uma simples calculadora . . . . . . . . . . . 4
1.2 Atribuição de variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Expressões Aritméticas e Funções Comuns No Scilab . . . . . . . . . . 5
1.4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Comando Clear e Clc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Constantes Especiais do Scilab . . . . . . . . . . . . . . . . . . . . . . . 7
1.7 Comando Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.8 Comando de entrada de dados . . . . . . . . . . . . . . . . . . . . . . . 7
1.9 Comandos de saída de dados . . . . . . . . . . . . . . . . . . . . . . . . 8
1.10 Salvando arquivos de script . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.11 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 PROGRAMAÇÃO ESTRUTURADA I . . . . . . . . . . . . . . . . . . . . . 11
2.1 Estruturas de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 Expressões Booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Variáveis Booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.3 Tipos de dados primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.4 Ordem de avaliação entre os operadores . . . . . . . . . . . . . . . . . . . 15
2.1.5 A estrutura de seleção simples if-end . . . . . . . . . . . . . . . . . . . . . 16
2.1.6 A estrutura de seleção multidirecional if-elseif-else-end . . . . . . . . . . . . 17
2.2 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 21
3.1 Aninhando Seletores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4 PROGRAMAÇÃO ESTRUTURADA – III . . . . . . . . . . . . . . . . . . . 29
4.1 Estruturas de Repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1.1 Estrutura de Repetição controlada logicamente . . . . . . . . . . . . . . . . 29
4.1.2 Estrutura de Repetição controlada logicamente com contador . . . . . . . . 30
4.1.3 While como estrutura de proteção . . . . . . . . . . . . . . . . . . . . . . . 32
4.2 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5 PROGRAMAÇÃO ESTRUTURADA – IV . . . . . . . . . . . . . . . . . . . 34
5.1 Criação de listas com while . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.1 Contador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.2 Acumulador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.3 Valor Sentinela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1.4 Estruturas dentro do while . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6 PROGRAMAÇÃO ESTRUTURADA – V . . . . . . . . . . . . . . . . . . . . 38
6.1 O comando for como estrutura de repetição . . . . . . . . . . . . . . . . 38
6.2 Comparação entre as estruturas de repetição . . . . . . . . . . . . . . . 40
6.2.1 Repetições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.2.2 Contador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.2.3 Listas infinitas com valor de sentinela . . . . . . . . . . . . . . . . . . . . . 41
6.2.4 Proteções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.3 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7 VETORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.1 Tipos de Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.2 Operações com Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.2.1 Soma e Subtração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.2.2 Multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.2.2.1 Vetor e Escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.2.2.2 Vetor e Vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3 Funções Vetoriais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3.1 Funções Padrões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3.2 Transposição de um vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.3.3 Concatenação / Encadeamento de vetores . . . . . . . . . . . . . . . . . . 47
7.3.4 Dimensionamento de vetores . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.3.5 Somatório dos valores de um vetor . . . . . . . . . . . . . . . . . . . . . . 48
7.4 Operações com o índice . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.5 Criação de vetor a partir de condições pré-postas sobre o vetor . . . . . 50
7.6 Condição sobre os elementos do vetor . . . . . . . . . . . . . . . . . . . 53
7.7 Troca de elementos de um vetor . . . . . . . . . . . . . . . . . . . . . . . 54
7.8 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8 MATRIZES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.1 Construção de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.2 Aplicação de Funções em Matrizes . . . . . . . . . . . . . . . . . . . . . 57
8.3 Transposição de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.4 Concatenação de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.5 Seccionamento de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.6 O Operador $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.7 Atribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.8 Dimensão de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.9 Operações Escalar-Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.10 Operações Matriz-Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.11 Solução de Sistemas de Equações Lineares . . . . . . . . . . . . . . . . 71
8.12 Transposta de Matrizes Complexas . . . . . . . . . . . . . . . . . . . . . 72
8.13 Matrizes de Zeros e Um . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8.14 EXERCÍCIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
9 POLINÔMIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
9.1 Como construir um polinômio: . . . . . . . . . . . . . . . . . . . . . . . 77
9.2 Funções Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.3 Operações Polinomiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9.4 Exercícios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9.5 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 84
10 FUNÇÕES . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 86
10.1 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 93
11 GRÁFICOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.1 Alguns comandos importantes . . . . . . . . . . . . . . . . . . . . . . . 95
11.1.1 Função deff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.1.2 Função eval3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.2 Gráficos em 2 dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.2.1 Função plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.2.2 Função fplot2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
11.2.3 Função contour2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
11.3 Gráficos Tridimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.3.1 Função meshgrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.3.2 Função plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.3.3 Função mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
11.3.4 Função surf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11.4 Trabalhando com Janelas Gráficas . . . . . . . . . . . . . . . . . . . . . 106
11.5 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . 109
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4
1 Comandos Básicos do Scilab
1.1 Utilização do Scilab como uma simples calculadora
O Scilab é capaz de fazer simples operações matemáticas por meio de diferentes símbolos.
Os operadores que podem ser utilizados são o “+”, que representa a adição;“-”, que representa a
subtração; “∗”, que representa a multiplicação; “/” , que representa a divisão e “^”, que representa
a potenciação.
Estes comandos podem ser utilizados na área do console do Scilab para serem feitas contas
simples.
Ex.:
1.2 Atribuição de variáveis
Para atribuir a uma variável um valor, o comando usado é o “=”. Assim, por exemplo, se
quisermos atribuir a variável “s” o valor de 14, deve-se digitar desta maneira:
Os nomes que podem ser usados para serem variáveis tem algumas regras específicas:
1. Os nomes devem ser sempre iniciados por letras;
2. Caracteres especiais não são permitidos (#,@,!,&,%,$,etc.);
3. Caracteres acentuados não são permitidos;
4. Há diferenciação de letras minúsculas e maiúsculas. Ex.: A variável “Alto” é diferente da
variável “alto”, que também é diferente da variável “alTo”.
Capítulo 1. Comandos Básicos do Scilab 5
É importante citar também a função do comando ponto e vírgula (“ ; “). Ele faz com que o
resultado da operação realizada não seja apresentado no prompt, ou seja, seja suprimido.
Ex.:
1.3 Expressões Aritméticas e Funções Comuns No Scilab
Os operadores mostrados no primeiro tópico podem ser usados em conjunto para resolver
equações aritméticas.
Ex.: A+B*C
(NOTA1+NOTA2)/2
1/(a^2 + b^2)
As regras para a preferência de resolução das operações é a mesma que é feita e ensinada nas
salas de aula.
→ 1º Potenciação // 2º Multiplicação e Divisão // 3º Adição e Subtração
Na multiplicação, divisão, adição e subtração, o programa avalia primeiro as operações à
esquerda, como no exemplo:
A-B+C+D← A-B é avaliada primeiro, porque está mais a esquerda.
A*B/C*D← A*B é avaliada primeiro, porque está mais a esquerda.
Já na potenciação, a regra muda, sendo as operações à direita as avaliadas prioritariamente:
A^B^C^D← C^D é avaliada primeiro, porque está mais à direita.
Ainda é possível o uso dos parênteses, que alteram a ordem de avaliação:
R*3+B^(3/2)+1← 3/2 é avaliada primeiro.
Além dos operadores, existem algumas funções matemáticas que são comuns que possuem
comandos específicos.
Exemplos:
• abs(a) → retorna o módulo da variável “a”;
• sin(a) → retorna o seno da variável “a” (em radianos);
Capítulo 1. Comandos Básicos do Scilab 6
• cos(a) → retorna o cosseno da variável “a” (em radianos);
• tan(a) → retorna a tangente da variável “a” (em radianos);
• exp(a)→ retorna o valor do número de euler elevado à variável “a”;
• log(a) → retorna o valor do logarítmo natural da variável “a”;
• log10(a)→ retorna o valor do logarítmo na base 10 da variável “a”;
• sqrt(a) → retorna o valor da raiz quadrada da variável “a”;
• round(a)→ arredonda o valor da variável “a” para o inteiromais próximo (Ex.: round(2.7)=3)
(Obs.: No caso de ser um valor exatamente na metade, como 4.5, este comando arredonda
para o inteiro para “cima”.);
• int(a)→ retorna a parte inteira da variável “a” (Ex.: int(4.75)=4);
• ceil(a)→ arredonda o valor da variável “a” para o inteiro para “cima” (Ex.: ceil(1.3)=2);
• floor(a)→ arredonda o valor da variável “a” para o inteiro para “baixo” (Ex.: floor(8.6)=8);
• modulo(a,b)→ faz a divisão entre “a” e “b” e retorna o resto da divisão entre os dois
(Atenção: O único valor que vai ser exibido é o RESTO da divisão).
1.4 Strings
String são usados para qualquer tipo de representação. Qualquer caractere pode ser usado e
na prática representam um texto. Para transformar uma variável em string, usa-se aspas simples
ou duplas.
–>a = "abcd"
a = abcd
–>b = ’efgh’
b = efgh
–>c = ’10’
c = 10
É importante mostrar que a variável “c” agora não é número e sim texto. Se fizermos
operações com ela, o programa irá considerá-lo um texto.
Ex.: –>A = a+c
A = abcd10
Capítulo 1. Comandos Básicos do Scilab 7
1.5 Comando Clear e Clc
O comando “clear” serve para limpar todas as variáveis que já foram armazenadas no
navegador de variáveis. Com ele, também é possível apagar seletivamente alguma variável.
Ex.:
–>a = 2;
–>b = 3;
–>c = 4;
–>clear b;
Neste caso, somente a variável “b” foi apagada do navegador de variáveis.
O comando “clc” serve apenas para apagar o que foi digitado no console do Scilab. Ele NÃO
apaga as variáveis do navegador de variáveis.
1.6 Constantes Especiais do Scilab
Algumas constantes muito utilizadas têm maneiras especiais de serem digitadas no Scilab.
Aqui estão algumas delas:
• % pi → representa o número π;
• % inf → representa o infinito;
• % e → representa o número de euler.
1.7 Comando Help
O comando “help” abre uma janela onde você pode procurar instruções sobre qualquer
comando do Scilab.
1.8 Comando de entrada de dados
Para solicitar algum dado do tipo número ao usuário digite:
<variável> = input (<String>)
Ex.:
X = input (“Digite um número ”)
Digite um número 10
X = 10
Para solicitar algum dado do tipo string ao usuário digite:
Capítulo 1. Comandos Básicos do Scilab 8
Ex.:
X = input(“Digite algo”,”s”)
Digite algo —> Oi
X = Oi
1.9 Comandos de saída de dados
Para voltar uma resposta do programa pode-se utilizar a função disp().
disp(<string ou número>)
Ex.:
–> nome = “Valentina”
–> disp(“Seu nome é ” + nome)
Seu nome é Valentina
Para voltar uma resposta do programa de forma mais flexível pode-se utilizar a função printf().
printf(<formato>,<lista de dados>)
O <formato> é um string contendo o texto ou a forma que terá a resposta. Dentro do formato
os dados são substituídos por %g (dado numérico) ou %s (dado em string). Pode-se usar “\n”
para pular de uma linha para outra.
Ex.:
–>nome = "Joao";
–>altura = 1.65;
–>printf("A altura de %s é %g",nome, altura); A altura de Joao é 1.65
1.10 Salvando arquivos de script
Um arquivo de script é uma forma simples de salvar uma série de comando a ser executado no
Scilab. Para criar um arquivo de script, caso o scinotes não esteja aberto, clique em Aplicativos »
Scinotes.
Após isso, crie seu programa e clique em salvar e executar na parte superior, marcado na
imagem a seguir:
Termine de salvar e seu programa será executado.
Capítulo 1. Comandos Básicos do Scilab 9
1.11 EXERCÍCIOS DE FIXAÇÃO
1. Faça um programa que solicite dois valores para o usuário. Seu programa deve calcular a
razão entre os dois valores e mostrar o resultado arredondado para cima.
2. Faça um programa que receba doisnúmeros e informe a parte inteira da raiz quadrada do
produto entre eles.
3. Escreva um algoritmo que calcule a diferença entre dois números e a diferença dos
quadrados desses números.
4. Crie um algoritmo para calcular o volume de um cilindro e um cone, recebendo apenas o
Capítulo 1. Comandos Básicos do Scilab 10
raio da base e altura.
5. Apresente um algoritmo que receba o nome de um aluno, as notas de 3 provas e seus
respectivos pesos. Seu programa deve calcular a média ponderada e apresentar na seguinte
forma: ‘O aluno recebeu as notas , e , obtendo média de ’.
6. Sabe-se que certa equação tem a lei de formação:
y =
13
4
x+
5
2
Escreva um programa que, para qualquer x de entrada, retorne o par ordenado (x,y).
7. Crie um programa que receba um número, n, e retorne o resultado da expressão:
(nn ∗ πn) + 2e
90n2 + 36 + cos(n)
+ 5n3
8. Uma empresa paga R$ 25,00 por hora de serviço. Sabendo que no final é descontado 2%
do valor bruto, escreva um algoritmo que, a partir da entrada de um valor qualquer de
horas trabalhadas por certo trabalhador, retorne o valor líquido recebido.
9. Escreva um programa que peça ao usuário um valor e:
a) Some este valor ao seu quadrado;
b) Divida o resultado por um terço;
c) Subtraia o novo resultado por
8
7
;
d) Mostre o resultado final arredondado pra baixo.
11
2 PROGRAMAÇÃO ESTRUTURADA I
2.1 Estruturas de Controle
Um programa pode ser executado de forma sequencial, conforme visto anteriormente na
resolução de operações aritméticas, contudo, existe uma forma de deixar esses programas mais
flexíveis e poderosos de forma que seja possível executar diversos tipos de programa. Para isso
são utilizadas as estruturas de seleção, sequência e repetição.
As estruturas de seleção são utilizadas quando deseja-se selecionar algum dado através de
uma condição. Por exemplo:
• Se estiver chovendo retire as roupas do varal, caso contrário, deixe elas secando.
• Se eu não consigo entender a matéria vou estudar, caso contrário resolverei exercícios.
• Se um aluno estiver com nota abaixo de 40 está reprovado, acima de 60, aprovado e entre
40 e 60 fará prova final
Conforme exemplificado acima, essas estruturas de seleção servirão para escolher alguma
das diversas possibilidades abordadas.
As estruturas de repetição/sequência servem para repetir a execução de uma sequência de
comandos. Por exemplo:
• Enquanto um número for maior do que 1 realize a divisão dele por 2.
• Receber a nota de 30 alunos e dizer se ficou ou não em recuperação.
Essas estruturas servem para resumir um programa que inicialmente seria extenso, ou seja,
otimizá-lo ou realizar operações dada uma condição.
Os três tipos de estruturas citados são conhecidos como estruturas de controle. As mais
utilizadas são IF (seleção), FOR (sequência) e WHILE (repetição), com elas pode-se construir
qualquer programa de computador.
Esse material tratará das estruturas de seleção bem como dos itens necessários para executá-lo,
como as expressões booleanas.
2.1.1 Expressões Booleanas
As expressões booleanas ou expressões lógicas, diferente das expressões aritméticas que
produzem um valor numérico, produzem valores lógicos (verdadeiro ou falso), para isso são
utilizados operadores relacionais para realizar comparações entre expressões aritméticas, o
quadro 1, a seguir, apresenta esses operadores:
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 12
Tabela 1 – Operadores relacionais utilizados em expressões booleanas
Operadores Relacionais
Operador Descrição
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
== Igual a
<> ou ∼= Diferente de
Fonte: Lacerda (2015)
Ex.:
Inicialmente foi definido para o x um valor, nesse caso x=5, em seguida pediu-se para
verificar se x é maior que 0, como essa afirmação é verdadeira, o programa retornou T de ‘true’
(verdadeiro em inglês), em seguida pediu-se para verificar se o produto de 2 por 3, que nesse
caso é 6 corresponde ao x, como essa afirmação é falsa o programa retornou F de ‘false’ (falso
em inglês).
As expressões booleanas podem ser combinadas utilizando operadores booleanos, são eles:
O quadro 3, a seguir, define os operadores e as prioridades quando combinados:
Ex.: Considerando a=2, b=5, c=3 e d=9 têm-se:
A primeira expressão compara se a variável a é maior que a variável b ou se a variável c é
menor que a c, comparando a expressão booleana com os valores predefinidos observa-se que
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 13
Tabela 2 – Operadores Booleanos
Operadores Booleanos
Operador Descrição
& E (Conjunção)
| Ou (Disjunção não exclusiva)
∼ Não (Negação)
Fonte: Lacerda (2015)
Tabela 3 – Prioridade dos valores booleanos quando comparados.
A B A & B A | B ∼A
Verdadeiro Verdadeiro Verdadeiro Verdadeiro Falso
Verdadeiro Falso Falso Verdadeiro Falso
Falso Verdadeiro Falso Verdadeiro Verdadeiro
Falso Falso Falso Falso Verdadeiro
Fonte: Lacerda (2015)
a primeira parte da expressão é falsa, porém a segunda parte é verdadeira. Como a expressão
considera um ou outro o resultado verdadeiro prevalecerá conforme ilustrado no quadro 3.
A segunda expressão compara se uma expressão aritmética corresponde à outra. Como em
ambos os lados o resultado será 14, o resultado dessa expressão lógica será verdadeiro, ou seja, o
programa retornará T.
A terceira expressão é semelhante à segunda e compara se 27 é igual a 9, como o resultado
das expressões foram diferentes o programa retornará F de ‘false’.
OBS.: Cabe ressaltar que o operador ‘Igual a’ (==) é diferente do operador de atribuição (=).
Este é utilizado para atribuir algo para uma variável enquanto aquele é utilizado em expressões
booleanas para comparações.
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 14
2.1.2 Variáveis Booleanas
Uma variável pode receber, além de um valor numérico ou uma string, um valor booleano
(verdadeiro ou falso). Assim, no Scilab, os valores que representam o valor verdadeiro e falso
são %t (True – Verdadeiro) e %f (False – Falso). Por exemplo:
Primeiro atribuiu-se um valor verdadeiro para a variável a e um valor falso para a variável b,
ao definir a variável c como a e b, ela receberá o valor falso conforme demonstrado no quadro 3.
2.1.3 Tipos de dados primitivos
O Scilab avalia três tipos de informações, são eles: números reais, strings e booleanos. Assim,
o tipo da variável pode ser alterado sempre que um novo valor for atribuído a ela.
Ex.:
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 15
Nessa situação como o último valor atribuído foi um valor booleano, a variável a será do tipo
booleano. Observa-se que inicialmente a variável a era do tipo numérica, em seguida do tipo
string e, por fim, booleano.
2.1.4 Ordem de avaliação entre os operadores
Todos os numeradores que foram descritos seguem uma ordem de avaliação, e essa é
apresentada no Quadro 4, a seguir:
Tabela 4 – Regra de prioridade e associatividade entre operadores.
A B A & B A | B ∼A
Verdadeiro Verdadeiro Verdadeiro Verdadeiro Falso
Verdadeiro Falso Falso Verdadeiro Falso
Falso Verdadeiro Falso Verdadeiro Verdadeiro
Falso Falso Falso Falso Verdadeiro
Fonte: Lacerda (2015)
Ex.:
∼ (2 < 5) | 40/5 == 10 & 6 + 2 > 5
∼ %t | 40/5 == 10 & 6 + 2 > 5
%f | 40/5 == 10 & 6 + 2 > 5
%f | 8 == 10 & 6 + 2 > 5
%f | 8 == 10 & 8 > 5
%f | 8 == 10 & %t
%f | %f & %t
%f | %f
F
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 16
2.1.5 A estrutura de seleção simples if-end
É a primeira e mais simples estrutura de seleção. Ela é caracterizada por permitir a realização
de uma sequência de comandos quando uma ou mais condições, representadas por expressões
booleanas forem satisfeitas. A seleção simples if-end tem a seguinte forma:
if <expressão booleana> then
<sequência de comandos>
end
Portanto, a sequência de comandos só será realizada se a expressão booleana for verdadeira.
Ex.:
Onde, na terceira captura de tela, o programa não executou o comando da linha 6 pois a
condição descrita pela expressão booleana não foi verdadeira.
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 17
2.1.6 A estrutura de seleção multidirecional if-elseif-else-endÉ caracterizado por fazer a escolha entre duas ou mais sequências de comandos, quando
uma ou mais condições, representadas por expressões booleanas forem satisfeitas. A seleção
multidirecional if-elseif-else-end tem a seguinte forma:
if <primeira expressão booleana> then
<primeira sequência de comandos>
elseif <segunda expressão booleana> then
<segunda sequência de comandos>
elseif <terceira expressão booleana> then
<terceira sequência de comandos>
elseif <xª expressão booleana> then
<xª sequência de comandos>
else
<última sequência de comandos>
end
A primeira sequência de comandos somente será executada se a primeira expressão booleana
for verdadeira, a segunda sequência de comandos somente será executada se a segunda expressão
booleana for verdadeira e a primeira for falsa, seguindo assim até a última sequência de comandos,
onde ela só será executada caso todas as outras sejam falsas.
Obs.: Os comandos if e elseif são acompanhados de then, enquanto o else, não.
Ex.:
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 18
2.2 EXERCÍCIOS DE FIXAÇÃO
1. Faça um algoritmo que receba três valores e indique, para cada um deles, se são ímpares
ou pares.
2. Escreva um programa que receba dois valores e:
• Os somem se forem iguais;
• Subtraia o segundo do primeiro, caso sejam diferentes.
Mostre o resultado para qualquer caso.
3. Uma empresa pretende aumentar o salário dos funcionários da seguinte forma:
Escreva um programa que, a partir de um salário base e do código, retorne o salário com o
aumento.
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 19
Função Aumento Salarial Código
Limpeza 60% A
Trabalho manual 40% B
Secretaria 15% C
4. Escreva um programa que resolva a seguinte equação:
y = 2x+
√
x, se x ≥ 0
y = 3x
x
2
, se x < 0
5. Faça um algoritmo que receba o nome de um aluno e sua nota (entre 0 e 100) e se sua nota
for igual ou maior que 60 retorne “O aluno (nome do aluno) foi aprovado”, caso contrário
retorne “O aluno (nome do aluno) foi reprovado”.
6. Analise os programas a seguir (sem executá-los no computador) e após informe qual seria
sua saída:
a) Primeiro programa;
clear
clc
a=30
b=10
c=15
if a>b then
b=a+b
end
if b>c then
c=c+b
printf("%g",c)
else
c=c-b
printf("%g",c)
end
Capítulo 2. PROGRAMAÇÃO ESTRUTURADA I 20
b) Segundo programa;
clear
clc
a=1
b=2
c=3
if b>a & b<c then
a=b*c
elseif b>c
b=a+c
else
disp(a)
end
e=2*a+c*a
printf("%g",e)
7. Numa empresa são dadas notas para cada funcionário, como forma de avaliá-lo. As
notas podem ir de 1 até 10 pontos e são avaliados produtividade, comunicação, inovação,
comprometimento e potencial. Faça um programa que receba o nome e a nota de cada um
dos pontos avaliados em um funcionário, calcule a média das notas e se a média for maior
ou igual a 9 volte: “Parabéns (nome do funcionário), você foi promovido.”, ou se a nota
estiver entre 4 e 9, volte: “(nome do funcionário) trabalhe mais e logo será promovido”,
caso contrário volte: “(nome do funcionário) você está demitido”.
8. Um casal está em uma sorveteria e quer comprar sorvete no quilo. Porém, eles tinham
somente 20 reais e o seu cartão de crédito. Escreva um algoritmo que receba a quantidade
de gramas de sorvete que eles compraram e diga se eles vão usar o cartão ou dinheiro
(preço do quilo: R$ 49,90).
21
3 PROGRAMAÇÃO ESTRUTURADA – II :
ANINHAMENTO DE SELETORES
Continuando os estudos sobre programação estruturada e estruturas de seleção, falaremos
sobre o aninhamento de seletores.
3.1 Aninhando Seletores
Comandos de seleção podem ser aninhados (usados juntos) de diversas formas, produzindo
uma imensa gama de programas possíveis de serem criados. O conceito base do aninhamento
consiste em usar “if dentro de if ”, deixando determinadas condições só ocorrerem caso condições
pré-estabelecidas ocorram.
• Caso chova, eu não lavarei o carro, mas, se a chuva for muito forte eu tiro o carro de
debaixo da árvore, se a chuva for amena, deixo ele lá.
• Se eu acordar depois das 8, penso se vejo o programa de culinária e faço almoço ou se vejo
o programa esportivo e compre almoço pronto. Caso eu acorde antes das 8, vou à escola.
Em ambos os casos acima, uma certa condição (chover; acordar em determinado horário)
resultam em ações diferentes. Essas ações também possuem condições (chover forte ou não; ver
o programa de culinária ou esportivo), contudo, estas condições estão relacionadas às primeiras
condições de tal forma que só ocorrerão caso a primeira condição de cada afirmação (chover e
acordar em determinado horário) ocorram.
Exemplo Resolvido 1
Escreva um programa que receba 3 notas de um aluno. Seu programa deve calcular a média
dessas notas e:
• Retornar “Aprovado com média _”, caso a média seja superior ou igual a 7
• Caso a média esteja entre 4 e 7, seu programa deve solicitar a nota da prova de recuperação,
calcular a nova média e, caso esta nova média seja superior ou igual a 8, retornar “Aprovado
com nota _”. Se for menor que 8, retornar “Reprovado com nota _”;
• Caso a primeira média for menor que 4, retornar “Reprovado com média _”.
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 22
A primeira condição que é imposta é a de que caso a média das 3 primeiras notas seja maior
ou igual a 7, o programa mostra que o aluno foi aprovado e encerra.
A segunda condição é a de que a nota esteja entre 4 e 7, duas outras condições acontecerão.
O programa apenas solicitará ao usuário a nota da prova de recuperação, calculará uma nova
média (variável nm) e avaliará o valor desta nova variável caso a condição de que a primeira
média calculada (variável m1) esteja entre 4 e 7, assim, todo o trecho do programa entre as linhas
11 e 19 está condicionado ao fato de a variável m1 estar entre dois valores. Sobre a variável nm
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 23
incidem as condições de o aluno ser aprovado caso esta seja superior ou igual a 8 e reprovado
nos outros casos.
Ainda sobre a primeira média, recai a condição de o aluno ser reprovado caso seu valor
resulte em qualquer valor inferior a 4.
Lembrando que o end fecha os if, assim, para uma quantidade n de comandos if utilizados, é
necessária uma quantidade n de comandos end para que o programa esteja correto.
Exemplo Resolvido 2
Escreva um programa que receba os três lados de um triângulo, avalie se aquelas medidas
podem formar um triângulo, e, caso seja possível, classifique o triângulo. Caso não seja possível,
retorne uma mensagem de erro.
Obs: para que um triângulo exista, é necessário que qualquer lado seja menor que a soma
dos outros dois. Um triângulo é chamado equilátero se todos os lados forem iguais, isósceles
caso dois lados sejam iguais e escaleno se dois quaisquer lados não possuem medidas iguais.
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 24
O if da linha 6 avalia a primeira condição de ser ou não um triângulo válido. Logo abaixo
dele, aninhado, o if da linha 7 começa a avaliar qual tipo de triângulo os lados inseridos formam.
Devido à aninhação, os comandos entre as linhas 7 e 13 apenas serão executados caso seja
verdadeira a condição avaliada pelo if da linha 6. Daí a ideia de “if dentro de if ”.
Caso o comando da linha 6 seja executado, novas condições serão avaliadas, aquelas que
indicam qual tipo de triângulo é formado pelos lados inseridos. Caso o comando da linha 6 não
seja executado, o programa pula direto para a linha 14, executando o else e finalizando. O end da
linha 13 encerra o if da linha 7, enquanto o end da última linha encerra o primeiro if inserido.
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 25
Os dois exemplos acima são simples e usados apenas para apresentar as ideias e conceitos do
aninhamento de seletores. Além das construções mostradas acima, infinitas outras podem ser
montadas a partir do problema que se deseja solucionar, com este conhecimento podendo ser
usado juntamente com os outros conteúdos que serão estudados mais à frente.
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTODE SELETORES 26
3.2 EXERCÍCIOS DE FIXAÇÃO
Para todas as questões a seguir, utilize uma estrutura contendo aninhamento de seleto-
res!!
1. Faça um programa que receba duas cores da paleta abaixo e indique o resultado das
combinações dessas cores entre si. Cores na paleta: Azul, Vermelho, Amarelo.
2. Faça um programa que receba dois números naturais, x e y. Caso o primeiro seja maior,
verifique se ele é divisível pelo segundo. Se sim, seu programa deve informar que são
múltiplos, em caso negativo informe que não são múltiplos. Caso o segundo seja maior
que o primeiro retorne o valor da seguinte expressão:
(x1−y + y1−x)× (xy−1 + yx−1) (3.1)
3. Como forma de se preparar mais rápido para a guerra, um exército necessita de um
programa que indique para a pessoa se ela deve se alistar ou não. Para solucionar esse
problema, faça um programa que receba a idade, altura e peso de um homem, caso seja
menor de 18 anos ou maior que 60 anos está dispensado, caso seu IMC seja menor que
18 e maior que 25 está dispensado, caso uma pessoa não se enquadre nesses parâmetros
informe a ela que deve se alistar o mais rápido possível.
4. Faça um programa que receba dois números, x e y, e indique se o logxy cumpre as condições
de existência de um logaritmo, caso exista, informe o valor desse logaritmo e em caso
contrário informe que não existe.
Condição de Existência de um Logaritmo:
logab = c
b>0
a>0
a 6= 1
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 27
5. Em uma entrevista, os entrevistados estão sendo classificados de acordo com seu desempe-
nho social e conhecimento técnico. Para isso foram criados os seguintes códigos:
Desempenho Social Código
Ótimo 1
Bom 2
Regular 3
Péssimo 4
Conhecimento Técnico Código
Ótimo 1
Bom 2
Regular 3
Péssimo 4
Faça um programa que receba o código do desempenho social e do conhecimento técnico
de um entrevistado e informe se ele tem a possibilidade de entrar na empresa sabendo que:
• Serão contratadas as pessoas que obtiveram uma soma de códigos menor ou igual a 4
e cuja média dos códigos seja menor ou igual a 1,5;
• Quem obteve uma média superior a 1,5 informe que ficou na lista de espera;
• O restante está dispensado.
6. Alunos do IFNMG campus Montes Claros estão realizando uma pesquisa para saber
quais famílias devem receber e a quantidade que receberão do álcool 70% produzido na
instituição.
Sua missão é criar um programa que solicite ao usuário a renda familiar per capita e se for
menor que R$500,00 solicite ao usuário quantas pessoas moram na casa e se morarem
até 2 pessoas na casa retorne “Você recebera 1 pote de álcool 70”, se morarem de 2 até
5 pessoas na casa retorne “Você recebera 2 potes de álcool 70”,se morarem mais de 5
pessoas na casa retorne “Você recebera 3 potes de álcool 70”, caso a renda familiar per
capita e seja maior que R$500,00, retorne “Você não recebera nenhum pote de álcool 70”.
7. Seu programa deve solicitar três valores ao usuário X, Y e Z, e verificar se é possível
formar um triângulo. Se sim verificar se é equilátero, isósceles ou escaleno. Se eles não
formarem um triângulo, escrever “Não forma um triângulo”.
8. O programa de televisão chamado Ultracheff está em busca do cheff de cozinha que faz
os pratos mais perfeitos, para isso eles realizam uma competição que avaliam três pratos
entre “perfeito”, “bom” ou “ruim”. Seu programa deve receber essa avaliação (em forma
de string) do primeiro prato e se o primeiro for perfeito seu programa deve receber essa
avaliação (em forma de string) do segundo e se o segundo for perfeito seu programa
Capítulo 3. PROGRAMAÇÃO ESTRUTURADA – II : ANINHAMENTO DE SELETORES 28
deve receber essa avaliação (em forma de string) do terceiro. Se o terceiro for perfeito
parabenize o usuário e diga que ele ganhou a competição. Caso o primeiro seja bom ou
ruim volte “Você saiu da competição na primeira rodada”; caso o segundo seja bom ou
ruim, volte “Você saiu da competição na segunda rodada”; e caso o terceiro seja bom ou
ruim volte “Você saiu da competição na rodada final”.
9. Crie um programa que solicite ao usuário sua média (em porcentagem) nas provas do
primeiro período de um curso. Se for mais que 60% solicite as notas do segundo período,e,
se esta for mais que 60% novamente, calcule seu coeficiente de rendimento, mostre ao
usuário e o parabenize por isso. Se não conseguir 60% no primeiro período, retorne “Você
não passou no primeiro período” . Se não conseguir 60% no segundo período, volte “Você
não passou no segundo período”.
10. Escreva um programa que leia três números e escreva o menor deles.
11. Uma concessionária vende carros de diferentes faixas de preço e com diferentes condições,
segundo a seguinte tabela:
Faixa de Preço Condições
R$10.000 a R$25.000 c/ entrada (25%), 20 prestaçõess/ entrada, 10 prestações
R$25.001 a R$40.000 c/ entrada (30%), 15 prestaçõess/ entrada, 7 prestações
R$40.001 ou mais c/ entrada (40%), 12 prestaçõess/ entrada, 5 prestações
Seu programa deve receber o preço do carro desejado e a opção de pagamento. Seu
programa deve retornar o valor da entrada e os valores da prestação que deverão ser pagos.
12. Num campeonato, os critérios de desempate entre dois times são, por ordem de prioridade,
pontos, vitórias, saldo de gols e confronto direto. Seu programa deve receber estes quatro
critérios para 2 times e retornar qual ficou a frente.
13. Escreva um programa que leia o valor de 3 ângulos de um triângulo e verifique se o
triângulo existe (de acordo com a soma dos seus ângulos internos), caso exista, verifique
se é acutângulo, retângulo ou obtusângulo. Sendo que:
• Triângulo retângulo: possui um ângulo reto. (igual a 90o)
• Triângulo obtusângulo: possui um ângulo obtuso. (maior que 90o)
• Triângulo acutângulo: possui três ângulos agudos. (menor que 90o)
29
4 PROGRAMAÇÃO ESTRUTURADA – III
4.1 Estruturas de Repetição
Estruturas de repetição são utilizadas para fazer operações ou comandos repetidas vezes.
Este tipo de estrutura pode ser controlado logicamente, enquanto uma expressão booleana for
satisfeita, ou por um contador, definindo assim, a quantidade de vezes que o comando será
repetido.
4.1.1 Estrutura de Repetição controlada logicamente
O primeiro tipo de estrutura que será mostrado é o comando while. Ele repete todos os
comandos presentes dentro dele até que uma restrição que foi imposta seja atendida.
Estrutura de uso:
while x>=0.5
x=x/5
end
Neste exemplo acima, temos dois tipos de expressões utilizadas: uma expressão booleana
(x>=0.5) e um conjunto de comandos (x=x/5). O conjunto de comandos será executado enquanto
a expressão booleana for verdadeira. Ou seja, inicialmente este comando verificará se um X
previamente digitado será maior que 0,5. Se for maior que 0,5, ele vai dividir o X por cinco. Em
seguida, ele verificará se o novo X definido atende novamente a condição de ser maior que 0,5.
Se for verdade, ele dividirá o número por cinco novamente.
Essa lógica segue até que a condição estabelecida pela expressão booleana não seja atendida.
Assim que isso ocorrer, o conjunto de comandos não é mais executado e o X que está salvo é o
último definido pelo programa.
Exemplo Resolvido 1
Faça um programa que receba um número e o divida por 4 até que ele tenha uma parte
fracionária.
Resposta:
Capítulo 4. PROGRAMAÇÃO ESTRUTURADA – III 30
Neste exemplo, precisamos dividir o número digitado até que ele tenha uma parte fracionária.
Portanto, é esta a condição que o problema indicou para que dividíssemos o número. Ou seja,
enquanto ele não tiver uma parte fracionária, devemos dividi-lo. É isso que a nossa expressão
booleana (x==int(x)) faz, estabelece a condição para que a repetição dos comandos seja feita.
Vamos supor que digitemos o número 32 neste programa. Quando o programa lê a linha
4, ele vê que a parte inteira de X (32) é igual a X (32). Assim, ele executa os comandos (no
caso, dividir X por 4). Agora temos um novo X que passará pela expressão booleana, que é X=8.
Assim sucessivamente vai sendo feito, até que depoisde 2 iterações X assume o valor de 0,5.
Esse valor de X torna a expressão booleana falsa, pois X (0,5) é diferente da parte inteira de X
(0). Com isso, os comandos não são executados e o programa passa a ler a próxima linha (no
caso, “dispando” o valor de X, que é 0,5).
4.1.2 Estrutura de Repetição controlada logicamente com contador
Como citado anteriormente, owhile repete um conjunto de comandos até que uma determinada
restrição seja atingida, e para isso você pode criar uma variável específica chamada de contador.
Ela serve para contar quantas vezes a expressão booleana será repetida. Essa variável é criada
antes do while e pode assumir qualquer valor desejado (geralmente assumindo valores como 0 e
1). Assim, você pode criar um contador “i” para realizar uma multiplicação 5 vezes, como a
seguir:
i=0
x=2
while i<>5
x=x*3
i=i+1
end
disp(x)
–>486
*Está em negrito a utilização do contador.
Capítulo 4. PROGRAMAÇÃO ESTRUTURADA – III 31
Exemplo Resolvido 2
Faça um programa que leia três notas de um aluno e depois mostre sua média, o programa
deve repetir a tarefa 3 vezes. Por fim, mostre “Fim do programa”.
Resposta:
Scinotes:
*Note que o contador é utilizado para limitar o número de repetições.
Console:
Capítulo 4. PROGRAMAÇÃO ESTRUTURADA – III 32
4.1.3 While como estrutura de proteção
O comando while também pode ser usado como uma proteção, para que você estabeleça uma
certa condição para qualquer valor que você deseja receber.
Exemplo Resolvido 3
Faça um programa que receba um número inteiro e de quatro dígitos e o divida por 500.
Resposta:
Neste problema, foram impostas 2 condições para que o programa divida o número digitado
por 500: que ele seja inteiro e que ele tenha 4 dígitos.
No while digitado, temos três expressões booleanas que expressam as condições para que o
comando input da linha 5 seja repetido. A primeira faz a restrição em relação ao número ser
inteiro. Se a parte inteira de X for diferente de X, a expressão será verdadeira e os comandos se
repetirão. A segunda e a terceira servem para garantir que o número tenha 4 dígitos. Se o número
for menor que 1000 e maior que 9999, ele não terá 4 dígitos, tornando a expressão booleana
verdadeira e repetindo os comandos de dentro do while.
Vale ressaltar que deve ser usado o “ou” (|) em vez do “e” (&), pois estas condições não
precisam todas serem atendidas ao mesmo tempo, ou seja, sendo somente uma atendida, deve-se
repetir o comando de input.
4.2 EXERCÍCIOS DE FIXAÇÃO
1. Faça um programa que receba um número inteiro, x, e calcule o valor da seguinte expressão:
y = (x+ 12)(x+ 7)2 − (x2 + 5)2 (4.1)
O valor de y encontrado deve ser negativo. Enquanto não for, novos valores de x devem ser
solicitados.
Capítulo 4. PROGRAMAÇÃO ESTRUTURADA – III 33
2. Faça um programa que receba um número que seja um quadrado perfeito e informe sua
raiz quadrada. OBS.: Um número quadrado perfeito pode ser escrito da seguinte forma:
N = x^2
Em que:
N = Número quadrado perfeito
x = Número inteiro positivo
3. Faça um programa que receba um número inteiro, maior do que um, e informe todos os
números ímpares de 1 até ele.
4. Faça um programa que receba dois números naturais maiores do que um e retorne quantas
vezes o primeiro pode ser dividido pelo segundo (sem que deixe de ser um número natural).
5. Escreva um algoritmo que receba somente valores ímpares. Seu programa deve retornar o
valor da expressão:
4, 5x+ x3 (4.2)
6. Faça um programa que receba um número natural e par. Seu programa deve retornar a
soma desse número com seu número antecessor.
7. Faça um programa que receba um número e conte todos os múltiplos de cinco até ele,
exibindo todos esses os valores no console. OBS.: sem usar a função if.
8. Faça um programa que receba 5 números ímpares e some-os.
34
5 PROGRAMAÇÃO ESTRUTURADA – IV
5.1 Criação de listas com while
5.1.1 Contador
O while, quando associado a um contador, permite que sejam criadas listas da seguinte forma:
Observe que o programa à esquerda pede o número de elementos que essa lista pode possuir,
em seguida utiliza-se o contador, c, para que sempre que ele seja menor que o valor inicialmente
colocado o programa peça um número para adicionar à lista. Por fim utiliza-se a estrutura c=c+1
como forma de incrementar o valor de c em 1 unidade e que dessa forma seja possível que em
um determinado momento o valor de c seja maior que x e o programa encerre a sua lista.
5.1.2 Acumulador
Existem várias funcionalidades nessas listas, dentre elas, armazenar valores e realizar somas.
Observe a seguinte lista, ela receberá 5 números e retornará a média entre eles:
Capítulo 5. PROGRAMAÇÃO ESTRUTURADA – IV 35
Observe que dessa vez foi criada uma nova variável, s, chamada de acumulador, armazenará
a soma dos valores digitados, uma vez que sempre que o processo for executado novamente
dentro do while a variável x receberá um novo valor. Assim que o processo encerrar, ou seja,
quando o contador for maior do que 5, a variável s estará com a soma total dos valores digitados
e quando dividido por 5 fornecerá o valor da média desses valores.
Utilizando essas duas estruturas (1ª – Pedir ao usuário o número de elementos de uma lista e
2ª – Realizar a soma dos valores digitados) pode-se construir um programa mais complexo, por
exemplo, um programa que peça ao usuário a quantidade de elementos de sua lista e retorne a
média desses valores, observe como seria possível executar esse programa:
Dessa vez o usuário determinou o tamanho da lista, porém ainda foi possível realizar o cálculo
da média visto que se comparado ao programa anterior em que o número de elementos já era
determinado (5 números), nesse, o valor ficou armazenado na variável x.
5.1.3 Valor Sentinela
O valor sentinela é um valor especial usado para interromper um processo quando os dados
estão sendo processados, em geral, sequencialmente. O programa a seguir recebe uma quantidade
indefinida de números e informa a soma deles:
Exemplo resolvido 1
Capítulo 5. PROGRAMAÇÃO ESTRUTURADA – IV 36
Observe que enquanto a variável x for diferente de -1 o programa continuará recebendo
valores, ou seja, se for necessário interromper a execução desse programa, pode-se digitar o valor
-1 assim o while encerrará, entretanto, a forma como o programa foi escrito não permitirá que
esse esse valor influencie o resultado fornecido.
OBS: O uso do valor sentinela não pode interferir na execução do seu programa, não se
esqueça.
5.1.4 Estruturas dentro do while
O while permite outras estruturas dentro dele, ou seja, pode-se usar as estruturas IF, input,
funções predefinidas entre outras. Observe esse programa que recebe uma série de números cuja
quantidade de elementos é definida pelo usuário e informa qual é par e qual é ímpar:
Nesse programa foi adicionado a estrutura if, input e printf dentro do while, assim foi possível
calcular e informar qual número da lista criada é ímpar ou par.
Também é possível combinar a estrutura de condição (if ), o valor sentinela e o contador
dentro do while da forma mais conveniente para a construção de algoritmos. Observe o exemplo
a seguir:
Capítulo 5. PROGRAMAÇÃO ESTRUTURADA – IV 37
Esse programa receberá o preço de uma quantidade indefinida de produtos e informará qual o
mais caro, qual o mais barato e a quantidade de produtos que foram digitados. Observe o valor
sentinela, uma vez que for digitado um valor negativo para o preço o programa encerrará, outro
ponto interessante é o uso do aninhamento de seletores para contar os produtos e separá-los em
máximo e mínimo.
Os exercícios deste Capítulo estão juntos com os exercícios do Capítulo 6 na Seção 6.3.
38
6 PROGRAMAÇÃO ESTRUTURADA – V
6.1 O comando for como estrutura de repetição
Como vimos nas últimas semanas, o comando while funciona como estrutura de repetição
a partir de comandos lógicos, como o <=, &, ==, estruturas lógicas que já eram usadas junto
do comando if. Ao trabalhar com o comando for, estrutura de sequencia, não usaremos estes
comandos lógicos, mas sim variáveisde controle e contadores.
De forma geral, a estrutura do for é:
Algumas observações sobre a estrutura do comando:
• a variável de controle pode ter os mesmos nomes que as variáveis que víamos antes, com
as mesmas restrições;
• o valor inicial do controle será decidido a partir do problema que se deseja solucionar, não
possuindo um valor pré-determinado. Pode ser uma variável;
• o valor do passo da variável não é obrigatório, dependerá do que é necessário para se
resolver a questão proposta. Quando o passo não for especificado, por padrão, ele se torna
1. O valor do passo pode ser uma variável;
• o valor final da variável será determinado a partir do que o problema solicitará, podendo,
também, ser uma variável.
Assim como o while, o que estiver dentro do corpo do for será repetido até que o contador
chegue ao seu valor final. É necessário usar um end ao final do corpo do contador.
Exemplo resolvido 1: Escreva um programa que mostre todos os valores pares de 2 até 50.
Capítulo 6. PROGRAMAÇÃO ESTRUTURADA – V 39
Começamos o programa com clear e clc, assim como vínhamos fazendo. Na linha 3 iniciamos
o for, com variável de controle com nome i, valor inicial igual a 2, passo também igual a 2 e
valor final igual a 50. Isso significa que a nossa variável i começará com valor 2, sendo mostrado
no console uma mensagem igual àquela que está dentro do printf da linha 4. Na linha 5 usamos
o end que fecha o comando for, mostrando onde o corpo do laço se encerra, que caracteriza o
comando que será repetido.
Na segunda vez que o programa é executado, a variável i assume valor 4, devido a seu passo
ser incrementado de 2 em 2, e assim por diante, até o momento em que i assumirá valor 50, o
programa será executado novamente e, então, será encerrado.
O que veremos após a execução do programa no console será:
Exemplo resolvido 2: Faça um programa que receba um valor n, natural, e calcule seu
fatorial, sabendo que:
n! = 1 ∗ 2 ∗ 3 ∗ ... ∗ (n− 1) ∗ n
Capítulo 6. PROGRAMAÇÃO ESTRUTURADA – V 40
Começamos o programa com o habitual clear, clc. Pedimos a variável n como entrada e
usamos, entre a linha 4 e 6, uma estrutura de proteção com o comando while. Todos os comandos
que aprendemos até aqui podem ser usados juntos, quantas vezes forem necessários, desde que o
uso de cada um deles esteja correto.
Na linha 7 é criada a variável fat, que armazenará o valor final do fatorial do número
inserido. Seu valor inicia em 1 pois, como esta funcionará como variável de armazenamento de
multiplicações, devemos escolher o valor neutro a fim de evitar confusões.
Na linha 8 tem início o for, com variável de controle i, iniciando em 1 e indo até o valor de
entrada, n. Contudo, vale observar que o passo do contador foi omitido, desta forma, ele se torna
1. No corpo do laço, temos a multiplicação que efetivamente calcula o fatorial, processo que se
repetirá até que a variável de controle se iguale à variável de entrada, quando será calculado o
último termo da multiplicação.
Após a última iteração (repetição) do programa, é retornado no printf o valor do fatorial e o
número de entrada. Após a execução, ficará da forma:
6.2 Comparação entre as estruturas de repetição
Por mais que ambos sejam estruturas de repetição, o for e o while possuem suas diferenças e
particularidades, apresentadas a seguir:
6.2.1 Repetições
A principal diferença entre as estruturas é a sua forma de repetição. O while se repete
indeterminadas vezes até que a expressão booleana utilizada em sua estrutura se torne falsa. Já o
for se repete até que atinja o valor final da sua variável de controle, que deve ser pré-determinado,
seja pelo usuário ou pelo próprio programa.
6.2.2 Contador
Outra diferença clara entre as estruturas é que o for já contém um contador embutido em
sua estrutura, enquanto o while utiliza de expressões booleanas verdadeiras para continuar se
Capítulo 6. PROGRAMAÇÃO ESTRUTURADA – V 41
repetindo. Com isso, situações onde se há um valor finito e definido de repetições o comando for
se torna o mais apropriado.
Exemplo resolvido 3: Faça um programa que retorne a soma de 5 valores digitados pelo
usuário usando o for e o while.
Como é possível ver, a estrutura do comando for é mais simples de usar e mais compacta.
6.2.3 Listas infinitas com valor de sentinela
As listas infinitas só poderão ser resolvidas com o comando while uma vez que é impossível
alterar os valores da variável de controle do for depois de ter iniciado seu conjunto de comandos.
O que não acontece com o while, onde é possível a alteração da variável que torna sua expressão
booleana verdadeira.
Capítulo 6. PROGRAMAÇÃO ESTRUTURADA – V 42
6.2.4 Proteções
Uma vez que não é possível alterar os valores da variável de controle do for depois de ter
iniciado seu conjunto de comandos, também se torna impossível fazer a utilização do comando
como proteção de entrada de valores, devendo novamente ser utilizado o comando while.
6.3 EXERCÍCIOS DE FIXAÇÃO
1. Escreva uma lista de números positivos de tamanho indeterminado (usar valor sentinela
igual a 0). Ao final, o seu programa deve informar os três menores, em ordem decrescente.
2. Faça um programa que receba dois valores positivos e calcule a média entre eles. Enquanto
a média não for maior que 18, deve receber mais um valor e calcular a média novamente e
verificar se é maior que 18.
3. Faça um programa que receba um número indeterminado de entradas (valor sentinela
sendo negativo). Seu programa deve dizer quantos números pares e quantos números
ímpares foram digitados.
4. Crie um programa que leia três notas de um aluno, calcule a média delas e se for maior que
60 pontos voltem “Você passou”, caso contrário volte “Você não passou”. Seu programa
deve ser repetido para 8 alunos, calcular a média das médias de cada um e voltá-la.
5. Faça um programa que receba um número positivo e se ele for par, calcule quantas vezes
ele pode ser dividido por dois e volte essa quantidade. Caso contrário volte “Não é par”.
6. Faça um programa que receba 50 números positivos. Some todos os números inteiros e
multiplique todos que não forem.
7. Faça um programa que receba indeterminados números e some os pares e ímpares
separadamente, usando 0 como valor de sentinela.
8. Utilizando o comando for, faça um programa que receba 10 números inteiros e devolva
para o usuário quantos foram positivos.
9. Faça um programa que receba um número natural, informe se ele é primo ou composto e
imprima seus divisores usando a função for.
10. Faça um programa que receba um número, o some com os 100 primeiros números maiores
que ele e volte essa soma. Faça isso sem usar while.
43
7 Vetores
Deixando de lado o seu significado físico, os vetores, em programação, podem ser usados
como uma alternativa para armazenar diversos valores em uma única variável. Vetores podem
ser construídos usando os colchetes [ e ]. Os elementos estão entre os colchetes e separados por
espaços (ou vírgula).
Exemplo
Observe que a variável “altura” recebeu 5 valores que correspondem à altura de 5 pessoas
diferentes.
Obs.: Também é possível criar vetores com a utilização dos dois pontos como operador,
exemplo a seguir.
Esse novo tipo de variável (vetor) também permite que esses valores sejam isolados separada-
mente sendo possível realizar operações somente com alguns dos seus elementos, como, por
exemplo:
Capítulo 7. Vetores 44
Nesse exemplo foram feitos 3 tipos de operações diferentes com alguns elementos dos
vetores. Para acessar um elemento do vetor é necessário usar o nome da variável com a posição
do elemento entre parênteses, ( ), essa posição é chamada de índice ou subscrito e permite
individualizar os elementos de um vetor, conforme mostrado no exemplo acima. Para acessar o
último elemento do vetor é possível utilizar $ como indicador de posição, ao invés de um número,
entre os parênteses.
As operações com os elementos dos vetores seguem o padrão geral, (+ corresponde a soma,
- a subtração, * multiplicação e / divisão).
7.1 Tipos de Vetores
Existemdois tipos de vetores, os que armazenam números e os que armazenam strings. Os
que armazenam números já foram falados anteriormente, já os vetores de string possuem uma
certa diferença na sua construção, observe o exemplo a seguir:
Para construir um vetor de string é necessário usar os colchetes: [ e ] bem como inserir o
string entre aspas separando cada elemento com um espaço ou vírgula. Também é possível
acessar um elemento desse vetor usando a sua posição (índice) conforme visto no exemplo.
7.2 Operações com Vetores
7.2.1 Soma e Subtração
Para realizar uma soma ou subtração entre vetores é necessário que eles possuam a mesma
dimensão, exemplo:
Capítulo 7. Vetores 45
Observe os vetores ‘a’ e ‘b’, ambos possuem 1 linha e 3 colunas, assim é possível realizar a
soma e a subtração entre esses vetores.
A soma e a subtração entre vetores acontecem da seguinte forma: o primeiro elemento do
vetor ‘a’ é somado ou subtraído pelo primeiro elemento do vetor ‘b’, o segundo elemento do
vetor ‘a’ é somado ou subtraído pelo segundo elemento do vetor ‘b’, para o terceiro elemento
esse procedimento se repete. O exemplo acima ilustra as duas operações entre eles.
7.2.2 Multiplicação
7.2.2.1 Vetor e Escalar
Observe o exemplo a seguir:
Quando um número escalar, nesse caso o número 3, multiplica um vetor, ele multiplicará
cada elemento desse vetor conforme demonstrado acima para o vetor a.
Capítulo 7. Vetores 46
7.2.2.2 Vetor e Vetor
Para multiplicação entre vetores eles devem possuir dimensões opostas, ou seja, se um vetor
a possui 1 linha e 3 colunas, ela só pode ser multiplicada por um vetor com 3 linhas e 1 coluna.
O resultado dessa operação será um número. Observe o exemplo a seguir:
Como o vetor a possui 1 linha e 3 colunas, foi necessário construir um vetor c com 3 linhas e
1 coluna, para isso foi utilizado o operador ; para separar as 3 linhas e ser possível realizar a
multiplicação.
Essa operação foi feita da seguinte forma: o primeiro elemento do vetor a foi multiplicado
com o primeiro elemento do vetor c, o segundo elemento do vetor a foi multiplicado com o
segundo elemento do vetor c e o mesmo procedimento será feito para o terceiro elemento. Após
esse processo, foram somados todos esses valores resultando em 32.
7.3 Funções Vetoriais
Em programação, os vetores com incontáveis valores podem ser manipulados com diversas
funções, assim como acontece com os valores únicos. Algumas funções já conhecidas e outras
específicas para vetores serão apresentadas a seguir.
7.3.1 Funções Padrões
Muitas funções já conhecidas (log, cos, sin, abs, · · · ) são definidas para receber valores
e retornar valores, mas ao receber vetores, essas funções trabalham elemento por elemento do
vetor. Como observado no exemplo a seguir:
Capítulo 7. Vetores 47
7.3.2 Transposição de um vetor
Para que o Scilab transforme uma vetor no seu transposto basta acrescentar o operador de
transposição, que é uma aspa ( ‘ ). Observe o exemplo a seguir, onde o vetor linha se torna um
vetor coluna.
7.3.3 Concatenação / Encadeamento de vetores
Outra operação muito comum com os vetores é o encadeamento, que consiste na união, em
sequência, de dois ou mais vetores. Conforme exemplo, a seguir.
Capítulo 7. Vetores 48
7.3.4 Dimensionamento de vetores
O comando length é um comando que apresenta o tamanho do vetor, sendo útil em casos que
esse é desconhecido. Observe como o comando funciona no exemplo a seguir.
7.3.5 Somatório dos valores de um vetor
É possível utilizar a função sum para fazer um somatório de todos os valores de um vetor,
como é apresentado no exemplo a seguir.
Capítulo 7. Vetores 49
7.4 Operações com o índice
Além de trabalhar com o vetor, conseguimos trabalhar com seu índice, usando multiplicações,
somas, subtrações, etc.
Exemplo resolvido 1: Escreva um programa que crie um vetor com tamanho solicitado pelo
usuário. Seu programa deve retornar o produto entre o penúltimo elemento do vetor e próprio
vetor.
Começamos com clear, clc, seguido da entrada do tamanho do vetor, desconhecido até então.
Em seguida, usamos o for para iniciar a estrutura de repetição que criará o vetor “v”. Ao sairmos
do laço da estrutura de repetição, temos, na linha 7, a criação de “b”. Este vetor é o produto
entre o penúltimo termo de “v” e o próprio “v”. Contudo, como não sabemos o tamanho de “v”,
usamos o operador “$”, que pega o último termo do vetor. Este nosso operador, subtraído 1,
resulta no penúltimo termo. O mesmo resultado seria obtido se usássemos o comando length e
subtraíssemos 1.
Capítulo 7. Vetores 50
7.5 Criação de vetor a partir de condições pré-postas sobre o ve-
tor
Por vezes, será necessário criar um vetor a partir de outro(s) vetor(es) já existentes no sistema a
partir de determinadas condições iniciais a serem cumpridas para a criação desse vetor. Podemos
criar uma estrutura com o uso de if e operadores lógicos, juntando os dois conhecimentos.
Exemplo resolvido 2: Escreva um programa que receba 2 vetores, “a” e “b”, com 5 elementos
cada um. Seu programa deve construir um vetor “c”, onde cada elemento de índice ímpar de “c”
é igual ao respectivo elemento de “a”; e cada elemento de índice par de “c” é igual ao respectivo
elemento de “b”.
Capítulo 7. Vetores 51
Começamos o programa com clear e clc, padrão que estamos seguindo até o momento. Na
linha 3, tem início o laço do for, que será usado para criarmos nossos dois vetores “a” e “b”. Na
linha 7 abrimos o if, que analisa se a variável de controle do for, que usamos como índice dos
vetores “a” e “b”, é par ou ímpar. Segundo o enunciado, esta classificação é importante.
Nas linhas 8 e 10, temos a criação do vetor “c”, após cada avaliação do índice, controlada
pelo if e pelo else. Ao final, dois end, um para fechar o for e um para fechar o if, seguido da
estrutura para retornar o vetor.
Exemplo resolvido 3: Escreva um programa que receba um vetor A de 10 elementos. Seu
programa deve retornar:
- Um vetor X formado pelos elementos de A que são maiores que 5;
- Um vetor Y formado pelos elementos de A que são primos.
Neste exercício temos um problema que não tivemos no anterior, que é saber a quantidade de
elementos que os vetores “X” e “Y” possuirão. Existem algumas formas de resolver este impasse,
abordaremos duas delas aqui: com um contador e com o encadeamento de vetores.
Para isso, criamos o vetor “Y” na linha 3 e a variável “c” na linha 4. O vetor “Y” criado,
vazio, passará pelo encadeamento, como veremos em breve. A variável “c” será uma variável de
armazenamento de soma, que utilizaremos como índice do vetor “X”.
Nas linhas 5 e 6 iniciamos o programa com o for, para recebermos as entradas do sistema.
Na linha 7, temos a avaliação da primeira condição, se o termo do vetor “A” inserido é ou não
Capítulo 7. Vetores 52
maior que 5. Caso este o seja, a variável “c” sofrerá atualização, e, como dito, funcionará como
índice do vetor “X”. Caso o termo inserido não seja maior que 5, nada ocorre neste trecho e o
programa vai para a linha 11. Nesta linha é criada a variável “d”, também acumuladora, que
contará o número de divisores que o termo inserido possui, processo que ocorre entre as linhas
12 e 16. Na linha 17, ocorre a avaliação da quantidade de divisores, caso este seja 2, o número é
primo, e o vetor “Y” se torna o encadeamento entre o vetor “Y” anterior e o termo do vetor “A”
que está sendo avaliado. Desta forma, ocorre uma espécie de “união” entre o vetor “Y” e o valor
de “A” em análise. Se o número não for primo, nada ocorre, e o programa volta ao for inicial,
solicitando nova entrada e o processo se repete.
Ao final, uma estrutura com disp para organização dos resultados no console.
Capítulo 7. Vetores 53
7.6 Condição sobre os elementos do vetor
Existem determinadas situações em que podem existir situações em que os elementos de um
vetor devem respeitar alguma condição. Para isso, construiremos estruturas de proteção com o
while assim como já vimos antes.
Exemplo resolvido 4: Escreva um programa que receba um vetor de8 elementos, sendo
todos estes elementos obrigatoriamente naturais. Seu programa deve retornar um novo vetor, R,
formado pelos termos do primeiro vetor que são maiores que 4, elevados ao cubo.
Começamos normalmente com clear, clc. Na linha 3, criamos o vetor “R”, vazio, que será o
vetor resultante. Faremos a partir de encadeamento de vetores. Na quarta linha tem início o for,
recebendo os elementos do vetor “v” e, já na linha 6, temos o while que servirá como proteção
para que só sejam aceitos valores naturais.
À linha 9, tem-se a avaliação se o termo inserido é maior que 4 e, em casos afirmativos, a
variável “x” é criada. Esta é uma variável intermediária do processo, que serve para guardar o
valor da potenciação. Em seguida, na linha 11, tem-se o encadeamento entre o vetor “R” anterior
e o valor “x”, que também pode ser entendido como um vetor de dimensões 1x1. Tem-se, então,
os end, seguindo as mesmas regras aprendidas anteriormente.
Ao final, temos a estrutura com dois disp para retornar o resultado de forma organizada.
Capítulo 7. Vetores 54
7.7 Troca de elementos de um vetor
Trocar elementos de um mesmo vetor, muitas vezes, não é tão útil. No entanto, esse
aprendizado pode ser expandido à troca de elementos entre dois ou mais vetores. O raciocínio é
o mesmo, mas existem diferenças em relação a cada tipo de alteração, que deve ser avaliada.
Exemplo resolvido 5: Escreva um programa que receba um vetor de 10 elementos naturais.
Seu programa deve trocar os elementos de posições ímpares do vetor de entrada pelos elementos
em posições pares subsequentes. Retorne o vetor após a troca.
Capítulo 7. Vetores 55
Começamos o programa com clear, clc e já abrimos o for para receber o vetor. Dentro da
estrutura de repetição, temos o while funcionando como estrutura de proteção para que só sejam
inseridos números naturais. Na linha 9, tem início o laço de for que realmente efetivará a troca.
A variável de controle começa em um e possui passo 2, assim, ela só assumirá valores ímpares.
Na linha 10 é criada a variável “a”, uma variável intermediária que guarda o valor do elemento na
posição subsequente ao valor de i. Isto ocorre pois, como a questão pede, os elementos de índice
ímpar, representados por i, dever ser substituídos pelos elementos das posições imediatamente
superiores, i+1. Na linha 11, ocorre a troca de valores entre “v(i+1)” e “v(i)”, onde o valor que
originalmente estava na posição 2, i+1 quando i vale 1, assume o valor do elemento na primeira
posição do vetor. Na linha 12, o elemento “v(i)” assume o valor original de “v(i+1)”, armazenado
na variável “a”.
Após o end da linha 13, o programa volta a executar o for da linha 9, repetindo o passo-a-passo
descrito acima, realizando as trocas correspondentes até o final do programa. Na última linha, é
“dispado” o vetor “v” transposto, para que este apareça em forma de vetor linha no console.
7.8 EXERCÍCIOS DE FIXAÇÃO
1. Faça um programa que receba dois vetores, a e b, com tamanho especificado pelo usuário
e retorne um vetor resultante cujos termos são os elementos de a elevados pelos elementos
de b. (a e b devem ter o mesmo tamanho)
Exemplo: Para um vetor com tamanho igual a 3:
a=[1 2 3]
b=[3 2 1]
c=[1^3 2^2 3^1]
Capítulo 7. Vetores 56
2. Faça um programa que receba um vetor com 10 elementos e retorne um vetor contendo o
maior e o menor elemento.
3. Faça um programa que receba um vetor com 20 números naturais maiores que 1 e substitua
os números primos por 0
4. Faça um programa que receba dois vetores de tamanho determinado pelo usuário e retorne
um vetor contendo somente os positivos dos dois vetores.
5. Faça um programa que receba um vetor de 10 elementos. Se ele tiver mais números
positivos ou zero do que negativos, retorne ele como um vetor linha. Caso contrário,
retorne como um vetor coluna.
6. Faça um programa que receba um vetor de 10 valores e eleve os valores pares ao quadrado
e os impares ao cubo.
7. Faça um programa que construa um vetor para escrever o preço de cada produto de uma
lista de compras. O número de elementos será inserido pelo usuário. Volte o vetor e sua
soma.
8. Faça um programa que construa um vetor de número de elementos determinado pelo
usuário. O vetor deve ser igual ao número da posição de cada elemento multiplicado por 7.
9. Escreva um algoritmo que receba um vetor de “n” elementos e retorne o produto destes
valores.
57
8 Matrizes
8.1 Construção de Matrizes
Para construirmos matrizes, usaremos um mecanismo análogo à construção de vetores. O
comando “;” separa linhas, enquanto o “espaço” ou a “,” separa as colunas.
Assim, se digitarmos o comando A=[1 2 3;4 5 6;7 8 9], obtemos como valor para A a seguinte
matriz:
8.2 Aplicação de Funções em Matrizes
Se aplicarmos, como exemplo, a função seno à matriz A, ela calculará o seno de elemento a
elemento e retornará como uma matriz.
Ex.:
Isso vale para funções como abs(x), log(x) e etc.
Capítulo 8. Matrizes 58
8.3 Transposição de Matrizes
Para transpor uma matriz o comando usado é o apóstrofo.
Ex.:
8.4 Concatenação de Matrizes
Para concatenar matrizes deve-se usar o mesmo comando de montá-las, colocando no lugar
de valores as variáveis das matrizes. Vamos concatenar a matriz A com a sua transposta.
Ex.:
Este mesmo raciocínio serve para concatenar um vetor a uma matriz.
Ex.:
Capítulo 8. Matrizes 59
Sempre lembrando que a concatenação só é possível se as dimensões de linha e coluna forem
compatíveis. Se o vetor C tivesse 4 linhas, a concatenação não seria possível, por exemplo.
8.5 Seccionamento de Matrizes
Podemos retirar linhas, colunas e submatrizes de uma matriz utilizando alguns comandos. O
comando “:” representa todos.
Ex. 1: Retirar a linha 2 da matriz A.
O programa lê com os dois pontos depois da vírgula que o usuário quer todas as colunas da
matriz, na linha especificada.
Ex. 2: Retirar a 1ª coluna da matriz A.
Capítulo 8. Matrizes 60
O programa lê com os dois pontos antes da vírgula que o usuário quer todas as linhas da
matriz na coluna especificada.
Ex. 3: Retirar a submatriz que vai da linha 1 até a linha 3 e da coluna 2 até a coluna 3.
O programa lê que o usuário quer os elementos da linha 1 até a linha 3 e os elementos da
coluna 2 até a coluna 3.
Podemos também utilizar vetores para retirar elementos de uma matriz.
Ex.:
Capítulo 8. Matrizes 61
Aqui o programa retirou as linhas equivalentes aos elementos presentes no vetor v, ou seja,
as linhas 1 e 2.
Também podemos transformar uma matriz em um vetor coluna.
Ex.:
No primeiro comando, transformamos a matriz A em um vetor coluna, seguindo a ordem
crescente das colunas. Isso quer dizer que ele pega primeiramente os elementos da 1ª coluna, da
2ª, e assim sucessivamente.
No segundo comando, retiramos os elementos correspondentes aos elementos do vetor v.
Como o vetor v é [1 2], ele retirou os elementos de índice 1 e 2, respectivamente.
Capítulo 8. Matrizes 62
8.6 O Operador $
O cifrão serve para indicar que o usuário quer se referir ao último elemento de um vetor ou
matriz.
Ex.:
Neste exemplo, o programa retirou o último elemento da 1ª linha.
8.7 Atribuição
Podemos atribuir valores para elementos, linhas e colunas de uma matriz.
Ex.:
Aqui, o valor de 0 foi atribuído ao último elemento da 1ª linha.
Capítulo 8. Matrizes 63
Ex. 2:
Aqui, atribuímos à coluna 2 da matriz o vetor [32;22;45].
8.8 Dimensão de Matrizes
A função size é usada para dar a dimensão de uma matriz. Ela pode ser usada de 2 maneiras.
Maneira 1: ela retornará a dimensão em um vetor com o número de linhas e colunas de uma
matriz.
Ex.:
Capítulo 8. Matrizes 64
A matriz A tem 3 linhas e 3 colunas e a matriz B tem 3 linhas e 2 colunas, como está nos
vetores fornecidos pela função size.
Maneira 2: pode usar uma função com duas saídas, que resultará em variáveis separadas.
Ex.:
Capítulo 8. Matrizes 65
Lembrando que a ordem em que as variáveis sairão sempre é essa. Portanto, para facilitar,
sempre coloquem “l” e “c” no vetor de saída, para que não se confundam.
8.9Operações Escalar-Matriz
Em programas onde se utiliza operações entre escalares e matrizes, utilizará as regras comuns
da matemática. Como por exemplo:
Matriz A:
Capítulo 8. Matrizes 66
Multiplicação:
Divisão:
Expressões:
Capítulo 8. Matrizes 67
8.10 Operações Matriz-Matriz
Em operações de subtração e adição entre matrizes e matrizes, também utilizará as regras
comuns da matemática. Como por exemplo:
As operações de multiplicação também seguem as regras comuns da matemática:
Capítulo 8. Matrizes 68
Multiplicar matrizes de dimensões incompatíveis causam erros:
Assim como, a multiplicação de A pela transposta de F é válida:
Capítulo 8. Matrizes 69
Para realizar uma multiplicação elemento a elemento utilize a multiplicação pontuada
(.*):
Da mesma forma para divisão elemento a elemento, utilize a divisão pontuada:
Capítulo 8. Matrizes 70
Além disso, existe também a potenciação elemento a elemento que também utiliza-se o
ponto (.^):
Capítulo 8. Matrizes 71
8.11 Solução de Sistemas de Equações Lineares
No Scilab você também pode resolver problemas de algebra linear, como por exemplo
sistemas de equações lineares:
Exemplo:
Esse sistema também pode ser escrito da seguinte forma matricial Ax = B:
Capítulo 8. Matrizes 72
Assim:
ATENÇÃO: Utilize a contra barra (\) para identificar cada x.
8.12 Transposta de Matrizes Complexas
Para matrizes com números complexos, o operador de transposição (‘) realizará a transposição
conjugada, fazendo assim a transposição e a conjugação complexa na matriz. Para fazer a
transposição sem a conjugação utilize ponto final mais o operador de transposição “.’” Por
exemplo:
Capítulo 8. Matrizes 73
8.13 Matrizes de Zeros e Um
Se você quer criar uma matriz na qual todos os elementos sejam um, utilize a função ones().
Capítulo 8. Matrizes 74
Se você quer criar uma matriz na qual todos os elementos sejam zero, utilize a função zeros().
Capítulo 8. Matrizes 75
8.14 EXERCÍCIOS
1. Faça um programa que receba uma matriz 3x3 e retorne duas matrizes diferentes, a primeira
deve conter os números pares e substituir os números ímpares por zero e a segunda deve
conter os números ímpares, substituindo os pares por zero.
2. Faça um programa que receba uma matriz 3x3 e retorne uma matriz 3x4 em que a quarta
coluna será a soma dos valores de cada linha.
Exemplo: Seu programa receberá a seguinte matriz:
1 2 3
4 5 6
7 8 9
E retornará:
Capítulo 8. Matrizes 76
1 2 3 6
4 5 6 15
7 8 9 24
3. Faça um programa que receba uma matriz de tamanho determinado pelo usuário e retorne
duas matrizes. A primeira com os elementos da diagonal principal e secundária igual a
0, e a segunda, somente com os elementos da diagonal principal e secundária inserida,
substituindo os demais valores por 0.
4. Faça um programa que receba uma matriz de tamanho determinado pelo usuário, e retorne
o produto dos valores dos “cantos” e a soma dos demais.
Exemplo:
1 2 3
4 5 6
7 8 9
O programa deve apresentar a matriz, multiplicar o 1, 3, 7 e o 9, somar os demais,
apresentando os resultados.
5. Escreva um programa que receba 3 vetores de tamanho “n” decidido pelo usuário. Seu
programa deve retornar uma matriz com ‘n’ linhas e 3 colunas, onde a primeira coluna é o
primeiro vetor, a segunda coluna o segundo vetor e a terceira coluna, o terceiro vetor.
6. Faça um algoritmo que receba um tamanho para matriz quadrada. Seu programa deve
retornar uma matriz em que cada elemento seja dado pela lei:
Elemento(i,j) =
4i+ 3j
2j2
(8.1)
7. Escreva um programa que receba uma matriz de tamanho determinado pelo usuário (tanto
a quantidade de linhas quanto de colunas). Se o número de linhas for maior que o número
de colunas, retorne o produto entre todos os valores digitados. Se o número de colunas for
superior, retorne um vetor com os valores pares da matriz. Caso seja uma matriz quadrada,
retorne o determinante da matriz.
77
9 POLINÔMIOS
Os polinômios são expressões algébricas que surgem a partir da adição de monômios e são
constituídos por uma parte conhecida, denominada coeficiente e uma parte desconhecida.
Exemplos:
Polinômio: 2x4 + 7x3 − 9x+ 5 Polinômio: x2 + 3x− 2
Monômios: 2x4; 7x3; 9x; 5 Monômios: x2; 3x;−2
9.1 Como construir um polinômio:
Para criar um polinômio no Scilab utiliza-se a função poly, essa função predefinida recebe
três argumentos, o primeiro é um vetor contendo as raízes do polinômio ou seu coeficiente,
o segundo argumento é um string que nomeará a parte desconhecida do seu polinômio e o
terceiro é um string que define o que será o primeiro argumento, se serão coeficientes (‘coeff ’,
ou simplesmente ‘c’) ou raízes (‘roots’, ou simplesmente ‘r’). Por padrão, se não for inserido
nada no último argumento será considerado que o vetor digitado no primeiro argumento contêm
as raízes do seu polinômio.
Observe os exemplos a seguir:
Ex.1:
Observe que foi inserido no primeiro termo o vetor [1,2,3], o segundo termo informa que o
nome da parte desconhecida será x e o último termo informa que o vetor contém os coeficientes
do polinômio.
OBS: Atente-se que o primeiro termo da função poly, quando informa os coeficientes, segue
uma ordem padrão, de maneira que o primeiro elemento do seu vetor será o termo independente
e o último elemento será o coeficiente do elemento de maior grau de seu polinômio.
Capítulo 9. POLINÔMIOS 78
Ex.2:
Nesses dois casos o primeiro termo da função poly corresponde às raízes do polinômio, assim,
o Scilab retornará um polinômio cujas raízes serão os valores contidos nesse vetor.
OBS: Observe que quando não é inserido o terceiro termo da função poly o Scilab considera
o primeiro termo como as raízes do seu polinômio.
Existe uma outra forma de inserir um polinômio no Scilab, para isso observe o exemplo a
seguir:
Ex.3:
Na primeira parte foi criado um polinômio cuja raiz é igual a zero e o nome da parte
desconhecida é y, assim, a variável y recebeu o polinômio y. Na segunda parte foi construída
uma expressão contendo a variável y, assim, a variável p receberá o resultado do produto entre o
polinômio contido em y e os escalares, tornando-se o polinômio p acima.
OBS: Se o primeiro passo do Exemplo 3 fosse omitido seu programa não seria executado,
uma vez que o Scilab consideraria a variável y como inexistente, portanto, caso opte por utilizar
essa forma não se esqueça de definir sua variável como um polinômio.
Existe uma terceira forma de construir um polinômio no Scilab, para isso será utilizado a
variável polinomial predefinida %s ou %z, observe o exemplo a seguir:
Capítulo 9. POLINÔMIOS 79
Esse caso segue o mesmo padrão da segunda forma, porém não há necessidade de criar um
polinômio com a função poly, basta utilizar essas variáveis predefinidas %s ou %z, seguindo o
padrão da segunda forma.
9.2 Funções Importantes
• horner(p,x) −→ Calcula o valor informado em x de um polinômio p.
Ex.:
• coeff(p) −→ Retorna o valor dos coeficientes de um polinômio p em forma de vetor.
Ex.:
Capítulo 9. POLINÔMIOS 80
• roots(p) −→ Retorna o valor das raízes de um polinômio p em forma de vetor.
Ex.:
9.3 Operações Polinomiais
Assim como é possível fazer operações com valores unitários e matrizes/vetores, também é
possível com polinômios, veja a seguir.
• Soma e subtração−→ a soma e subtração acontece da forma que conhecemos, soma/subtrai-
se elementos com mesmo expoente.
Ex.:
Capítulo 9. POLINÔMIOS 81
• Multiplicação e potenciação −→ segue o padrão conhecido em multiplicações e poten-
ciações polinomiais, onde cada termo/monômio de um polinômio multiplica todos os
termos/monômios do outro, a conhecida “regra do chuveirinho”.
Ex.:
Capítulo 9. POLINÔMIOS 82
• Divisão −→ na divisão polinomial há uma diferença, pois, ao usar o operador de divisão
comum (barra inclinada para a direita “ / ”), o Scilab apenas monta uma fração com os
polinômios digitados, sendo necessário o uso da função [R,Q] = pdiv (a,b), a qual recebe
dois polinômios a e b e retorna o quociente Q e o resto R, dentro de um vetor. Por costume,
usa-se as variáveis

Continue navegando