1 - Computadores e Programação
1.1 Introdução...........................................................................................................................................1
1.2 Computador, a grande revolução do século XX....................................................................................2
1.3 O que é um computador?.....................................................................................................................3
1.4 Qual é a utilidade de um computador?...................................................................................................4
1.5 Classe de problemas que o computador resolve....................................................................................5
1.6 Organização interna de um computador.................................................................................................6
1.7 O que é o sistema operativo?................................................................................................................10
1.8 Linguagens de programação..................................................................................................................11
1.8.1 Linguagem máquina........................................................................................................................12
1.8.2 Linguagens de baixo nível...............................................................................................................12
1.8.3 Linguagens de alto nível..................................................................................................................13
1.8.4 Que linguagem se deve usar para ensinar programação?..................................................................17
1.9 Paradigmas de programação..................................................................................................................18
1.10 Fases do desenvolvimento de uma aplicação........................................................................................24
1.10.1 Análise do problema.....................................................................................................................24
1.10.2 Implementação da aplicação.........................................................................................................28
1.11 Princípios a ter em conta no desenvolvimento de software de qualidade...............................................31
1.12 O sistema operativo UNIX..................................................................................................................33
1.12.1 Identificação dos utilizadores.........................................................................................................34
1.12.2 Organização da memória de massa................................................................................................35
1.12.3 O interpretador de comandos (shell).............................................................................................36
1.12.4 Os comandos mais usuais do UNIX..............................................................................................37
1.12.5 Redireccionamento de entrada/saída de comandos.........................................................................41
1.12.6 Compilação de ficheiros em linguagem C.......................................................................................42
1.12.7 Execução de programas................................................................................................................44
Leituras Recomendadas...............................................................................................................................46
2 - Algoritmos
2.1 Introdução.............................................................................................................................................49
2.2 Especificação do problema.....................................................................................................................50
2.3 Algoritmos e suas características.............................................................................................................51
2.4 Decomposição hierárquica da solução....................................................................................................52
2.5 Regras gramaticais do pseudocódigo......................................................................................................54
2.6 Modelos de algoritmos...........................................................................................................................64
2.6.1 Modelo básico................................................................................................................................64
2.6.2 Modelo básico modificado à entrada...............................................................................................64
2.6.3 Modelo básico modificado à saída..................................................................................................75
2.7 O problema dos alumínios......................................................................................................................86
Exercícios....................................................................................................................................................95
Leituras Recomendadas..............................................................................................................................100
3 - Representação da Informação
3.1 Introdução............................................................................................................................................101
3.2 Sistemas de numeração.........................................................................................................................102
3.2.1 O sistema de numeração decimal....................................................................................................102
3.2.2 O sistema de numeração binário.....................................................................................................103
3.2.3 Os sistemas de numeração octal e hexadecimal...............................................................................104
3.2.4 Conversão decimal para binário......................................................................................................105
3.3 Representação de quantidades inteiras...................................................................................................106
3.3.1 Representação em sinal e módulo...................................................................................................106
3.3.2 Representação em complemento para um.......................................................................................107
3.3.3 Representação em complemento para dois.....................................................................................109
3.4 Aritmética inteira...................................................................................................................................111
3.5 Representação de quantidades reais......................................................................................................114
3.6 Aritmética real......................................................................................................................................119
3.7 Representação de símbolos..................................................................................................................123
3.8 Big Endien versus Little Endien.........................................................................................................124
Exercícios..................................................................................................................................................125
Leituras Recomendadas..............................................................................................................................126
4 - Introdução à Linguagem C
4.1 Introdução...........................................................................................................................................127
4.2 A estrutura de um programa em C........................................................................................................128
4.3 Elementos básicos da linguagem C........................................................................................................131
4.4 Representação da informação...............................................................................................................134
4.5 Tipos de dados predefinidos.................................................................................................................135
4.6 Tipos de dados aritméticos...................................................................................................................135
4.6.1 Tipos de dados inteiros..................................................................................................................136
4.6.2 Tipos de dados reais......................................................................................................................137
4.6.3 Tipo de dados carácter..................................................................................................................138
4.7 Constantes e variáveis...........................................................................................................................139
4.8 Sequenciação........................................................................................................................................142
4.8.1 Expressões.....................................................................................................................................143
4.8.2 Operadores....................................................................................................................................147
4.8.3 Instruções de atribuição..................................................................................................................151
4.9 Exemplo de um programa......................................................................................................................155
4.10 Tipo de dados enumerado...................................................................................................................157
4.11 Tipo de dados void.............................................................................................................................159
4.12 Tipo de dados ponteiro.......................................................................................................................160
4.13 Bibliotecas de execução ANSI............................................................................................................164
4.13.1 Biblioteca ctype............................................................................................................................165
4.13.2 Biblioteca math.............................................................................................................................166
4.13.3 Biblioteca errno............................................................................................................................169
4.13.4 Biblioteca stdlib............................................................................................................................170
Exercícios....................................................................................................................................................173
Leituras Recomendadas...............................................................................................................................174
5 - Estruturas de Controlo
5.1 Introdução.............................................................................................................................................175
5.2 Instruções decisórias..............................................................................................................................175
5.2.1 A instrução decisória binária if........................................................................................................176
5.2.2 A instrução decisória múltipla switch..............................................................................................179
5.2.3 Comparação das instruções decisórias............................................................................................180
5.3 Instruções repetitivas.............................................................................................................................181
5.3.1 As instruções repetitivas do while e while.......................................................................................181
5.3.2 A instrução repetitiva for................................................................................................................184
5.3.3 Ciclos repetitivos imbricados..........................................................................................................186
5.3.4 Ciclos repetitivos infinitos...............................................................................................................187
5.3.5 A instrução nula.............................................................................................................................188
5.3.6 As instruções de salto break e continue........................................................................................188
5.4 Exemplos..............................................................................................................................................190
Exercícios...................................................................................................................................................193
Leituras Recomendadas..............................................................................................................................197
6 - Entrada e Saída de Dados Formatadas
6.1 Introdução............................................................................................................................................199
6.2 Interacção entre a aplicação e o utilizador..............................................................................................201
6.3 Entrada de dados..................................................................................................................................202
6.3.1 Leitura de caracteres......................................................................................................................204
6.3.2 Leitura de valores numéricos...........................................................................................................206
6.3.3 Leitura de valores enumerados........................................................................................................209
6.3.4 O especificador de conversão %n...................................................................................................210
6.4 Saída de dados......................................................................................................................................210
6.4.1 Escrita de caracteres.......................................................................................................................213
6.4.2 Escrita de valores numéricos...........................................................................................................214
6.4.3 Escrita de valores enumerados........................................................................................................216
6.4.4 Escrita de ponteiros........................................................................................................................216
6.4.5 O especificador de conversão %n...................................................................................................216
Exercícios....................................................................................................................................................217
Leituras Recomendadas...............................................................................................................................218
7 - Programação Procedimental
7.1 Introdução.............................................................................................................................................219
7.2 Subprogramas........................................................................................................................................221
7.3 Funções da linguagem C.........................................................................................................................222
7.3.1 Definição de uma função..................................................................................................................223
7.3.2 Alusão de uma função......................................................................................................................224
7.3.3 Invocação de uma função................................................................................................................225
7.3.4 Uso indevido de funções..................................................................................................................226
7.3.5 Procedimentos na linguagem C.........................................................................................................226
7.3.6 Parâmetros formais..........................................................................................................................227
7.3.7 Exemplos simples.............................................................................................................................229
7.4 Exemplos avançados...............................................................................................................................233
7.5 Organização de um programa em subprogramas......................................................................................244
7.6 Classes de armazenamento......................................................................................................................245
7.7 Visibilidade dos objectos.........................................................................................................................247
7.8 Subprogramas recursivos.........................................................................................................................250
7.9 Ponteiros para funções.............................................................................................................................251
7.10 Manipulação da memória pilha...............................................................................................................251
Exercícios......................................................................................................................................................256
Leituras Recomendadas.................................................................................................................................259
8 - Sequências e Ponteiros
8.1 Introdução...............................................................................................................................................261
8.2 Características das sequências..................................................................................................................262
8.2.1 Declaração de uma sequência............................................................................................................262
8.2.2 Inicialização de uma sequência...........................................................................................................264
8.2.3 Sequências como parâmetros de subprogramas..................................................................................264
8.2.4 Exemplo............................................................................................................................................266
8.3 Exemplos mais complexos.........................................................................................................................269
8.4 Ponteiros..................................................................................................................................................284
8.4.1 Dualidade ponteiro sequência.............................................................................................................284
8.4.2 Aritmética de ponteiros......................................................................................................................285
8.4.3 Acesso indexado versus acesso por ponteiro......................................................................................286
8.4.4 Sequências de ponteiros e ponteiros para sequências..........................................................................287
8.4.5 Sequências de ponteiros para funções................................................................................................288
8.5 Sequências bidimensionais........................................................................................................................289
8.5.1 Exemplo de processamento de matrizes.............................................................................................293
8.5.2 Dualidade ponteiro sequência............................................................................................................300
8.6 Sequências tridimensionais........................................................................................................................301
8.7 Considerações finais sobre sequências......................................................................................................304
Exercícios......................................................................................................................................................306
Leituras Recomendadas.................................................................................................................................310
9 - Sequências de Caracteres
9.1 Introdução...............................................................................................................................................311
9.2 Características das sequências de caracteres............................................................................................312
9.2.1 Declaração e inicialização de sequências de caracteres......................................................................312
9.2.2 Atribuição de sequências de caracteres.............................................................................................314
9.2.3 Sequências de caracteres versus caracteres.......................................................................................315
9.2.4 Leitura de sequências de caracteres...................................................................................................315
9.2.5 Escrita de sequências de caracteres...................................................................................................318
9.2.6 Sequências de caracteres como parâmetros de subprogramas............................................................319
9.2.7 Considerações finais sobre sequências de caracteres..........................................................................320
9.3 Exemplos.................................................................................................................................................320
9.4 Biblioteca string........................................................................................................................................327
9.5 Exemplo avançado...................................................................................................................................333
9.6 Conversão de sequências de caracteres....................................................................................................334
9.7 Sequências de sequências de caracteres...................................................................................................336
Exercícios......................................................................................................................................................340
Leituras Recomendadas.................................................................................................................................344
10 - Estruturas
10.1 Introdução.............................................................................................................................................345
10.2 Características das estruturas.................................................................................................................346
10.2.1 Declaração de estruturas.................................................................................................................346
10.2.2 Inicialização de estruturas................................................................................................................348
10.2.3 Acesso aos campos das estruturas..................................................................................................349
10.2.4 Atribuição de estruturas..................................................................................................................350
10.2.5 Leitura e escrita de estruturas..........................................................................................................350
10.2.6 Estruturas como parâmetros de subprogramas................................................................................352
10.2.7 Estruturas como resultado de saída de funções...............................................................................353
10.2.8 Campos de estruturas de tipo sequência.........................................................................................354
10.2.9 Estruturas hierárquicas...................................................................................................................354
10.2.10 Estruturas ligadas.........................................................................................................................355
10.3 Exemplo...............................................................................................................................................356
10.4 Uniões..................................................................................................................................................361
10.5 Sequências de estruturas.......................................................................................................................361
10.6 Exemplo da construção de uma base de dados......................................................................................362
10.7 Exemplos de definição de estruturas de dados.......................................................................................368
Exercícios.....................................................................................................................................................370
Leituras Recomendadas................................................................................................................................374
11 - Ficheiros
11.1 Introdução............................................................................................................................................375
11.2 Fluxos de comunicação.........................................................................................................................376
11.3 Abertura de um fluxo de comunicação...................................................................................................377
11.4 Fecho de um fluxo de comunicação.......................................................................................................380
11.5 Fluxos de texto.....................................................................................................................................381
11.5.1 Leitura de um fluxo de texto...........................................................................................................381
11.5.2 Escrita num fluxo de texto..............................................................................................................384
11.5.3 Leitura e escrita de linhas de texto..................................................................................................385
11.5.4 Considerações sobre os fluxos de texto standard..........................................................................386
11.6 Passagem de argumentos na linha de comando......................................................................................387
11.7 Exemplos.............................................................................................................................................388
11.7.1 Exemplos simples de utilização de ficheiros de texto.......................................................................388
11.7.2 Gestão de uma base de dados com ficheiros de texto.....................................................................395
11.8 Fluxos binários.....................................................................................................................................399
11.8.1 Leitura e escrita de fluxos binários..................................................................................................399
11.8.2 Gestão de uma base de dados com ficheiros binários.....................................................................400
11.9 Funções para colocação do indicador de posição.................................................................................401
11.10 Esvaziamento do armazenamento tampão...........................................................................................403
11.11 Exemplo da manutenção de uma base de dados.................................................................................403
11.12 Funções para operar sobre ficheiros...................................................................................................418
Exercícios....................................................................................................................................................418
Leituras Recomendadas...............................................................................................................................422
12 - Introdução à Pesquisa e Ordenação
12.1 Introdução...........................................................................................................................................423
12.2 Complexidade algorítmica....................................................................................................................424
12.3 Pesquisa..............................................................................................................................................426
12.3.1 Pesquisa sequencial......................................................................................................................428
12.3.1.1 Pesquisa sequencial............................................................................................................428
12.3.1.2 Pesquisa do maior valor de uma sequência..........................................................................429
12.3.1.3 Pesquisa do menor valor de uma sequência.........................................................................430
12.3.1.4 Pesquisa do primeiro valor que serve..................................................................................430
12.3.1.5 Pesquisa do melhor valor que serve....................................................................................431
12.3.1.6 Pesquisa do pior valor que serve.........................................................................................431
12.3.1.7 Exemplificação dos algoritmos de pesquisa sequencial.........................................................432
12.3.2 Pesquisa binária............................................................................................................................433
12.3.3 Comparação entre as pesquisas sequencial e binária......................................................................435
12.4 Ordenação..........................................................................................................................................436
12.4.1 Ordenação por selecção...............................................................................................................437
12.4.2 Ordenação por troca....................................................................................................................439
12.4.3 Ordenação por inserção...............................................................................................................442
12.4.4 Comparação dos algoritmos de ordenação...................................................................................444
12.5 Ordenação por fusão..........................................................................................................................445
Exercícios...................................................................................................................................................447
Leituras Recomendadas..............................................................................................................................450
Índice Remissivo