A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

DCC 001 Programação de Computadores 2° Semestre de 2011

Apresentações semelhantes


Apresentação em tema: "DCC 001 Programação de Computadores 2° Semestre de 2011"— Transcrição da apresentação:

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


Carregar ppt "DCC 001 Programação de Computadores 2° Semestre de 2011"

Apresentações semelhantes


Anúncios Google