 |
Aula 2 |
|
1 - Introdução à Programação
Programas de computadores, também
conhecidos como software, são sequências de
instruções que o computador executa com a finalidade
de realizar uma determinada tarefa requerida pelo usuário.
Tais sequências de instruções são na
verdade sequências de dígitos binários ( 0´s
e 1´s ) que estao armazenados na memória do computador.
Na década de 50 os programadores escreviam seus programas
utilizando tal linguagem binária, mas com o avanço
da complexidade e capacidade dos computadores foi necessária
a criação de linguagens de programação,
permitindo que a criação de programas se tornasse
mais clara e facil. Dentre tais linguagens estão o Fortran,
Cobol, Pascal e C/C++. Deste modo o progamador escreve seus programas
em arquivos do tipo texto seguindo um conjunto de regras e sintaxe
impostos pela linguagem utilizada. Com a utilização
de um outro programa, o compilador, tais arquivos texto são
entao convertidos para arquivos binários podendo ser executados
pelo computador.

1.1
- Criando um arquivo texto (arquivo fonte)
Para
criar um arquivo texto, ou seja, um arquivo que contenha o fonte
do programa escrito em alguma linguagem específica, como
por exempo C, é necessária a utilização
de um programa editor de textos ASCII como o programa EDIT fornecido
com o sistema operacional MS-DOS. Outro modo de criar um arquivo
texto é utilizando o próprio editor de textos interno
do compilador, como é o caso do compilador Turbo C++
Lite, neste caso o arquivo pode ser criado da seguinte forma:
- Selecione
a opção "New" no menu "File".
- Digite
o seguinte código na janela:
#include <stdio.h>
void main (void)
{
printf
("Hello World!");
}
|
- Selecione
a opção "Save As" para salvar o arquivo
no disco.
- Na nova
caixa de diálogo digite o nome "primeiro.c"
como sendo o nome do arquivo e pressione o botão ENTER
1.2 - Compilando
um programa
O
processo de converção de um programa em formato
texto (fonte) escrito em uma determinada linguagem (como C) para
um formato binário executável pelo computador se
chama compilação. Utilizando o compilador
Turbo C++ Lite para compilar o programa digitado anteriormente
tem-se a sequencia:
- No menu
"Compile" selecione o comando "Build All".
- Se nao
existirem erros na sintaxe do programa C digitado, o compilador
criará um arquivo chamado "primeiro.exe" no
mesmo diretório do arquivo "primeiro.c".
- Se existirem
erros no programa fonte em C, serão exibidas mensagens
que indicarão qual o tipo e o local aproximado do erro
dentro do código fonte.
- Para executar
o programa compilado basta selecionar o comando "Run"
no mesmo menu, ou ainda pressionar as teclas CRTL + F9 simultâneamente.
Durante
o processo de compilação também são
gerados arquivos com extensão OBJ. Tais arquivos são
utilizados internamente pelo compilador e são compostos
por código binário de cada parte do programa compilado.
Todas as partes são então agrupadas para a criação
do arquivo com extensão EXE já citado anteriormente.
1.3
- Compreendendo erros de sintaxe
Toda
linguagem de programação tem suas próprias
regras de sintaxe que devem ser obedecidas durante a especificação
dos comandos do programa fonte para que a compilação
do código possa ser efetuada. Em caso da existência
de algum erro mensagens de erro serão exibidas com uma
breve descrição do tipo do erro e indicando o local
aproximado dentro do código fonte. Tendo o seguinte código:
#include <stdio.h>
void main (void)
{
printf
("Hello World!);
}
|
Compilando
este código serão exibidas as seguintes mensagens
de erro:
- Undeterminated
string or character constant in function main
- Function
call missing ) in function main()
- Statement
missing ; in function main()
Apesar
de existir somente um erro na sintaxe (a falta das aspas finais
logo após o ponto de exclamação) são exibidas
três mensagens de erro. Isso se deve ao fato de um erro
poder causar inconsistência no restante do código, gerando
outros erros em cascata durante o processo de compilação.
DICA:
Para corrigir
os erros retornados pelo processo de compilação
sempre comece pelo erro localizado nas primeiras linhas de código
deste modo
erros decorrentes por inconsistência de código são
eliminados.
DICA:
A linguagem C é sensível a letras maiúsculas
e minúsculas. Deste modo deve ser dada atenção
durante a digitação do programa, caso contrário
vários tipos de erros podem ser gerados. Um tipo bastante
comum de erro é digitar a letra inicial do nome de uma funçao
em maiúsculo. Como a declaração correta da
função "main" é toda minúscula
Seria apresentado um erro de compilação semelhante
ao seguinte, caso o nome da função fosse escrito
com inicial maiúscula ("Main"):
Linked error: Undifined symbol _main
in module TURBO_C\COS.ASM
|
1.4 - Estrutura
Básica de um programa C
De
forma geral programas escritos em linguagem C são compostos
basicamente por funções. Cada função,
por si própria pode chamar outras funçoes para a execução
como na função "main" implementada
no exemplo anterior. Todos os programas C possuem declarada a
função principal (main) que é onde
o programa inicia sua execução após ter sido
compilado e executado.
A
medida que mais tarefas se tornam necessárias na execução
de um programa, mais comandos devem ser inseridos. Ainda utilizando
o programa exemplo anterior, se fosse desejado que mais mensagens
fosse apresentadas na tela durante a execução da
funçao "main", mais comandos (chamadas
à função "printf") podem
ser inseridos entre o abrir e fechar de colchetes que delimitam
o conteúdo da função "main",
da seguinte forma:
#include <stdio.h>
void main (void)
{
printf
("Hello World! ");
printf
("Este e´ o primeiro programa");
}
|
Compilando
e executando o programa anterior será apresentada a seguinte
saída de tela:
Hello World! Este e´
o primeiro programa
|
No mesmo exemplo, tem-se a utilização de uma outra
função "printf" que exibe uma mensagem
na tela durante a execução do programa. Esta função
nao está implementada no programa e por isso o comando
"include" é utilizado logo no início
do programa. Ele indica arquivos externos onde estão as
implementações de funções utilizadas
no programa principal, anexando estas implementações
durante a fase de compilação. No exemplo é
anexado o arquivo "stdio.h".
1.5
- Compreendendo erros lógicos
Muitas
vezes o código fonte é compilado sem que nenhum
erro de sintaxe seja apresentado mas o programa compilado não
funciona da forma como se desejaria. Neste caso podem existir
erros de lógica na estrutura e organização
do programa. Um exemplo de erro lógico seria o do programa
onde deseja-se apresentar duas mensagens, uma em cada linha:
#include <stdio.h>
void main (void)
{
printf
("Mensagem da linha um");
printf
("Mensagem da linha dois");
}
|
O
programa compilará normalmente, sem erros, entretando tem-se
a seguinte saída de tela:
Mensagem da linha um Mensagem
da linha dois
|
DICA:
Os caracteres "\n" inseridos ao final de cada
frase instruem a função "printf"
a pular para a próxima linha após a mensagem ter
sido apresentada na tela.
O
processo de remover erros lógicos de um programa é
chamado de depuração que pode consistir de
simples verificação de cada linha de código
manualmente, ao que se dá o nome de verificação
de mesa.
1.6 - Arquivos de Cabeçalho
Como
já citado na sessão 1.4, na maioria dos programas
C é necessária a inserção da diretiva
de compilação #include no código
do programa. Ela indica ao compilador para incluir um arquivo
de cabeçalho na fase de compilação. Tal
arquivo de cabeçalho nada mais é do que outro arquivo
texto (ASCII) onde estão implementadas em C as funções
mais comumente utilizadas, como, por exemplo, a função
printf. Quando encontra tal diretiva o compilador concatena
o conteúdo do arquivo de cabeçalho na sequência
de código do programa principal, o que tem o mesmo efeito
se todo o código do arquivo de cabeçalho fosse digitado
no programa principal.
DICA:
Dependendo do compilador utilizado a localização
dos arquivos de cabeçalho é configurada de acordo
com variáveis de ambiente do sistema operacional. Caso,
ao compilar um programa, seja exibida uma mensagem dizendo que
não foi possível abrir algum arquivo de cabeçalho
deve-se verificar se a variável de ambiente INCLUDE
está configurada. Caso não esteja configurada isto
pode ser feito com o comando SET do DOS, como mostrado no quadro
a seguir:
DICA:
Durante a fase de compilação de um programa
vários arquivos temporários são criados pelo
compilador. Para melhor organizar o local onde os arquivos temporários
são criados e melhorar o desempenho do compilador é
recomendável a configuração da variável
de ambiente TEMP, também mostrada no quadro a seguir.
Desta forma o compilador é instruído a gravar os
arquivos temporários no diretório configurado que
preferencialmente deve ser um disco com maior espaço livre
e melhor velocidade.
Variáveis
de ambiente antes da configuração
C:\> SET <ENTER>
COMSPEC=C:\DOS\COMMAND.COM
PATH=C:\DOS;C:\WINDOWS;C:\BORLANDC\BIN
PROMPT=$P$G
|
Variáveis
de ambiente depois da configuração
C:\> SET INCLUDE=C:\BORLANDC\INCLUDE
C:\> SET TEMP=C:\TEMP
C:\> SET <ENTER>
COMSPEC=C:\DOS\COMMAND.COM
PATH=C:\DOS;C:\WINDOWS;C:\BORLANDC\BIN
PROMPT=$P$G
INCLUDE=C:\BORLANDC\INCLUDE
TEMP=C:\TEMP
|
1.7
- Mensagens de Advertência do Compilador
Muitas
vezes, apesar de serem exibidas mensagens de erro, o compilador
ainda consegue gerar um executável. Estas mensagens são
mensagens de advertência e, do mesmo modo que mensagens
de erro de sintaxe, devem ser corrigidas. Elas indicam a presença
de erros que podem gerar resultados imprevisíveis no programa
ou ainda provocar erros em cascata mais graves na sequência
do código, tornando mais difícil a sua depuração.
Embora
tais mensagens de advertência sejam de grande importância
elas podem ser desativadas caso seja necessário. Isto pode
ser feito com uma diretiva de compilação
chamada pragma. Por exemplo, se for desejado que
a mensagem de advertência "Identifier is declared
but never used" seja desativada basta inserir no início
do código do programa a seguinte linha:
1.8
- Organização do Código
Toda
vez que um novo programa for criado deve-se ter em mente que ele
deve ser escrito de uma forma que facilite a sua leitura e compreensão
por outra pessoa. Um bom programa é aquele que não
só funciona e retorna os resultados desejados, como também
é aquele que é fácil de se ler e compreender.
1.8.1
- Comentários
A
chave para se criar programas legíveis é a inclusão
de comentários que explicam o sentido do processamento
do programa e também inserir linhas em branco como separadores
para blocos de processamento. Linhas de comentários são
ignorados pelo compilador durante a fase de compilação
e podem ser inseridos de duas formas:
- Utilizando
o par de símbolos "/*" e "*\"
que delimitam o início e o fim do comentário,
respecitivamente.
- Utilizando
os símbolos "//" no início de
uma linha, o que indica que toda a linha é um comentário
e deve ser ignorada pelo compilador.
DICA:
Uma utilização bastante útil de comentários
é quando da necessidade de se "desativar" algumas
partes do código. Desta forma estas partes podem ser englobadas
pelos símbolos anteriores e serem ignoradas pelo processo
de compilação, como mostrado no quadro a seguir,
onde as duas linhas com funções printf foram
transformadas em comentários:
#include <stdio.h>
void main(void)
{
//printf("linha
transformada em comentário");
/*
printf("linha
transformada em comentário");
*/
}
|
1.8.2
- Nomes de Funções x Portabilidade
Algumas
implementações de funções em C variam
de um sistema operacional para outro, assim como seus nomes. É
comum encontrar-se nomes de funções da forma "__chmode"
para o sistema DOS e a mesma função com o nome "chmode"
em sistemas UNIX. Desta forma as vezes torna-se necessária
programação adicional para garantir portabilidade
de código entre sistemas operacionais diferentes.
Na
maioria das vezes funções que têm seus nomes
iniciados com os símbolos "__" ou são
funções específicas de um determinado sistema
operacional ou não são completamente implementadas
e, assim sendo, deve-se evitar sua utilização procurando
substituí-las por funções semelhantes e portáveis.
1.8.3
- Ponto-e-vírgula
Como visto anteriormente, programas
são uma sequência lógica de comandos ou funções
com a finalidade de realizar uma tarefa. A maneira adotada pela
linguagem C de separar cada comando (ou instruções)
é delimitando o final de cada uma delas com o caractere
de ponto-e-vírgula ";". Desta forma o
compilador consegue identificar onde termina uma linha de programa
e onde começa a seguinte. A utilização do
ponto-e-vírgula é obrigatória pois podem
ocorrer situações onde funções C podem
ser tão grandes a ponto de utilizarem duas ou mais linhas.
Nesta situação o compilador procurará o final
da função através da localização
do ponto-e-vírgula.

1.9 - Exercício
1) Elabore um programa em C, o qual solicita ao usuário um certo valor em centímetros.
Converta esse valor para metros e mostre a resposta.
|