Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouStella Gregorio Alterado mais de 9 anos atrás
1
DCC 001 Programação de Computadores 2° Semestre de 2011
Módulo 6 Aula Expositiva O Comando while O Comando for Valores Lógicos e Strings Comandos Aninhados 3.3 Arquivos DCC 001 Programação de Computadores 2° Semestre de 2011 Prof. Osvaldo Carvalho
2
O Comando while UFMG DCC
3
Cálculo do Fatorial 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) UFMG DCC
4
while <condição> <bloco while> end
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 while <condição> <bloco while> end UFMG DCC
5
Cálculo do Fatorial com while
n = input("n = "); k = 1; fat = 1; while k <= n fat = fat * k; k = k + 1; end printf("O fatorial de %d é %d",n,fat) UFMG DCC
6
Comando while: Loops infinitos
Quando este loop vai parar? Sem intervenção, nunca. Cuidado com o uso de while! x = 1 while x < 10 printf('x = %g',x) x = x - 1 end UFMG DCC
7
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 DCC
8
Algoritmo de Euclides Exemplo
252 105 147 42 63 21 UFMG DCC
9
O Programa Euclides.sce
m = input(“m = "); n = input(“n = "); a = m; b = n; while a <> b if a > b then a = a-b; else b = b-a; end printf("mdc(%d,%d) = %d",m,n,a) O “;” permite colocar dois comandos em uma mesma linha UFMG DCC
10
O Comando for UFMG DCC
11
Fatorial com while e com for
k = 1; fat = 1; while k <= n fat = fat * k; k = k + 1; end fat = 1; for k = 1:n fat = fat * k; end UFMG DCC
12
Forma Geral do Comando for
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 UFMG DCC
13
Comando for com passo diferente de 1
UFMG DCC
14
Comando for com passo negativo
UFMG DCC
15
Comando for com controle fracionário
A variável de controle pode assumir valores não inteiros for x = 0:0.3:0.7 printf(' \ nx = %g',x); end x = 0 x = 0.3 x = 0.6 Saída UFMG DCC
16
Imprimindo Tabelas UFMG DCC
17
Tabela de Senos Produzir uma tabela como esta, com x variando de 0 a 2π, com intervalos de 0.2 x seno(x) 0.0 0.0000 0.2 0.1987 0.4 0.3894 0.6 0.5646 0.8 0.8415 UFMG DCC
18
Tabela de Senos 1ª tentativa
// Tabela da função Seno for x = 0:0.2:2*%pi printf("%g %g",x, sin(x)) end --> UFMG DCC
19
Tabela de Senos 2ª Tentativa
// Tabela da função Seno for x = 0:0.2:2*%pi printf("\n %g %g",x, sin(x)) end UFMG DCC
20
Tabela de Senos 2ª Tentativa
0 0 UFMG DCC
21
Tabela de Senos // Tabela da função Seno // Impressão do cabeçalho
printf("\n x seno(x)") // Impressão das linhas da tabela for x = 0:0.2:2*%pi printf("\n%3.1f %7.4f",x, sin(x)) end UFMG DCC
22
Valores Lógicos e Strings
UFMG DCC
23
A função modulo calcula o resto da divisão de inteiros
Valores Lógicos Variáveis podem conter %T (true) ou %F (false) Expressões relacionais como a == b resultam em valores lógicos -->x = 5; y = 13; -->L = x > y L = F -->L = x < y T -->DivisivelPor4 = modulo(1968,4) == 0 DivisivelPor4 = A função modulo calcula o resto da divisão de inteiros UFMG DCC
24
Operador Notação Scilab
Operações Lógicas Operador Notação Scilab NOT ~ AND & OR | UFMG DCC
25
Exemplos de operações lógicas
-->a = %t; b = %f; -->~a ans = F -->a & b -->a | b T %t e %f são literais lógicos UFMG DCC
26
Aspas simples (') e duplas (") são equivalentes
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 UFMG DCC
27
Concatenação de Strings
Strings podem ser concatenados (justapostos) Para strings, + significa concatenação -->a = 'Programação'; -->b = ' de '; -->c = 'Computadores'; -->Disciplina = a + b + c Disciplina = Programação de Computadores UFMG DCC
28
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 DCC
29
Programa PassouNaoPassou.sce
// Leitura do nome do usuário Nome = input("Digite seu nome, por favor") // Leitura da pontuação Pontos = input(Nome + ", qual foi sua pontuação? ") // Impressão do resultado if 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 UFMG DCC
30
Padrão de Programa Repetitivo
continua = %T; while continua // Processamento de um item // Decisão decisao = ... input('Continua? (s/n)','string'); continua = decisao == 's' end printf('\nQue pena!') Elimina a necessidade de aspas para entrar com string UFMG DCC
31
Tratando diversas equações de 2º grau
// Cálculo das raízes de diversas equações // de 2o grau continua = %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"; printf("Obrigado, e volte sempre.") UFMG DCC
32
Comandos Aninhados UFMG DCC
33
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 DCC
34
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 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 UFMG DCC
35
Programa NotaConceito.sce
if Nota >= 90 then Conceito = 'A'; else if Nota >= 80 then Conceito = 'B'; if Nota >= 70 then Conceito = 'C'; if Nota >= 60 then Conceito = 'D'; if Nota >= 40 then Conceito = ‘E'; Conceito = ‘F’; end printf('\n%s, seu conceito com %g pontos foi %s!\n\n', ... NomeAluno, Nota, Conceito) UFMG DCC
36
Programa NotaConceito.sce: A Importância da Indentação
if Nota >= 90 then Conceito = 'A'; else if Nota >= 80 then Conceito = 'B'; if Nota >= 70 then Conceito = 'C'; if Nota >= 60 then Conceito = 'D'; if Nota >= 40 then Conceito = ‘E'; Conceito = ‘F’; end if Nota >= 90 then Conceito = 'A'; else if Nota >= 80 then Conceito = 'B'; if Nota >= 70 then Conceito = 'C'; if Nota >= 60 then Conceito = 'D'; if Nota >= 40 then Conceito = ‘E'; Conceito = ‘F’; end Mais legível Menos legível UFMG DCC
37
Tabuada Queremos obter a tabela: 1 2 3 4 5 6 7 8 9
UFMG DCC
38
For Aninhados Tabela de Multiplicação
// Tabuada de multiplicação for linha = 1:9 for coluna = 1:9 printf("%g",linha*coluna); end Corpo do loop externo: imprime uma linha Corpo do loop interno: imprime uma coluna de uma linha UFMG DCC
39
Tabela de Multiplicação
Ao executar este programa verificamos entretanto que sua saída está ininteligível: Esquecemos de: Mudar de linha, com o \n, e Dentro de cada linha, imprimir cada produto em um número fixo de colunas UFMG DCC
40
Tabela de Multiplicação
// Tabuada de multiplicação for linha = 1:9 for coluna = 1:9 printf("%3g",linha*coluna); end printf("\n"); Fora do loop interno! UFMG DCC
41
Arquivos UFMG DCC
42
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 UFMG DCC
43
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 DCC
44
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 UFMG DCC
45
Janela obtida no Windows Vista
O Comando uigetfile – 1 NomeArq = uigetfile("*.*",pwd(),"Escolha um arquivo") Janela obtida no Windows Vista UFMG DCC
46
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 UFMG DCC
47
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 UFMG DCC
48
Variável contendo string, muitas vezes obtido por uigetfile
mopen da passa a conter um “descritor de arquivo”, a ser usado posteriormente para ler, escrever ou fechar o arquivo da = mopen(NomeCompletoDoArquivo, “r”) Modo de uso do arquivo: “r” – leitura “w” – escrita Variável contendo string, muitas vezes obtido por uigetfile UFMG DCC
49
Descritor do arquivo em fechamento
mclose mclose(da) Descritor do arquivo em fechamento UFMG DCC
50
mfscanf Variável que recebe o número de variáveis efetivamente lidas em uma linha do arquivo String com códigos similares aos usados em printf [n,<lista de variáveis>] = mfscanf(da,formato) Descritor do arquivo obtido por mopen UFMG DCC
51
mfscanf - Exemplo Resultado: n==3, m==3 a==1, b==2,…,f==6 g==[]
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 UFMG DCC
52
mfprintf mfprintf(da,<frase>,<lista de variáveis>)
String com códigos similares aos usados em printf mfprintf(da,<frase>,<lista de variáveis>) Descritor do arquivo obtido por mopen UFMG DCC
53
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. UFMG DCC
54
Múltiplas Equações de 2° Grau - 2
Primeiras linhas do Arquivo de Entrada UFMG DCC
55
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. UFMG DCC
56
Programa Eq2g3.sce // Calculo das raizes reais de eq. 2o grau
// Leitura dos coeficientes a = 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 raizes delta = 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 UFMG DCC
57
Multiplas Equações de 2º Grau – 1ª Versão
// 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 // Processamento do arquivo de entrada // e produção do arquivo de saída // Fechamento dos arquivos de UFMG DCC
58
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: while ~meof(da) // leitura de dados em uma linha do arquivo // processamento dos dados da linha lida end UFMG DCC
59
Localização dos arquivos de e/s
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 UFMG DCC
60
// Abertura dos arquivos daE = mopen(ArqE,"r"); daS = mopen(ArqS,"w");
UFMG DCC
61
Processamento das Equações
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); end UFMG DCC
62
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 DCC
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.