Me todos omputacionais em Fı sica Sandra Amato Instituto de Fı sica Universidade Federal do Rio de Janeiro Primeiro Semestre de 2011
Me todos omputacionais em Fı sica 1 da 2 A Linguagem
Programa que escolhe o maior - I #include <stdio.h> main(){ float a, b, c; float max; printf("entre com 3 numeros\n"); scanf ("%f %f %f", &a, &b, &c); max = -9999999; if (a > max) max = a; if (b > max) max = b; if (c > max) max = c; printf("o maior numero e : %f\n", max); }
Programa que escolhe o maior - II #include <stdio.h> main(){ float a; float max; int i; max = -9999999; for (i = 1; i<= 3; i = i +1){ printf("entre com o numero %d\n ",i); scanf ("%f", &a); if (a > max) max = a; } printf("o maior numero e : %f\n", max); }
Programa que escolhe o maior - III #include <stdio.h> main(){ float a; float max; int i; max = -9999999; i = 1; while (i<= 3){ printf("entre com o numero %d\n ",i); scanf ("%f", &a); if (a > max) max = a; i = i+1; } printf("o maior numero e : %f\n", max); }
Se rie de Taylor do cosseno cos(x) = PN ( 1)n x 2n (2n)! 1 2 1 4 2 x + 4! x n=0 cos(x) = 1 1 6 6! x + + n = 2, 4, 6,... ( 1)(n/2) n x n! +...
Algoritmo Para um valor de x fixo inicializa x inicializa sinal = 1 inicializa fat = 1 inicializa soma do cosseno = 1 Loop (i) em nu mero de termos comec ando em 2 ate o nu mero de termos, em passos de 2 calculo do n-e simo termo: troca o sinal: sinal = -sinal calcula o fatorial: fat = fat * i * (i-1) soma do cosseno = soma do cosseno + sinal * x i /fat fim do loop imprime soma do cosseno e a func a o cosseno
Algoritmo inicializa x enquanto x < xmax inicializa sinal = 1 inicializa fat = 1 inicializa soma do cosseno = 1 Loop (i) em nu mero de termos comec ando em 2 ate o nu mero de termos, em passos de 2 calculo do n-e simo termo: troca o sinal: sinal = -sinal calcula o fatorial: fat = fat * i * (i-1) soma do cosseno = soma do cosseno + sinal * x i /fat fim do loop imprime soma do cosseno e a func a o cosseno atualiza x fim do while
Se rie de Taylor do cosseno Serie de Taylor - cos(x) 2 cos(x) Taylor, 1 term Taylor, 2 terms Taylor, 3 terms 1 cos(x) 0-1 -2 0 45 90 135 x(graus) 180 225 270
Ü O ro tulo e um identificador seguido de dois pontos. Pode ser colocado em qualquer parte do programa.
Ü O ro tulo e um identificador seguido de dois pontos. Pode ser colocado em qualquer parte do programa. Ü Ao encontrar o goto a execuc a o do programa passa para o primeiro comando apo s o ro tulo....... label:...
Ü O ro tulo e um identificador seguido de dois pontos. Pode ser colocado em qualquer parte do programa. Ü Ao encontrar o goto a execuc a o do programa passa para o primeiro comando apo s o ro tulo. Ü E um recurso muito flexı vel mas torna o programa muito confuso. Use-o com moderac a o!... goto label;... label:...
- um exemplo Veja o programa loops.c main(){ int i, j; int imax = 3, jmax = 2; int n = 0, nmax = 4; for( i=0; i<imax; i = i+1) { for( j=0; j<jmax; j = j+1) { n = n + 1; printf( %d\t%d\t%d \n, i,j,n); if( n >= nmax ) goto fim; } } fim: printf( %d\t%d\t%d \n, i,j,n); }
- um exemplo Veja o programa loops.c main(){ int i, j; int imax = 3, jmax = 2; int n = 0, nmax = 4; for( i=0; i<imax; i = i+1) { for( j=0; j<jmax; j = j+1) { n = n + 1; printf( %d\t%d\t%d \n, i,j,n); if( n >= nmax ) break; } } fim: printf( %d\t%d\t%d \n, i,j,n); }
- um exemplo Veja o programa loops.c main(){ int i, j; int imax = 3, jmax = 2; int n = 0, nmax = 4; for( i=0; i<imax; i = i+1) { for( j=0; j<jmax; j = j+1) { n = n + 1; printf( %d\t%d\t%d \n, i,j,n); if( n >= nmax ) continue; } } fim: printf( %d\t%d\t%d \n, i,j,n); }
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o 8 i = i + 1 Ü i++ (soma apo s o uso) ou ++i (antes do uso)
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o 8 i = i + 1 Ü i++ (soma apo s o uso) ou ++i (antes do uso) 8 i = i - 1 Ü i- - (subtrai apo s o uso) ou - -i (antes do uso)
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o 8 i = i + 1 Ü i++ (soma apo s o uso) ou ++i (antes do uso) 8 i = i - 1 Ü i- - (subtrai apo s o uso) ou - -i (antes do uso) 8 soma = soma + n Ü soma + = n
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o 8 i = i + 1 Ü i++ (soma apo s o uso) ou ++i (antes do uso) 8 i = i - 1 Ü i- - (subtrai apo s o uso) ou - -i (antes do uso) 8 soma = soma + n Ü soma + = n Vale para os operadores aritme ticos: +, -, *, / e %. A forma geral e : t = t operador expressa o a = a * 2; a = a - b; Ü Ü Ü t operador = expressa o a * = 2; a - = b;
A Func a o - printf Ü Sintaxe printf( expressa o de controle, argumentos):
A Func a o - printf Ü Sintaxe printf( expressa o de controle, argumentos): Ü Expressa o de controle: texto ou co digos de formatac a o: o digos de formatac a o \n \t \b \ \\ \f \v nova linha tabulac a o retrocesso aspas barra muda de linha muda de linha %c %d %o %x %f %e %g caracter simples inteiro (decimal) inteiro (octal) inteiro (hexadecimal) real (ponto flutuante) real (notac a o cientı fica) real
A Func a o - printf Ü Sintaxe printf( expressa o de controle, argumentos): Ü Os argumentos sa o constantes ou varia veis separadas por vı rgula: 6 Escreva programas usando os comandos abaixo: printf( x vale %d \n, x); printf( O valor e %f \n, 10.82); printf( O comando \\n \n e o comando \\f \f sao distintos\n );
A Func a o - printf Ü Sintaxe printf( expressa o de controle, argumentos): Ü e possı vel controlar o nu mero de casas decimais impressas: %md sa o usadas m casas para escrever o nu mero. %m.nf sa o usadas m casas para escrever o nu mero, das quais n a direita do ponto. printf( x = %4d e y = %5.2f\n, x, y); x = 1234 e y = 12.45
Escrevendo em Arquivos Ü Ja vimos como redirecionar a stdout./programa > arquivo.saida
Escrevendo em Arquivos Ü e possı vel definir o arquivo dentro do programa
Escrevendo em Arquivos Ü e possı vel definir o arquivo dentro do programa 8 Declarar um ponteiro para o arquivo: FILE *arquivo = NULL;
Escrevendo em Arquivos Ü e possı vel definir o arquivo dentro do programa 8 Declarar um ponteiro para o arquivo: FILE *arquivo = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) arquivo = fopen( resultados.dat, w );
Escrevendo em Arquivos Ü e possı vel definir o arquivo dentro do programa 8 Declarar um ponteiro para o arquivo: FILE *arquivo = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) arquivo = fopen( resultados.dat, w ); 8 Escrever usando o comando fprintf(arquivo, expressa o de controle,argumentos);
Escrevendo em Arquivos Ü e possı vel definir o arquivo dentro do programa 8 Declarar um ponteiro para o arquivo: FILE *arquivo = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) arquivo = fopen( resultados.dat, w ); 8 Escrever usando o comando fprintf(arquivo, expressa o de controle,argumentos); fprintf(arquivo, O resultado e %6.2f \n, ValorFinal);
Escrevendo em Arquivos Ü e possı vel definir o arquivo dentro do programa 8 Declarar um ponteiro para o arquivo: FILE *arquivo = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) arquivo = fopen( resultados.dat, w ); 8 Escrever usando o comando fprintf(arquivo, expressa o de controle,argumentos); fprintf(arquivo, O resultado e %6.2f \n, ValorFinal); 8 Fechar o arquivo com o comando fclose fclose(arquivo);
As Func o es - scanf e fscanf Ü Sintaxe scanf( expressa o de controle, enderec os dos argumentos): scanf("%f ", &x);
As Func o es - scanf e fscanf Ü Sintaxe scanf( expressa o de controle, enderec os dos argumentos): scanf("%f ", &x); Ü O redirecionamento de stdin pode ser feito com./programa < leitura.dat Ü e possı vel abrir o arquivo com fopen
As Func o es - scanf e fscanf Ü Sintaxe scanf( expressa o de controle, enderec os dos argumentos): scanf("%f ", &x); Ü Apo s abrir um arquivo para leitura, arquivo = fopen( leitura.dat, r );
As Func o es - scanf e fscanf Ü Sintaxe scanf( expressa o de controle, enderec os dos argumentos): scanf("%f ", &x); Ü Apo s abrir um arquivo para leitura, arquivo = fopen( leitura.dat, r ); Ü e testar se ele existe. if(arquivo!= NULL ){... }
As Func o es - scanf e fscanf Ü Sintaxe scanf( expressa o de controle, enderec os dos argumentos): scanf("%f ", &x); Ü Apo s abrir um arquivo para leitura, arquivo = fopen( leitura.dat, r ); Ü e testar se ele existe. if(arquivo!= NULL ){... } Ü Ele pode ser lido com a func a o fscanf(arquivo, expressa o de controle,enderec os dos argumentos);
As Func o es - scanf e fscanf Ü Sintaxe scanf( expressa o de controle, enderec os dos argumentos): scanf("%f ", &x); Ü Apo s abrir um arquivo para leitura, arquivo = fopen( leitura.dat, r ); Ü e testar se ele existe. if(arquivo!= NULL ){... } Ü Ele pode ser lido com a func a o fscanf(arquivo, expressa o de controle,enderec os dos argumentos); fscanf(arquivo, %d%f, &num, &valor);
Exemplo Veja o arquivo sandraamato/metomp/2011 1/Aula4/maior com arquivo.c
Algumas Observac o es sobre Func o es Ü Uso do valor de retorno de uma func a o int main( ){... return 0; } Ü Veja o arquivo maior com arquivo e return.c em sandraamato/metomp/2011 1/Aula4
Algumas Observac o es sobre Func o es Ü fopen arquivo = fopen( leitura.dat, r ); if(arquivo!= NULL ){... }
Algumas Observac o es sobre Func o es Ü fopen arquivo = fopen( leitura.dat, r ); if(arquivo!= NULL ){... } O valor NULL e atribuı do a func a o fopen quando o arquivo leitura.dat na o pode ser aberto
Algumas Observac o es sobre Func o es Ü fopen arquivo = fopen( leitura.dat, r ); if(arquivo!= NULL ){... } O valor NULL e atribuı do a func a o fopen quando o arquivo leitura.dat na o pode ser aberto Ü fscanf while (fscanf(arquivo, %f,&valores)!= EOF) {... }
Algumas Observac o es sobre Func o es Ü fopen arquivo = fopen( leitura.dat, r ); if(arquivo!= NULL ){... } O valor NULL e atribuı do a func a o fopen quando o arquivo leitura.dat na o pode ser aberto Ü fscanf while (fscanf(arquivo, %f,&valores)!= EOF) {... } O valor EOF e atribuı do a func a o fscanf quando o arquivo arquivo na o puder ser lido
onta nu mero de linhas de um arquivo u ltimo valor negativo #include <stdio.h> int main() { FILE *fp = NULL; int i, N=0; float valores; fp = fopen("amostra2.dat","r"); if (fp == NULL) return 1; fscanf (fp,"%f",&valores); while (valores >=0) { N++; fscanf (fp,"%f",&valores); } printf("numero de linhas = %d\n",n); return 0; }
onta nu mero de linhas de um arquivo qualquer #include <stdio.h> int main() { FILE *fp = NULL; int N=0; float valores; int i; fp = fopen("amostra2.dat","r"); if (fp == NULL) return 1; while (fscanf (fp,"%f",&valores)!= EOF) { N++; } printf("numero de linhas = %d\n",n); return 0; }
8 Escreva um algoritmo para calcular a me dia, µ, e o desvio padra o, σ, de uma turma, onde σ2 = N N 1 1 1 X 2 N 1 X (xi µ)2 = xi µ2 N 1 N 1 N 1 8 Escreva um algoritmo para contar quantos alunos de uma turma tiveram notas em um determinado intervalo.
Escreva um programa que implemente os algoritmos dos exercı cios anteriores. Rode o programa usando como entrada o arquivo sandraamato/metomp/2011 1/Aula4/notas.dat e determine: Ü Quantos alunos passaram direto: nota 7. Ü Quantos alunos esta o reprovados: nota < 3. Ü Quantos alunos tem nota maior que a me dia da turma. Ü Quantos alunos tem nota em um intervalo de um desvio padra o em torno da me dia da turma.
Ü Escreva um algoritmo que calcule o tempo gasto por um corpo de massa m para descer um plano inclinado que faz um a ngulo θ com a horizontal quando largado de uma altura h. Os coeficientes de atrito esta tico e cine tico sa o, respectivamente, µe e µc.
Ü Implemente o algoritmo do exercı cio anterior escrevendo um programa em. Os valores de m, µe, µc, h e θ devem ser fornecidos pelo teclado, nessa ordem. Ü Altere o programa do exercı cio anterior para que os valores de m, µe, µc e h sejam lidos de um nessa ordem. θ deve variar de 0o a 90o em passos de 10o. A saı da do programa deve ser uma tabela do tipo: Angulo(graus)...... tempo(s)......