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

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

Miguel Maurício Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.1 Octave Programação.

Apresentações semelhantes


Apresentação em tema: "Miguel Maurício Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.1 Octave Programação."— Transcrição da apresentação:

1 Miguel Maurício mlm@di.fct.unl.pt Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.1 Octave Programação

2 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.2 Instrução disp disp(x) permite fazer o display do valor de x. Exemplo1Exemplo2 octave:1> y=0 y = 0 octave:2> x=3; octave:3> z=1:3 z = 1 2 3 octave:4> disp(x) 3 octave:5>disp("O valor de y:"), disp(y) O valor de y: 0 octave:6> disp(z) 1 2 3

3 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.3 Instrução input (1) O Octave tem algumas funções disponíveis para interagir com o utilizador, sendo uma delas o input. A instrução input(prompt) emite para o terminal a prompt e fica à espera que o utilizador introduza um valor.

4 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.4 Instrução input (2) octave:1> x=input("Qual o valor de x? "); Qual o valor de x? 10 octave:2> y = x^2; octave:3> disp("quadrado de x :"), disp(y) quadrado de x : 100

5 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.5 Conceitos básicos Mecanismos Sequencial Forma de expressar através de uma linguagem que acção 1 deve ser executada antes da acção 2. Condicional Forma de expressar uma situação onde se pretende que caso seja verificada uma condição seja executada a acção 1 e caso contrário seja executada a acção 2. Repetição Forma de expressar uma situação onde existe a necessidade de executar um bloco de acções um certo número de vezes ou até que seja verificada uma condição.

6 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.6 Condições É uma expressão booleana que retorna true (1) ou false (0). x < y verdade se x menor que y x <= y verdade se x menor ou igual a y x == y verdade se x igual a y x >= y verdade se x maior ou igual a y x > y verdade se x maior que y x != y x ~= y x <> y verdade se x diferente de y

7 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.7 Comparação octave:1> x=2 x = 2 octave:2> x > 4 ans = 0 comparação de dois valores numéricos octave:3> [1, 2; 3,4] == [1, 2; 2, 4] ans = 1 0 1 comparação de matrizes é efectuada elemento a elemento octave:10> [1, 2; 2,4] == 2 ans = 0 1 1 0 neste caso o valor escalar é comparado com cada um dos elementos da matriz octave:7> sum(x,y)!=5 ans = 0 comparação em que um dos valores é retornado por uma função

8 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.8 Funções Argumentos (1) ExemploDescrição function area_circ(raio) pi*raio^2 endfunction Esta função calcula a área de um círculo, tem um parâmetro de entrada (raio) e retorna um valor. Exemplo de utilização (chamada): octave:10> a = area_circ(5) a = 78.540

9 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.9 Exercicio Proposto Pretende-se implementar uma função que calcule as raizes de um polinomio do tipo ax^2 + bx + c = 0 A função terá o seguinte esquema: function polinomio Aceitação dos valores de a,b e c inseridos pelo utilizador Calculo das raizes (xpos,xneg) Mostrar os resultados endfunction

10 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.10 Operadores booleanos booleano1 || booleano2 operador ou (or) o resultado é verdade se pelo menos uma das expressões for verdade (true) booleano1 && booleano2 operador e (and) o resultado é verdade se e só se todas as expressões forem verdade ! booleano1 ~ booleano1 operador negação (not) o resultado é verdade se a expressão for falsa (false)

11 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.11 Instrução if SintaxeExemploDescrição if (condição) bloco1 else bloco2 endif if ( x > y) maior =x else maior =y endif se a condição for verdadeira o bloco1 é executado, senão é o bloco2

12 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.12 Instrução while SintaxeExemploDescrição while (condição) bloco1 endwhile while ( x > y) y = y+1 endwhile enquanto a condição for verdadeira o bloco de instruções vai ser executado, até que a condição se torne falsa.

13 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.13 Instrução for SintaxeExemploDescrição for var = expr bloco endfor for i=1:10 y = y+1 endfor O bloco de instruções ( y=y+1 ) vai ser executado 10 vezes (inicio do ciclo em 1 e fim em 10). o valor da variável i vai sendo incrementado (do valor do passo, que neste caso é 1) automaticamente em cada passagem.

14 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.14 Instrução break ExemploDescrição for i=1:10 y = y + I if ( y == 6 ) break endif endfor x = y Neste exemplo, temos um ciclo que irá ser executado 10 vezes, se a condição y==6 não ocorrer. Se durante a execução do ciclo essa condição se verificar a instrução break será executada e o ciclo de for quebrado, passando a execução directamente para a instrução seguinte ao ciclo ( x=y ).

15 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.15 Funções A organização do código de modo a torná-lo mais versátil e estruturado deve ser um dos objectivos a ter em mente aquando da elaboração de um programa. ExemploDescrição function msg_entrada disp("Hoje está um lindo dia\n"); Endfunction A partir do momento da sua declaração é possível utilizar a função, para tal basta executar o seu nome ( msg_entrada ) na linha de comando.

16 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.16 Funções Argumentos (1) ExemploDescrição function ret_val = area_circ(raio) ret_val = pi*raio^2; endfunction Esta função calcula a área de um círculo, tem um parâmetro de entrada (raio) e retorna um valor. Exemplo de utilização (chamada): octave:10> a = area_circ(5) a = 78.540

17 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.17 Funções Argumentos (2) ErradoCorrecto function retval = avg(v) if (is_vector(v)) retval = sum(v)/length(v); endif endfunction function retval = avg(v) retval = 0 if (is_vector(v)) retval = sum(v)/length(v); else printf("erro, o argumento deve ser um vector\n") endif endfunction

18 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.18 Ficheiros de funções (1) É possível guardar as funções feitas em ficheiros. Deste modo é possível reutilizar as mesmas sempre que necessário. Para o Octave detectar estes ficheiros de funções, estes devem conter como primeira linha a definição da função. As linhas de comentário são iniciadas por # ou % (linha a linha). O Octave ao detectar um destes símbolos no início de uma linha ignora-a. Os ficheiros terão que ter o mesmo nome que a função, isto é, por ex. uma função chamada area_circ o ficheiro deve chamar-se area_circ.m É boa política ter um ficheiro por função.

19 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.19 Ficheiros de funções (2) # função que calcula a area de uma circunferencia # dado o valor do seu raio. function ret_val = area_circ(raio) ret_val = pi*raio^2 endfunction ficheiro area_circ.m

20 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.20 Linha de comandos cd, (change directory) muda de directoria Ex: cd trabalho (a directoria corrente passa a ser a trabalho ) cd /cygdrive/a (a directoria corrente passa a ser a disquete) pwd, (print current/working directory) mostra qual a directoria corrente ls, (list directory contents) lista o conteúdo da directoria corrente

21 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.21 Ficheiro mdc.m function d = mdc(m,n); # M e N têm de ser positivos e M >N if m == n d = m; else if m-n >= n d = mdc(m-n,n); else d = mdc(n,m-n); endif; endfunction;

22 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.22 Função string_replace Pretende-se implementar uma função que recebe 3 strings (a,b,c), e que substitui todas as ocorrencias de b por c em a. O resultado deve ser apresentado sempre em letras maiusculas! >> string_replace("hoje esta um lindo dia","esta","nao esta") Pretende trocar na string : hoje esta um lindo dia Todas as ocorrencias de : esta Por : nao esta Depois da troca efectuada obtemos : HOJE NAO ESTA UM LINDO DIA

23 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.23 Trocas em vectores >> x x = 0 0 1 0 0 >> troca_vector(x) O Vector inicial é : 0 0 1 0 0 O vector resultante é : 1 1 0 1 1 A função pretendida aplicada a um vector, troca o valor 0 por 1 e vice-versa! >> a a = Vector de zeros e uns >> troca_vector(a) O argumento não é um vector! Caso o argumento não seja um vector…

24 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.24 troca_vector.m function troca_vector(x) if ~(is_vector(x)) disp("O argumento não é um vector!"); else disp("O Vector inicial é :\n"),disp(x); for i=1:length(x) if (x(1,i) == 1) x(1,i)= 0; else x(1,i)= 1; endif endfor disp("\nO vector resultante é :\n"),disp(x); endif endfunction

25 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.25 Exercicio Proposto 1 - Pretende-se implementar uma função troca que aplicada a uma matriz (de 0s e 1s) a percorra e troque os valores pelo seu inverso (01), apresentando inicialmente a matriz inicial e em seguida a matriz transformada. 2 – A partir da função troca crie uma função troca_2, de modo a que seja possivel atribuir a uma variável o resultado da função (função argumento). exemplo : >> d = troca_2(x)

26 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.26 Exemplo da função troca(x) >> b b = 0 0 1 1 0 1 1 0 1 0 0 0 1 0 0 1 >> troca(b) A matriz inicial é : 0 0 1 1 0 1 1 0 1 0 0 0 1 0 0 1 A matriz transformada é : 1 1 0 0 1 0 0 1 0 1 1 1 0 1 1 0

27 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.27 Ficheiros de entrada/saída Muitas vezes existe a necessidade de ler dados do exterior ou armazenar. Nestes casos podemos usar ficheiros para armazenar a informação. Para manipular ficheiros a primeira acção a fazer é proceder a sua abertura ( fopen ). Depois de concluídas as operações de leitura e escrita nos ficheiros, estes têm que ser fechados ( fclose ).

28 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.28 Instrução fopen (1) fid = fopen(nome_fich,modo ) Modo r - abre ficheiro existente para leitura. w - abre ficheiro para escrita, o anterior conteúdo do ficheiro é eliminado. a - abre ficheiro para escrita no final do ficheiro (append). r+ - abre existente para leitura e escrita. w+ - abre ficheiro para leitura e escrita, o anterior conteúdo do ficheiro é eliminado. a+ - abre ou cria ficheiro para leitura e escrita no final do ficheiro.

29 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.29 Instrução fopen (2) fid = { id = name = mode = arch = status = } id é um valor inteiro que apartir do momento da abertura, vai identificar o ficheiro; name é o nome do ficheiro, deve ser igual ao parametro nome_fich; mode é o modo como o ficheiro foi aberto; arch é o tipo de interpretação pela arquitectura; status indica o estado em que se encontra o ficheiro; No caso problemas na abertura, fid toma o valor -1.

30 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.30 Instrução fclose fclose(fid) Fecha o ficheiro com o identificador fid.

31 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.31 fopen / fclose exemplos (1) Exemplo Descrição octave:4> f1=fopen("dados.txt","r") f1 = { id = 3 name = dados.txt mode = r arch = native status = open } Abertura do ficheiro já existente para leitura, com o nome "dados.txt", que se encontra na directoria corrente. octave:10> f2=fopen("tmp/dados2.txt","r") f2 = { id = 4 name = tmp/dados2.txt mode = r arch = native status = open } Abertura de um ficheiro já existente para leitura, com o nome "dados2.txt", que se encontra na subdirectoria tmp da directoria corrente.

32 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.32 fopen / fclose exemplos (2) ExemploDescrição octave:7> f3=fopen("teste.txt","r") f3 = -1 Tentativa de abertura de um ficheiro para leitura, mas em que ocorreu um problema (por exemplo ficheiro não existe). octave:8> f4=fopen("teste.txt","w") f4 = { id = 5 name = teste.txt mode = w arch = native status = open } Abertura do ficheiro "teste.txt" para escrita. Neste caso o ficheiro ainda não existia, mas como foi aberto para escrita ele vai ser automaticamente criado na directoria corrente.

33 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.33 Leitura e escrita simples em ficheiros (1) Escrita fputs(fid, string) puts(string) Leitura fgets(fid,len) fgetl(fid,len)

34 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.34 Leitura e escrita simples em ficheiros (2) ExemploDescrição octave:1> fid=fopen("teste.txt","w"); octave:2> str="Para teste a escrita em ficheiros\n"; octave:3> fputs(fid,str) ans = 0 octave:4> fputs(fid,"segunda linha") ans = 0 octave:5> fputs(fid,"\n") ans = 0 octave:6> fputs(fid,"outra linha") ans = 0 octave:7> fclose(fid) ans = 0 Este exemplo abre ficheiro para escrita (se não ainda não existia cria-o) e escreve em "teste.txt", após o que fecha o ficheiro. O caracter ' \n ' sinaliza o fim de linha. Analise o resultado desta acção, abrindo o ficheiro "teste.txt" com um editor de texto (por exemplo o Notepad) e observe o conteudo do ficheiro.

35 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.35 Leitura e escrita simples em ficheiros (3) ExemploDescrição octave:14> fid=fopen("teste.txt","r"); octave:15> str1=fgetl(fid,100); octave:16> str2=fgets(fid,100); octave:17> str3=fgets(fid,4); octave:18> fclose(fid); octave:19> str1 str1 = Para teste a escrita em ficheiros octave:20> str2 str2 = segunda linha octave:21> str3 str3 = outr Exemplo de leitura de ficheiros de texto utilizando as funções fgetl e fgets.

36 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.36 Exercicio proposto Programe uma função read_write que receba o nome de dois ficheiros de texto. A função deve abrir o ficheiro 1 e criar uma copia deste.

37 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.37 read_write ExemploDescrição octave:14> r ead_write("teste.txt","s1.txt") Foi criado um ficheiro de nome s1.txt que contêm que é uma copia exacta de teste.txt.

38 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.38 read_write.m function read_write(f1,f2) fr = fopen(f1,"r"); fw = fopen(f2,"w"); while !feof(fr) x = fgets(fr,100); fputs(fw,x); endwhile fclose(fr); fclose(fw); endfunction

39 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.39 Leitura e escrita formatada em ficheiros (1) Escrita printf(template,...) fprintf(fid,template,...) Leitura (pensada em termos de matrizes) [val,count] = fscanf(fid,template,size)

40 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.40 Leitura e escrita formatada em ficheiros (2) Templates %d – inteiro com sinal. %f – real com sinal. %s – string. %c – caracter.

41 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.41 Leitura e escrita formatada em ficheiros (3) octave:1> nome="Antonio Silva"; octave:2> num=12753; octave:3> nota=15.5; octave:4> printf("Aluno %s num: %d nota %f \n",nome,num,nota); Aluno Antonio Silva num: 12753 nota 15.500000 octave:5> m=[1,2,3;4,5,6;7,8,9]; octave:6> printf("%d ",m); 1 4 7 2 5 8 3 6 9

42 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.42 Leitura e escrita formatada em ficheiros (4) octave:7> fid=fopen("teste.dat","w"); octave:8> fprintf(fid,"%d ",m); octave:9> fprintf(fid,"%d ",m*2); octave:10> fclose(fid) ans = 0 octave:11> fid2=fopen("teste.dat","r"); octave:12> x1=fscanf(fid2,"%d ",[3,3]) x1 = 1 2 3 4 5 6 7 8 9 octave:13> [x2,dim]=fscanf(fid2,"%d ",[3,3]) x2 = 2 4 6 8 10 12 14 16 18 dim = 9 octave:14> fclose(fid2); Escrita de duas matrizes de valores num ficheiro e respectiva leitura. O terceiro argumento da função indica a dimensão da matriz. Como pode observar, no segundo exemplo de leitura, a função também retorna o número de elementos lidos.

43 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.43 Leitura e escrita formatada em ficheiros (5) octave:15> fid=fopen("teste.txt","r"); octave:16> x3=fscanf(fid,"%d ",10) x3 = 1 4 7 2 5 8 3 6 9 2 octave:17> x4=fscanf(fid,"%d ",10) x4 = 8 14 4 10 16 6 12 18 octave:18> x5=fscanf(fid,"%d ",10) x5 = [](1x0) octave:19> fclose(fid); Outro exemplo de leitura do mesmo ficheiro " teste.dat ", mas agora lendo os valores para uma variável vector. Agora o terceiro argumento indica o numero de elementos a ler. Ao chegar ao fim do ficheiro (não tendo mais elementos para ler) afecta a variável com o vector vazio []. Se não colocar nenhum valor terceiro parametro da função, esta vai ler para um vector todos os elementos do ficheiro.

44 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.44 Leitura e escrita formatada em ficheiros (6) octave:21> m2=log(m) m2 = 0.00000 0.69315 1.09861 1.38629 1.60944 1.79176 1.94591 2.07944 2.19722 octave:22> printf("%.5f %.4f %.6f \n",m2); 0.00000 1.3863 1.945910 0.69315 1.6094 2.079442 1.09861 1.7918 2.197225 octave:23>printf("%f %d %.2f \n",[1,2;3,4]); 1.000000 2 3.00 4.000000 Escreve no écran os valores formatados como reais. O printf efectua um ciclo sobre o template de formatação, o que pode levar a alguma confusão (linha 23) (O valor antes de f indica o número de casas decimais).

45 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.45 Função pauta_ponderada Pretende-se implementar uma função que receba dois ficheiros de texto, em alunos.txt podemos encontrar os nomes dos alunos e em notas.txt as notas dos mesmos (0 a 20), a função deverá produzir um ficheiro de texto com o nome do aluno e a nota no teste (0 a 5). >>pauta_ponderada("alunos.txt","notas.txt","pauta.txt")

46 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.46 pauta_ponderada.m function pauta_ponderada(f1,f2,f3) fnome = fopen(f1,"r"); fnota = fopen(f2,"r"); fpauta = fopen(f3,"w"); while !feof(fnome) nome=fgetl(fnome); nota=fscanf(fnota,"%f","C"); fprintf(fpauta,"%s %3.1f \n", nome, nota*5/20); endwhile fclose(fnome); fclose(fnota); fclose(fpauta); endfunction

47 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.47 Exercicios propostos (1) Crie uma função pauta_vec que analoga á função anterior que receba um ficheiro com nomes de alunos e um vector de notas e produza uma pauta de forma nome de aluno - nota (0 a 20 ) - nota de (0 a 5). >> v v = 1.0e+01 * 1.20000 1.24000 1.71000 1.10000 0.97000 >> pauta_vec("alunos.txt","pauta_vec.txt",v);

48 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.48 pauta_vec.m function pauta_vec(f1,f2,vec) fnome = fopen(f1,"r"); fpauta = fopen(f2,"w"); i=0; while !feof(fnome) i++; nome=fgetl(fnome); nota=vec(i); fprintf(fpauta,"%s - %3.1f - %3.1f \n", nome,nota, nota*5/20); endwhile fclose(fnome); fclose(fpauta); endfunction

49 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.49 Exercicios propostos (2) Crie uma funcão que receba um ficheiro com notas e calcule a media dos valores encontrados no ficheiro. >> media_ficheiro("notas.txt") A média das notas apresentadas nos ficheiro é de 11.08 valores!

50 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.50 media_ficheiro.m function media_ficheiro(f1) fnotas = fopen(f1,"r"); i=0; nota=0; while !feof(fnotas) i++; nota_lida=fscanf(fnotas,"%f","C"); nota=nota+nota_lida; endwhile fclose(fnotas); printf("A média das notas apresentadas nos ficheiro é de %4.2f valores! \n",nota/i); endfunction

51 Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.51 rem_sp.m function x = rem_sp(f_in_name, f_out_name); [f_in, msg] = fopen(f_in_name, "r"); [f_aux,msg] = fopen(f_out_name, "w"); [ch, count] = fscanf(f_in,"%1c","C"); while !feof(f_in) if ch == " " ch = setstr(160); endif; fprintf(f_aux, "%1c", ch); [ch, count] = fscanf(f_in,"%1c","C"); endwhile; fclose(f_in); fclose(f_aux); endfunction;


Carregar ppt "Miguel Maurício Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Programação 5.1 Octave Programação."

Apresentações semelhantes


Anúncios Google