Escolar Documentos
Profissional Documentos
Cultura Documentos
1.3. INSTRUÇÕES
Na linguagem comum, entende-se por instruções “um conjunto de regras ou
normas definidas para a realização ou emprego de algo”.
Em informática, porém, instrução é a informação que indica a um computador uma
ação elementar a executar. Convém ressaltar que uma ordem isolada não permite realizar
o processo completo, para isso é necessário um conjunto de instruções colocadas em
ordem sequencial lógica.
É evidente que essas instruções têm que ser executadas em uma ordem adequada.
Dessa maneira, uma instrução tomada em separado não tem muito sentido; para
obtermos o resultado, precisamos colocar em prática o conjunto de todas as instruções,
na ordem correta.
Instruções são conjuntos de regras ou normas definidas para a realização ou
emprego de algo. Em informática, é o que indica a um computador uma ação elementar
a executar.
1.4. ALGORITMO
Um algoritmo é formalmente uma sequência finita de passos que levam a
execução de uma tarefa. Podemos pensar em algoritmo como uma receita, uma
sequência de instruções que dão cabo de uma meta específica. Estas tarefas não podem
ser redundantes nem subjetivas na sua definição, devem ser claras e precisas.
Como exemplos de algoritmos, podemos citar os algoritmos das operações básicas
(adição, multiplicação, divisão e subtração) de números reais decimais. Outros exemplos
2
seriam os manuais de aparelhos eletrônicos, como uma TV, que explicam passo-a-passo
como, por exemplo, programar os canais.
Até mesmo as coisas mais simples, podem ser descritas por sequências lógicas. Por
exemplo:
“Somar dois números quaisquer”.
• Coloque o primeiro número na caixa A
• Coloque o segundo número na caixa B
• Some o número da caixa A com número da caixa B e coloque o resultado na
caixa C
1.6. EXERCÍCIOS
1) Descreva uma sequência de passos para somar dois números e multiplicar o
resultado pelo primeiro número.
2) Faça um algoritmo para trocar uma lâmpada. Descreva com detalhes.
3
2. DESENVOLVENDO ALGORITMOS
2.1. PSEUDOCÓDIGO
Os algoritmos são descritos em uma linguagem chamada pseudocódigo ou
pseudolinguagem. Este nome é uma alusão à posterior implementação em uma
linguagem de programação, ou seja, quando formos programar em uma linguagem, por
exemplo C, estaremos gerando código em Scilab. Por isso os algoritmos são
independentes das linguagens de programação. Ao contrário de uma linguagem de
programação não existe um formalismo rígido de como deve ser escrito o algoritmo.
O algoritmo deve ser fácil de interpretar e fácil de codificar. Ou seja, ele deve ser o
intermediário entre a linguagem falada e a linguagem de programação.
2.3. FASES
É importante ressaltar que qualquer tarefa que siga determinado padrão pode ser
descrita por um algoritmo, como por exemplo:
CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE
Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema
apresentado em três fases fundamentais.
Onde temos:
ENTRADA: São os dados de entrada do algoritmo
PROCESSAMENTO: São os procedimentos utilizados para chegar ao resultado final
SAÍDA: São os dados já processados
4
2.5. EXERCÍCIOS
1) Identifique os dados de entrada, processamento e saída no algoritmo abaixo:
• Receba código da peça
• Receba valor da peça
• Receba Quantidade de peças
• Calcule o valor total da peça (Quantidade * Valor da peça)
• Mostre o código da peça e seu valor total
2) Faça um algoritmo para “Calcular o estoque médio de uma peça”, sendo que:
ESTOQUEMÉDIO = (QUANTIDADE MÍNIMA + QUANTIDADE MÁXIMA) /2
5
3. DIAGRAMA DE BLOCO
3.1. O QUE É UM DIAGRAMA DE BLOCO?
O diagrama de blocos é uma forma padronizada e eficaz para representar os
passos lógicos de um determinado processamento. Com o diagrama podemos definir uma
sequência de símbolos, com significado bem definido, portanto, sua principal função é
facilitar a visualização dos passos de um processamento.
Para desenvolver um diagrama correto de forma clara e precisa, algumas
recomendações são necessárias:
• Inicie o diagrama com poucos blocos, e ao poucos vá subdividindo os blocos
de forma a criar pequenos trechos.
• Recomenda-se iniciar a construção de cima para baixo e da direita para a
esquerda
• Não cruze as linhas entre os blocos
• Transcreva o diagrama de bloco em pseudolinguagem
3.2. SIMBOLOGIA
De forma a tornar mais simples o entendimento de diagramas de blocos, sé
necessária uma padronização dos blocos que serão utilizados, alguns os blocos utilizados
são demonstrados na Tabela 1.
Tabela 1 – Principais Blocos
Terminal – símbolo utilizado como ponto
para indicar o início e/ou o fim de um
programa
Seta de fluxo de dados – permite indicar o
sentido do fluxo de dados. Serve
exclusivamente para conectar os símbolos
ou blocos existentes
Processamento – Símbolo ou bloco que se
utiliza para indicar cálculos (algoritmos) a
efetuar atribuições de valores ou qualquer
manipulação de dados que tenha um bloco
específico para sua descrição
Teclado – Entrada de dados que serão
inseridos através do teclado
Display – Saída de dados visuais através de
um monitor.
6
Dentro do símbolo sempre terá algo escrito, pois somente os símbolos não nos
dizem nada. Veja nos exemplos a seguir:
“CALCULAR A MÉDIA DE 4
NOTAS”
Início
Receba n1
Receba n2
Receba n3
Receba n4
Calcular
Media=(n1+n2+n3+n4)/4
Média
Fim
3.3. EXERCÍCIOS
1) Construa um diagrama de blocos que:
• Leia a cotação do dólar
• Leia um valor em dólares
• Converta esse valor para Real
• Mostre o resultado
7
2) Desenvolva um diagrama que:
• Leia 4 (quatro) números
• Calcule o quadrado para cada um
• Some todos e
• Mostre o resultado
3) Construa um diagrama de blocos para pagamento de comissão de vendedores
de peças, levando-se em consideração que sua comissão será de 5% do total da venda e
que você tem os seguintes dados:
• Identificação do vendedor
• Código da peça
• Preço unitário da peça
• Quantidade vendida
8
4. CONSTANTES, VARIÁVEIS E TIPOS DE DADOS.
Variáveis e constantes são os elementos básicos que um programa manipula. Uma
variável é um espaço reservado na memória do computador para armazenar um tipo de
dado determinado.
4.1. CONSTANTES
Constante é um determinado valor fixo que não se modifica ao longo do tempo,
durante a execução de um programa.
4.2. VARIÁVEIS
Variável é a representação simbólica dos elementos de certo conjunto. Cada
variável corresponde a uma posição de memória, cujo conteúdo pode se alterado ao
longo do tempo durante a execução de um programa. Embora uma variável possa assumir
diferentes valores, ela só pode armazenar um valor a cada instante.
Partindo de uma analogia, uma variável pode ser considerada como uma caixa,
onde o tipo de dado que pode ser armazenado na variável é o tamanho da caixa, mesmo
princípio acontece em programação, uma variável que irá receber um valor lógico tem um
tamanho em bytes (1 byte) inferior a uma variável que irá receber um valor Real (4 ou 8
bytes).
Valor
34
Total
Nome Tipo
Figura 1 - Representação de uma variável
Uma variável é composta por três partes:
1. Nome: é o rótulo da caixa; como ela irá ser identificada.
2. Valor: o que está armazenado dentro da caixa.
3. Tipo: são as dimensões da caixa, em computação se refere a quantidade de
bits disponíveis para armazenamento.
9
4.3. NOME DAS VARIÁVEIS
Para atribuir o nome para uma variável, algumas regras devem se obedecida:
1. O nome de uma variável pode ter um ou mais caracteres;
2. Nomes de variáveis ou funções no Scilab devem começar com uma letra, ou
com um dos seguintes caracteres especiais: '%', '_', '#', '!', '$', '?'.
3. Os próximos caracteres podem ser letras ou um dos seguintes caracteres
especiais: '_', '#', '!', '$', '?'
4. Nomes podem ser tão longos quanto se queira, mas apenas os primeiros 24
caracteres serão levados em consideração.
5. Letras maiúsculas e minúsculas são diferentes.
6. Não poderão ser utilizados outros caracteres diferentes de letras, números
ou sublinhado;
-->b = 2
b =
2.
Perceba a diferença quando se utiliza o sinal ‘;’. Quando ele é inserido, o Scilab
atribui o valor a variável normalmente, a retirada do sinal irá fazer com que o Scilab
imprima o valor no terminal.
Realizar a soma de variáveis e atribuir para uma nova variável é simples:
-->c = a + b;
-->c
c =
3.
-->d = a + a
d =
2.
Perceba que para verificar o valor de uma variável, basta apenas digitar o nome da
variável (lembre-se que o sinal ‘;’ irá impedir que o valor seja exibido).
10
Caso queira, pode ser incluído valores diretamente:
-->2 * 5
ans =
10.
-->2 * 5.1
ans =
10.2
-->2^3
ans =
8.
-->2 / 5
ans =
0.4
-->disp(a);
3.
E uma situação especial e quando não definimos a variável que irá ser armazendo
o resultado, nesse caso o Scilab atribui automaticamente o resultado para variável ans:
-->5 * 3;
-->disp(ans);
15.
11
• SCIHOME: caminho para preferências e histórico de arquivos de sua sessão.
• TMPDIR: Caminho do diretório temporário.
• Home: Caminho do diretório do usuário.
• %e: Número de Euler.
• %eps: epsilon (relativo a precisão do ponto flutuante)
• %f ou %F: Valor boleano para False.
• %t ou %T: Valor boleano para True.
• %i: unidade imaginária
• %inf : infinito
• %nan: not-a-number – não é um número
• %pi: PI (Π) proporção entre a circunferência e o diâmetro de uma círculo.
• %s: Define polinômios.
• %z: Define polinômios.
-->%pi
%pi =
3.1415927
-->%e
%e =
2.7182818
-->%pi = 4.14
!--error 13
Redefining permanent variable.
4.6.1. Inteiros
Em grande parte das linguagens de programação, números naturais (0, 1, 2,
3, etc.) são conhecidos como inteiros sem sinal.
Para valores inteiros pode ser definidos a quantidade de bits utilizados para
armazenamento do valor.
• Um inteiro com sinal de n bits tem uma faixa de valores de -2n-1 até 2n-1 – 1
• Um inteiro sem sinal de n bits tem uma faixa de valores de 0 até 2n – 1
Por exemplo, se forem utilizados 8 bits para armazernar um inteiro, a escala de
valores vão:
12
• Inteiro com sinal: de -27 (-128) até 27 – 1 (127)
• Inteiro sem sinal: de 0 até 28 – 1 (255)
y=int8(x) Um inteiro com sinal de 8-bits entre [−27, 27 − 1] = [−128, 127]
y=uint8(x) Um inteiro sem sinal de 8-bits entre [0, 28 − 1] = [0, 255]
y=int16(x) Um inteiro com sinal de 16-bits entre [−215, 215 − 1] = [−32768, 32767]
y=uint16(x) Um inteiro sem sinal de 16-bits entre [0, 215 − 1] = [0, 65535]
Um inteiro com sinal de 32-bits entre [−231, 231 − 1] = [−2147483648,
y=int32(x)
2147483647]
y=uint32(x) Um inteiro sem sinal de 32-bits entre [0, 232 − 1] = [0, 4294967295]
9.424778
-->b = 1/3
b =
0.3333333
O armazenamento em ponto flutuante tem problema de arredondamento,
verifique o resultado da equação abaixo:
--> 0.5 - 0.4 -0.1
ans =
- 2.776D-17
13
-->format(25)
-->2^53 + 1
ans =
9007199254740992.
-->2^53 + 2
ans =
9007199254740994.
-->2^53 + 3
ans =
9007199254740996.
4.6.3. String
Strings são codificadas como uma sequência de caracteres terminada pelo carácter
nulo (valor 0). Cada carácter é um número inteiro convertido através de uma definição
para um carácter. A tabela mais utilizada é a ASCII, que apresenta a equivalência de vários
símbolos para o binário.
Strings são delimitadas pelo sinal de aspas duplas (“ e ”) , e a concatenação pode
ser feito através do operador +:
-->x = "aula";
-->y = "programação";
-->x + y
ans =
aulaprogramação
-->a = 5.1
a =
14
5.1
-->a = "valor"
a =
valor
Fim
15
Início
-->a = 5;
-->pi = 3.14;
a=5
-->mprintf("A = %d, PI = %f\n", a, pi);
A = 5, PI = 3.140000
pi = 3.14
pi
Fim
Figura 3 - Imprimindo 2 valores
Numa operação desses valores, fizemos duas saídas mprintfs, uma com o resultado
sendo impresso como inteiro e outra como número real:
-->a = 5;
-->pi = 3.14;
16
Início
-->a = input("Digite um valor: ");
Digite um valor: 4
a
-->mprintf("Valor digitado: %d", a);
Valor digitado: 4
a
Fim
Figura 4 - Lendo um valor
Fim
Figura 5 - Algoritmo para somar dois valores
17
4.9. EXERCÍCIOS
1. Converta o exemplo acima de forma que possa realizar a soma de números reais.
2. Indique os nomes das variáveis que são válidos. Justifique os nomes inválidos.
a. peso d. int g. area.do.quadrado
b. média_final e. 1dia h. valor real
c. R$ f. teste 1 i. a+b
Exemplos:
Digite o valor do Cateto a: 2
Digite o valor do Cateto b: 4
O valor da hipotenusa é 4.472136
18
5. VETORES E MATRIZES
Vetores e matrizes são construções especiais de variáveis, são um agrupamento de
variáveis do mesmo tipo em que seus elementos são acessados através de índices. O
Scilab foi programado para lidar com vetores e matrizes de forma eficiente e de forma
elegante.
1. 2. 3.
4. 5. 6.
1.
2.
3.
19
-->m1 = [1, 2, 3; 4, 5, 6] // Matriz de 2 linhas
e 3 colunas
m1 =
1. 2. 3.
4. 5. 6.
4. 5. 6.
7. 8. 9.
Ou pode-se criar uma matriz vazia:
-->m4 = []
m4 =
[]
20
-->A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15]
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
3.
1. 2. 3.
99. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
1. 2. 3. 4. 5. 6. 7. 8.
9. 10.
-->a = [1:2:10]
a =
1. 3. 5. 7. 9.
-->a = [2:2:10]
21
a =
2. 4. 6. 8. 10.
-->a = [2:1]
a =
[]
-->a = [2:-1:1]
a =
2. 1.
-->a = [10:-1:1]
a =
10. 9. 8. 7. 6. 5. 4. 3.
2. 1.
1. 3. 5. 7. 9.
2. 4. 6. 8. 10.
1. 3. 5. 7. 9.
22
2. 4. 6. 8. 10.
1. 4. 7. 10. 13.
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
-->B = A(:, 1)
B =
1.
4.
7.
10.
Nesse exemplo foi criado a matriz A, depois foi selecionado todas as linhas através
do operador “:” e apenas a primeira coluna;
-->A = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
-->B = A(2:4, 1)
B =
4.
7.
10.
O comando pode ser utilizado para passar uma sequencia de elementos, nesse
caso foi utilizado para retornar entre as linhas e 2 e 4 apenas a primeira coluna
-->A = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
A =
23
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
4. 5.
7. 8.
10. 11.
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
-->B = A(1:2:5, :)
B =
1. 2. 3.
7. 8. 9.
13. 14. 15.
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
24
A =
0. 0. 0.
4. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
0. 0. 0.
4. 5. 6.
0. 0. 0.
10. 11. 12.
0. 0. 0.
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
13. 14. 15.
0. 0. 3.
4. 5. 6.
0. 0. 9.
10. 11. 12.
0. 0. 15.
25
5.4. OPERADORES ESPECIAS PARA INICIALIZAÇÃO DE
VETORES E MATRIZES
No Scilab há comandos especiais para definir valores de vetores e matrizes:
eye Cria uma matriz identidade
linspace Criar um vetor linearmente espaçado
ones Cria um vetor ou matriz com uns
zeros Cria um vetor ou matriz com zeros
rand gera uma matriz com valores aleatórios
1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.
0. 0. 0. 1.
-->id2 = eye(4, 2)
id2 =
1. 0.
0. 1.
0. 0.
0. 0.
-->a = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
a =
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
-->id = eye(a)
id =
1. 0. 0.
0. 1. 0.
26
0. 0. 1.
0. 0. 0.
X = eye(m,n)
X = eye(A)
Onde:
A: uma outra forma de construir uma matriz identidade, passa-se uma matriz A e o
comando eye() constrói uma matriz identidade com as mesmas dimensões da matriz A.
-->linspace(0,9,10)
ans =
0. 1. 2. 3. 4. 5. 6. 7.
8. 9.
-->linspace(0, 10, 5)
ans =
-->m1 = ones(1, 4)
m1 =
1. 1. 1. 1.
27
-->m2 = ones(3, 2)
m2 =
1. 1.
1. 1.
1. 1.
-->a = [1 2 3; 4 5 6]
a =
1. 2. 3.
4. 5. 6.
-->m3 = ones(a)
m3 =
1. 1. 1.
1. 1. 1.
As formas de chamar a função one são:
y=ones(m1,m2,...)
y=ones(A)
y=ones()
Onde:
m1 e m2 são valores que representam o número de elementos em cada dimensão
A: uma outra forma de construir uma matriz identidade, passa-se uma matriz A e o
comando ones() constrói uma matriz de elementos 1 com as mesmas dimensões da matriz
A.
-->m1 = zeros(1, 5)
m1 =
0. 0. 0. 0. 0.
-->m2 = zeros(3, 4)
m2 =
28
0. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 0.
-->a = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
a =
1. 2. 3.
4. 5. 6.
7. 8. 9.
10. 11. 12.
-->m = zeros(a)
m =
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
Onde:
m1 e m2 são valores que representam o número de elementos em cada dimensão
A: uma outra forma de construir uma matriz identidade, passa-se uma matriz A e o
comando zeros() constrói uma matriz de elementos 1 com as mesmas dimensões da
matriz A.
29
-->x=rand(3,3,'normal')
x =
-->a = [1 2 3; 4 5 6]
a =
1. 2. 3.
4. 5. 6.
-->x = rand(a)
x =
rand(key)
rand("seed" [,n])
rand("info")
Onde:
30
Se presente, o argumento "key" permite especificar uma outra distribuição
randômica.
rand('uniform') o gerador corrente é acertado como gerador randômico uniforme.
Números aleatórios são distribuidos uniformemente e pertencem ao intervalo (0,1).
rand('normal') o gerador corrente é acertado como gerador de números
randômico gaussiano (com média 0 e variância 1) .
str=rand('info') retorna o tipo do gerado randômico padrão ('uniform' ou 'normal')
5.5. EXERCÍCIOS
1. Criação e operação de matrizes
a. Criar 2 matrizes A e B, com dimensões 3X4.
b. Criar em C a transporta de A.
c. Gerar D, somando A e B.
d. Gerar E, subtraindo B de A .
e. Gerar F com a multiplicação, elemento a elemento, de A por B.
f. Adicionar 5 a cada elemento de B.
g. Apagar todas as variáveis usadas até este momento.
2. Operação em vetores:
a. Gerar um vetor inteiro H, com o valor inicial 6 e valor máximo 100,
com variação entre elementos de 6.
b. Gerar um vetor I, subtraindo 2 de cada um dos valores de H.
c. Gerar um vetor J com a multiplicação, elemento a elemento, de H
por I.
31
3. Insira a matriz X = [2 7 9 7; 3 1 5 6; 8 4 2 5] no Scilab, execute os seguintes
comandos e detalhe o valor obtido
a. A = X(1, 1:3)
b. B = X(1:2, 1:2)
c. C = X(:,2:2:$) // O operador $ é utilizado para designar o fim da série
d. D = X(1:2:$, :)
4. Detalhe o que cada comando irá fazer:
a. x = [3 15 9 12 -1 0 -12 9 6 1]
x (x > 0) = 0
b. x = [3 15 9 12 -1 0 -12 9 6 1]
x(:, 1:2:$) = 2
c. x = [3 15 9 12 -1 0 -12 9 6 1]
y = x(x>10)
d. x = [3 15 9 12 -1 0 -12 9 6 1]
y = x(modulo(x,2)==0)
5. Faça:
a. Criar com a função rand a matriz real mat, de dimensões 7X5 e
multiplicá-la por 100. Depois utilizando a função int, modifique a
matriz mat de forma que contenha apenas valores inteiros
b. Com a matriz mat obtida do item anterior apresente a soma e o
produto de todos seus valores;
c. Ainda sobre a matriz mat apresente o maior valor, o menor valor e
a média dos valores
32
6. FUNÇÕES
Funções são formas de operar elementos de forma mais natural e são muito
utilizadas para melhorar estrutura um programa.
Uma função começa com a palavra chave function e termina com endfunction veja
um exemplo:
-->function res=soma(a, b)
-->res = a + b;
-->endfunction
-->soma(4, 5)
ans =
9.
Detalhando as linhas
Na linha function res=soma(a, b) começamos uma função chamando a
palavra function, logo em seguinda a variável res será responsável por pelo retorno de
dados para o local em que foi chamado. Soma se refere ao nome da função e a e b os
valores que serão passados.
Dentro da função, a variável de retorno res irá receber o resultado da soma e ao
final da função irá ter seu valor retornando a função que chamou.
A linha soma(4, 5) irá chamar a função correspondente, passando os valores 4
e 5, ao final apresentado o resultado.
A sintaxe padrão da função é a seguinte:
Function [<retorno>]=<Nome_Função>(<lista de argumento>)
<Processamento>
endfunction
O retorno pode ser uma única variável ou um conjunto de variáveis, nesse caso a
lista de variáveis de retorno devem ser inseridas dentro de colchetes (“[“ e “]”)
Perceba no próximo exemplo, que a função processa retorna dois valores, um com
o resultado da soma dos parâmetros e outro com a subtração:
-->function [soma, subtrai]=processa(a, b)
-->soma = a + b;
-->subtrai = a - b;
-->endfunction
33
-->[res_soma, res_sub] = processa(6, 4)
res_sub =
2.
res_soma =
10.
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6.
-->res = soma2(A)
res =
3. 4. 5.
6. 7. 8.
Ou mais complexo:
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6.
- 1. 0. 1.
34
2. 3. 4.
resSoma =
3. 4. 5.
6. 7. 8.
6.2. EXERCÍCIOS
1. Escreva uma função que receba dois números inteiros retorne o menor
número
2. Escreva uma função que calcule e retorne a distância entre dois pontos ( x1,
y1) e (x2, y2).
3. Escreva uma função potencia(base, expoente) que, quando chamada,
retorna baseexpoente. Por exemplo, potencia(3, 4) deve retornar 81. Assuma
que expoente é um inteiro maior ou igual a 1.
4. Crie funções que recebam um valor de x e retorne o resultado das
seguintes equações matemáticas:
a. x + 2
b. x – 2*x
c. x2 – 4
d. x3 + 2x2 - 6x + 2
5. Faça um programa que receba os valores de a, b e c e através da formula de
Bhaskara, retorne as duas raízes da expressão.
35
7. SISTEMAS DE NUMERAÇÃO
Utilizar a notação decimal é interessante para nós seres humanos, principalmente
pela associação com o número de dedos. Porém para o computador a manipulação de
dados através dessa notação é atualmente inviável, e por isso, o computador utiliza a
representação de informação através da notação binária (dois estados: ligado ou
desligado, 0 ou 1).
36
Resultado 64 32 16 0 0 2 0
Somando os resultados:
64 + 32 + 16 + 0 + 0 + 2 + 0 = 11410
Utilizando os resultados de trás para frente:
35110 = 1010111112
Método 2 – Subtração do peso das casas
Nesse método, preciso verificar se posso subtrair o valor do número pelo peso da
casa, caso positivo, acrescento 1 (um) a saída e o resto da subtração é enviada para a
próxima casa. Se o número é menor que o peso da casa, acrescento 0 (zero) para a saída e
continuo o mesmo número no valor da próxima casa.
Valor 351–256= 95 95-64= 31 31-16= 15-8= 7-4= 3-2=
1-1=0
Peso 2 = 512 2 = 256 2 = 128 2 = 64 2 = 32 24 = 16
9 8 7 6 5
2 = 8 2 = 4 21 = 2 20 = 1
3 2
Saída 1 0 1 0 1 1 1 1 1
Novamente chegamos ao resultado:
35110 = 1010111112
37
897 8
896 112 8
1 112 14 8
0 8 1
6
O resultado é 16018
38
7.3.3. Convertendo de binário para octal
O real motivo de se utilizar o sistema de numeração octal deve-se a forma de
representar os números em binário. Por isso o sistema de conversão é simples, porém
antes e interessante conhecer o número em octal e se equivalente em binário.
Tabela 3 - Equivalência octal-binária
Octal Binário
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Com base nessa tabela, basta apenas agrupar a cada três bits o número em binário
e verificar seu equivalente em octal, caso necessário podemos preencher com zeros a
esquerda nosso número em binário.
Veja o exemplo, para converter o número 11001110112 para octal:
1100111011
}
}
}
}
1 4 7 3
Resultado: 11001110112 = 14738
4 7 3 2
}
}
}
}
100111011010
O resultado da conversão: 1001110110102
39
7.4. SISTEMA DE NUMERAÇÃO HEXADECIMAL
De uma forma parecida ao sistema octal, o hexadecimal é utilizado para melhor
visualizar uma sequencia de bits, sendo inclusive muito mais utilizado que o octal. De
forma a completar a lista com 16 símbolos, após o 9 se inicia a utilização de letras,
começando no A até o F, essa equivalência é vista na Tabela 4
Tabela 4 - Equivalência Decimal – Hexadecimal
Decimal Hexadecimal
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 A
11 B
12 C
13 D
14 E
15 F
40
O processo ocorre por divisão, sempre cuidando para o caso do resto for maior
que 10 deve ser substituído pelo sua letra equivalente.
Convertendo o número 1205910 para a base hexadecimal:
12059 16
12048 753 16
(B)11 752 47 16
1 32 2
(F)15
Resultado = 2F1B16
101111010101
}
}
}
B D 5
E de 1F816 para binário:
41
1 F 8
}
}
}
111111000
1
Protocolos seriais também são classificados quanto a ordem de envio das
informações. USB, RS-232, RS-422 e RS-485 são exemplos de padrões seriais do tipo little
endian
42
7.6. REPRESENTANDO STRING
String em C é codificado como uma sequência de caracteres terminada pelo
caracter nulo (valor 0). Cada caracter é um número inteiro convertido através de uma
definição para um caracter. A tabela mais utilizada é a ASCII, que apresenta a equivalência
de vários símbolos para o binário, por exemplo a string “arquitetura” será representada
conforme mostra a Figura 8, perceba que o computador irá armazenar o valor em binário.
Caracter a r q u i t e t u r a
Decimal 97 114 113 117 105 116 101 116 117 114 97
Binário 1100001 1110010 1110001 1110101 1101001 1110100 1100101 1110100 1110101 1110010 1100001
Hexadecimal 61 72 71 75 69 74 65 74 75 72 61
Figura 8 - Representação de caracteres
𝐼!! = ň 𝑖 ×2!
!!!
43
Peso 27 = 128 26 = 64 25 = 32 24 = 16 23 = 8 22 = 4 21 = 2 20 = 1
Resultado 128 64 0 16 8 0 2 0
- (128) + 64 + 16 + 8 + 2 = -38
Valor 1 2 3 4 5
Peso ... 101 100 10-1 10-2 10-3 ...
Resultado 10 2 0,3 0,04 0,005
𝐷= 10! ×𝑑[𝑖]
!!!!
Onde D seria o número decimal final, m a quantidade de casas inteiras, n o número de casas
fracionárias, e d[i] a parte do número decimal na casa i.
Por analogia, considere agora essa forma para representar o sistema binário, com o mesmo
princípio de casas e pesos. Por exemplo, vamos representar o número 101.112
Valor 1 0 1 1 1
Peso ... 22 = 4 21 = 2 20 = 1 2-1 = 1/2 2-2= 1/4 ...
Resultado 4 0 1 1/2 1/4
!
Resultado = 5
!
A representação matemática é:
44
!
𝐵= 2! ×𝑏[𝑖]
!!!!
Porém essa forma de representar números fracionários tem problemas de precisão34, por
exemplo, para representar o número 0,2 (1/5), não há formas precisão de representação,
conforme mostrado na Tabela 5.
bits 1 8 23
+- Expoente Mantissa
Figura 9 - Ponto flutuante de precisão simples
bits 1 11 52
+- Expoente Mantissa
Figura 10 - Ponto flutuante de precisão dupla
3
Um fato curioso sobre essa problema de representação foi na guerra do Golfo, para saber mais
detalhes pesquise num site de busca por “erro arredondamento míssil Patriot”.
4
Ainda podemos verificar problemas de arredondamento no Excel, para isso numa célula qualquer
insira a equação = (0,5-0,4-0,1). O resultado deveria ser 0.
45
O expoente é definido através do calculo com o bias, esse número é obtido através do
número de bits no expoente com a fórmula 2k−1 – 1. Para o caso de precisão simples, o bias é 28−1 –
1 = 127. Para o ponto flutuante de precisão dupla, 211−1 – 1 = 1023.
1. Para a parte inteira, realiza-se a conversão normal de decimal para binário: 210 = 102
2. Para a parte fracionária, faz-se sucessivas multiplicações da parte fracionária por 2:
0,625 × 2 = 1,25 1 Retira o número inteiro e continua a conta
0,25 × 2 = 0,5 0 Gerou 0, continuando...
0,5 × 2 = 1,0 1 Gerou 1 e restou 0, para aqui.
Portanto, 0,62510 = 0,1012
5
Forma de conversão retirado de http://sandbox.mc.edu/~bennet/cs110/flt/dtof.html
46
7.8.4. Convertendo um número fracionário binário para decimal.
O processo inverso, para converter C4A42A0016 para decimal, através da normativa IEEE de
precisão simples:
47
8. OPERADORES
Os operadores são meios pelo qual incrementamos, decrementamos, comparamos
e avaliamos dados dentro do computador. Temos três tipos de operadores:
• Operadores Aritméticos
• Operadores Relacionais
• Operadores Lógicos
0.5
E outro que faz o processo com os operadores invertidos:
-->2 \ 4
ans =
2.
Para a potência, podem ser utilizados tanto o sinal ‘^’ quanto ‘**’:
48
-->2 ^ 2
ans =
4.
-->2 ** 2
ans =
4.
1 + 7 * 2 - 1 = 14
3 * (1 - 2) + 4 * 2 = 5
49
-->0 & %T
ans =
-->-1 & %T
ans =
-->1 & %T
ans =
T
8.3. OPERADORES RELACIONAIS
Os operadores relacionais são utilizados para comparar números. Os valores a
serem comparados podem ser números ou variáveis.
Estes operadores sempre retornam valores lógicos (Verdadeiro ou Falso). Para
estabelecer prioridades no que diz respeito a qual operação executar primeiro, utilize os
parênteses.
Os operadores relacionais são:
Tabela 8 - Operadores relacionais
Descrição Símbolo
Igual a ==
Diferente ~= ou <>
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=
Exemplo:
Tendo duas variáveis A = 5 e B = 3
Os resultados das expressões seriam:
Tabela 9 - Exemplo de expressões
Expressão Resultado
A == B FALSO
A ~= B VERDADEIRO
A > B VERDADEIRO
A < B FALSO
50
A >= B VERDADEIRO
A <= B FALSO
51
V F
F V
Exemplos:
Suponha que temos três variáveis A = 5, B = 8 e C =1.
Os resultados das expressões seriam:
Tabela 14 - Expressões
Expressão Resultado
A == B & B > C FALSO
A ~= B | B < C VERDADEIRO
A > B VERDADEIRO
A < B & B > C VERDADEIRO
A >= B | B == C FALSO
~ A <= B FALSO
8.5. EXERCÍCIOS
1) Tendo as variáveis SALARIO, IR e SALLIQ, e considerando os valores abaixo.
Informe se as expressões são verdadeiras ou falsas.
2) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou
falsas.
a) (A + C) > B ( )
b) B >= (A + 2) ( )
c) C == (B – A) ( )
d) (B + A) <= C ( )
e) (C + A) > B ( )
3) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo são
verdadeiras ou falsas.
a) (A > C) & (C <= D) ( )
b) (A+B) > 10 | (A+B) == (C+D) ( )
c) (A>=C) & (D >= C) ( )
4) Faça um programa que solicite ao usuário que digite a base e a altura de um
triângulo. Em seguida, apresente a área do mesmo.
Área = (Base * Altura) / 2
52
5) Crie um programa que solicite ao usuário que digite a quantidade de horas e de
minutos. Após isso, o programa deverá responder a quantidade de segundos nesse
período.
Segundos = (Quantidade de horas * 3600) + (Quantidade de minutos * 60)
6) Escrever um algoritmo para determinar o consumo médio de um automóvel
sendo fornecida a distância total percorrida pelo automóvel e o total de combustível gasto
Consumo médio = distância total / total de combustível gasto
7) A Loja Café com Açúcar está vendendo seus produtos em 5 (cinco) prestações
sem juros. Faça um programa que receba um valor de uma compra e mostre o valor das
prestações.
53
9. GRÁFICOS
O Scilab permite criar diversos tipos de gráficos em 2 e 3 dimensões, para isso, a
base de gráficos é construída através da função plot.
-->Y = X.^2.-4
Y =
-->plot(X, Y)
E o resultado:
54
9.1.1. Inserindo título e ajustando eixos
O Scilab permite que se crie títulos e adicione rótulos nos eixos dos gráficos. Os
comandos:
• title(): adiciona um título na parte superior do gráfico;
• xlabel(): adiciona um rótulo no eixo das abscissas;
• ylabel(): adiciona um rótulo no eixo das ordenadas.
Adicionando esses campos ao exemplo anterior:
-->X = [-3:0.5:3]
X =
-->Y = X.^2.-4
Y =
-->plot(X, Y);
-->xlabel("Valores de X");
-->ylabel("Valores de Y");
-->title("Teste de plotagem");
55
Podemos personalizar melhor o gráfico passando certos parâmetros para as
funções xlabel, ylabel e title:
Por exemplo:
-->xlabel("Valores de X", "font_size", 4);
Irá reproduzir o seguinte gráfico:
As propriedades que podem ser alteradas são:
• “visible”: visibilidade da legenda. Recebe uma string “on” para deixar o texto
visível ou “off” para invisível. O padrão desta propriedade é “on”.
• “font_size” ou” fontsize”: altera tamanho da fonte do texto (como visto no
exemplo anterior). Recebe um valor inteiro positivo para definir o seu tamanho.
• “fontname”: altera o nome da fonte do texto. Recebe uma string com o nome da
fonte(case unsensitive) ou um id-number (número identificador) da fonte. Os
valores são:
Fonte Valor
56
Courier 0
Symbol 1
Times 2
Times Italic 3
Times Bold 4
Times Bold Italic 5
Helvetica 6
Helvetica Italic 7
Helvetica Bold 8
Helvetica Bold Italic 9
• “rotation”: rotaciona o texto para um valor em graus recebido.
• “position”: altera a posição do texto. Recebe um vetor de duas dimensões com as
coordenadas da posição a ser alterada.
• “color”: altera a cor do texto. Recebe uma string (“red”, "green", "blue", "cyan",
"magenta", "yellow", "black", "white") ou uma matriz 1x3 RGB.
• “edgecolor”: altera a cor da linha em torno do texto. Recebe os mesmos
argumentos que a propriedade color
• “background” (apenas para x-ylabel): altera a cor do fundo em torno do texto.
• “backgroundcolor” (apenas para title): altera a cor de fundo em torno do texto.
Veja o exemplo:
-->plot(X, Y)
-->title("Teste de plotagem","font_size", 5,
"backgroundcolor", "blue", "color", "red");
E o resultado:
57
58
4 ciano 15 verde lima 26 marrom avermelhado
5 vermelho Claro 16 verde esmeralda 27 laranja escuro
6 magenta 17 azul esverdeado escuro 28 rosa claro
7 amarelo 18 azul esverdeado 29 rosa claro
8 branco 19 vermelho escuro 30 rosa
9 azul safira 20 vermelho escuro 31 rosa
10 azul royal 21 vermelho 32 amarelo escuro
E mais os comandos para ajustar as linhas de origem X e Y:
-->a = gca(); // obtem o gráfico
-->a.x_location = "origin";
-->a.y_location = "origin";
Produzem o gráfico:
60
9.1.2.5. Adicionando legenda
Para adicionar legendas usa-se o comando:
legend([h,] strings [,pos] [,boxed])
onde:
• h: o gráfico que se deseja inserir a legenda
• strings: os textos que irão aparecer na legenda
• pos: definido através dos seguintes números:
1 as legendas são impressas no canto superior direito
2 as legendas são impressas no canto superior esquerdo
3 as legendas são impressas no canto inferior esquerdo
4 as legendas são impressas no canto inferior direito
5 localização interativa com o mouse
-1 as legendas são impressas à direita do canto superior direito
-2 as legendas são impressas à esquerda do canto superior esquerdo
-3 as legendas são impressas à esquerda do canto inferior esquerdo
-4 as legendas são impressas à direita do canto inferior direito
-5 as legendas são impressas acima do canto superior esquerdo
-6 as legendas são impressas abaixo do canto inferior esquerdo
61
• Boxed: um valor booleano (valor padrão %t) que ajusta se a caixa será
desenhada ou não
Exemplo de comando:
-->legend(gca(), "Gráfico da função X", -6);
irá completar o gráfico dos exemplos anteriores:
62