Segundo programa: media - IF - Instituto de Física / UFRJsandra/mcomp/SegundaAula.pdf · Linhas de...
Transcript of Segundo programa: media - IF - Instituto de Física / UFRJsandra/mcomp/SegundaAula.pdf · Linhas de...
Segundo programa: media.cVamos analisar um programa que calcula a media ponderada entre doisnumeros: media.c
❒ Linhas de comentario:Num arquivo com o codigo de um programa C (codigo fonte), umcomentario comeca com barra e asterisco ( /* ) e se estende ateencontrar um asterisco e uma barra ( */ ), podendo abranger variaslinhas. Veja as linhas1 a 5.
Uma outra forma de comentario, as vezes mais pratica, e um textocomecando com uma barra dupla (//) e se extendendo ate o fim dalinha. Veja as linhas 10, 13, 22 e 28. Esta forma nao e padrao dalinguagem C, mas uma extensao tomada emprestada do C++.
O compilador ignora as linhas em branco e os comentarios.
E muito importante que o programa fonte seja bem comentado.Metodos Computacionais em Fısica I - Segunda Aula
1
❒ Instrucoes para o pre-processador:
Uma linha comecando por # nao e um codigo C propriamente dito,
mas uma instrucao para o pre-processador. Antes de compilar o
programa, o compilador chama o pre-processador que prepara o
codigo de acordo com estas instrucoes. A linha 6 no programa
media.c diz ao pre-processador para incluir o arquivo stdio.h
naquele ponto do codigo. Este arquivo e necessario para podermos
utilizar as funcoes para entrada e saıda de dados. Estes arquivos em
formato texto, cujos nomes terminam em ".h" sao chamados de
arquivos cabecalhos (headers, em ingles)
Metodos Computacionais em Fısica I - Segunda Aula
2
❒ Funcoes, a funcao main:
Um programa em C e composto de blocos chamados de funcoes. Um
programa pode ter uma ou mais funcoes, mas obrigatoriamente deve
ter uma ( e so uma ) funcao chamada main. Esta e a funcao principal e
e por ela que a execucao do programa comeca. A sintaxe de definicao
de qualquer funcao e
tipo nome( argumentos )
No programa media.c temos duas funcoes:
❍ a de nome main, de tipo int que, neste exemplo, nao possui
argumentos.
❍ a de nome printf, de tipo int, com uma lista variavel de
argumentos, neste exemplo, 6 argumentos.
Metodos Computacionais em Fısica I - Segunda Aula
3
❒ Declaracoes:
O corpo da funcao main comeca com um abre chaves ({ ) e termina
com um fecha chaves ( } ) correspondente, respectivamente linhas 9 e
33 no programa media.c Os blocos de codigo que seguem este padrao
sao chamados de declaracoes compostas, porque englobam diversas
declaracoes simples. As linhas de codigo na funcao main que
terminam com um ponto e vırgula ( ; ) sao as declaracoes (simples), as
instrucoes que o programa executara. Toda declaracao simples deve
terminar com o ponto e vırgula.
As linhas 15 e 16 formam uma unica declaracao, a qual pode ser
estendida por mais de uma linha, o que delimita o seu termino e o ;
Metodos Computacionais em Fısica I - Segunda Aula
4
❒ Definicoes:As instrucoes que aparecem nas linhas 10, 11, 13, 15, 16 e 17 saodefinicoes. Para armazenar as informacoes com que o programatrabalhara, chamadas de dados, precisamos reservar uma areaapropriada de memoria e para identificar essa area associamos umnome (identificador) a ela. Devemos dizer o tipo deinformacao que sera armazenada, assim o compilador sabe aquantidade de memoria necessaria. Os identificadores podem servariaveis, como no caso presente, ou constantes, comoveremos mais tarde.
Nas linhas 10 e 11 definimos as variaveis peso1 e peso2 quearmazenarao um numeros inteiros. Nas linhas 13, 15 e 17 definimosvariaveis que armazenarao numeros reais. (Observe que as linhas 15 e16 constituem uma so declaracao que define duas variaveis). Naslinhas 10 e 11 alem da definicao, temos tambem a inicializacaodas variaveis, isto e, lhes atribuimos um valor inicial.
Metodos Computacionais em Fısica I - Segunda Aula
5
❒ Como vemos nas linhas 13, 15 e 17, a inicializacao nao e
obrigatoriamente feita junto com a definicao da variavel. Porem se
utilizarmos uma variavel antes de inicializa-la, o programa utilizara
qualquer informacao que por acaso esteja naquela area de memoria
(“lixo” de outros programas) o que pode levar a erros serios.
❒ Nome das variaveis:
deve comecar com letras e pode-se usar letras e numeros depois, alem
do caracter “ ” (underscore). O C distingue maiusculas de minusculas.
Um estilo de escolha de nomes usado e comecar por minuscula, e
quando quisermos representar com um nome composto, separar por
Maiuscula ou underscore: mediaParcial ou media parcial. Nao podem
ser as palavras reservadas do C (if, for, main, printf...)
O nome das variaveis deve ser escolhido de forma a deixar claro oseu significado, facilitando o entendimento do programa
Metodos Computacionais em Fısica I - Segunda Aula
6
Operadores
❒ O operador atribuicao “=”:
Todas as informacoes que passamos para o computador ficam
armazenadas em sua memoria. Quando declaramos a variavel n1, seu
nome significa uma abreviacao para um endereco na memoria do
computador. Como nenhum valor ainda lhe foi atribuıdo, ela pode
conter qualquer lixo que tenha sido previamente escrito naquela regiao
de memoria. Quando fazemos n1 = 2, guardamos o valor 2 na regiao
de memoria cuja localizacao e dada por n1.
❒ Operadores aritmeticos:
multiplicacao “ * ” , divisao “/ ”, soma “ + ”, subtracao “ - ”,
resto “ % ”
Metodos Computacionais em Fısica I - Segunda Aula
7
❒ Regras de precedencia:
divisao e multiplicacao estao no mesmo nıvel, soma e subtracao vem
depois. Para operadores que estao no mesmo nıvel, a instrucao e
executada da esquerda para a direita.
❒ Exemplos:
3/5 = 0; 6/4 = 1
6%4 = 2
x + y ∗ 3 = x + (y ∗ 3)
34/5/2 = 3; 34/(5/2) = 17
Utilizar parentesis para garantir a precedencia de uma sub-expressaoou deixar mais claro a sequencia de execucao
Metodos Computacionais em Fısica I - Segunda Aula
8
Entrada e saıda de dadosA biblioteca padrao tem diversas funcoes para que valores digitadosdurante a execucao sejam usados pelo programa e para que os resultadossejam escritos na tela. Exemplo:
//lenum.c
#include <stdio.h>
int main()
{
float a, b, soma;
printf("Digite os valores de a e b\n");
scanf("%f %f",&a, &b);
soma = a + b;
printf(" A soma e’ %f\n",soma);
return 0;
}Metodos Computacionais em Fısica I - Segunda Aula
9
❒ scanf:O primeiro argumento de scanf e uma sequencia de caracteres
(string) que define quantos valores serao lidos, e de que tipo sao, e
pode dar outras informacoes como o formato da entrada. O segundo
argumento, depois da vırgula, e a lista com os enderecos das variaveis
que terao seus valores atribuıdos. O operador unario & da o endereco
de memoria de uma determinada variavel, a funcao scanf precisa dessa
informacao para funcionar.
❒ printf:Assim como na scanf, o primeiro argumento de printf define a
quantidade, o tipo e o formato dos valores a serem impressos. O
segundo argumento da a lista das variaveis.
Em ambos os casos, a lista de formatos sera casada com a lista depois da
vırgula. A scanf segue buscando valores para satisfazer sua lista de
formatos.Metodos Computacionais em Fısica I - Segunda Aula
10
Se estamos entrando dados pelo teclado, isso significa que seu programa
ficara esperando a digitacao de tantos dados quantos forem especificados
na lista de formatos.
Espacos em branco, tabs e caracteres de nova linha (tecla enter) sao
ignorados na leitura.
As principais fontes de erro no uso de scanf sao: colocar o nome da
variavel e nao seu endereco, ter listas de formatos incompatıvel com a lista
de enderecos, seja por numero de campos seja por tipo de variavel. Esses
erros em geral nao sao detectados na compilacao.
A saıda dos dados deve apresentar uma mensagem onde fica claro o que
esta sendo impresso.
Estas (teclado e tela) nao sao as unicas formas de entrada e saıda de dados
para um programa.
Metodos Computacionais em Fısica I - Segunda Aula
11
Tarefa
1. Escreva um programa que pede o valor de um angulo emgraus, pelo teclado, calcula e escreve na tela seu valor emradianos.
2. Escreva um programa que pede o valor de umatemperatura em Farenheit, pelo teclado, calcula e escrevena tela seu valor em graus Celsius (C = 5
9(F − 32)).
Metodos Computacionais em Fısica I - Segunda Aula
12
TarefaEscreva um programa que calcule as raızes de equacao de segundo grau
ax2 + bx + c = 0
utlizando a formula bem conhecida
x =−b ±
√b2 − 4ac
2a
Comentarios: a funcao da biblioteca matematica correspondente a√
x esqrt(x). Para usa-la temos que incluir no programa
#include <math.h>
Para gerar o executavel, deve-se tambem linkar com a bibliotecamatematica:
gcc -o raizSegGrau raizSegGrau.c -lm
Metodos Computacionais em Fısica I - Segunda Aula
13
Outras funcoes que tambem estao declaradas em math.h:
• sin(x) → seno de x. x deve ser dado em radianos
• cos(x) → cosseno( de x. x deve ser dado em radianos
• acos(x) → arco-cosseno de x, no intervalo [0, π]
• atan(x) → arco-tangente de x, no intervalo [−π/2, π/2]
• exp(x) → ex
• log(x) → log na base e, x > 0
• log10(x) → log na base 10, x > 0
• pow(x,y)→ xy
• fabs → |x|
Metodos Computacionais em Fısica I - Segunda Aula
14
Estruturas de Decisao e loops
❒ Nos codigos que vimos ate agora, as instrucoes sao seguidas
sequencialmente usando os valores de variaveis atuais a cada linha.
❒ Essa estrutura linear nao e adequada para a maioria das aplicacoes.
❒ Necessitamos de mecanismos que provoquem bifurcacoes na
excecucao, ou seja, que certos comandos so sejam executados se
determinadas condicoes forem satisfeitas.
❒ Tambem precisamos de uma forma de forcar a repeticao de grupos de
comandos.
❒ As diversas estruturas condicionais existentes na linguagem fornecem
esses mecanismos. O funcionamento delas depende da avaliacao,
como falsa ou verdadeira, de uma determinada afirmativa.
Metodos Computacionais em Fısica I - Segunda Aula
15
Estruturas de DecisaoQueremos instruir o programa a executar um conjunto de instrucoes casouma certa condicao seja satisfeita.
if (condicao){comandos
}——————————-
n = 0
x = 2.
if ( x > 0 ) {
printf ("x positivo\n");
n = n + 1;
}
printf ("n = %d\n", n);
Metodos Computacionais em Fısica I - Segunda Aula
16
Se a instrucao e simples (um so comando), as chaves sao desnecessarias:
n = 0
x = 2.
if ( x > 0 ) n = n + 1;
printf ("n = %d\n", n);
Uma expressao logica tem valor numerico0 se for falsa e 6= 0 se for verdadeira
Metodos Computacionais em Fısica I - Segunda Aula
17
if-else
if (condicao){comandos
}else {
comandos
}————————-
x = ...;
if(x > 0){
y = sqrt(x);
}
else {
y = sqrt(-x);
}Metodos Computacionais em Fısica I - Segunda Aula
18
A forma mais geral possıvel: else-if
if (media >= 9.0)
printf("grau A");
else if (media >= 7.0)
printf("grau B");
else if (media >= 5.0)
printf("grau C");
elseprintf("grau D");
if (condicao) {comandos
}else if (condicao) {
comandos
}else if (condicao) {
comandos
}else {
comandos
}
Metodos Computacionais em Fısica I - Segunda Aula
19
Operadores logicos e relacionais
Os operadores relacionais sao
> (maior) >= (maior ou igual) < (menor) <= (menor ou igual),
e
== (igual) != (diferente de),
Os operadores relacionais tem precedencia abaixo dos aritmeticos:
a expressao x < y-1 e avaliada como x < (y-1).
Atencao para a diferenc a entreif (a = = b) e if (a = b)
Metodos Computacionais em Fısica I - Segunda Aula
20
Os operadores logicos sao
&& (e) || (ou).
A avaliacao de uma expressao e feita de acordo com a tabela:
V && V = V
V && F = F
F && F = F
V || V = V
V || F = V
F || F = F
Expressoes conectadas por && e || sao avaliadas da esquerda para a direita,e a avaliacao e interrompida assim que seja possıvel determinar se aexpressao e falsa ou verdadeira.
O operador unario ! e o operador de negacao. Ele troca V por F e vcvs.
Metodos Computacionais em Fısica I - Segunda Aula
21
Exemplos:
if (a > 0.0 && 1./a < c) x = 0;
Se quisermos saber se x esta dentro de um certo intervalo:
if ( x > xmin && x < xmax) {
instrucoes
}
Se quisermos saber se x esta fora de um certo intervalo:
if ( x < xmin || x > xmax) {
instrucoes
}
if ( (a == b && a != 0) || a == 2 )
if ( !(a < b) )
Metodos Computacionais em Fısica I - Segunda Aula
22
Ordem de precedencia:
! ; (* , /, % ) ; (+ , - ) ; ( >, <, >=,<= ) ; ( = = , != ) ; && ; ||
Sempre use parentesis
De Morgans Law:
!(A && B) ≡ !A || !B
!(A || B) ≡ !A && !B
O operador ternario ? fornece um modo alternativo de se fazer teste logico:
z = condicao ? instrucao 1 : instrucao 2
Se condicao for V, a instrucao 1 e executada, senao, a instrucao 2 e
executada.
z = (a > b) ? a : b;
Metodos Computacionais em Fısica I - Segunda Aula
23
Exercıcio
Modifique o programa que calcula as raızes da equacao de segundo grau
para levar em conta ∆ < 0. Os valores dos coeficientes a, b e c, devem ser
lidos pelo teclado. Seu programa deve: recusar valores nulos de a, e
discriminar os casos: raizes iguais, raizes reais diferentes, raizes complexas
diferentes. No ultimo caso, os valores das raızes devem ser escritos como
Re +-i Im, onde Re= −b2a
e Im=√
−∆
2a
Metodos Computacionais em Fısica I - Segunda Aula
24