DSC/CCT/UFCG [email protected] Profs.: José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Carga Horária: 60 h DSC/CCT/UFCG Plano de Ensino Objetivos Ementa Técnicas de Ensino Recursos Didáticos Avaliação Resultados Esperados [email protected] Bibliografia 2 DSC/CCT/UFCG Objetivos Oferecer ao aluno uma visão geral da Informática e suas aplicações à Engenharia Elétrica; Apresentar um sistema computacional, discutindo seus principais componentes; Definir e construir conceitos fundamentais da Ciência de Computação; Propor soluções computacionais simples da Engenharia Elétrica; Desenvolver [email protected] e testar soluções computacionais usando algoritmos; para problemas de problemas 3 Objetivos DSC/CCT/UFCG Projetar, elaborar e depurar soluções de problemas computacionais usando programas na linguagem C; Estudar programação modular, discutindo as principais técnicas utilizadas na implementação de estruturas de dados básicas, de algoritmos de busca e ordenação; Resolver a [email protected] eficientemente problemas de elétrica em ambientes computacionais. engenharia 4 DSC/CCT/UFCG Ementa [email protected] Introdução à Programação: aplicações computacionais; Introdução à Organização de Computadores; dos sistemas de sistemas Soluções de problemas mediante o uso computacionais; Processo de desenvolvimento de programas; Algoritmos; Modelos de Programação; Introdução a uma Linguagem de Programação; Tipos de Dados (entradas e saídas de dados), Operadores e Expressões; 5 [email protected] DSC/CCT/UFCG Ementa Comandos de Controle de Fluxo (decisões e repetições); Agregados de Dados Homogêneos e Heterogêneos; Modularização de Programas; Recursividade; Alocação Dinâmica de Memória; Portabilidade de Programas; Técnicas de bom estilo de programação; Projeto de Aplicação. 6 DSC/CCT/UFCG Técnicas de Ensino Aulas Expositivas Atividades Individuais e Grupais Intra-Classe [email protected] Atividades Individuais e Grupais Extra-Classe 7 DSC/CCT/UFCG Recursos Didáticos Quadro Branco Retroprojetor/ Datashow Computador [email protected] Biblioteca Setorial 8 DSC/CCT/UFCG Avaliação Contínua Avaliações individuais e trabalhos em sala de aula Trabalhos interativos Atividades de pesquisa e desenvolvimento extra-classe Seminários de Projeto [email protected] Avaliação de conclusão do curso 9 DSC/CCT/UFCG Resultado Esperado Espera-se [email protected] que os conhecimentos repassados auxiliem o aluno no raciocínio e na aplicação de conceitos pertinentes ao contexto de estudo, visando a elaboração mais eficiente de programas e a preparação para a compreensão de tópicos mais avançados de programação, a serem estudados na disciplina Técnicas de Programação. 10 Bibliografia DSC/CCT/UFCG Livro-Texto DEITEL, H. M. & DEITEL, P. J., Como Programar em C. LTC Editora, 1999. [email protected] Bibliografia Complementar ECKEL, BRUCE , Thinking in C++ . MindView Inc., 2000. GACLI-UNICAMP, Introdução à Linguagem C. JAMSA, KRIS & KLANDER, L., Programando em C/C++. Makron Books Editora do Brasil Ltda, 1999. KERNIGHAN, B.& RITCHIE, D. M., A linguagem de Programação C. Editora Campus, 1986. MESQUITA, R. C., Curso de C. Núcleo de Ensino à Distância. Escola de Engenharia – UFMG. 11 Bibliografia DSC/CCT/UFCG [email protected] Bibliografia Complementar NONATO, L. G., Tipos e Estruturas de Dados. Instituto de Ciências Matemáticas e de Computação - Departamento de Computação e Estatística - USP. RUMBAUGH, B. M., PREMERLANI, W., EDDY, F. & LORENSEN, W. Object-Oriented Modeling and Design. Prentice Hall, 1991. SCHILDT, H., C Avançado - Guia do Usuário. McGraw-Hill, 1987. SCHILDT, HERBERT, C Completo e Total. Makron Books do Brasil Editora Ltda., 3a Edição, 1996. 12 Bibliografia DSC/CCT/UFCG [email protected] Bibliografia Complementar STROUSTRUP, BJARNE, The Design and Evolution of C++. Addison Wesley, 1994. STROUSTRUP, BJARNE, A Linguagem de Programação C++. Editora Artes Médicas Sul Ltda. (Bookman), 2000. 13 DSC/CCT/UFCG Introdução à Programação Tópicos [email protected] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 Introdução O que é um Computador? Organização de um Computador Evolução de Sistemas Operacionais Computação Pessoal, Distribuída e Cliente/Servidor Linguagens de Máquina, de Montagem (Assembly) e de Alto Nível Histórico da Linguagem C A Biblioteca Padrão de C Tendências de Desenvolvimento de Software: Tecnologia de Objetos 14 DSC/CCT/UFCG Introdução à Programação Tópicos [email protected] 1.10 1.11 1.12 1.13 1.14 C e C++ Java Outras Linguagens de Alto Nível Programação Estruturada Fundamentos de um Ambiente Desenvolvimento de Programas em C 1.15 Tendências de Hardware 1.16 Internet 1.17 World Wide Web (WEB) Típico de 15 DSC/CCT/UFCG Objetivos (1/2) Após a discussão do material deste capítulo, v. será capaz de: Compreender conceitos computacionais básicos; Familiarizar-se com diferentes tipos de linguagens de programação; Familiarizar-se programação C; [email protected] Tomar com o histórico da linguagem de conhecimento linguagem C; da biblioteca-padrão da 16 DSC/CCT/UFCG Objetivos (2/2) Após a discussão do material deste capítulo, v. será capaz de: Compreender os elementos de um ambiente típico de programação em C; porque é importante aprender C em um primeiro curso programação; Entender porque C oferece um embasamento para estudos posteriores de outras linguagens de programação, em especial C++ e Java. [email protected] Ponderar 17 DSC/CCT/UFCG 1.1 Introdução Objeto de Estudo A linguagem de programação C Técnicas de Programação Estruturada Extensão do Livro-texto Fundamentos de C++ Capítulos 15 a 23 Fundamentos de Java Capítulos 24 a 30 Público-alvo [email protected] Estudantes universitários com pouca ou nenhuma experiência de programação 18 DSC/CCT/UFCG 1.2 O que é um Computador? Computador Dispositivo capaz de realizar operações lógicas/aritméticas e tomar decisões, com grande velocidade e precisão Processa grande quantidade de dados sob o controle de conjuntos denominadas programas de instruções [email protected] Máquina eletrônica capaz de receber informações, submetê-las a um conjunto especificado/ pré-determinado de operações lógicas/aritméticas e fornecer o resultado destas operações 19 DSC/CCT/UFCG 1.2 O que é um Computador? Os computadores atuais são dispositivos [email protected] eletrônicos que, sob direção e controle de um programa, executam quatro operações fundamentais Entrada (Input) Processamento (Processing) Saída (Output) Armazenamento (Storage) 20 DSC/CCT/UFCG 1.2 O que é um Computador? Ciclo IPOS Entrada Processamento [email protected] Saída Armazenamento 21 DSC/CCT/UFCG 1.2 O que é um Computador? Sistema de computação [email protected] Integração de componentes atuando como uma entidade, com o propósito de processar dados, i.e. realizar algum tipo de operação aritmética/ lógica envolvendo os dados, de modo a produzir diferentes níveis de informações 22 DSC/CCT/UFCG 1.2 O que é um Computador? Componentes de um Sistema Computacional [email protected] Peopleware Hardware Software 23 DSC/CCT/UFCG 1.2 O que é um Computador? Componentes de um Sistema Computacional Peopleware [email protected] Componente humana de um sistema de computação, i.e. indivíduos que utilizam o computador como ferramenta 24 DSC/CCT/UFCG 1.2 O que é um Computador? Componentes de um Sistema Computacional Hardware [email protected] Componente física de um sistema de computação, i.e. todos os equipamentos utilizados pelo usuário nas ações de entrada, processamento, armazenamento e saída de dados 25 DSC/CCT/UFCG 1.2 O que é um Computador? Componentes de um Sistema Computacional Software [email protected] Componente lógica de um sistema de computação, i.e. séries de instruções que fazem o computador funcionar (programas de computador) 26 DSC/CCT/UFCG 1.2 O que é um Computador ? Hardware Gama variada de dispositivos compõem um computador que Teclado, terminal de vídeo (monitor), mouse, discos, memória, CD-ROM e unidades de processamento [email protected] Software Programas que são executados em um computador 27 1.3 Organização de um Computador DSC/CCT/UFCG Unidade Central de Processamento Dispositivos de Entrada Unidade de Controle ULA Dispositivos de Saída [email protected] Unidade Primária de Armazenamento Dispositivos de Armazenament o Secundário 28 1.3 Organização de um Computador DSC/CCT/UFCG Unidades funcionais básicas Unidade de Entrada (Input Unit) Unidade de Saída (Output unit) Apresenta a informação em dispositivos de saída (e.g. monitor, impressora) Unidade de Memória (Memory unit) [email protected] Obtenção da informação a partir de dispositivos de entrada (e.g. teclado, mouse) Acesso rápido, de baixa capacidade e armazenamento da informação obtida pelos dispositivos de entrada 29 1.3 Organização de um Computador DSC/CCT/UFCG Unidades funcionais básicas Unidade Lógica e Aritmética - ULA (Arithmetic and Logic unit - ALU) operações Unidade de Controle - UC [email protected] Execução de cálculos aritméticos, lógicas e tomada de decisões Supervisão e coordenação das demais unidades que compõem o computador 30 1.3 Organização de um Computador DSC/CCT/UFCG Unidades funcionais básicas Unidade de Armazenamento Secundário (Secondary storage unit) Armazenamento barato, de alta capacidade e longa duração [email protected] Armazenamento de programas inativos 31 1.3b Aritmética do Computador DSC/CCT/UFCG Representação de inteiros Base binária (2) [email protected] 2 “bits” disponíveis [0,1] “Posição” indica potência positiva de 2 1011 na base 2 = 1x23 + 0x22 + 1x21 + 1x20 = 8+0+2+1 = 11 na base decimal Ou, melhor 1x23 + 0x22 + 1x21 + 1x20 = 1 + 2(1+2(0+2(1))) = 11 32 1.3b Aritmética do Computador DSC/CCT/UFCG [email protected] Representação de números fracionários Base binária (2) “Posição” da parte inteira indica potência positiva de 2 Potência negativa de 2 para parte fracionária 10,11 na base 2 = 1x21 + 0x20 + 1x2-1 + 1x2-2 = 2+0+1/2+1/4 = 2,75 na base decimal 33 1.3b Aritmética do Computador DSC/CCT/UFCG Conversão de inteiro para binário: (dividindo por 2) Exemplo: Converter 25 decimal para binário 1=bms 12 / 2 = 6 (quociente) e resto 0 6 / 2 = 3 (quociente) e resto 0 3 / 2 = 1 (último quociente=BMS) e resto 1 Binário = BMS ... bms = 1 1 0 0 1 25 / 2 = 12 (quociente) e resto [email protected] = 1x24 + 1x24 + 0x22 + 0x21 + 1x20 = 16 + 8 + 0 + 0 + 1 = 25 decimal 34 1.3b Aritmética do Computador DSC/CCT/UFCG Conversão de fração: (multiplicando por 2) Exemplo: converter 0,625 decimal para binário [email protected] 0,625 x 2 = 1,25 logo a primeira casa fracionária é 1 ; nova fração (resto) é 0,25 (1,25-1=0,25) 0,25 x 2 = 0,5 segunda casa é 0 ; resto é 0,5 0,5 x 2 = 1,0 terceira casa é 1 ; resto é zero. Resultado: 0,62510 = 0,1012 35 1.3b Aritmética do Computador DSC/CCT/UFCG Problema: 5,8 = 101,11001100... , uma dízima. 11,6 = 1011,10011001100... Toda a aritmética do computador é arredondada [email protected] 10000 0,22 = 2199,7778 i=1 36 1.4 Evolução dos Sistemas Operacionais DSC/CCT/UFCG Processamento por Lotes (Batch processing) Apenas um programa, um serviço (job) ou uma tarefa (task) por vez Multiprogramação Um processador compartilhado serviços ou tarefas por vários Multiprocessamento Vários processadores compartilhados por vários [email protected] serviços ou tarefas 37 1.4 Evolução dos Sistemas Operacionais DSC/CCT/UFCG Compartilhamento de Tempo (Timesharing) Execução de diversos programas, com a UCP [email protected] alternando-se entre eles tão freqüentemente que os usuários têm a impressão de ter o computador só para si, podendo interagir com cada programa durante sua execução. 38 DSC/CCT/UFCG 1.5 Computação Pessoal, Distribuída e Cliente/Servidor Computação Pessoal Econômica o bastante para uso individual Computação Distribuída Processamento da informação através de redes de computadores e que a tarefa executa simultaneamente em vários computadores Computação Cliente/Servidor [email protected] Compartilhamento da informação, através de redes de computadores, entre servidores (repositórios) e clientes (processadores usuários) 39 DSC/CCT/UFCG 1.6 Linguagens de Máquina, de Montagem e de Alto Nível Tipos de Linguagens de Programação Linguagens de Máquina Seqüências de números relativas a instruções de máquina específicas [email protected] Exemplo: +11000111 000010011 +10101100 111000111 +01001100 011100001 40 DSC/CCT/UFCG 1.6 Linguagens de Máquina, de Montagem e de Alto Nível Tipos de Linguagens de Programação Linguagens de Montagem (Assembly) Instruções computacionais formuladas a partir de termos ingleses abreviados, representando operações elementares, traduzidas via montadores (assemblers) Exemplo: LOAD A [email protected] ADD B STORE C 41 DSC/CCT/UFCG 1.6 Linguagens de Máquina, de Montagem e de Alto Nível Tipos de Linguagens de Programação Linguagens de Alto Nível Códigos similares ao inglês cotidiano Uso de notações matemáticas (traduzidas via compiladores) Exemplo: Líquido = Bruto - Descontos [email protected] Área = (Base * Altura)/2 42 DSC/CCT/UFCG 1.7 Histórico da Linguagem C Linguagem C Desenvolvida por Ritchie, a partir de duas linguagens de programação antecessoras: BCPL eB Uso no desenvolvimento do UNIX Emprego na codificação operacionais modernos de sistemas [email protected] Independência de hardware (portável) "C Tradicional" C desenvolvido no final da década de 70 43 DSC/CCT/UFCG 1.7 Histórico da Linguagem C [email protected] Padronização da Linguagem C Motivação: Existência e incompatibilidade de diversas variantes de C Formação de um comitê da ANSI para a definição de uma linguagem "isenta de ambigüidades e independente de máquina" Criação do C padrão em 1989 Atualização da linguagem em 1999 44 DSC/CCT/UFCG 1.8 A Biblioteca Padrão de C Programas em C módulos denominados funções Possibilidade de criação de funções específicas pelo programador Vantagem Desvantagem [email protected] Conhecimento exato do comportamento das funções Dispêndio de tempo no desenvolvimento de funções específicas 45 DSC/CCT/UFCG 1.8 A Biblioteca Padrão de C Programas em C módulos denominados funções Uso freqüente das funções da biblioteca de C por programadores Uso como “blocos” ou “componentes” para a construção de aplicações próprias [email protected] Reuso evita a “reinvenção da roda” Uso de funções existentes é, em geral, melhor do que a reescrita de código com o mesmo propósito Funções da biblioteca foram cuidadosamente desenvolvidas para uso eficiente e portabilidade 46 DSC/CCT/UFCG 1.9 Tendências de Desenvolvimento de Software: Tecnologia de OBJETOS Objetos Componentes reusáveis de modelam itens do mundo real software que [email protected] Unidades significativas de software Objetos de dados, tempo, pagamento, áudio, vídeo, arquivos, etc. Qualquer nome pode ser representado como um objeto com comportamento bem definido Maior capacidade de reuso 47 1.9 DSC/CCT/UFCG Tendências de Desenvolvimento de Software: Tecnologia de OBJETOS Objetos Maior compreensibilidade, melhor organização, maior facilidade de manutenção do que a programação baseada em procedimentos (procedural) [email protected] Favorecimento à modularidade 48 1.10 C e C++ DSC/CCT/UFCG C++ Superconjunto de C, desenvolvido por Bjarne Stroustrup no Bell Labs “Extende" C, oferecendo orientação a objetos facilidades de Poder do projeto orientado a objetos [email protected] Produtividade incrementada de 10 a 100 vezes Linguagem academias dominante na indústria e em 49 DSC/CCT/UFCG 1.10 C e C++ Aprendizado de C++ [email protected] Uma vez que C++ abrange C, se afigura indispensável o domínio de C para um aprendizado efetivo de C++ Vide Capítulo 15 (introdução ao C++) 50 1.11 JAVA DSC/CCT/UFCG [email protected] Uso de Java Criação de páginas Web com conteúdo dinâmico e interativo Desenvolvimento de aplicações empresariais em larga escala Incrementação da funcionalidade de servidores Web Desenvolvimento de aplicações para dispositivos tais como telefones celulares, pagers e assistentes digitais pessoais (PDA) 51 DSC/CCT/UFCG 1.12 Outras Linguagens de Alto Nível SmallTalk Programação orientada a objetos FORTRAN Uso em aplicações de engenharia e aplicações científicas COBOL Uso para a manipulação de grandes quantidades de dados Pascal [email protected] Uso acadêmico 52 1.13 Programação Estruturada DSC/CCT/UFCG Programação Estruturada Abordagem com regras bem definidas para a escrita de programas Clareza, facilidade de teste e depuração e facilidade de alteração do código Multi-tarefas [email protected] Especificação de que diversas atividades são executadas paralelamente 53 DSC/CCT/UFCG 1.14 Fundamentos de um Ambiente Típico de Desenvolvimento de Programas em C O programa é criado no Fases de em C/C++ Editor Pré-processador Edição Pré-processamento Compilação [email protected] Programas Compilador Linker Linkagem Disco editor e armazenado em disco. Disco O programa préprocessador analisa o código fonte. Disco O compilador cria código-objeto e armazena em disco. Disco O linker faz a conexão do código-objeto com as bibliotecas. o o Memória Primária Carregamento Execução Carregador Disco Entradas UCP Saidas O carregador transfere o programa para a memória. Memória Primária A UCP recupera cada instrução e a executa, armazenando (quando possível) novos valores de dados à medida que o programa é executado. 54 DSC/CCT/UFCG 1.15 Tendências de Hardware Características que, grosso modo, duplicam a cada um ou dois anos: Espaço de memória (execução de programas) Quantidade de meio de secundário (e.g. disco rígido) Armazenamento de longa duração de programas e dados Rapidez do Processador [email protected] armazenamento Velocidade com que os computadores executam os programas 55 DSC/CCT/UFCG 1.16 Internet Facilidades da Internet Comunicação rápida e fácil via e-mail Conexão de computadores via rede internacional [email protected] Chaveamento de Pacotes Transferência de dados digitais via unidades denominadas pacotes (packets) Possibilidade de envio e recepção simultânea de dados por múltiplos usuários 56 1.16 Internet DSC/CCT/UFCG Descentralização do Controle Possibilidade de operação de outras partes da rede caso uma parte da Internet apresente falhas Protocolos de comunicação HTTP: composto de <cabecalho, corpo> Corpo pode ser: text/plain; text/html; image/gif; image/gif; image/jpeg; aplicação/zip FTP Largura de Faixa [email protected] Capacidade de transferência da informação exibida pelas linhas ou meios de comunicações 57 1.17 WEB DSC/CCT/UFCG [email protected] “Teia Global” (World Wide Web) Localização/Visualização de documentos multimídia de quase toda a espécie Acesso instantâneo e adequado à informação existente nas mais diversas partes do mundo Possibilidade de divulgação em nível mundial de negócios realizados por indivíduos e pequenas empresas Alteração dos modos de realização de negócios (Ecommerce) 58 1.18 DSC/CCT/UFCG Preparação para o Capítulo 2 – Exemplo (Soma de 2 Inteiros) // Programa que executa a soma de dois inteiros #include <stdio.h> // início da função main int main() { int inteiro1; //variável que contém a primeira parcela da soma int inteiro2; // variável que contém a segunda parcela da soma int soma; // variável na qual será armazenado o resultado da soma printf(“Digite o primeiro inteiro:\n"); /* preparação para o recebimento do primeiro número inteiro*/ scanf( "%d", &inteiro1 ); // leitura do primeiro número printf(“Digite o segundo inteiro:\n"); /* preparação para o recebimento do segundo número inteiro*/ scanf( "%d", &inteiro2 ); // leitura do primeiro número soma = inteiro1 + inteiro2; /* realização da soma dos 2 inteiros digitados pelo [email protected] usuário */ printf( “A soma eh igual a %d\n", soma ); // impressão da soma return 0; // indicação de que o programa encerrou satisfatoriamente } // fim da função main 59 DSC/CCT/UFCG José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Ulrich Schiel UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA [email protected] DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO