• Nenhum resultado encontrado

Programação de Computadores em C

N/A
N/A
Protected

Academic year: 2021

Share "Programação de Computadores em C"

Copied!
10
0
0

Texto

(1)

Programa¸

ao de Computadores

em C

Primeira edi¸

ao

Carlos Camar˜

ao

Universidade Federal de Minas Gerais

Doutor em Ciˆencia da Computa¸c˜ao pela Universidade de Manchester, Inglaterra

Luc´ılia Figueiredo

Universidade Federal de Ouro Preto

Doutora em Ciˆencia da Computa¸c˜ao pela UFMG

Direitos exclusivos

Copyright c 2009 by Carlos Camar˜ao e Luc´ılia Figueiredo ´

E permitida a duplica¸c˜ao ou reprodu¸c˜ao deste volume, no todo ou em parte, sob quaisquer formas ou por quaisquer meios (eletrˆonico, mecˆanico, grava¸c˜ao, fotoc´opia, distribui¸c˜ao na Web ou outros), desde que seja para fins n˜ao comerciais.

(2)

Sum´

ario

Pref´acio vii

(3)
(4)

Pref´

acio

Este livro se prop˜oe a acompanh´a-lo no in´ıcio de um longo caminho, que ´e o do desenvolvi-mento do racioc´ınio necess´ario para constru¸c˜ao de programas bem feitos. Para isto, o livro aborda conceitos b´asicos de programa¸c˜ao de computadores, de forma que posteriormente assuntos mais avan¸cados possam ser abordados.

Conte´

udo e Organiza¸

ao do Livro

Este livro foi concebido para ser utilizado como texto did´atico em cursos introdut´orios de programa¸c˜ao, de n´ıvel universit´ario. O conte´udo do livro n˜ao pressup˜oe qualquer conhecimento ou experiˆencia pr´evia do leitor em programa¸c˜ao, ou na ´area de computa¸c˜ao em geral, requerendo apenas conhecimentos b´asicos de matem´atica, usualmente abordados nos cursos de primeiro e segundo graus. O livro adota a linguagem de programa¸c˜ao C (veja no anexo A uma discuss˜ao sobre essa escolha).

Como estudaremos daqui a pouco, a linguagem C ´e uma linguagem imperativa. Uma vis˜ao geral sobre os conceitos b´asicos da programa¸c˜ao imperativa ´e apresentada inicialmente, com o objetivo de favorecer uma compreens˜ao global sobre o significado e o prop´osito dos conceitos empregados nesse estilo de programa¸c˜ao, facilitando assim um melhor entendimento da aplica¸c˜ao dos mesmos na constru¸c˜ao de programas. Cada um desses conceitos ´e abordado mais detalhadamante em cap´ıtulos subsequentes, por meio de exemplos ilustrativos e exerc´ıcios.

Al´em desses conceitos b´asicos, o livro aborda tamb´em, de maneira introdut´oria, os seguintes t´opicos adicionais: entrada e sa´ıda de dados em arquivos, e manipula¸c˜ao de estruturas de dados como arranjos e listas encadeadas.

Recursos Adicionais

Uma p´agina na Internet associada a este livro pode ser encontrada no endere¸co: http://www.dcc.ufmg.br/~camarao/ipcc

O texto desse livro e os c´odigos da maioria dos programas apresentados no livro como exemplos encontram-se dispon´ıveis nesta p´agina. Outros recursos dispon´ıveis incluem sugest˜oes de exerc´ıcios adicionais e projetos de programa¸c˜ao, transparˆencias para uso em cursos baseados neste livro e referˆencias para outras p´aginas da Internet que contˆem informa¸c˜oes sobre a linguagem C ou sobre ferramentas para programa¸c˜ao nessa linguagem.

H´a diversas p´aginas na Web com informa¸c˜oes sobre a linguagem C dispon´ıveis na Web, assim como cursos sobre introdu¸c˜ao a prgrama¸c˜ao em C, dentre os quais citamos:

• http://pt.wikibooks.org/wiki/Programar em C: P´aginas Wiki, criadas pela pr´opria co-munidade de usu´arios da Web, sobre programa¸c˜ao em C. A vers˜ao em inglˆes pode ser encon-trada em http://en.wikipedia.org/wiki/C (programming language).

• http://www.ead.cpdee.ufmg.br/cursos/C: Material usado no curso de introdu¸c˜ao a pro-grama¸c˜ao em C ministrado no Departamento de Engenharia El´etrica da UFMG.

• http://cm.bell-labs.com/cm/cs/cbook/: The C Programming Language, B. Kernighan & Dennis M. Ritchie, Prentice Hall, 1988.

(5)

viii Pref´acio

• http://publications.gbdirect.co.uk/c book/: P´agina com a vers˜ao gratuita da segunda edi¸c˜ao do livro The C Book , de Mike Banahan, Declan Brady e Mark Doran, publicado pela Addison Wesley em 1991.

• http://www.cyberdiem.com/vin/learn.html: Learn C/C++ today, de V. Carpenter. Uma cole¸c˜ao de referˆencias e tutoriais sobre as linguagens C e C++ dispon´ıveis na Internet. • http://c-faq.com/index.html: Perguntas frequentes sobre a linguagem C, e suas respostas

(em inglˆes).

• http://cm.bell-labs.com/cm/cs/who/dmr/chist.html: “The Development of the C Lan-guage”, Dennis M. Ritchie (Janeiro de 1993).

• http://www.livinginternet.com/i/iw unix c.htm: “History of the C Programming Lan-guage”, Bill Stewart (Janeiro de 2000).

• http://www.cs.ucr.edu/ nxiao/cs10/errors.htm: “10 Common Programming Mistakes in C”.

Livros adicionais sobre a linguagem C incluem:

• A linguagem de programa¸c˜ao padr˜ao ANSI C . B. Kernighan & D.C. Ritchie. Editora Cam-pus, 1990.

• C — completo e total. H. Schildt. Editora McGraw-Hill, 1990.a • C: A Reference Manual , Samuel P. Harbison & Guy L. Steele, 5a

edi¸c˜ao, Prentice Hall, 2002. • C Programming: A Modern Approach, K.N. King, Norton, 2008.

E divirta-se assistindo:

(6)
(7)

Referˆ

encias Bibliogr´

aficas

[1] Andrew Tanenbaum. Organiza¸c˜ao Estruturada de Computadores. LTC (tradu¸c˜ao), 2001. [2] Cordelia Hall, John O’Donnell. Discrete Mathematics Using a Computer. Springer, 2000. [3] David Patterson, John Hennessy. Computer Organization and Design: The Hardware Sofwtare

Interface. Morgan Kaufmann, 2a

edition, 2002.

[4] Keith Devlin. Mathematics: The New Golden Age. Penguin Books & Columbia University Press, 1999.

[5] Roger Penrose. The Emperor’s New Mind: Concerning Computers, Minds and The Laws of Physics. Oxford University Press, 1989.

[6] Michael Sipser. Introduction to the Theory of Computation. PWS Publishing Company, 1997. [7] Daniel Velleman. How to Prove It: A Structured Approach. Cambridge University Press, 2a

edition, 2006.

[8] William Stallings. Arquitetura e Organiza¸c˜ao de Computadores: Projeto para o Desempenho. Pearson Education do Brasil (tradu¸c˜ao), 5a

(8)
(9)

Apˆ

endice A

Escolha da linguagem C

O livro adota a linguagem de programa¸c˜ao C. A escolha dessa linguagem foi motivada pela neces-sidade de homogeneiza¸c˜ao no ensino de disciplinas introdut´orias de programa¸c˜ao de computadores nos cursos de v´arias universidades (por exemplo, nas disciplinas de Algoritmos e Estruturas de Dados I do Departamento de Ciˆencia da Computa¸c˜ao da Universidade Federal de Minas Gerais). O uso da linguagem C apresenta, reconhecidamente, vantagens no ensino de tais disciplinas para cursos como os de Engenharia El´etrica e Engenharia de Controle e Automa¸c˜ao, por se tratar de linguagem adequada `a chamada programa¸c˜ao de sistemas, na qual se faz acesso direto a disposi-tivos e recursos de hardware. Para tais sistemas, a programa¸c˜ao na linguagem C ´e adequada pois a linguagem permite acesso direto aos dispositivos e recursos de hardware, e portanto bibliotecas e programas que fazem tais acessos diretos ao hardware podem ser mais facilmente encontrados e usados. Para outros cursos, o uso da linguagem C ´e controverso, pelo fato de existir na linguagem uma preocupa¸c˜ao central com eficiˆencia, e possibilidade de acesso direto a ´areas de mem´oria, o que leva, principalmente, a duas consequˆencias indesej´aveis do ponto de vista de um aprendizado em programa¸c˜ao:

1. Ausˆencia, em muitos casos, de verifica¸c˜ao dos chamados erros de tipo. Tais erros ocorrem devido ao uso de valores em contextos inadequados, ou seja, em contextos nos quais n˜ao faz sentido usar tais valores, e portanto nos quais tais valores n˜ao deveriam ser usados.

Grande parte do desenvolvimento das linguagens de programa¸c˜ao nos dias atuais ´e rela-cionado ao objetivo de tornar as linguagens cada vez mais seguras, no sentido de possibilitar a dete¸c˜ao de um n´umero cada vez maior de erros de tipo, e ao mesmo tempo dando flexi-bilidade ao programador, de modo que ele n˜ao tenha que especificar ou mesmo se preocupar com a anota¸c˜ao expl´ıcita de tipos em seus programas, e procurando manter o algoritmo que permite essa dete¸c˜ao de erros simples e eficiente.

2. Mecanismos adequados na linguagem para suporte a abstra¸c˜oes, conceitos e constru¸c˜oes comumente usados em programas, de forma simples e segura. Exemplos de tais mecanismos s˜ao:

• Tipos alg´ebricos: tipos que permitem representar disjun¸c˜ao (“ou”) entre tipos e estru-turas de dados, de modo seguro e simples. Tipos alg´ebricos s˜ao usados comumente, para representar estruturas muito comuns em computa¸c˜ao, tais como:

– enumera¸c˜oes, denotadas por tipos que consistem em uma enumera¸c˜ao de todos os poss´ıveis elementos do tipo, como por exemplo um tipo booleano (cada valor consistindo de falso ou verdadeiro), ou esta¸c˜oes do ano (primavera, ver˜ao, outono ou inverno), etc.;

– alternativas que estendem enumera¸c˜oes de modo a permitir diferentes modos de construir valores, tal como por exemplo uma forma geom´etrica, que pode ser um c´ırculo com o tamanho de seu raio, ou um retˆangulo com os tamanhos de seus dois lados etc.

– estruturas recursivas que estendem alternativas por permitir recursividade na sua defini¸c˜ao, como por exemplo uma lista, que pode ser vazia ou um elemento seguido

(10)

4 Escolha da linguagem C

do restante da lista (tal restante consistindo, recursivamente, de uma lista), uma ´arvore bin´aria, que pode ser uma folha contendo um valor de um determinado tipo ou um par formado por duas sub´arvores, etc.;

• Polimorfismo: tanto de valores (estruturas de dados) que podem ser instanciados para quaisquer tipos, mantendo a mesma forma, quanto de fun¸c˜oes que realizam opera¸c˜oes sobre tais estruturas de dados, que funcionam do mesmo modo, independentemente da instˆancia sobre a qual realizam a opera¸c˜ao.

A ausˆencia de suporte a polimorfismo em C impede, em particular, que existam bibliote-cas com fun¸c˜oes de manipula¸c˜ao de estruturas de dados de prop´osito geral como pilhas, filas, dicion´arios, conjuntos etc., comuns em linguagens mais modernas.

Leitores interessados em tais assuntos podem consultar as notas bibliogr´aficas do Cap´ıtulo ??. Em conclus˜ao, existe um compromisso entre a inten¸c˜ao de formar durante o tempo da gradua¸c˜ao um programador pronto para as necessidades da ind´ustria e o objetivo did´atico primordial que consiste em oferecer uma forma¸c˜ao s´olida aos graduandos nos aspectos te´oricos relacionados `a programa¸c˜ao de computadores. Pelo primeiro motivo, este livro foi escrito na linguagem C. Pelo segundo, se oferecem se¸c˜oes especiais que abordam temas destinados aos estudantes que procurem maior aprofundamento nos conte´udos lecionados.

Referências

Documentos relacionados

3.1.2 Teste in vitro para a avaliação da atividade antibacteriana dos extratos metanólicos A atividade antibacteriana de cada extrato bruto foi avaliada em relação a três

Biólogo, mestre em ciências (Biologia celular e molecular) pelo instituto oswaldo cruz (ioc/Fiocruz) e egresso do curso técnico de Pesquisa em Biologia Parasitária do mesmo

da resposta imune que, frequentemente, resultam em anular a ação de biopatógenos, por meio da ativação do sistema complemento, opsonização dos antígenos para

Esses vírus se ligam a receptores específicos localizados na superfície da membrana celular e entram na célula hospedeira via fusão do envelope viral, com a superfície da célula em

Algumas dificuldades podem ser encontradas quando se deseja de- monstrar este tipo de organela através de microscopia ótica, já que a produção bacteriana de flagelos não é contínua

Para diminuir ao máximo a interferência das proteínas que ainda podem estar presentes na amostra, deve-se fazer uma leitura a 280 nm – comprimento de onda em que as

A membrana plasmática é formada por moléculas de lipídeos (fosfoglicerídeos e esfingolipídeos), colesterol, proteínas periféricas (localizadas somente em uma das camadas

Em algumas regiões, em continuação à lâmina basal, há uma camada de fibras reticulares (principalmente colágeno do tipo III) conjugadas a complexos de proteínas, produzidas