Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e...
Transcript of Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e...
![Page 1: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/1.jpg)
Módulo 6Aula Expositiva 7
3.2.4 O Comando while3.2.5 O Comando for3.2.6 Valores Lógicos e Strings3.2.7 Comandos Aninhados3.3 Arquivos
DCC 001Programação de Computadores
2° Semestre de 2011Prof. Osvaldo Carvalho
![Page 2: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/2.jpg)
O Comando while
UFMG DCC001 2011-2 2
![Page 3: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/3.jpg)
Cálculo do Fatorial
UFMG DCC001 2011-2 3
O fatorial de um número n é dado pela fórmula:
Queremos um programa que leia n, e calcule n!
(O Scilab oferece a função factorial)
![Page 4: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/4.jpg)
Cálculo do Fatorial
Temos que realizar repetidas multiplicações
Precisamos de um loop Vamos usar o comando while:
Comandos dentro do <bloco while> são repetidos até que a <condição> falhe
UFMG DCC001 2011-2 4
while <condição> <bloco while>end
![Page 5: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/5.jpg)
Cálculo do Fatorial com while
UFMG DCC001 2011-2 5
n = input("n = ");k = 1;fat = 1;while k <= n fat = fat * k; k = k + 1;endprintf("O fatorial de %d é %d",n,fat)
![Page 6: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/6.jpg)
Quando este loop vai parar?
Sem intervenção, nunca.Cuidado com o uso de while!
Comando while: Loops infinitos
x = 1while x < 10 printf('x = %g',x) x = x - 1end
6UFMG DCC001 2011-2
![Page 7: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/7.jpg)
O Algoritmo de Euclides
Encontra o Máximo Divisor Comum Base:
mdc(a,a) = a se a > b, mdc(a,b) = mdc(a-b,b) se b > a, mdc(a,b) = mdc(a, b-a)
Método: se a = b, o mdc(a,b) é igual a a (ou a b) senão, substituir o maior pela diferença
entre o menor e o maior, até que sejam iguais
UFMG DCC001 2011-2 7
![Page 8: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/8.jpg)
Algoritmo de EuclidesExemplo
UFMG DCC001 2011-2 8
252 105147 10542 10542 6342 2121 21
![Page 9: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/9.jpg)
O Programa Euclides.sce
UFMG DCC001 2011-2 9
m = input(“m = "); n = input(“n = ");a = m; b = n;while a <> b if a > b then a = a-b; else b = b-a; endendprintf("mdc(%d,%d) = %d",m,n,a)
O “;” permite colocar dois comandos em uma mesma linha
![Page 10: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/10.jpg)
O Comando for
UFMG DCC001 2011-2 10
![Page 11: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/11.jpg)
Fatorial com while e com for
UFMG DCC001 2011-2 11
k = 1;fat = 1;while k <= n fat = fat * k; k = k + 1;end
fat = 1;for k = 1:n fat = fat * k;end
![Page 12: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/12.jpg)
Forma Geral do Comando for
UFMG DCC001 2011-2 12
for <variável> = <inicial>:<passo>:<limite>
<bloco de comandos>;
end
é equivalente a
<variável> = <inicial>;
while <variável> <= <limite>
<bloco de comandos>;
<variável> = <variável> + <passo>
end
![Page 13: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/13.jpg)
Comando for com passo diferente de 1
UFMG DCC001 2011-2 13
for i = 1:2:10printf('\ni = %g',i);
end
i = 1i = 3i = 5i = 7i = 9
i varia de 2 em 2
Saída
Repare que i não assumiu o limite superior do loop
![Page 14: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/14.jpg)
Comando for com passo negativo
UFMG DCC001 2011-2 14
for i = 20:-2:16printf('\ni = %g',i);
end
i = 20i = 18i = 16
Saída
![Page 15: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/15.jpg)
Comando for com controle fracionário
UFMG DCC001 2011-2 15
for x = 0:0.3:0.7printf('\nx = %g',x);
end
x = 0x = 0.3x = 0.6
A variável de controle pode assumir valores não inteiros
Saída
![Page 16: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/16.jpg)
Imprimindo Tabelas
UFMG DCC001 2011-2 16
![Page 17: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/17.jpg)
Tabela de Senos
UFMG DCC001 2011-2 17
x seno(x)
0.0 0.0000
0.2 0.1987
0.4 0.3894
0.6 0.5646
0.8 0.8415
Produzir uma tabela como esta, com x variando de 0 a 2π, com intervalos de 0.2
![Page 18: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/18.jpg)
Tabela de Senos1ª tentativa
UFMG DCC001 2011-2 18
// Tabela da função Senofor x = 0:0.2:2*%pi printf("%g %g",x, sin(x))end
-->
0 00.2 0.1986690.4 0.3894180.6 0.5646420.8 0.7173561 0.841471
![Page 19: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/19.jpg)
Tabela de Senos2ª Tentativa
UFMG DCC001 2011-2 19
// Tabela da função Senofor x = 0:0.2:2*%pi printf("\n %g %g",x, sin(x))end
![Page 20: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/20.jpg)
Tabela de Senos2ª Tentativa
UFMG DCC001 2011-2 20
0 00.2 0.1986690.4 0.3894180.6 0.5646420.8 0.7173561 0.8414711.2 0.932039
![Page 21: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/21.jpg)
Tabela de Senos
UFMG DCC001 2011-2 21
// Tabela da função Seno// Impressão do cabeçalhoprintf("\n x seno(x)")// Impressão das linhas da tabelafor x = 0:0.2:2*%pi printf("\n%3.1f %7.4f",x, sin(x))end
![Page 22: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/22.jpg)
Valores Lógicos e Strings
UFMG DCC001 2011-2 22
![Page 23: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/23.jpg)
Valores Lógicos
-->x = 5; y = 13;-->L = x > y L = F-->L = x < y L = T-->DivisivelPor4 = modulo(1968,4) == 0 DivisivelPor4 = T
Variáveis podem conter %T (true) ou %F (false)
Expressões relacionais como a == b resultam em valores lógicos
23UFMG DCC001 2011-2
A função modulo calcula o resto da divisão de inteiros
![Page 24: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/24.jpg)
Operações Lógicas
UFMG DCC001 2011-2 24
Operador Notação Scilab
NOT ~
AND &
OR |
![Page 25: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/25.jpg)
Exemplos de operações lógicas
UFMG DCC001 2011-2 25
-->a = %t; b = %f;-->~a ans = F -->a & b ans = F -->a | b ans = T
%t e %f são literais lógicos
![Page 26: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/26.jpg)
UFMG DCC001 2011-2 26
Strings
Variáveis podem conter também strings (sequências de caracteres)
-->a = "Programação" a = Programação -->b = " de ' b = de -->c = "Computadores" c = Computadores
Aspas simples (') e duplas (") são equivalentes
![Page 27: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/27.jpg)
UFMG DCC001 2011-2 27
Concatenação de Strings
Strings podem ser concatenados (justapostos)
-->a = 'Programação';-->b = ' de ';-->c = 'Computadores';
-->Disciplina = a + b + c Disciplina = Programação de Computadores
Para strings, + significa
concatenação
![Page 28: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/28.jpg)
Programa Passou-Não passou
Faça um programa que: Leia o nome do usuário Leia o total de pontos feitos pelo usuário Imprima, conforme o caso, a frase
<usuário>, com <pontos> você passou! Ou
<usuário>, com <pontos> você não passou!
Ex.: José, com 75 pontos você passou!
UFMG DCC001 2011-2 28
![Page 29: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/29.jpg)
UFMG DCC001 2011-2 29
Programa PassouNaoPassou.sce
// Leitura do nome do usuárioNome = input("Digite seu nome, por favor")
// Leitura da pontuaçãoPontos = input(Nome + ", qual foi sua pontuação? ")
// Impressão do resultadoif Pontos >= 60 then printf("%s, com %g pontos você passou!",Nome,Pontos)else printf("%s, com %g pontos você não passou :(",... Nome,Pontos)end Comando continua
na próxima linha
![Page 30: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/30.jpg)
Padrão de Programa Repetitivo
continua = %T;while continua // Processamento de um item
// Decisão decisao = ... input('Continua? (s/n)','string'); continua = decisao == 's'endprintf('\nQue pena!')
Elimina a necessidade de aspas para entrar com string
30UFMG DCC001 2011-2
![Page 31: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/31.jpg)
Tratando diversas equações de 2º grau
UFMG DCC001 2011-2 31
// Cálculo das raízes de diversas equações// de 2o graucontinua = %t;while continua // Processamento de uma equação a = input("Digite o valor de a:"); b = input("Digite o valor de b:"); c = input("Digite o valor de c:");
delta = b^2 - 4*a*c if delta >= 0 then r1 = (-b+sqrt(delta))/(2*a) r2 = (-b-sqrt(delta))/(2*a) printf("As raízes são %g e %g",r1,r2) else printf("As raízes são complexas") end // Decisão de continuação pelo usuário decisao = input("Outra equação? (s/n)","string"); continua = decisao == "s";endprintf("Obrigado, e volte sempre.")
![Page 32: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/32.jpg)
Comandos Aninhados
UFMG DCC001 2011-2 32
![Page 33: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/33.jpg)
Comandos Aninhados
Blocos internos a comandos como if, for e while podem conter qualquer tipo de comando, incluindo Comandos de atribuição Comandos de entrada/saída Outros comandos if, for e while!
Esta generalidade proporciona uma imensa flexibilidade à programação
UFMG DCC001 2011-2 33
![Page 34: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/34.jpg)
Conceitos e Notas
Faça um programa que: Leia o nome e o total de pontos de um
aluno Imprima a nota e o conceito
correspondente, segundo a tabela
UFMG DCC001 2011-2 34
Resultado Conceito
90 <= Nota <= 100 A
80 <= Nota < 90 B
70 <= Nota < 80 C
60 <= Nota < 70 D
40 <= Nota < 60 E
0 <= Nota < 40 F
![Page 35: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/35.jpg)
UFMG DCC001 2011-2 35
Programa NotaConceito.sce
if Nota >= 90 then Conceito = 'A';else if Nota >= 80 then Conceito = 'B'; else if Nota >= 70 then Conceito = 'C'; else if Nota >= 60 then Conceito = 'D'; else if Nota >= 40 then Conceito = ‘E'; else Conceito = ‘F’; end end end endendprintf('\n%s, seu conceito com %g pontos foi %s!\n\n', ...NomeAluno, Nota, Conceito)
![Page 36: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/36.jpg)
UFMG DCC001 2011-2 36
Programa NotaConceito.sce:A Importância da Indentação
if Nota >= 90 thenConceito = 'A';elseif Nota >= 80 thenConceito = 'B';elseif Nota >= 70 thenConceito = 'C';elseif Nota >= 60 thenConceito = 'D';elseif Nota >= 40 thenConceito = ‘E';elseConceito = ‘F’;endendendendend
if Nota >= 90 then Conceito = 'A';else if Nota >= 80 then Conceito = 'B'; else if Nota >= 70 then Conceito = 'C'; else if Nota >= 60 then Conceito = 'D'; else if Nota >= 40 then Conceito = ‘E'; else Conceito = ‘F’; end end end endend
Mais legível
Menos legível
![Page 37: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/37.jpg)
Tabuada
Queremos obter a tabela: 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
UFMG DCC001 2011-2 37
![Page 38: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/38.jpg)
// Tabuada de multiplicaçãofor linha = 1:9 for coluna = 1:9 printf("%g",linha*coluna); endend
For AninhadosTabela de Multiplicação
Corpo do loop externo: imprime uma linha
Corpo do loop interno: imprime uma coluna de uma linha
38UFMG DCC001 2011-2
![Page 39: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/39.jpg)
Tabela de Multiplicação
Ao executar este programa verificamos entretanto que sua saída está ininteligível:
12345678924681012141618369121518212... Esquecemos de:
Mudar de linha, com o \n, e Dentro de cada linha, imprimir cada produto
em um número fixo de colunas
UFMG DCC001 2011-2 39
![Page 40: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/40.jpg)
Tabela de Multiplicação
UFMG DCC001 2011-2 40
// Tabuada de multiplicaçãofor linha = 1:9 for coluna = 1:9 printf("%3g",linha*coluna); end printf("\n");end
Fora do loop interno!
![Page 41: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/41.jpg)
Arquivos
UFMG DCC001 2011-2 41
![Page 42: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/42.jpg)
Arquivos - 1
Arquivos são uma unidade de armazenamento não volátil, tipicamente gravados em disco magnético
Sistemas operacionais como Linux ou Windows permitem que sejam criados e recuperados por um nome e pela posição em uma hierarquia de
diretórios
42UFMG DCC001 2011-2
![Page 43: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/43.jpg)
Arquivos - 2
Existem muitos tipos de arquivos que podem ser lidos, criados ou modificados pelo Scilab
Vamos aprender a trabalhar somente com arquivos texto, isto é, arquivos legíveis por humanos, que podem ser editados por exemplo usando o Bloco de Notas
UFMG DCC001 2011-2 43
![Page 44: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/44.jpg)
Comandos Básicos para Uso de Arquivos
uigetfile Permite ao usuário selecionar um arquivo navegando
nos diretórios do Windows (ou outro sistema operacional como o Linux);
mopen e mclose São necessários para iniciar e para terminar a
manipulação de arquivos mfscanf e mfprintf
São usados para ler e para gravar valores de variáveis em arquivos abertos
meof Permite testar se o fim de um arquivo já foi atingido
44UFMG DCC001 2011-2
![Page 45: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/45.jpg)
O Comando uigetfile – 1
NomeArq = uigetfile("*.*",pwd(),"Escolha um arquivo")
Janela obtida no Windows
Vista
45UFMG DCC001 2011-2
![Page 46: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/46.jpg)
O Comando uigetfile – 2
Após a escolha de um arquivo a variável arq recebe como valor um string com o nome completo do arquivo:
A variável arq pode depois ser usada para abrir o arquivo correspondente
O nome de arquivo escolhido pode ser novo ou já existir
arq =
C:\Users\Osvaldo\Documents\dcc\Ensino\Programação de Computadores\Scilab\MeuArquivo.txt
46UFMG DCC001 2011-2
![Page 47: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/47.jpg)
Abertura e Fechamento de Arquivos:mopen e mclose
Um arquivo fora de uso está totalmente armazenado em disco (tipicamente)
Um arquivo em uso tem parte de sua informação em disco, parte na memória principal
A abertura de um arquivo traz para a memória informações necessárias para o seu uso
O fechamento de um arquivo grava em disco todas as informações presentes na memória
47UFMG DCC001 2011-2
![Page 48: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/48.jpg)
mopen
da = mopen(NomeCompletoDoArquivo, “r”)
Variável contendo string, muitas
vezes obtido por uigetfile
Modo de uso do arquivo:
• “r” – leitura• “w” – escrita
da passa a conter um “descritor de arquivo”, a ser usado posteriormente para ler, escrever ou fechar o arquivo
48UFMG DCC001 2011-2
![Page 49: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/49.jpg)
mclose
mclose(da)
Descritor do arquivo em fechamento
49UFMG DCC001 2011-2
![Page 50: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/50.jpg)
mfscanf
[n,<lista de variáveis>] = mfscanf(da,formato)
Descritor do arquivo obtido
por mopen
String com códigos similares aos usados
em printf
Variável que recebe o número de variáveis
efetivamente lidas em uma linha do arquivo
50UFMG DCC001 2011-2
![Page 51: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/51.jpg)
mfscanf - Exemplo
UFMG DCC001 2011-2 51
f = uigetfile("*.txt",pwd(),“mfscanf_teste");df = mopen(f,"r");[n,a,b,c] = mfscanf(df,"%g %g %g");[m,d,e,f,g] = mfscanf(df,"%g %g %g %g");mclose(df);
Resultado: n==3, m==3 a==1, b==2,…,f==6 g==[] matriz vazia
![Page 52: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/52.jpg)
mfprintf
mfprintf(da,<frase>,<lista de variáveis>)
Descritor do arquivo obtido
por mopen
String com códigos similares aos usados
em printf
52UFMG DCC001 2011-2
![Page 53: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/53.jpg)
Múltiplas Equações de 2º Grau - 1
Modifique o programa que resolve equações de 2º grau fazendo com que ele possa calcular as raízes de um número não determinado de equações de segundo grau, cujos coeficientes estão em um arquivo de entrada
Este arquivo tem, para cada linha, os coeficientes a, b e c separados por um ou mais espaços.
53UFMG DCC001 2011-2
![Page 54: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/54.jpg)
Múltiplas Equações de 2° Grau - 2
Primeiras linhas do Arquivo de Entrada
UFMG DCC001 2011-2 54
![Page 55: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/55.jpg)
Múltiplas Equações de 2º Grau – 3
Seu programa deve produzir um arquivo de saída onde em cada linha devem estar gravados os coeficientes e as raízes reais da equação.
Quando as raízes forem complexas o programa deve ignorar a linha de entrada.
55UFMG DCC001 2011-2
![Page 56: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/56.jpg)
Programa Eq2g3.sce
UFMG DCC001 2011-2 56
// Calculo das raizes reais de eq. 2o grau// Leitura dos coeficientesa = input("Entre com o valor de a:");b = input("Entre com o valor de b:");c = input("Entre com o valor de c:");// Calculo e impressao das raizesdelta = b^2 - 4*a*c;if delta >= 0 then r1 = (-b+sqrt(delta))/(2*a); r2 = (-b-sqrt(delta))/(2*a); printf("r1 = %g, r2 = %g",r1,r2)else printf("Raizes complexas")end
![Page 57: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/57.jpg)
Multiplas Equações de 2º Grau – 1ª Versão
UFMG DCC001 2011-2 57
// Calculo de raízes de múltiplas // equações do 2o grau
// Localização dos arquivos de // entrada e de saída
// Abertura dos arquivos de // entrada e de saída
// Processamento do arquivo de entrada // e produção do arquivo de saída
// Fechamento dos arquivos de // entrada e de saída
![Page 58: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/58.jpg)
Uso de meof
É possível saber quantas linhas o arquivo de entrada possui, mas não é boa prática construir um programa que deve ser modificado quando o tamanho do arquivo muda
O melhor é usar a função meof em um loop while que termina quando o fim do arquivo é detetado:
58UFMG DCC001 2011-2
while ~meof(da) // leitura de dados em uma linha do arquivo // processamento dos dados da linha lidaend
![Page 59: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/59.jpg)
Localização dos arquivos de e/s
UFMG DCC001 2011-2 59
ArqE = uigetfile("*.txt",pwd(),“Entrada:");ArqS = uigetfile("*.txt",pwd(),“Saída");
Filtro para seleção de arquivos a serem
exibidos
pwd() indica que a janela deve exibir o
diretório corrente do Scilab
![Page 60: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/60.jpg)
Abertura dos arquivos
UFMG DCC001 2011-2 60
// Abertura dos arquivosdaE = mopen(ArqE,"r");daS = mopen(ArqS,"w");
![Page 61: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/61.jpg)
Processamento das Equações
UFMG DCC001 2011-2 61
while ~meof(daE) [n,a,b,c] = mfscanf(daE,"%g %g %g"); delta = b^2 - 4*a*c; if delta >= 0 then r1 = (-b + sqrt(delta))/(2*a); r2 = (-b - sqrt(delta))/(2*a); mfprintf(daS,"\n%8g %8g %8g %8g %8g",... a,b,c,r1,r2); endend
![Page 62: Módulo 6 Aula Expositiva 7 3.2.4 O Comando while 3.2.5 O Comando for 3.2.6 Valores Lógicos e Strings 3.2.7 Comandos Aninhados 3.3 Arquivos DCC 001 Programação.](https://reader035.fdocuments.net/reader035/viewer/2022070312/552fc171497959413d8ee2f3/html5/thumbnails/62.jpg)
Resumo
O comando while é outra forma de escrita de loops
Variáveis Scilab podem também conter valores lógicos e strings
Programas repetitivos têm melhor usabilidade
Arquivos permitem o processamento de grandes volumes de dados
UFMG DCC001 2011-2 62