Programação de Computadores em C



Documentos relacionados
MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

De uma forma ampla, o profissional egresso deverá ser capaz de desempenhar as seguintes funções:

Web site. Objetivos gerais. Introdução. Profa. Patrícia Dockhorn Costa

Algoritmo e Programação

Organização de Computadores. Cálculos Binários e Conversão entre Bases Aritmética Binária

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Introdução à Arquitetura de Computadores. Prof.ª Ms. Elaine Cecília Gatto

Organização e Arquitetura de Computadores I. Introdução. Ivan Saraiva Silva Leonardo Casillo

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Disciplina: Introdução à Arquitetura de Computadores

MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores

Orientação a Objetos

Arquitetura e Organização de Computadores

Sistemas Operacionais

Componentes de um Computador: Modelo Von Neumann

Programação Orientada a Objeto

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Programação de Computadores em C. Primeira edição

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Sistema Operacional. Prof. Leonardo Barreto Campos 1

Introdução APRESENTAÇÃO DA DISCIPLINA.

4. Conceitos Básicos de Computação: Sistemas Operacionais

Capítulo 2 Introdução à Programação Estrutura de Controle

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

Arquiteturas RISC. (Reduced Instructions Set Computers)

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Sistemas Operacionais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

PROGRAMAÇÃO EM LINGUAGEM LADDER LINGUAGEM DE RELÉS

Projeto e Análise de Algoritmos Projeto de Algoritmos Introdução. Prof. Humberto Brandão humberto@dcc.ufmg.br

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

Concepção e Elaboração

UNIVERSIDADE PRESBITERIANA MACKENZIE Faculdade de Computação e Informática EMENTAS DA 3ª. ETAPA

Algoritmos e Linguagens de Programação. Álgebra Booleana. Faculdade Pitágoras Prof. Edwar Saliba Júnior Abril de Unidade Álgebra Booleana

02/10/2012. Padronização de interfaces. Referências

Memória Cache. Prof. Leonardo Barreto Campos 1

(P AA) 2 PACOTE DE APOIO A APRENDIZAGEM DE PROJETO E ANÁLISE DE ALGORITMOS: IMPLEMENTAÇÃO EM JAVA

REAL LACOS: CONTROLE DIGITAL EM TEMPO REAL

1. DADOS DE IDENTIFICAÇÃO

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

formação em programação em c/c++

DISCIPLINA: Arquitetura e Organização de Computadores II 2ECOM.027

Disciplina de Banco de Dados Introdução

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido

15 Computador, projeto e manufatura

LINGUAGEM C UMA INTRODUÇÃO

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

Definição de Padrões. Padrões Arquiteturais. Padrões Arquiteturais. Arquiteturas de Referência. Da arquitetura a implementação. Elementos de um Padrão

Introdução à Computação

Fórmula versus Algoritmo

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Sistemas Operacionais

Banco de Dados I. Apresentação (mini-currículo) Conceitos. Disciplina Banco de Dados. Cont... Cont... Edson Thizon

Engenharia de Software

Algoritmos e Estrutura de Dados II. Apresentação. Prof a Karina Oliveira. kkco@dei.unicap.br

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: Arquitetura de Software Aula 03

Arquitetura de Computadores. Ivan Saraiva Silva

rosefib.webnode.com.br

Introdução à Linguagem C/C++ Parte I

UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

2. Representação Numérica

Entrada e Saída. Prof. Leonardo Barreto Campos 1

EMENTAS DAS DISCIPLINAS

Linguagem Formais e Autômatos

Programador Web - Pronatec

UNIVERSIDADE PRESBITERIANA MACKENZIE

3. Arquitetura Básica do Computador

Outras Máquinas de Turing

Semântica para Sharepoint. Busca semântica utilizando ontologias

Notas de Aula 04: Casos de uso de um sistema

UNIVERSIDADE DE SÃO PAULO E S C O L A D E A R T E S, C I Ê N C I A S E H U M A N I D A D E

LÓGICA DE PROGRAMAÇÃO

Programação orientada a objetos usando a linguagem C++ CDTN Centro de Desenvolvimento de Tecnologia Nuclear

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Software Básico (INF1018)

Universidade Federal de Alfenas

Plano de Ensino Curso Superior

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular ARQUITECTURA DE COMPUTADORES Ano Lectivo 2012/2013

Linguagem algorítmica: Portugol

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Um Ambiente Gráfico para Desenvolvimento de Software de Controle para Robôs Móveis Utilizando Simulação 3D

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira


Introdução aos Sistemas Operacionais. Computador = hardware + software. Como é formado o meu computador? E como estes componentes se comunicam?

02 - Usando o SiteMaster - Informações importantes

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1

Roteiro. BCC321 - Banco de Dados I. Conceitos Básicos. Conceitos Básicos. O que é um banco de dados (BD)?

Fornece novos benefícios para o mercado postal

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

Transcrição:

Programação de Computadores em C Primeira edição Carlos Camarão Universidade Federal de Minas Gerais Doutor em Ciência da Computação pela Universidade de Manchester, Inglaterra Lucília Figueiredo Universidade Federal de Ouro Preto Doutora em Ciência da Computação pela UFMG Direitos exclusivos Copyright c 2009 by Carlos Camarão e Lucília Figueiredo É permitida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na Web ou outros), desde que seja para fins não comerciais.

Sumário Prefácio vii A Escolha da linguagem C 3

vi SUMÁRIO

Prefácio Este livro se propõe a acompanhá-lo no início de um longo caminho, que é o do desenvolvimento do raciocínio necessário para construção de programas bem feitos. Para isto, o livro aborda conceitos básicos de programação de computadores, de forma que posteriormente assuntos mais avançados possam ser abordados. Conteúdo e Organização do Livro Este livro foi concebido para ser utilizado como texto didático em cursos introdutórios de programação, de nível universitário. O conteúdo do livro não pressupõe qualquer conhecimento ou experiência prévia do leitor em programação, ou na área de computação em geral, requerendo apenas conhecimentos básicos de matemática, usualmente abordados nos cursos de primeiro e segundo graus. O livro adota a linguagem de programaçãoc (veja no anexo A uma discussão sobre essa escolha). Como estudaremos daqui a pouco, a linguagem C é uma linguagem imperativa. Uma visão geral sobre os conceitos básicos da programação imperativa é apresentada inicialmente, com o objetivo de favorecer uma compreensão global sobre o significado e o propósito dos conceitos empregados nesse estilo de programação, facilitando assim um melhor entendimento da aplicação dos mesmos na construção de programas. Cada um desses conceitos é abordado mais detalhadamante em capítulos subsequentes, por meio de exemplos ilustrativos e exercícios. Além desses conceitos básicos, o livro aborda também, de maneira introdutória, os seguintes tópicos adicionais: entrada e saída de dados em arquivos, e manipulação de estruturas de dados como arranjos e listas encadeadas. Recursos Adicionais Uma página na Internet associada a este livro pode ser encontrada no endereço: http://www.dcc.ufmg.br/~camarao/ipcc O texto desse livro e os códigos da maioria dos programas apresentados no livro como exemplos encontram-se disponíveis nesta página. Outros recursos disponíveis incluem sugestões de exercícios adicionais e projetos de programação, transparências para uso em cursos baseados neste livro e referências para outras páginas da Internet que contêm informações sobre a linguagem C ou sobre ferramentas para programação nessa linguagem. Há diversas páginas na Web com informações sobre a linguagem C disponíveis na Web, assim como cursos sobre introdução a prgramação em C, dentre os quais citamos: http://pt.wikibooks.org/wiki/programar em C: Páginas Wiki, criadas pela própria comunidade de usuários da Web, sobre programação em C. A versão em inglês pode ser encontrada em http://en.wikipedia.org/wiki/c (programming language). http://www.ead.cpdee.ufmg.br/cursos/c: Material usado no curso de introdução a programação em C ministrado no Departamento de Engenharia Elétrica da UFMG. http://cm.bell-labs.com/cm/cs/cbook/: The C Programming Language, B. Kernighan & Dennis M. Ritchie, Prentice Hall, 1988.

viii Prefácio http://publications.gbdirect.co.uk/c book/: Página com a versão gratuita da segunda edição 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ção de referências 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ês). http://cm.bell-labs.com/cm/cs/who/dmr/chist.html: The Development of the C Language, Dennis M. Ritchie (Janeiro de 1993). http://www.livinginternet.com/i/iw unix c.htm: History of the C Programming Language, 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ção padrão ANSI C. B. Kernighan & D.C. Ritchie. Editora Campus, 1990. C completo e total. H. Schildt. Editora McGraw-Hill, 1990.a C: A Reference Manual, Samuel P. Harbison & Guy L. Steele, 5 a edição, Prentice Hall, 2002. C Programming: A Modern Approach, K.N. King, Norton, 2008. E divirta-se assistindo: http://www.youtube.com/watch?v=xhoslhpen3k

Referências Bibliográficas [1] Andrew Tanenbaum. Organização Estruturada de Computadores. LTC (tradução), 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, 2 a 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, 2 a edition, 2006. [8] William Stallings. Arquitetura e Organização de Computadores: Projeto para o Desempenho. Pearson Education do Brasil (tradução), 5 a edition, 2002.

2 REFERÊNCIAS BIBLIOGRÁFICAS

Apêndice A Escolha da linguagem C O livro adota a linguagem de programação C. A escolha dessa linguagem foi motivada pela necessidade de homogeneização no ensino de disciplinas introdutórias de programação de computadores nos cursos de várias universidades (por exemplo, nas disciplinas de Algoritmos e Estruturas de Dados I do Departamento de Ciência da Computação 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étrica e Engenharia de Controle e Automação, por se tratar de linguagem adequada à chamada programação de sistemas, na qual se faz acesso direto a dispositivos e recursos de hardware. Para tais sistemas, a programação na linguagem C é 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 é controverso, pelo fato de existir na linguagem uma preocupação central com eficiência, e possibilidade de acesso direto a áreas de memória, o que leva, principalmente, a duas consequências indesejáveis do ponto de vista de um aprendizado em programação: 1. Ausência, em muitos casos, de verificação dos chamados erros de tipo. Tais erros ocorrem devido ao uso de valores em contextos inadequados, ou seja, em contextos nos quais não faz sentido usar tais valores, e portanto nos quais tais valores não deveriam ser usados. Grande parte do desenvolvimento das linguagens de programação nos dias atuais é relacionado ao objetivo de tornar as linguagens cada vez mais seguras, no sentido de possibilitar a deteção de um número cada vez maior de erros de tipo, e ao mesmo tempo dando flexibilidade ao programador, de modo que ele não tenha que especificar ou mesmo se preocupar com a anotação explícita de tipos em seus programas, e procurando manter o algoritmo que permite essa deteção de erros simples e eficiente. 2. Mecanismos adequados na linguagem para suporte a abstrações, conceitos e construções comumente usados em programas, de forma simples e segura. Exemplos de tais mecanismos são: Tipos algébricos: tipos que permitem representar disjunção ( ou ) entre tipos e estruturas de dados, de modo seguro e simples. Tipos algébricos são usados comumente, para representar estruturas muito comuns em computação, tais como: enumerações, denotadas por tipos que consistem em uma enumeração de todos os possíveis elementos do tipo, como por exemplo um tipo booleano (cada valor consistindo de falso ou verdadeiro), ou estações do ano (primavera, verão, outono ou inverno), etc.; alternativas que estendem enumerações de modo a permitir diferentes modos de construir valores, tal como por exemplo uma forma geométrica, que pode ser um círculo com o tamanho de seu raio, ou um retângulo com os tamanhos de seus dois lados etc. estruturas recursivas que estendem alternativas por permitir recursividade na sua definição, como por exemplo uma lista, que pode ser vazia ou um elemento seguido

4 Escolha da linguagem C do restante da lista (tal restante consistindo, recursivamente, de uma lista), uma árvore binária, que pode ser uma folha contendo um valor de um determinado tipo ou um par formado por duas subárvores, etc.; Polimorfismo: tanto de valores (estruturas de dados) que podem ser instanciados para quaisquer tipos, mantendo a mesma forma, quanto de funções que realizam operações sobre tais estruturas de dados, que funcionam do mesmo modo, independentemente da instância sobre a qual realizam a operação. A ausência de suporte a polimorfismo em C impede, em particular, que existam bibliotecas com funções de manipulação de estruturas de dados de propósito geral como pilhas, filas, dicionários, conjuntos etc., comuns em linguagens mais modernas. Leitores interessados em tais assuntos podem consultar as notas bibliográficas do Capítulo??. Em conclusão, existe um compromisso entre a intenção de formar durante o tempo da graduação um programador pronto para as necessidades da indústria e o objetivo didático primordial que consiste em oferecer uma formação sólida aos graduandos nos aspectos teóricos relacionados à programação de computadores. Pelo primeiro motivo, este livro foi escrito na linguagem C. Pelo segundo, se oferecem seções especiais que abordam temas destinados aos estudantes que procurem maior aprofundamento nos conteúdos lecionados.