Me todos omputacionais em Fı sica Lendo de Sandra Amato Instituto de Fı sica Universidade Federal do Rio de Janeiro Segundo Semestre de 2017
Lendo de int, long int: Inteiros: ontadores, indices,... float, double: Reais: A ngulos, raio, posic a o, nota das avaliac o es,...
int, long int: Inteiros: ontadores, indices,... float, double: Reais: A ngulos, raio, posic a o, nota das avaliac o es,... Lendo de O problema e que determina a escolha mais adequada!
int, long int: Inteiros: ontadores, indices,... float, double: Reais: A ngulos, raio, posic a o, nota das avaliac o es,... O problema e que determina a escolha mais adequada! Lendo de int Suficiente para a maioria das aplicac o es
int, long int: Inteiros: ontadores, indices,... float, double: Reais: A ngulos, raio, posic a o, nota das avaliac o es,... O problema e que determina a escolha mais adequada! Lendo de int Suficiente para a maioria das aplicac o es double Mais adequado para as aplicac o es nume ricas
int, long int: Inteiros: ontadores, indices,... float, double: Reais: A ngulos, raio, posic a o, nota das avaliac o es,... O problema e que determina a escolha mais adequada! Lendo de int Suficiente para a maioria das aplicac o es double Mais adequado para as aplicac o es nume ricas Reveja o programa limits.c O valor ma ximo para uma varia vel int e 2147483647
int, long int: Inteiros: ontadores, indices,... float, double: Reais: A ngulos, raio, posic a o, nota das avaliac o es,... O problema e que determina a escolha mais adequada! Lendo de int Suficiente para a maioria das aplicac o es double Mais adequado para as aplicac o es nume ricas Reveja o programa limits.c O valor ma ximo para uma varia vel int e 2147483647 uidado com o scanf
omparando reais: Da Aula 3: uidado com a igualdade entre reais: if(a==b)... 1.99999999999999... e igual a 2.0000000000000...? Melhor escolher uma tolera ncia aceita vel, ex., 1e-10, e pedir: if(fabs(a-b) < 1e-10)... Lendo de Rode o programa zero.c (disponı vel na pa gina do curso): int main(){ double a=1., b=-1.4, c=.49, delta; /* (x-0.7)ˆ2=0 */ delta = b*b-4*a*c; if(delta==0) printf("delta e igual a zero\n"); else printf("delta e diferente de zero\n"); printf("%.10f ",delta); printf("%g\n",delta); return 0; } delta e diferente de zero -0.0000000000-2.22045e-16
Lendo de 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 Lendo de 8 i = i + 1 Ü i++, ++i
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o Lendo de 8 i = i + 1 Ü i++, ++i 8 i = i - 1 Ü i- -, - -i
Existem algumas maneiras de abreviar comandos. Elas na o sa o necessa rias e podem tornar o programa de difı cil compreensa o Lendo de 8 i = i + 1 Ü i++, ++i 8 i = i - 1 Ü i- -, - -i 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 Lendo de 8 i = i + 1 Ü i++, ++i 8 i = i - 1 Ü i- -, - -i 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;
Programa que escolhe o maior - Sem lac o #include <stdio.h> int main(){ double a, b, c; double max; printf("entre com 3 numeros\n"); scanf ("%lf %lf %lf", &a, &b, &c); Lendo de max = if (a if (b if (c -9999999; > max) max = a; > max) max = b; > max) max = c; printf("o maior numero e : %f\n", max); return 0; }
Programa que escolhe o maior - com for Lendo de #include <stdio.h> int main(){ double a; double max; int i; max = -9999999; for (i = 1; i<= 3; i = i +1){ printf("entre com o numero %d\n ",i); scanf ("%lf", &a); if (a > max) max = a; } printf("o maior numero e : %f\n", max); return 0; }
maior com while -- maior.c Lendo de #include <stdio.h> int main(){ double a; double max; int i; max = -9999999; i = 1; while (i<= 3){ printf("entre com o numero %d\n ",i); scanf ("%lf", &a); if (a > max) max = a; i = i+1; } printf("o maior numero e : %f\n", max); return 0; }
Redirecionamento de em Unix Lendo de 8 O dispositivo padra o para entrada de dados (stdin) e o teclado. O dispositivo padra o para saı da de dados (stdout) e o monitor.
Redirecionamento de em Unix Lendo de 8 O dispositivo padra o para entrada de dados (stdin) e o teclado. O dispositivo padra o para saı da de dados (stdout) e o monitor. 8 Para redirecionar a entrada de dados para um arquivo, usamos o <
Redirecionamento de em Unix 8 O dispositivo padra o para entrada de dados (stdin) e o teclado. O dispositivo padra o para saı da de dados (stdout) e o monitor. 8 Para redirecionar a entrada de dados para um arquivo, usamos o < Lendo de 8 Para redirecionar a saı da de dados para um arquivo, usamos o >
Redirecionamento de em Unix 8 O dispositivo padra o para entrada de dados (stdin) e o teclado. O dispositivo padra o para saı da de dados (stdout) e o monitor. 8 Para redirecionar a entrada de dados para um arquivo, usamos o < Lendo de 8 Para redirecionar a saı da de dados para um arquivo, usamos o > rie um arquivo lista.dat contendo 3 nu meros e rode o programa maior.c que le esses nu meros a partir do teclado com o comando:./maior < lista.dat
Redirecionamento de em Unix 8 O dispositivo padra o para entrada de dados (stdin) e o teclado. O dispositivo padra o para saı da de dados (stdout) e o monitor. 8 Para redirecionar a entrada de dados para um arquivo, usamos o < Lendo de 8 Para redirecionar a saı da de dados para um arquivo, usamos o > rie um arquivo lista.dat contendo 3 nu meros e rode o programa maior.c que le esses nu meros a partir do teclado com o comando:./maior < lista.dat O resultado sera escrito na tela do monitor. Se quisermos salvar este resultado num arquivo resultados.dat:./maior < lista.dat > resultado.dat
: Formatac a o Lendo de Ü Sintaxe printf( expressa o de controle,argumentos): Ü existe um default para o nu mero de algarismos e casas decimais. Ü 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
: fprintf Lendo de Ü Ja vimos como redirecionar a stdout./programa > arquivo.saida
: fprintf Lendo de Ü e possı vel definir o arquivo dentro do programa
: fprintf Lendo de Ü e possı vel definir o arquivo dentro do programa 8 Declarar um ponteiro para o arquivo: FILE *arquivo = NULL;
: fprintf Lendo de Ü 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 );
: fprintf Lendo de Ü 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 e testar se ele pode ser aberto. if(arquivo == NULL ){ printf( Problema ao abrir arquivo ); return 0; }
: fprintf Lendo de Ü 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 e testar se ele pode ser aberto. if(arquivo == NULL ){ printf( Problema ao abrir arquivo ); return 0; } 8 Escrever usando o comando fprintf(arquivo, expressa o de controle,argumentos);
: fprintf Lendo de Ü 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 e testar se ele pode ser aberto. if(arquivo == NULL ){ printf( Problema ao abrir arquivo ); return 0; } 8 Escrever usando o comando fprintf(arquivo, expressa o de controle,argumentos); fprintf(arquivo, O resultado e %6.2f \n, ValorFinal);
: fprintf Lendo de Ü 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 e testar se ele pode ser aberto. if(arquivo == NULL ){ printf( Problema ao abrir arquivo ); return 0; } 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);
: Lendo de fscanf Lendo de Ü Lendo do teclado: scanf( expressa o de controle, enderec os dos argumentos): scanf("%f", &x);
: Lendo de fscanf Lendo de Ü Redirecionamento do stdin no Linux:./programa < leitura.dat
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente:
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente: 8 Declarar um ponteiro para o arquivo: FILE *entrada = NULL;
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente: 8 Declarar um ponteiro para o arquivo: FILE *entrada = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) entrada = fopen( leitura.dat, r );
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente: 8 Declarar um ponteiro para o arquivo: FILE *entrada = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) entrada = fopen( leitura.dat, r );
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente: 8 Declarar um ponteiro para o arquivo: FILE *entrada = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) entrada = fopen( leitura.dat, r ); 8 e testar se ele existe. if(entrada!= NULL ){ printf( Arquivo inexistente ); return 0; }
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente: 8 Declarar um ponteiro para o arquivo: FILE *entrada = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) entrada = fopen( leitura.dat, r ); 8 e testar se ele existe. if(entrada!= NULL ){ printf( Arquivo inexistente ); return 0; } 8 Ler usando o comando fscanf(entrada, expressa o de controle,enderec os dos argumentos); fscanf(entrada, %d %lf, &num, &valor);
: Lendo de fscanf Lendo de Ü Abrindo o arquivo diretamente: 8 Declarar um ponteiro para o arquivo: FILE *entrada = NULL; 8 Abrir o arquivo com a func a o fopen(nome, opc a o) entrada = fopen( leitura.dat, r ); 8 e testar se ele existe. if(entrada!= NULL ){ printf( Arquivo inexistente ); return 0; } 8 Ler usando o comando fscanf(entrada, expressa o de controle,enderec os dos argumentos); fscanf(entrada, %d %lf, &num, &valor); 8 Fechar o arquivo com o comando fclose fclose(entrada); Baixe da pa gina do curso e estude o programa
Exemplo: maior com arquivo.c Lendo de #include <stdio.h> int main(){ double a; int i = 1; double max = -9999999; FILE *arqentrada = NULL; FILE *arqsaida = NULL; arqentrada = fopen("entrada.dat","r"); if (arqentrada == NULL){ printf("o arquivo nao existe\n"); return 1; } while (i<= 3){ fscanf (arqentrada,"%lf", &a); if (a > max) max = a; i = i+1; } arqsaida = fopen("resultado.dat","w"); fprintf(arqsaida,"o maior numero e :%7.2f\n",max); fclose(arqentrada); fclose(arqsaida); return 0; }
Algumas Observac o es Lendo de Ü fopen arquivo = fopen( leitura.dat, r ); if(arquivo!= NULL ){... }
Algumas Observac o es Lendo de Ü 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 Lendo de Ü 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, %lf,&valores)!= EOF) {... }
Algumas Observac o es Lendo de Ü 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, %lf,&valores)!= EOF) {... } O valor EOF e atribuı do a func a o fscanf quando o arquivo arquivo chegar ao final
onta nu mero de linhas de um arquivo u ltimo valor negativo Lendo de #include <stdio.h> int main() { FILE *fp = NULL; int i, N=0; double valores; fp = fopen("amostra2.dat","r"); if (fp == NULL) return 1; fscanf (fp,"%lf",&valores); while (valores >=0) { N++; fscanf (fp,"%lf",&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; double valores; fp = fopen("amostra2.dat","r"); if (fp == NULL){ printf("arquivo nao existe\n"); return 1; } while (fscanf (fp,"%lf",&valores)!= EOF) { N++; } printf("numero de linhas = %d\n",n); return 0; Lendo de } Baixe e estude o arquivo contanumerolinhas.c na pa gina do curso
Debugando - Achando erros no programa Bug: Inseto em ingle s A analista de sistemas da Marinha dos Estados Unidos nas de cadas de 1940 e Lendo de 1950, Grace Hopper, ao resolver um problema em seu programa, descobriu um inseto morto no computador... Depurar um programa em geral na o e uma tarefa fa cil! Tipos de erro: Ü Erros de compilac a o: Surgem ao compilar o programa fonte. O programa executa vel na o e gerado Ü Erros de execuc a o: Surgem ao se executar o programa. Podem parar a execuc a o, ou seguir em frente, dando resultados errados Ü Erros de lo gica: Ocorrem ao se executar o programa mas na o ha nenhum erro de programac a o em si, mas do algoritmo ou de sua implementac a o
Debugando - Achando erros no programa Erros de compilac a o: Ü Ler com atenc a o as mensagens de erro do compilador Ü Resolver um erro de cada vez. Frequentemente os erros seguintes sa o conseque ncia do primeiro. Ü Usar opc o es do gcc que aumentam o nı vel de verificac o es da linguagem. Ex.: gcc -Wall -ansi -pedantic Erros de execuc a o e lo gica: Lendo de Ü Ha programas dedicados a isto, mas em geral de difı cil aplicac a o. Ex.: gdb, Valgrind Ü Quando o programa crasha geralmente ha mensagens de erro indicando o possı vel problema e o ponto de ocorre ncia Ü Me todo mais efetivo: Imprimir tudo a cada passo do programa! Ü Fundamental: Verificar os resultados para va rias situac o es conhecidas.