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