|
Aula 4: Introdução à Programação
|
|
Traduzido por Ana Paula Costa
Qualquer programa não é mais do que um conjunto de instruções
para o computador. O computador irá executar um comando a seguir
ao outro, em princípio na ordem pela qual os comandos foram escritos
(com excepção das instruções chamadas estruturas
de controlo que serão estudadas mais tarde). O computador fará
exactamente aquilo que lhe dissermos para fazer, nada mais, nada menos.
Mais ainda, é preciso dar (escrever) cada instrução
com muito cuidado. O computador "compreende" apenas as coisas que lhe ensinamos
a compreender.
Engenharia de Software
Criar programas consiste sempre dos seguintes passos:
-
Pensar! Estudar e analisar o problema. Recolher informação.
Encontrar uma solução possível. Não tocar ainda
no teclado! Utilizar lápis e papel.
-
Escrever um programa. Utilizar um qualquer editor para escrever o programa.
-
Eliminar os erros do programa (fazer o "debuggin"). Existem vários
tipos de erros:
-
erros de compilação. Erros de escrita do código (Por
exemplo quando se escreve prinntf em vez de printf). São erros fáceis
de eliminar; o compilador dá uma ajuda apresentado uma mensagem
de erro como por exemplo "type-mismatch error in line 34"
-
erros de programação. Por exemplo esquecer de inicializar
(atribuir um certo valor) as variáveis. Isto pode também
causar os chamados "run-time errors", por exemplo "division by zero error".
-
erros de lógica (por exemplo, não se saber que a Regra de
Pitágoras é a2 + b2 = c2).
O programa irá correr sem gerar erros mas o resultado não
será aquele que se esperava.
-
Analisar o resultado. É isto que se pretende? Talvez o programa
tenha escrito "A raíz quadrada de 9 é 4", claramente um resultado
diferente do pretendido.
-
Se necessário, repetir os passos 3,2 ou mesmo 1.
Demorar mais tempo no ponto 1 significa muitas vezes poupar muito tempo
nos outros passos. |
|
The First Computer Bug
Grace Murray Hopper, working in a temporary World War I building
at Harvard University on the Mark II computer, found the first computer
bug beaten to death in the jaws of a relay. She glued it into the logbook
of the computer and thereafter when the machine stops (frequently) they
tell Howard Aiken that they are "debugging" the computer. The very first
bug still exists in the National Museum of American History of the Smithsonian
Institution. Edison had used the word bug and the concept of debugging
previously but this was probably the first verification that the concept
applied to computers.(copiado de http://www./firstcomputerbug.html) |
A linguagem de programação C
A linguagem C foi inventada nos Laboratórios Bell (Bell Labs)
em 1971-9173. Foi uma evolução da linguagem B, que por sua
vez foi baseada em BCPL. Em 1983 a linguagem foi standarizada e tornou-se
numa versão oficial. É provavelmente a linguagem de programação
mais utilizada do mundo.
A evolução do C andou de mãos dadas com a evolução
do sistema operativo UNIX que vamos usar nas nossas aulas (na forma de
Linux, que é uma variante gráfica do UNIX). De facto, o próprio
UNIX foi escrito em C.
Um programa é uma sequência de instruções,
que informam o computador sobre uma tarefa específica que nós
queremos que ele realize.
A maioria das linguagens de programação modernas têm
um formato muito legível, próximo do Inglês, tornando
fácil a sua leitura e escrita por parte dos humanos. Isto contrasta
com as linguagens de programação mais antigas, que eram mais
próximas da linguagem que o computador compreende. Ver por exemplo
a linguagem assembler (aula 2).
Um programa muito simples em C:
#include <stdio.h>
main()
{
printf("Hello World\n");
}
Vamos dar uma espreitadela a este programa.
-
Todas as linhas que começam com o símbolo # são instruções
para o compilador ou lincador em vez de comandos que serão executados
na altura em que o programa estiver a correr ("run-time"). #include <stdio.h>
significa que a biblioteca stdio ("standard input-output") tem que ser
incluída pelo compilador de forma a que possa compreender o que
vem a seguir. Iremos usar o comando printf que faz parte da biblioteca
stdio.
-
Nós podemos escrever os nossos próprios procedimentos e funções
(ver a aula sobre programação modular).
-
"main" é uma função especial. A primeira instrução
desta função é sempre a primeira instrução
a ser executada. Nas primeiras semanas iremos escrever instruções
apenas nesta função.
-
Assim, a instrução printf("HellowWorld\n") é
executada primeiro e uma vez que é a única instrução
o programa termina. A instrução escreve o texto Hello
World no écran e muda para a próxima linha (\n).
Palavras Reservadas em ANSI C
auto
break
case
char
continue
default
do
double
else
extern |
float
for
goto
if
int
long
register
return
short
sizeof() |
static
struct
switch
typedef
union
unsigned
void
while |
De notar que existe apenas uma função definida na linguagem
C, a função sizeof(). Todas as outras funções
são descritas nas chamadas bibliotecas. Por exemplo, a função
printf pode ser encontrada na biblioteca stdio. Assim sendo, para o compilador
reconhecer a função printf é necessário colocar
a directiva #include <stdio.h> no início do código.
Identificadores
Identificadores, como o próprio nome indica, são utilizados
para identificar coisas. Podem ser nomes de funções
e nomes de variáveis. Iremos ver isso nas próximas
aulas. Como na maioria das linguagens, os nomes dos identificadores em
C têm algumas restrições:
-
Devem começar por uma letra; "20hours" não é permitido.
-
Seguido de qualquer combinação de letras, dígitos
ou o caracter "_" ("underscore").
-
Espaços não são permitidos, nem caracteres como "(",
"{", "[", "%", "#", "?", etc, com excepção de "_". A razão
de ser desta restrição tem a ver com o facto destes caracteres
serem utilizados para outros fins em C. São chamados caracteres
reservados.
{ } [ ] ( ) - = + / ? < > . , ; : ' " ! @ # $ % ^ & * ~
` \ | |
-
Identificadores não podem ser iguais a palavras reservadas
(e funções pré-definidas) do C, tais como "main" ou
"int". De notar que identificadores como "main1", "main_" or "Main" são
permitidos, embora seja aconselhável evitar este tipo de nomes que
podem criar confusão. Nota: Em muitos ambientes de programação,
é fácil de perceber quando se está a utilizar uma
palavra reservada, porque esta irá mudar de cor quando for escrita.
-
É importante escolher bem os identifacadores. Quando uma variável
é usada para armazenar uma taxa de interesse, deve-se chamar, por
exemplo "interesse" e não "variavel1". Apesar de não ser
errado chamar-lhe "variavel1", é muito mais inteligente dar-lhe
um nome com mais significado. Isto ajuda as pessoas a compreenderem o programa
(e até mesmo o próprio criador do programa quando tem que
voltar a trabalhar nele depois de muito tempo).
-
O tamanho mínimo dos identificadores é 1, e o tamanho máximo
é 255. Deve-se fazer uso desta possibilidade de utilizar nomes longos,
mas convém não esquecer que os nomes demasiado longos podem
tornar o programa ilegível. É preciso encontrar um meio termo.
Qual dos exemplos seguintes é melhor?
r = r + a;
money = money + interest;
themoneyintheaccountofpersonwithnameJohnson
= themoneyintheaccountofpersonwithnameJohnson + thecurrentinterestrateatthetimeofthiswriting;
-
A linguagem C distingue entre minúsculas e maiúsculas, é
"case sensitive", "i" não é igual a "I", etc. Para tornar
os programas mais legíveis, deve-se seguir a mesma convenção
durante todo o programa. A convenção mais utilizada é
minúsculas para variáveis e MAIÚSCULAS para CONSTANTES.
Programação Estruturada
O mais
importante em programação é escrever programas claros,
lógicos e estruturados.
-
Deve-se utilizar nomes com significado para as variáveis,
procedimentos e funções.
-
Utilizar a indentação. Comparando os dois programas
que se seguem:
#include <stdio.h> main() {printf("Hello
world!\n")}
e
#include <stdio.h>
main()
{
printf("Hello world!\n")
}
Ambos os programas fazem exactamente o mesmo, mas o segundo é
muito mais legível. A diferença está
-
Em colocar apenas uma instrução por linha.
-
Em usar a indentação. Colocar mais (2) espaços no
início da linha sempre que se avança um nível nas
estruturas.
-
Em separar blocos de texto (funções e procedimentos) com
linhas em branco.
-
Evitar o uso da instrução "goto". Com estas instruções,
o programa rapidamente fica a parecer "esparguete". Enquanto em BASIC (Beginner's
All-purpose Symbolic Instruction Code) a utilização da instrução
GOTO é inevitável, em qualquer auto-respeitável linguagem,
a instrução goto deve ser evitada.
-
Comentário. Uma vez que o C é praticamente Inglês,
o programa deveria explicar-se a si mesmo. Ainda assim, em situações
em que a ideia do programa possa não ser clara para o programador,
deve-se usar comentários. Em C os comentários são
colocados após // numa linha única, ou entre /*
e */ para comentários que ocupem várias linhas.
-
Utilizar funções sempre que isso torne o texto mais
organizado. Se em muitos locais diferentes o programa tem que fazer basicamente
o mesmo (por exemplo ler uma linha de texto de um ficheiro), deve-se considerar
colocar esse código num procedimento ou função (por
exemplo FileReadLn()). Isto torna o programa mais legível, mais
eficiente e mais curto.
main(l
,a,n,d)char**a;{
for(d=atoi(a[1])/10*80-
atoi(a[2])/5-596;n="@NKA\
CLCCGZAAQBEAADAFaISADJABBA^\
SNLGAQABDAXIMBAACTBATAHDBAN\
ZcEMMCCCCAAhEIJFAEAAABAfHJE\
TBdFLDAANEfDNBPHdBcBBBEA_AL\
H E L L O, W O R L D! "
[l++-3];)for(;n-->64;)
putchar(!d+++33^
l&1);} |
Olhe, neste exemplo da linguagem C aqui acima. Isto é um exemplo
de mal programação. Percebe o que é que o programa
faz? Mesmo os especialistas profesionalistas não conseguem determinar
o que é que o programa faz. Se quiser saber o que é que o
programa faz, clique aqui.
(programa copiado de http://www.ioccc.org/)
Teste Rápido:
Para testar os conhecimentos sobre o que aprendeu nesta aula, prima
aqui para fazer um teste on-line. De notar que este Não é
o formato que será utilizado no teste final!
Peter Stallinga. Universidade do Algarve, 14 outubro 2002