Você está na página 1de 114

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA

E TECNOLOGIA DO NORTE DE MINAS GERAIS


INSTITUTO
FEDERAL
Norte de CAMPUS MONTES CLAROS
Minas Gerais

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
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA

E TECNOLOGIA DO NORTE DE MINAS GERAIS


INSTITUTO
FEDERAL
Norte de CAMPUS MONTES CLAROS
Minas Gerais

Apostila Programação para Engenharia Química

Elaborada por:
Daniel Leite Mesquita da Silva
Enzio Dias Carvalho
Gilmar Henrique Barbosa Carvalho
Apostila da Disciplina de Programação para En-
João Paulo Soares Cangussu genharia Química do curso de Engenharia Quí-
Nícollas Priosy Oliveira mica do IFNMG - Campus Montes Claros.

Sérgio Vinicius Macedo Resende


Orientador:
Saulo Fernando dos Santos Vidal

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 inteiro mais 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 dois nú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:


13 5
y= x+
4 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
+ 5n3
90n2 + 36 + cos(n)

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;
8
c) Subtraia o novo resultado por ;
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
x
y = 3x , se x < 0
2
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 : ANINHAMENTO DE 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 + y 1−x ) × (xy−1 + y x−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 logx y 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:
loga b = 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


c/ entrada (25%), 20 prestações
R$10.000 a R$25.000
s/ entrada, 10 prestações
c/ entrada (30%), 15 prestações
R$25.001 a R$40.000
s/ entrada, 7 prestações
c/ entrada (40%), 12 prestações
R$40.001 ou mais
s/ 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 depois de 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, o while 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áveis de 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


Existem dois 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 de 8 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.9 Operaçõ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:

4i + 3j
Elemento(i,j) = (8.1)
2j 2
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 R e Q dentro do vetor resultante para evitar confusão, mas podem ser
utilizadas quaisquer variáveis.

Ex.:

9.4 Exercícios resolvidos


Ex.1: Crie um programa que receba dois polinômios de tamanho determinado pelo usuário,
some-os e calcule o resultado para x = -1,0 e 1.
Capítulo 9. POLINÔMIOS 83

Onde, nas linhas 3 a 10, encontram-se as estruturas padrão para a criação de vetores estudadas
anteriormente. Nas linhas 11 e 12 encontra-se a criação dos polinômios a e b com a função poly,
utilizando os vetores previamente criados. Na linha seguinte há a soma dos polinômios em uma
resultante c, em seguida, com a função horner, calculou-se os valores pedidos pela questão. Por
fim, apresentou-se os resultados com um printf.
Ex.2: Crie um programa que receba um polinômio de 3 termos digitado pelo usuário e
diga se há raízes imaginárias ou não. Obs.: A função isreal(x) verifica se a variável x é real ou
imaginária, tendo como resultado %t se for rela e %f se for imaginária.
Capítulo 9. POLINÔMIOS 84

Até a linha 7 segue o padrão já comentado na questão anterior. A linha 8 contém a função
roots criando um vetor b com as raízes do polinômio digitado. A linha 9 cria um contador para
as raízes imaginárias. As linhas 10 a 14 contém uma estrutura para verificar se há algum número
imaginário em b, onde inicia-se com um for que contará de 1 ao tamanho do vetor de raízes
(quantidade de raízes) e, como dito anteriormente, a função isreal verifica se algum número é
real, mas como queremos verificar se é imaginário, utilizamos o prefixo booleano de negação
“∼”, adicionando 1 a cada valor imaginário contado. Por fim, da linha 15 em diante é apenas
uma verificação no valor de c, onde, caso este seja maior que 0, há alguma raiz imaginária no
polinômio digitado.

9.5 EXERCÍCIOS DE FIXAÇÃO


1. Faça um programa que calcule um polinômio cujas raízes são 4 ± 5i, retorne-o.

2. Faça um programa em que o usuário insira um vetor de tamanho 3. O usuário deve escolher
se este vetor inserido será o coeficiente de um polinômio ou as raízes. Retorne o polinômio.

3. Faça um programa que encontre as raízes do seguinte polinômio:


√ 18
14, 5 6x3 + x2 − 2x − 7 = 0 (9.1)
99
4. A equação que define a posição de um corpo em um MRUV é a seguinte:

1
S = S0 + V0 t + at2 (9.2)
2
Faça um programa que receba a velocidade inicial, posição inicial e aceleração e retorne
a posição final do corpo nos tempos 10s, 20s e 30s, usando as funções do Scilab para
polinômios.

5. Faça um programa que receba dois polinômios (para isso, o usuário irá colocar o grau do
polinômio e os vetores de coeficientes). O seu programa deve retornar a soma, a subtração
e a multiplicação dos polinômios.

6. Faça um programa que receba um vetor de tamanho indeterminado (valor sentinela igual
a zero). Seu programa deve retornar o cujas raízes são os valores do vetor inserido pelo
usuário

7. Considere os seguintes polinômios:

p(x) = x4 − 13x3 + 30x2 + 4x − 40 (9.3)


q(x) = x2 − 9x − 10

Faça um programa que retorne o quociente e o resto da divisão de p(x) por q(x).
Capítulo 9. POLINÔMIOS 85

8. Faça um programa que receba 6 números e crie dois polinômios (A e B), sendo os primeiros
3 números os coeficientes de A e o t números restantes, os coeficientes de B. Subtraia A
por B e volte as raízes do resultado.

9. Faça um programa que peça um vetor com três raízes e crie um polinômio correspondente.
Assim, com o polinômio criado, calcule resposta para x = 4, x = 10 e x = 12.
86

10 FUNÇÕES

Até agora no nosso curso, vimos e utilizamos diversas funções no SciLab, como sin que
calcula o seno de um ângulo, sum que efetua a soma dos elementos de um vetor, dentre outras.
Vamos aprender, nesta semana, sobre como criar nossas próprias funções.
Criar nossas próprias funções é útil em casos onde escrevemos programas muito extensos
com certos trechos que se repetem, sendo mais simples criar uma função que pode ser aplicada
sempre que necessário ao invés de ter que escrever todas as linhas de código que efetuariam
aquela ação.
Para efetivamente criarmos funções, usaremos o comando function, da seguinte forma:

Em que:
function: nome do comando que cria a função;
saída: variável ou variáveis que armazenará(ão) o(s) valor(es) calculado(s) pela função, por
exemplo, na função sum, padrão do SciLab, a saída é a soma dos valores do vetor utilizado como
argumento de sum. Caso sua função tenha mais do que uma saída, a sintaxe será mostrada mais à
frente;
nome da função: como a função é chamada. É o nome que será escrito no SciNotes ou
Console quando se for utilizar a função. Por exemplo, a função que calcula a soma dos elementos
de um vetor tem o nome sum;
entradas da função: pode ser entendido como “em que a função calcula”. Por exemplo a
função modulo, que possui duas entradas, dividendo e divisor, separadas por vírgula;
corpo da função: linhas de código que efetivamente realizam o que se deseja;
endfunction: sinal para o SciLab de que o corpo da função foi encerrado, similar ao end que
utilizamos depois dos if, for, while.
Quando criamos nossa função em um SciNotes em branco, devemos salvá-la antes de
executá-la, assim como sempre fizemos. No entanto, arquivos de funções possuem extensão ‘.sci’
(uma extensão própria do SciLab), diferente de arquivos de comandos como os que vínhamos
fazendo até então, que possuem extensão ‘.sce’. Por este motivo, abas do SciNotes em que
criamos funções não executam programas comuns, como os que vínhamos fazendo, é necessário
abrir uma nova aba em branco do SciNotes. Para mais detalhes, assista a gravação da aula do dia
03/07 no classroom.
Capítulo 10. FUNÇÕES 87

Exemplo 01: crie uma função que calcule a média de um vetor e escreva um programa
aplicando sua função.
Comecemos criando a função. Para isso, peguemos um arquivo em branco do SciNotes e
façamos como explicado acima.

Neste exemplo, nossa saída atende pela variável ‘y’. Assim, ao final do corpo do programa,
a saída, ‘y’ neste caso, deve possuir o valor para o qual se aplica a função. Demos o nome de
“media” para nossa função, respeitando as regras para nomenclatura de variáveis vistas antes.
Como entrada, valor dentro dos parênteses em frente ao nome da função, temos ‘v’. O uso da
letra v não é nada de especial, apenas indica que será uma variável numérica e não variável de
texto (para estes casos, usar aspas). Na linha 2, há o corpo do texto, que neste caso calcula a
média simples, divisão da soma dos elementos pela quantidade de elementos. Como pode se
observar, pode-se usar funções já padrão no SciLab dentro da nossa própria função, respeitando
as regras de cada uma delas. Na linha 3, o endfunction encerra nossa criação de programa.
Para usar a função, criamos um novo documento em branco para escrever um programa e a
aplicar.

Um programa simples, que não começa com clear (motivo será explicado mais à frente), clc,
cria-se o vetor ‘a’ de forma simples e, à variável ‘m’, atribui-se o valor da média de ‘a’, usando a
função ‘media’ que criamos. Do jeito que está escrito, o que é retornado no Console é:

Ele está em branco por que, por padrão, uma função não mostra automaticamente seu valor.
Como pode ser visto no Navegador de Variáveis, tanto ‘a’, quanto ‘m’, existem, mas não foi
solicitado que eles fossem mostrados, por isso, usamos disp ou printf quando queremos retornar
valores no Console. Fazendo esta alteração no programa, vemos que funciona.
Capítulo 10. FUNÇÕES 88

Há alguns pontos que devemos nos atentar ao trabalharmos com a criação de funções:

• O número de saídas não tem relação com o número de entradas. Funções podem ter duas
ou mais saídas e somente uma entrada, vide a exemplo a função size, que possui como
única entrada uma matriz,e como duas saídas o número de linhas e de colunas que a matriz
utilizada como entrada possui. Da mesma forma que podem ter somente uma saída e
diversas entradas, assim como a função modulo, que possui como saída o resto da divisão
dos dois valores utilizados como entrada. A exemplo, imaginemos uma situação onde
queremos criar uma função com duas saídas, sendo uma delas o resultado da soma entre
dois vetores e a outra o produto, termo a termo, entre eles. Podemos fazer isso da seguinte
forma:

As saídas da função somaeproduto são as variáveis numéricas ‘a’ e ‘b’, separadas por
vírgula e colocadas dentro de colchetes. Como entradas, utilizamos ‘v’ e ‘j’. Vale ressaltar,
mais uma vez, que as variáveis utilizadas no processo de criação da função em nada tem
relação com as variáveis utilizadas no programa onde a função será aplicada, ou seja, seus
vetores de entradas podem possuir qualquer nome, não somente ‘v’ ou ‘j’.
Em um programa simples, a função criada poderia ser usada da seguinte forma:
Capítulo 10. FUNÇÕES 89

Começamos com clc para os resultados aparecerem mais destacados. Criamos ‘vetor1’
e ‘vetor2’ de forma simples somente para efeito de teste, note que ambos devem possuir
mesmo tamanho. Às variáveis ‘rsoma’ e ‘rproduto’ atribuímos os valores, respectivamente,
da soma e do produto entre os vetores. Como nossa função possui duas saídas, a forma
de usá-la, assim como qualquer outra função com mais de uma saída, é: usa-se colchetes
antes do sinal de igual para atribuir os valores das saídas, separados por vírgula, seguido
pelo comando propriamente dito, nossa função somaeproduto neste caso, seguido pelas
entradas entre parênteses e separadas por vírgulas.
Os dois disp tornam possível que visualizemos as respostas no Console após a execução
do programa.

• Por padrão, a saída não é mostrada automaticamente no Console. Caso seja requerido
que a função criada, por padrão, já retorne o valor calculado, deixamos o espaço de saída
do programa vazio, visto que o comando disp, por padrão do software, não possui saída.
Como exemplo:

Na criação de nossa função media, o espaço onde colocamos a saída anteriormente está
vazio, indicado pelos colchetes sem nada dentro. No final do corpo da função, usamos o
Capítulo 10. FUNÇÕES 90

disp na variável que calculou a média do vetor inserido.


No uso, vemos assim:

No SciNotes, não usamos um disp em ‘m’, já que a própria função media faz isso.

• Diferentemente de como fizemos até agora no curso, não começaremos os programas com
clear e clc. Ao executarmos uma função no SciNotes, ela fica salva no workspace do
programa, sendo apagada caso utilizemos clear ou saiamos do SciLab. Ainda podemos
utilizar clc para limparmos o Console. Caso a função criada seja utilizada sem que esteja
no workspace (entenda como sem que a função tenha sido executada, carregada), o SciLab
apresentará uma mensagem de erro.

• Caso você use um nome na sua função que já exista como padrão no SciLab, a sua função
sobrescreverá a função anteriormente padrão até que você apague sua função (por meio de
clear ou fechando e abrindo o software).

Por padrão, cos calcula o cosseno dos valores utilizados como seu argumento. Uma vez
que nossa função de calcular média está, agora, nomeada assim, se utilizarmos cos em algum
programa, calcularemos o valor da média daquele vetor.
Ao se apagar a função criada por nós mesmos, a função volta ao seu padrão.
Capítulo 10. FUNÇÕES 91

Exemplo 02: crie uma função que calcule o menor elemento de um vetor.
A partir do enunciado da questão, sabemos que precisamos criar uma função. Comecemos
por esta parte.

Chamemos nossa função de menor, cuja entrada é apenas uma variável numérica, assim como
a saída. Em seu corpo, associamos à variável ‘a’ o valor infinito, para servir como comparação
aos valores do vetor inserido. Abrimos, então, um for que varrerá elemento a elemento do
vetor utilizado como argumento, avaliando, logo em seguida, quais valores são menores que ‘a’.
Quando este if resolver como verdadeiro, ‘a’ se torna ‘x(i)’, menor elemento até então.
Os dois end em sequência fazem o programa voltar ao for, atualizando o valor de ‘i’, repetindo
o processo. Na linha 8, endfunction encerra o processo de criação de nossa função.
Como a questão só pedia para criarmos a função, está resolvido. Mas é sempre bom testá-la
em um programa, algo simples. Apenas não podemos esquecer de executar a função antes de
testarmos, para que ela esteja carregada no SciLab, e de não começarmos o programa com clear.
Um programa simples para testar nossa função seria:
Capítulo 10. FUNÇÕES 92

Começamos com clc para trabalharmos com Console limpo. Usamos uma estrutura com for
para receber o vetor ‘v’. À variável ‘r’ atribuímos o valor resultante da aplicação de nossa função
menor, voltando ‘r’ ao final.
Exemplo 03: crie uma função que receba um polinômio f (x) e calcule seu valor em
x = [1, 3, 5, 7, 9].
Comecemos escrevendo nossa própria função.

De forma simples, criamos calc, que recebe um polinômio como entrada e apresenta um
vetor como saída. Na linha 2, criamos o vetor ‘c’, vetor com valores os quais queremos saber
o resultado de ‘f’ inserido, utilizando o comando horner aprendido em aulas passadas. O
endfunction encerra nossa criação.
Para testarmos, apliquemos calc no seguinte programa:
Capítulo 10. FUNÇÕES 93

Na linha 2 criamos o polinômio ‘p’, sobre o qual aplicaremos a função que criamos. Criamos
a variável ‘r’ como sendo o vetor com os resultados após a execução. Exibimos o resultado com
disp, uma vez que nossa função não foi programada para fazê-lo automaticamente.
Exemplo 04: crie uma função que, dado um volume de água em mililitros, e uma massa
de cloreto de sódio em gramas, calcule a concentração de uma solução, em mol.L−1 , feita a
partir dos dados fornecidos anteriormente. Sua função deve voltar o resultado automaticamente.
Utilize 58,45g como massa molar do NaCl.
Como nos habituamos a fazer, comecemos pelo processo de criação da nossa função:

Nossa função, chamada con, calcula a concentração. É importante notar a ordem dos
argumentos ‘a’ e ‘b’ para nossa função. Do jeito que ela foi escrita, ‘a’ deve ser a massa de NaCl
inserida pelo usuário e ‘b’ o volume de água. A constante 17.10863 é utilizada como fator de
conversão, uma vez que a massa molar do soluto é constante.
Visto que a questão solicitou que a nossa função voltasse automaticamente o resultado, ‘c’
neste caso, nossa função não possui saída, apresentando um disp para voltar a função.
Teste a função no seu próprio software para ver se ela está correta, aproveite e já comece a
resolver os exercícios abaixo.

10.1 EXERCÍCIOS DE FIXAÇÃO


1. Faça uma função que receba uma matriz e retorne quantos números pares e ímpares ela
possui.

2. Faça uma função que dê o valor da soma da diagonal principal de uma matriz.

3. Faça uma função que transforme todos os números negativos de uma matriz em 1.
Capítulo 10. FUNÇÕES 94

4. Faça uma função que verifique se um número é primo, retornando em booleano (%t ou
%f).

5. Crie uma função que receba um vetor e retorne 2 polinômios, sendo que para o primeiro
polinômio o vetor informado seja os coeficientes desse polinômio e para o segundo, o vetor
informado seja as raízes.

6. Crie uma função que informe se uma matriz é quadrada.

7. Faça uma função que receba um número e se ele for ímpar volte o seu quadrado e não for
volte sua raiz quadrada.

8. Faça uma função que crie uma matriz quadrada que possua somente um número. Sua
função deve receber o tamanho da matriz e o número que irá compor todos os elementos
da matriz. Exemplo:
95

11 Gráficos

O Scilab nos permite imprimir (plotar) diversos tipos de gráficos, desde os bidimensionais
até os tridimensionais. Aqui vamos apresentar alguns dos comandos usados para conseguirmos
fazer estes gráficos.

11.1 Alguns comandos importantes

11.1.1 Função deff


Em outras aulas foi trabalhado o comando de funções, o function. A função deff tem o
mesmo objetivo, porém ele consegue criar a função desejada dentro do programa. Com isso, não
é necessário criar um novo programa para a função. Este comando é usado da seguinte maneira:

deff(’y=teste(a,b)’,’y=a.^b’)

Sendo a primeira entrada como a variável de saída, com o nome da função e suas entradas,
tudo entre aspas (’y=teste(a,b)); e a segunda entrada o que a função executará com as entradas,
também entre aspas (’y=a.^b’).
Neste exemplo, a função definida foi a função teste, sendo a saída a variável y e tendo como
entradas as variáveis a e b. Esta função elevará, elemento a elemento, o (os) valor (es) de a a b.

11.1.2 Função eval3d


A função eval3d irá relacionar 2 vetores e gerará uma matriz com os resultados gerados. Para
fazer essa relação, ele tem que receber a função que deve ser feita.

eval3d(<função>,<vetor1>,<vetor2>)

Exemplo:
x=[1:5]
y=x
z=eval3d(teste, x, y)
z=
Capítulo 11. Gráficos 96

1. 1. 1. 1. 1.
2. 4. 8. 16. 32.
3. 9. 27. 81. 243.
4. 16. 64. 256. 1024.
5. 25. 125. 625. 3125.
Neste caso, utilizamos a função previamente definida com a função deff. Aqui, o comando
criou uma matriz Z elevando os valores do vetor X e do vetor Y.

11.2 Gráficos em 2 dimensões

11.2.1 Função plot


Imprime um gráfico de duas dimensões. A estrutura é mostrada a seguir:

plot(<abscissas>,<ordenadas>,<LineSpec>)

A entrada <abscissas> recebe as coordenadas das abscissas, a entrada <ordenadas> recebe as


coordenadas das ordenadas, e a entrada <LineSpec> diz respeito à mudanças de cores e linhas
que podem ser feitas.
Exemplo: x=0:0.1:2*%pi
y=sin(x)
plot(x,y)

Neste exemplo, foram definidos os vetores X e Y, sendo X os valores de 0 até 2π e Y os


valores do seno do vetor X. Com os dois vetores, podemos usar a função plot, colocando as
abscissas e após as ordenadas, para montar o gráfico mostrado na figura.
Capítulo 11. Gráficos 97

Além disso, podemos colocar títulos para o gráfico e para os eixos, usando a função xtitle,
que possui a seguinte sintaxe:

xtitle(‘<título do gráfico>’,’<título do eixo x>’,’<título do eixo y>’,’<título do eixo z>’)

Exemplo:

xtitle(’Gráfico Seno’,’Eixo X’,’Eixo Y’)

Além disso, podemos colocar títulos para o gráfico e para os eixos, usando a função xtitle,
que possui a seguinte sintaxe:

xtitle(‘<título do gráfico>’,’<título do eixo x>’,’<título do eixo y>’,’<título do eixo z>’)

Exemplo:

xtitle(’Gráfico Seno’,’Eixo X’,’Eixo Y’)

Neste exemplo, foram colocados os nomes ‘Gráfico Seno’ para o título do gráfico, ‘Eixo X’
para o título do eixo das abscissas e ‘Eixo Y’ para o título do eixo das ordenadas.

11.2.2 Função fplot2d


Esta função plota o gráfico de uma função, sendo esta definida por function ou deff.

fplot2d(<abscissas>,<função>)
Capítulo 11. Gráficos 98

Exemplo
x=-1:0.1:1
deff(’z=cubo(a)’,’z=a.^3’)
fplot2d(x,cubo)

Neste exemplo, definimos a função cubo e utilizamos ela na função fplot2d, resultando no
gráfico mostrado na Figura.

11.2.3 Função contour2d


Esta função plota as curvas de nível de uma superfície, seguindo a seguinte sintaxe:

contour2d(<abscissas>,<ordenadas>,<altura>,<número de curvas>)

Exemplo:
Plote as curvas de nível da função z = x2 + y 2 .
x=-1:0.1:1
y=x
deff(’a=f(b,c)’,’a=b.^2+c.^2’)
z=eval3d(f,x,y)
contour(x,y,z,6)
Capítulo 11. Gráficos 99

Neste exemplo, foram plotadas as curvas de nível da função dada, usando a função eval3d
para relacionar os vetores de abscissas e ordenadas, isso com 6 curvas.

11.3 Gráficos Tridimensionais


Nessa veremos gráficos tridimensionais, que serão abordados e construídos de maneira
semelhante aos bidimensionais.

11.3.1 Função meshgrid


Essa função é muito importante para construção de gráficos, pois é nela que transformamos o
domínio especificado por dois vetores (Ex: X e Y) em duas matrizes (Ex: MX e MY) que possam
ser usadas para avaliar funções de duas variáveis e assim conseguir fazer gráficos tridimensionais.
Sendo as colunas de MY cópias do vetor Y e as linhas de MX cópias de X. Como exemplificado
a seguir:
Vetores:
Capítulo 11. Gráficos 100

Utilização da função meshgrid:

Utilização das matrizes criadas em uma operação:


Capítulo 11. Gráficos 101

11.3.2 Função plot3d


Essa função faz esboços tridimensionais, partindo de três matrizes e um argumento.

plot3d(X,Y,Z,<argumentos>)

Sendo,
X, Y e Z = Matrizes que indicarão as coordenadas tridimensionais. <argumentos> =
Conjunto opcional que irá definir o estilo do gráfico.
Os <argumentos> variam entre alpha, teta, leg, flag e ebox. Sendo no formato <opção_1> =
<valor_1>, . . . , <opção_n> = <valor_n>.
alpha e teta = Ângulos dados em graus, as coordenadas esféricas de observação do ponto.
flag = um vetor real de tamanho três. flag=[mode,type,box].

• mode= um inteiro (cor da superfície).

• type= um inteiro (tipo de escala).

• box= um inteiro (moldura ao redor do esboço).

leg = string definindo os rótulos para cada eixo com @ como um separador de campos, por
exemplo "X@Y@Z".
ebox = especifica as fronteiras do esboço através do vetor [xmin, xmax, ymin, ymax, zmin,
zmax]. Este argumento é utilizado junto com type em flag, se este for ajustado para 1, 3 ou 5
(volte acima para ver o comportamento correspondente).
Exemplos:
Vamos criar um gráfico da função f (x) = sen(x)cos(y)2 nos intervalos de −3 > x >
3e − 2 > y > 2.
Para isso criamos o seguinte programa:
Capítulo 11. Gráficos 102

Assim obtemos o gráfico:

Como não foi colocado nem alpha nem theta, são inseridos os valores padrões alpha = 35 e
theta = 45. Vamos utilizar agora o alpha = 30 e o theta = 60.

Assim, obtemos o seguinte gráfico:

Se colocarmos alpha = 60 e theta = 30, então obteremos o seguinte gráfico:


Capítulo 11. Gráficos 103

Podemos adicionar legendas a este gráfico com a função leg, dessa forma:

Assim, obtemos o seguinte gráfico:

Por fim, vamos adicionar um modo = 0, tipo = 2 e caixa = 3 pela função flag.

Produzindo o gráfico:
Capítulo 11. Gráficos 104

11.3.3 Função mesh


Essa função produz um esboço 3d de uma malha, pela fórmula mesh(X,Y,Z). Vamos utilizar a
equação z = x2 − y 2 para criar uma malha com essa função.

Sendo possível criar o gráfico:


Capítulo 11. Gráficos 105

11.3.4 Função surf


Essa função, de uma maneira bem simplificada, produz uma superfície sombreada tridimen-
sional utilizando três matrizes. Vamos utilizar a equação f (x) = sen(x).cos(y)2 para criar uma
superfície sombreada tridimensional com essa função.

Criando o seguinte gráfico:

É possível utilizar padrões pré-definidos de cores na construção do gráfico. Por exemplo,


veja o programa:

O comando f.color.map define o mapa de cores do objeto f. No exemplo, foi definido um


padrão de cores do tipo hotcolormap (cores quentes). O gráfico gerado foi o seguinte:
Capítulo 11. Gráficos 106

Use o comando help colormap para encontrar mais padrões de cores.

11.4 Trabalhando com Janelas Gráficas


Ao plotar mais de um gráfico no Scilab, o segundo gráfico irá ser plotado por cima do
primeiro. Veja o exemplo:

Gráfico gerado:
Capítulo 11. Gráficos 107

É possível utilizar o comando scf() para abrir e indicar as janelas gráficas. Veja o exemplo
agora:

Perceba que o programa agora abriu duas janelas gráficas, a Janela gráfica 1 e a Janela gráfica
número 2. Esse números foram identificados ao utilizar o comando scf(1) ou scf(2), antes de
cada plot. Por padrão, ao não utilizar o comando scf(), ao utilizar o comando plot, abre-se uma
janela gráfica número 0.
É possível ainda, numa mesma janela gráfica, plotar mais de uma figura, utilizando o comando
subplot(x,y,z). Veja o exemplo:
Capítulo 11. Gráficos 108

Neste caso, na mesma janela gráfica (número 0), foram plotados dois gráficos. Os dois
primeiros argumentos do comando subplot indicam em quantas linhas e colunas será dividida a
janela gráfica. O terceiro comando indica a posição de cada gráfico. Veja mais um exemplo:
Capítulo 11. Gráficos 109

Sempre pode-se utilizar a função help para obter mais ajuda.

11.5 EXERCÍCIOS DE FIXAÇÃO


1. Construa um gráfico da função:

x
y = 3x + 2e( x−1 ) (11.1)

Com o x variando de 2 até 5.


Capítulo 11. Gráficos 110

2. Construa o gráfico da função:

y = |x| (11.2)

Com o x variando de -5 até 5 e com o título: Gráfico 1.

3. Escreva um programa que retorne o gráfico a seguir:

4. Plote, em um mesmo gráfico, os gráficos de sen(x) e de cos(x), com x sendo um vetor tal:
x=[0:0.1:2*%pi].

5. Crie um programa para plotar as funções:

y = x2π (11.3)

y = πx2 (11.4)

Plotando a primeira curva na cor vermelha e em formato de traço e ponto, enquanto a


segunda curva, na cor amarela e em formato de asterisco. Tome: -7 ≤ x ≤ 7.
Capítulo 11. Gráficos 111

6. Plote o gráfico da função abaixo de modo que a curva seja da cor azul e tenha formato de
quadrados. Tome x=[1:0.1:10].

√ π
y = ( 3x − 2)x− 2 (11.5)

7. Faça um programa que plote os gráficos de y = ex e y = ln(x) numa mesma janela gráfica,
com cores diferentes. Com x variando de 0 a 5.

8. Faça um programa que plote o gráfico 3d de z = x2 − y 2 . Com x e y variando de -3 a 3.

9. Faça um programa que plote o gráfico 3d da função abaixo com x e y variando de -1 a 1.

1
z= (11.6)
log(x2 + 1) + log(y 2 + 1)
112

Referências

LACERDA, E. G. M. de. Programando com Scilab. 2015. Departamento de Engenharia de


Computação e Automação (DCA). Disponível em: <http://paginapessoal.utfpr.edu.br/previero/
calculo-numerico-ma64a-em41-e-em42/calculo-numerico/copy_of_Programando_com_
Scilab.pdf>. Acesso em: Maio 2020. Citado 3 vezes nas páginas 12, 13 e 15.

Você também pode gostar