Problema 1
Considere o seguinte problema:
Determinar o valor de y = seno(1,5).
Definies
Para resolver um problema de computao preciso escrever um texto. Este texto, como qualquer outro, obedece regras de sintaxe. Estas regras so estabelecidas por uma linguagem de programao. Este texto conhecido como:
Programa
3
Definies
Neste curso, ser utilizada a linguagem C. A linguagem C subconjunto da linguagem C++ e, por isso, geralmente, os ambientes de programao da linguagem C so denominados ambientes C/C++. Um ambiente de programao contm:
Editor de programas: viabiliza a escrita do programa. Compilador: verifica se o texto digitado obedece sintaxe da linguagem de programao e, caso isto ocorra, traduz o texto para uma sequncia de instrues em linguagem de mquina.
Cdigo binrio
4
Definies
Que ambiente de programao iremos utilizar?
Existem muitos, por exemplo: Microsoft Visual C++, Borland C++ Builder e DEV-C++. Ser utilizado neste curso o Microsoft Visual C++ Express
Grtis, no site da Microsoft. Verses recomendadas: 2008 2012
Definies
Porque o compilador traduz o programa escrito na linguagem de programao para a linguagem de mquina?
0101010110100010011 1000101010111101111 1010100101100110011 0011001111100011100 0101010110100010011 1000101010111101111 1010100101100110011 0011001111100011100
Compilador
Os computadores atuais s conseguem executar instrues que estejam escritas na forma de cdigos binrios. Um programa em linguagem de mquina chamado de programa executvel.
6
Erros de sintaxe
Ateno!
O programa executvel s ser gerado se o texto do programa no contiver erros de sintaxe. Exemplo: considere uma string. Ah?! O que isso?! Uma sequncia de caracteres delimitada por aspas. Se isso uma string e se tivssemos escrito: printf(y = %f,y); O compilador iria apontar um erro de sintaxe nesta linha do programa e exibir uma mensagem tal como:
Erros de sintaxe
Se o nome do programa p1.c, ento aps a compilao, ser produzido o programa executvel p1.exe. Executando-se o programa p1.exe, o resultado ser:
Problema Resolvido!
Erros de lgica
Ateno!
No basta obter o programa executvel!! Ser que ele est correto? Y = sin(1.5); Se ao invs de: Tivssemos escrito: Y = sin(2.5); O compilador tambm produziria o programa p1.exe, que executado, iria produzir:
Erros de lgica
Embora um resultado tenha sido obtido, ele no correto. Se um programa executvel no produz os resultados corretos, porque ele contm erros de lgica ou bugs. O processo de identificao e correo de erros de lgica denominado depurao (debug). O nome de um texto escrito em uma linguagem de programao chamado de programa-fonte. Exempo: o programa p1.c um programa-fonte.
10
Arquivos de cabealho
Note que o programa-fonte p1.c comea com as linhas:
#include <stdio.h> #include <stdlib.h>
Todo programa-fonte em linguagem C comea com linhas deste tipo. O que elas indicam?
Dizem ao compilador que o programa-fonte vai utilizar arquivos de cabealho (extenso .h, de header). E da? O que so estes arquivos de cabealho? Eles contm informaes que o compilador precisa para construir o programa executvel.
11
Arquivos de cabealho
Como assim? Observe que o programa p1.c inclui algumas funes, tais como: sin funo matemtica seno. printf funo para exibir resultados. Por serem muito utilizadas, a linguagem C mantm funes como estas em bibliotecas. Ateno! O contedo de um arquivo de cabealho tambm um texto.
12
Arquivos de cabealho
Ao encontrar uma instruo #include em um programa-fonte, o compilador traduz este texto da mesma forma que o faria se o texto tivesse sido digitado no programa-fonte. Portanto, as linhas:
#include <stdio.h> #include <stdlib.h>
indicam ao compilador que o programa p1.c utilizar as instrues das bibliotecas stdio e stdlib.
13
Processo de compilao
O processo de compilao, na verdade, se d em duas etapas:
Fase de traduo: programa-fonte transformado em um programa-objeto. Fase de ligao: junta o programa-objeto s instrues necessrias das bibliotecas para produzir o programa executvel.
Compilador Programa Objeto Ligador Programa Executvel
Programa Fonte
Funo main
A prxima linha do programa :
int main(int argc, char *argv[])
Esta linha corresponde ao cabealho da funo main (a funo principal, da o nome main). O texto de um programa em Linguagem C pode conter muitas outras funes e SEMPRE dever conter a funo main.
int main(int argc, char *argv[])
Nome da Funo.
Funo main
A Linguagem C case sensitive. Isto , considera as letras maisculas e minsculas diferentes. Ateno!
O nome da funo principal deve ser escrito com letras minsculas: main. Main ou MAIN, por exemplo, provocam erros de sintaxe.
Da mesma forma, as palavras int e char, devem ser escritas com letras minsculas.
16
Tipos de dados
A soluo de um problema de clculo pode envolver vrios tipos de dados. Caso mais comum so os dados numricos:
Nmeros inteiros (2, 3, -7, por exemplo). Nmeros com parte inteira e parte fracionria (1,234 e 7,83, por exemplo).
Nas linguagens de programao, d-se o nome de nmero de ponto flutuante aos nmeros com parte inteira e parte fracionria. Da mesma forma que instrues, os dados de um programa devem ser representados em notao binria. Cada tipo de dado representado na memria do computador de uma forma diferente.
17
Exemplo: considere uma representao usando cinco dgitos binrios (ou bits).
Decimal
+5 -3
Binrio
00101 10011
Desvantagens: - Duas notaes para o zero (+0 e -0). - A representao dificulta os clculos.
00101 10011 Soma 11000 Que nmero esse? 5 3 = 8 ???
18
Exemplo:
Decimal
+6 -6
Binrio
00110 11001 1 11010 (bits invertidos) (somar 1)
19
Binrio
00000 11111 1 00000 (bits invertidos) (somar 1)
Note que o vai-um daqui no considerado, pois a representao usa apenas 5 bits.
E a soma?
Decimal
+5 -3 Somando: 00101 11101 00010
Binrio
00101 11100 + 1 = 11101
Ponto Flutuante ou Vrgula Flutuante? A representao com ponto flutuante segue padres internacionais (IEEE-754 e IEC-559).
21
Binrio
1101.01
Binrio normalizado
1.10101 x 23 Expoente
22
Mantissa
Binrio
0.01
Binrio normalizado
1.0 x 2-2 Expoente
Mantissa
23
O primeiro bit da mantissa de um nmero de ponto flutuante no precisa ser representado (sempre 1).
24
5/0
-3/0
0/0 ou /
25
27
28
Variveis
Os dados que um programa utiliza precisam ser armazenados na memria do computador. Cada posio de memria do computador possui um endereo.
8
1000
3.25
1001
a
1002
g
1003
q
1004
2
1005
*
1006
1
1007
1008
1009
1010
1011
Memria
1012
1013
1014
1015
1016
1017
1018
1019
30
Variveis
A partir dos endereos, possvel para o computador saber qual o valor armazenado em cada uma das posies de memria. Como a memria pode ter bilhes de posies, difcil controlar em qual endereo est armazenado um determinado valor! Para facilitar o controle sobre onde armazenar informao, os programas utilizam variveis. Uma varivel corresponde a um nome simblico de uma posio de memria. Seu contedo pode variar durante a execuo do programa.
31
Variveis
Exemplo de varivel:
Variveis
Cada varivel pode possuir uma quantidade diferente de bytes, uma vez que os tipos de dados so representados de forma diferente. Portanto, a cada varivel est associado um tipo especfico de dados. Logo:
O tipo da varivel define quantos bytes de memria sero necessrios para representar os dados que a varivel armazena.
33
Variveis
A Linguagem C dispe de quatro tipos bsicos de dados. Assim, as variveis podero assumir os seguintes tipos:
Tipo
char int
Tamanho (bytes)
1 4
Valor
Um caractere (ou um inteiro de 0 a 127). Um nmero inteiro. Um nmero de ponto flutuante (SP). Um nmero de ponto flutuante (DP).
34
float
double
Variveis
Dentro do programa, as variveis so identificadas por seus nomes. Portanto, um programa deve declarar todas as variveis que ir utilizar. Ateno!
A declarao de variveis deve ser feita antes que a varivel seja usada, para garantir que a quantidade correta de memria j tenha sido reservada para armazenar seu valor.
35
Escrevendo um programa em C
Escrever um programa em Linguagem C corresponde a escrever o corpo da funo principal (main). O corpo de uma funo sempre comea com abre-chaves { e termina com fecha-chaves }.
Corpo da funo
36
Escrevendo um programa em C
A primeira linha do corpo da funo principal do programa p1.c :
float y;
37
Escrevendo um programa em C
Esta linha declara uma varivel y para armazenar um nmero de ponto flutuante (SP). A declarao de uma varivel no armazena valor algum na posio de memria que a varivel representa. Ou seja, no caso anterior, vai existir uma posio de memria chamada y, mas ainda no vai existir valor armazenado nesta posio.
38
Escrevendo um programa em C
Um valor pode ser atribudo a uma posio de memria representada por uma varivel pelo operador de atribuio = . O operador de atribuio requer esquerda um nome de varivel e direita, um valor. A linha seguinte de p1.c atribui um valor a y:
39
Escrevendo um programa em C
No lado direito do operador de atribuio existe uma referncia funo seno com um parmetro 1.5 (uma constante de ponto flutuante representando um valor em radianos.)
40
Escrevendo um programa em C
Em uma linguagem de programao chamamos o valor entre parnteses da funo, neste exemplo, o valor 1.5, de parmetro da funo. Da mesma forma, diz-se que sin(1.5) o valor da funo sin para o parmetro 1.5. O operador de atribuio na linha y = sin(1.5) obtm o valor da funo (0.997495) e o armazena na posio de memria identificada pelo nome y. Esta operao recebe o nome de: atribuio de valor a uma varivel.
41
Escrevendo um programa em C
Ateno: O valor armazenado em uma varivel por uma operao de atribuio depende do tipo da varivel. Se o tipo da varivel for int, ser armazenado um valor inteiro (caso o valor possua parte fracionria, ela ser desprezada). Se o tipo da varivel for float ou double, ser armazenado um valor de ponto flutuante (caso o valor no possua parte fracionria, ela ser nula).
42
Escrevendo um programa em C
Exemplo:
Considere as seguintes declaraes: int a; float b; Neste caso, teremos:
Operao de atribuio a = (2 + 3) * 4 b = (1 4) / (2 - 5) a = 2.75 + 1.12 b = a / 2.5 Valor armazenado 20 1.0 3 1.2
43
Escrevendo um programa em C
As prximas linhas do programa p1.c so:
printf(y = %f,y); printf(\n);
Escrevendo um programa em C
A funo printf usada para exibir resultados produzidos pelo programa e pode ter um ou mais parmetros. O primeiro parmetro da funo printf sempre uma string, correspondente sequncia de caracteres que ser exibida pelo programa.
printf(y = %f,y); printf(\n);
45
Escrevendo um programa em C
Essa sequncia de caracteres pode conter alguns tags que representam valores. Estes tags so conhecidos como especificadores de formato.
printf(y = %f,y); printf(\n);
Especificador de formato
Um especificaor de formato comea sempre com o smbolo %. Em seguida, pode apresentar uma letra que indica o tipo do valor a ser exibido. Assim, printf(y = %f,y) ir exibir a letra y, um espao em branco, o smbolo =, um espao em branco, e um valor de ponto flutuante. 46
Escrevendo um programa em C
Veja:
Valor armazenado em y.
47
Escrevendo um programa em C
Na funo printf, para cada tag existente no primeiro parmetro, dever haver um novo parmetro que especifica o valor a ser exibido.
printf(a = %d, b = %c e c = %f,a,m,(a+b));
A linguagem C utiliza o smbolo \ (barra invertida) para especificar alguns caracteres especiais:
Caractere \a \n \t \ Significado Caractere (invisvel) de aviso sonoro. Caractere (invisvel) de nova linha. Caractere (invisvel) de tabulao horizontal. Caractere de apstrofo
48
Escrevendo um programa em C
Observe a prxima linha do programa p1.c:
printf(\n);
Ela exibe o caractere (invisvel) de nova linha. Qual o efeito disso? Provoca uma mudana de linha! Prxima mensagem ser na prxima linha.
49
Escrevendo um programa em C
Observe agora a prxima linha do programa:
system(PAUSE);
Ela exibe a mensagem Pressione qualquer tecla para continuar... e interrompe a execuo do programa.
50
Escrevendo um programa em C
A execuo ser retomada quando o usurio pressionar alguma tecla. A ltima linha do programa p1.c :
return 0;
51
Escrevendo um programa em C
usada apenas para satisfazer a sintaxe da linguagem C. O comando return indica o valor que uma funo produz. Cada funo, assim como na matemtica, deve produzir um nico valor. Este valor deve ter o mesmo tipo que o declarado para a funo.
52
Escrevendo um programa em C
No caso do programa p1.c, a funo principal foi declarada como sendo do tipo int. Ou seja, ela deve produzir um valor inteiro.
Escrevendo um programa em C
Mas e da?!! O valor produzido pela funo principal no usado em lugar algum! Logo, no faz diferena se a ltima linha do programa for:
return 0; return 1; ou return 1234;
54
Escrevendo um programa em C
Neste caso, o fato de a funo produzir um valor no relevante. Neste cenrio, possvel declarar a funo na forma de um procedimento. Um procedimento uma funo do tipo void, ou seja, uma funo que produz o valor void (vazio, intil, -toa). Neste caso, ela no precisa do comando return.
55
Escrevendo um programa em C
Note que os parmetros da funo main tambm no foram usados neste caso. Portanto, podemos tambm indicar com void que a lista de parmetros da funo principal vazia. Assim, podemos ter outras formas para p1.c:
56
Problema 2
Uma conta poupana foi aberta com um depsito de R$500,00. Esta conta remunerada em 1% de juros ao ms. Qual ser o valor da conta aps trs meses?
57
Problema 2
Executando-se o programa, obtm-se:
Problema 2
No programa p2.c, note que o tag usado na funo printf %.2f em vez de %f. Neste caso, o especificador de formato inclui tambm o nmero de dgitos desejados aps o ponto decimal. Ateno! de extrema importncia o uso de ponto-evrgula aps cada instruo. Com os pontos-e-vrgulas, o compilador sabe exatamente onde termina cada uma das instrues.
59
Exerccios
Exerccios 6, 7, 8, 9 e 10. Pgina 17 do livro texto. Dicas: Para a aula prtica, estudem o captulo antes. Leiam e procurem compreender os exerccios. Se possvel, esbocem as solues dos exerccios.
60