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

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Nilo Menezes – Lógica de Programação –
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
Escolhe a opção que julgues ser a correcta!
Operadores e Funções do LINGO
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Pesquisa Bibliográfica Disciplina de Metodologia da Pesquisa Profª Tereza Yoshiko Kakehashi 1.
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
INTRODUÇÃO AOS APLICATIVOS JAVA
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 4.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 3.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 4.
Software Básico Silvio Fernandes
Campus Curitiba Departamento Acadêmico de Matemática Angela Olandoski Barboza UTFPR – Damat.
Curso de ADMINISTRAÇÃO
Análise de regressão linear simples: abordagem matricial
EXPRESSÕES ARITMÉTICAS
Claudio Esperança Python: Comandos Básicos. Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são.
Estatística Básica Utilizando o Excel
Prof. Luis Otavio Alvares
Introdução à Lógica de Programação (cont.)
FUNÇÃO MODULAR.
Rodrigo de Toledo (original: Claudio Esperança)
Aula 4 Nomes, Vinculações, Tipos e Escopos
Introdução ao JavaScript
Apresentação da linguagem Python
Linguagem C Strings.
A Tabuada.
Estrutura de decisão e repetição em JAVA
Introdução a Programação JAVA
O Portal do Estudante de Computação
Aula 07 Comandos de Repetição while e for
Material Didático Unificado.
Aula 03 Revisão de Expressões Comando de Seleção
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
MECÂNICA - DINÂMICA Exercícios Cap. 13, 14 e 17. TC027 - Mecânica Geral III - Dinâmica © 2013 Curotto, C.L. - UFPR 2 Problema
Introdução a Computação e Cálculo Numérico
PROGRAMAÇÃO I UNIDADE 1.
MECÂNICA - ESTÁTICA Vetores Forças Cap. 2.
PROGRAMAÇÃO ESTRUTURADA II
BCC /01 Funções. Material Didático Unificado. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento de Ciência.
Funções Universidade Federal de Ouro Preto - UFOP
Aula 06 Comandos de Repetição for
Aula Teórica 03 Comandos Condicionais (Decisão) Semana 03
Introdução a Programação COM 100
Múltiplos de um número Sonia Regina de Souza Guedes.
Seminário 1: Revisão de C
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
Aula 6 - Estruturas de Controle
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
Olhe fixamente para a Bruxa Nariguda
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Máquina de Turing Universal
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
DCC 001 Programação de Computadores
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Programação de Computadores 2° Semestre de 2011
Programação e Aplicações Gráficas
Introdução ao MATLAB 5.3 para Hidrólogos
Algoritmos.
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Transcrição da apresentação:

DCC 001 Programação de Computadores 2° Semestre de 2011 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 de Computadores 2° Semestre de 2011 Prof. Osvaldo Carvalho

O Comando while UFMG DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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

Algoritmo de Euclides Exemplo 252 105 147 42 63 21 UFMG DCC001 2011-2

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 DCC001 2011-2

O Comando for UFMG DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

Comando for com passo diferente de 1 UFMG DCC001 2011-2

Comando for com passo negativo UFMG DCC001 2011-2

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 DCC001 2011-2

Imprimindo Tabelas UFMG DCC001 2011-2

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 DCC001 2011-2

Tabela de Senos 1ª tentativa // Tabela da função Seno for 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 UFMG DCC001 2011-2

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 DCC001 2011-2

Tabela de Senos 2ª Tentativa 0 0 0.2 0.198669 0.4 0.389418 0.6 0.564642 0.8 0.717356 1 0.841471 1.2 0.932039 UFMG DCC001 2011-2

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 DCC001 2011-2

Valores Lógicos e Strings UFMG DCC001 2011-2

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 DCC001 2011-2

Operador Notação Scilab Operações Lógicas Operador Notação Scilab NOT ~ AND & OR | UFMG DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

Comandos Aninhados UFMG DCC001 2011-2

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

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

Tabuada Queremos obter a tabela: 1 2 3 4 5 6 7 8 9 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

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 DCC001 2011-2

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

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 DCC001 2011-2

Arquivos UFMG DCC001 2011-2

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 DCC001 2011-2

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

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 DCC001 2011-2

Janela obtida no Windows Vista O Comando uigetfile – 1 NomeArq = uigetfile("*.*",pwd(),"Escolha um arquivo") Janela obtida no Windows Vista UFMG DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

Descritor do arquivo em fechamento mclose mclose(da) Descritor do arquivo em fechamento UFMG DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

Múltiplas Equações de 2° Grau - 2 Primeiras linhas do Arquivo de Entrada UFMG DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

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 DCC001 2011-2

// Abertura dos arquivos daE = mopen(ArqE,"r"); daS = mopen(ArqS,"w"); UFMG DCC001 2011-2

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 DCC001 2011-2

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