PROF. MATEUS CONRAD BARCELLOS DA COSTA TÉCNICAS DE PROGRAMAÇÃO AVANÇADA

Tamanho: px
Começar a partir da página:

Download "PROF. MATEUS CONRAD BARCELLOS DA COSTA TÉCNICAS DE PROGRAMAÇÃO AVANÇADA"

Transcrição

1

2

3 PROF. MATEUS CONRAD BARCELLOS DA COSTA TÉCNICAS DE PROGRAMAÇÃO AVANÇADA VITÓRIA 2008

4 Governo Federal Ministro de Educação Fernando Haddad CEFETES Diretor Geral Jadir José Pela Diretor de Ensino Denio Rebello Arantes Coordenadora do CEAD Centro de Educação a Distância Yvina Pavan Baldo Coordenadoras da UAB Universidade Aberta do Brasil Yvina Pavan Baldo Maria das Graças Zamborlini Designer Instrucional Danielli Veiga Carneiro Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Coordenação de Curso Isaura Nobre Professor Especialista/Autor Mateus Conrad Barcellos da Costa DIREITOS RESERVADOS Cefetes Av. Vitória - Jucutuquara - Vitória - ES - (27) Créditos de autoria da editoração Capa: Leonardo Tavares Pereira Projeto gráfico: Danielli Veiga Carneiro Iconografia: Moreno Cunha Editoração eletrônica: Mateus Conrad B. da Costa, Humberto Wanke, Monia Vignati Revisão de texto: Karina Bersan Rocha COPYRIGHT É proibida a reprodução, mesmo que parcial, por qualquer meio, sem autorização escrita dos autores e do detentor dos direitos autorais. Catalogação na fonte: Rogeria Gomes Belchior - CRB 12/ C837 Costa, Mateus Conrad Barcellos da Técnicas de programação avançada. / Mateus Conrad Barcellos da. Vitória: CEFETES, p. : il. 1. Programação (Computadores). I. Centro Federal de Educação Tecnológica do Espírito Santo. II. Título. CDD 005.1

5 Olá, Aluno(a)! É um prazer tê-lo conosco. O Cefetes oferece a você, em parceria com as Prefeituras e com o Governo Federal, o Curso Tecnologia em Análise e Desenvolvimento de Sistemas, na modalidade a distância. Apesar de este curso ser ofertado a distância, esperamos que haja proximidade entre nós, pois, hoje, graças aos recursos da tecnologia da informação ( s, chat, videoconferência, etc.) podemos manter uma comunicação efetiva. É importante que você conheça toda a equipe envolvida neste curso: coordenadores, professores especialistas, tutores a distância e tutores presenciais, porque quando precisar de algum tipo de ajuda, saberá a quem recorrer. Na EaD Educação a Distância, você é o grande responsável pelo sucesso da aprendizagem. Por isso, é necessário que se organize para os estudos e para a realização de todas as atividades, nos prazos estabelecidos, conforme orientação dos Professores Especialistas e Tutores. Fique atento às orientações de estudo que se encontram no Manual do Aluno! A EaD, pela sua característica de amplitude e pelo uso de tecnologias modernas, representa uma nova forma de aprender, respeitando, sempre, o seu tempo. Desejamos-lhe sucesso! Equipe do CEFETES

6 ICONOGRAFIA Veja, abaixo, alguns símbolos utilizados neste material para guiá-lo em seus estudos. Fala do professor. Conceitos importantes. Fique atento! Atividades que devem ser elaboradas por você, após a leitura dos textos. Indicação de leituras complementares, referentes ao conteúdo estudado. Destaque de algo importante, referente ao conteúdo apresentado. Atenção! Reflexão/questionamento sobre algo importante, referente ao conteúdo apresentado. Espaço reservado para as anotações que você julgar necessárias.

7 Sumário 1. ABSTRAÇÃO DE DADOS INTRODUÇÃO CONCEITOS DE ABSTRAÇÃO DE DADOS Abstração em Computação Abstração de Procedimentos Tipos Abstratos de Dados Implementação de Tipos Abstratos de Dados Avaliação de Implementações de Tipos Abstratos de Dados TIPOS ABSTRATOS DE DADOS FUNDAMENTAIS PILHAS Especificação do TAD Pilha Implementação de Pilhas em Arranjos FILAS Especificação do TAD FILA Implementação de Filas em arranjos com deslocamento Implementação de Filas com Arranjos circulares IMPLEMENTAÇÃO DE TADS COM ALOCAÇÃO DINÂMICA DE MEMÓRIA Revisão de Alocação Dinâmica de Memória Implementação do TAD Pilha Implementação do TAD Fila LISTAS E ÁRVORES LISTAS CIRCULARES LISTA CIRCULAR DUPLAMENTE ENCADEADA ÁRVORES BINÁRIAS Árvore Binária de Pesquisa O TAD Árvore Binária de Pesquisa Implementação do TAD árvore Binária de Pesquisa PESQUISA EM MEMÓRIA PRIMÁRIA PESQUISA SEQÜENCIAL Implementação da Pesquisa Seqüencial Tempo de execução de algoritmos PESQUISA BINÁRIA TABELAS HASH Operações de Inserção e Pesquisa em Tabelas Hash Tratamento de Colisões Tratamento de Colisão usando endereçamento Aberto ORDENAÇÃO EM MEMÓRIA PRIMÁRIA CONCEITOS BÁSICOS DE ORDENAÇÃO Operações Típicas de processos de Ordenação MÉTODOS DE ORDENAÇÃO Ordenação por Seleção Método da Inserção Método da Bolha Desempenho dos métodos de Seleção, Inserção e Bolha Método de Shell O Método Quicksort

8

9 Olá! Meu nome é Mateus Barcellos Costa, sou professor e pesquisador do CEFET-ES desde Atuo na área de Engenharia de Software e sou professor de disciplinas de Programação. Se você quiser mais informações sobre mim e sobre os trabalhos que desenvolvo, pode visitar minha página pessoal em Produzi o material que ora lhe apresento como instrumento básico para o estudo da disciplina de Técnicas de Programação Avançada. Nesta disciplina iremos aprofundar nossos conhecimentos em Programação de Computadores usando uma linguagem imperativa ou procedimental. Exemplos destas linguagens são C e Pascal. Como de costume no nosso Curso, iremos adotar a linguagem C, em nossos exemplos e implementações. No entanto, é preciso que você saiba que os conceitos estudados aqui vão além da linguagem e podem ser aplicados em diversos cenários, na programação e na Engenharia de Software como um todo.

10

11 1. ABSTRAÇÃO DE DADOS. Olá! Neste Capítulo iremos discutir e aprender sobre Abstração de Dados. Abstração de Dados é uma técnica de programação que visa simplificar o desenvolvimento de programas. Sua aplicação pode se dar no desenvolvimento de programas menores. Mas podemos afirmar que seria impossível o desenvolvimento de sistemas que temos hoje, com milhões de linhas de código, sem o uso de abstração de dados. 1.1 INTRODUÇÃO Um programa de computador desenvolvido para atender alguma finalidade prática é, normalmente, um artefato complexo. Por esse motivo, a atividade de desenvolvimento desses artefatos, a programação de computadores, está entre as atividades mais complexas desempenhadas pelo homem. Se você cursou disciplinas introdutórias de programação, pode estar se questionando: Ora, desenvolver um programa não é tão complexo assim! Basta compreender o problema, suas entradas e suas saídas e construir a solução usando uma linguagem de programação. Simples não? Não! A história da programação tem dado provas que programar não é tão simples assim. Figura 1: O Gap Semântico. Programar é uma atividade complexa por diversos aspectos, tanto de cunho teórico quanto prático. Dentre estes aspectos destacamos os seguintes: 1. Programar um computador significa desenvolver programas de computadores (formais e precisos) para atender a finalidades Página 9

12 práticas definidas em termos de conceitos do mundo real (informais e imprecisos). Existe um abismo entre o mundo dos problemas reais e o mundo das soluções. Esse abismo é chamado na computação de gap semântico. Transpor o abismo é um dos desafios centrais da programação de computadores e da Engenharia de Software como um todo. A Figura 1 é uma alegoria que busca mostrar a função do desenvolvedor de software: Transpor o abismo entre o mundo informal (dos problemas) e o mundo formal (das soluções computacionais). Nessa transposição existem muitos desafios e perigos que podem dificultar a trajetória do desenvolvedor. 2. Muitas vezes, em disciplinas iniciais de programação, deparamo-nos com o desenvolvimento de programas mais simples, de cunho didático. Por exemplo, programas para calcular médias ou somatórios. Em outros momentos fazemos programas para aprender a usar um certo mecanismo, por exemplo, apontadores. Aqui, estamos nos referindo a programas de computadores para ajudar pessoas a resolverem problemas do mundo real, problemas grandes e complexos! Exemplos desses problemas incluem: a. Gerenciar as operações financeiras de uma empresa; b. Controlar uma aeronave; c. Controlar os trens de uma malha ferroviária; d. Produzir edições diárias de um jornal; e. Gerenciar o processo de produção de um filme. 3. Problemas como esses não são simples de se resolver. Conseqüentemente, programas voltados para essas finalidades são complexos, levam muito tempo para ficar prontos, têm de ser desenvolvidos por uma equipe de pessoas, utilizando diversas tecnologias e seguindo um processo de desenvolvimento sistemático. 4. Para atender às funcionalidades esperadas, um programa deve apresentar um conjunto de características que juntas vão tornar o programa efetivamente útil e determinarão a qualidade do mesmo. Essas características são as seguintes: a. Um programa deve estar correto, livre de erros; b. Um programa deve ser robusto. Um programa robusto ou sistema robusto é aquele que consegue funcionar, mesmo que precariamente, diante de uma adversidade. Por exemplo, suponha que um programa precise dos dados x, y e z para realizar uma tarefa. Se este for robusto, na falta de um dos dados, o programa pode Página 10

13 tentar realizar o processamento possível com a ausência dado; c. Um programa deve ser eficiente. A eficiência de um programa está relacionada ao seu tempo de execução (eficiência na execução) ou ao espaço em memória (eficiência na ocupação) de que necessita para executar (área de dados). Para um problema há infinitas soluções (programas). Quanto menores esses valores mais eficiente o programa. Em computação pode-se verificar se uma solução é ótima (mais eficiente possível) para um problema; d. Um programa deve ser compatível com outros programas; e. Um programa deve ser fácil de usar; f. Um programa deve ser portável, podendo funcionar em diferentes plataformas ou sistemas operacionais; g. Um programa deve ser íntegro, ou seja, deve evitar que os dados sejam corrompidos ou violados; h. O processamento realizado pelo programa deve ser verificável; i. O programa ou partes dele devem poder ser utilizados em outros cenários diferentes daquele para o qual o programa foi originalmente desenvolvido. 5. Por último, devemos considerar a atividade de programação como atividade econômica. Assim como outras atividades econômicas, o desenvolvimento de software é regido por leis de mercado que impõem severas exigências aos desenvolvedores. De acordo com essas leis, não basta apenas desenvolver um programa que atenda à finalidade esperada. Esses programas devem ser desenvolvidos dentro dos prazos e custos estabelecidos. Além disso, o programa precisa ter outras características importantes que permitam a sua evolução. Essas características são chamadas de fatores internos. São eles: a. Facilidade de manutenção; b. Facilidade de evolução; c. Facilidade de entendimento; d. Modularidade. Pelos motivos discutidos acima, o desenvolvimento de programas requer a aplicação de princípios, métodos e técnicas que diminuam a complexidade desse desenvolvimento. A Abstração de Dados envolve Página 11

14 uma série de conceitos e princípios para esse fim. A seguir discutiremos esses conceitos. Atividades Nesta introdução foram levantados cinco aspectos que tornam o desenvolvimento de software uma tarefa difícil. Para atacar esses aspectos e tornar o desenvolvimento de software mais simples são consideradas três dimensões: Processo de desenvolvimento, Pessoas (partes interessadas: clientes, desenvolvedores) e Tecnologias de desenvolvimento. Releia os cinco motivos e tente escrever um texto resumido, estabelecendo uma relação entre esses 5 motivos e essas três dimensões. 1.2 CONCEITOS DE ABSTRAÇÃO DE DADOS Abstração em Computação A abstração é um dos conceitos mais importantes da computação. Sem o uso deste conceito podemos afirmar que a evolução apresentada pela computação teria sido mais lenta. Segundo o dicionário Michaelis, temos a seguinte definição para a palavra Abstração: 1. O ato ou efeito de abstrair. Consideração das qualidades independentemente dos objetos a que pertencem. Abstrair: Considerar um dos caracteres de um objeto separadamente; 2. Excluir, prescindir de. A finalidade principal de uso de abstração em qualquer área do conhecimento é colocarmos foco em um sub-conjunto dos aspectos de um sistema ou processo complexo. Considere, por exemplo, o processo de pintar um quadro. A Figura 2 mostra, à esquerda um esquema inicial mostrando as linhas principais do quadro que se encontra do lado direito (A Virgem, o Menino e Sant Ana, Leonardo Da Vinci). Página 12

15 Figura 2: Abstração na Pintura. Observe que, no desenho, as proporções, os detalhes das posturas e feições são já determinados. Esse processo ajuda o pintor, pois, no momento da idealização do quadro, ele não precisa se preocupar com outros aspectos complexos, como cores, nuances de sombras e reflexos, para definir a estrutura e a sua aparência geral. Podemos dizer então que o desenho à esquerda é uma abstração do quadro. Em computação, abstração também possui finalidades semelhantes. Em programação, especificamente, esse conceito está presente quase o tempo todo, seja nas construções existentes nas linguagens, seja nos métodos de programação empregados. Uma das principais abstrações das linguagens de programação é o conceito de variável. Uma variável é um conceito abstrato que esconde diversos aspectos técnicos que não interessam ao programador. Quando declaramos uma variável em um programa, essa declaração implica em coisas que não irão interferir no seu desenvolvimento. Por exemplo, por trás de uma variável do tipo inteiro em C, (ex. int x;), estão escondidas as características físicas do armazenamento da variável em memória, a saber: - A forma de representação de números inteiros usando base 2 (por exemplo, complemento de 2); - O padrão usado pelo hardware (ex. little endian, big endian); - O número de bytes que uma variável do tipo inteiro ocupa; - O endereço da variável na memória principal; - O conjunto de bits responsável por armazenar o sinal do número inteiro. Para o programador em C, geralmente, nenhuma dessas informações é importante. O que o programador deseja é utilizar a variável realizando as operações permitidas aos números inteiros (operações aritméticas e comparações), atribuir, recuperar e modificar o valor contido na variável. Página 13

16 Assim podemos dizer que uma variável permite ao programador abstrair-se de detalhes que não interessam e não irão influenciar no comportamento do programa. Atividades Os itens 1,2 e 3 são abstrações. Para cada um deles descreva os aspectos que estão sendo escondidos e os aspectos que realmente importam ao programador: 1. O comando 2. Um arquivo 3. A função scanf Abstração de Procedimentos Podemos afirmar que a grande maioria dos elementos de linguagem utilizados em uma linguagem de programação de alto nível são abstrações. Essas abstrações facilitaram o desenvolvimento de programas mais complexos e sofisticados, evitando que programadores precisassem manipular bits e endereços de memória e interagir diretamente com o sistema operacional. Uma outra abstração de programação importante é a Abstração de Procedimento. Abstração de Procedimento A abstração de procedimento permite que o programador crie, ele mesmo, sua forma de abstrair, utilizando os comandos disponíveis na linguagem. A possibilidade de criar procedimentos permite ao programador criar funcionalidades mais abstratas que escondem a sequencia de operações necessária para a realização de uma tarefa complexa. Página 14

17 Por exemplo, sabemos que na linguagem C não existe um comando que seja capaz de ordenar um vetor de inteiros em ordem crescente. Seria muito bom que pudéssemos contar com esse comando, certo? Mas, como não temos esse comando, iremos criar uma função (abstração de procedimento) que realize essa tarefa para nós. A função ordena na Figura 3 é essa abstração. Figura 3: Função ordena: Cria uma abstração do procedimento de ordenação. Após a implementação da função ordena, quando o programador precisar ordenar um vetor, basta que ele invoque a função, passando os parâmetros necessários. Ou seja, ao usar o procedimento, o programador irá se preocupar apenas com o que a função faz e não mais com os detalhes de sua implementação. Uma abstração de procedimento deve realizar uma tarefa (por exemplo, ordenar um vetor de inteiros) que deve ser independente da forma como este vai ser implementado. O programador deve antes de tudo ver o procedimento como uma caixa preta, cuja especificação deve conter três elementos básicos (Figura 4): Entrada: O conjunto de dados de entrada necessário; Saída: O conjunto de dados produzido pelo procedimento; Função: A descrição do que o procedimento faz. ENTRADA FUNÇÃO SAÍDA Figura 4: Os elementos considerados na definição de um procedimento. Na especificação do procedimento, o programador não deve estar preocupado com a implementação, mas sim com o comportamento (função) do mesmo. Qualquer implementação que realize a função especificada irá servir como solução. Para o caso da ordenação, veremos adiante neste curso que existem diferentes métodos de ordenar um vetor. O método utilizado na função ordena se chama ordenação por inserção. A implementação interna poderia ser Página 15

18 substituída por qualquer outro método de ordenação. A própria linguagem C oferece em sua biblioteca padrão stdlib, uma função chamada qsort, que pode ser usada para ordenar vetores. Essa função utiliza um outro método de ordenação muito conhecido e também muito rápido, chamado de Quick Sort. Atividades 1. Suponha que você tenha disponíveis as seguintes funções em C: Int CalculaMedia(int *notas); Void DeterminaMaiorEMenorNotas(int *v, int * maior, int *menor); Void lenotas(int *notas); Void MostraResultados(int media,int maiornota, int menornota); Utilizando essas funções, desenvolva um programa em C que leia as notas de 5 turmas e para cada uma delas, imprima a média, a maior e a menor nota Tipos Abstratos de Dados A abstração de dados visa aos mesmos objetivos que a abstração de procedimentos, mas com relação às estruturas de dados utilizadas nos programas. A abstração de dados visa criar novos tipos de dados definidos em temos de seu comportamento. Esses novos tipos são chamados de Tipos Abstratos de Dados - TAD. É muito importante que você perceba que um tipo abstrato de dados não se resume a uma nova estrutura de dados. Vamos então discutir um pouco sobre essa diferença. Primeiramente, uma estrutura de dados pode ser definida simplesmente como uma variável capaz de armazenar mais de um valor simultaneamente. Assim, um vetor, uma matriz ou um registro (struct em C) são exemplos de estruturas de dados. A combinação desses elementos em estruturas mais complexas dá origem a outras estruturas de dados. A Figura 5 apresenta as declarações de struct ponto e struct reta, como exemplos de tipos de estruturas de dado. Página 16

19 Figura 5: Estruturas de Dados ponto e reta. Ao definir a struct ponto, passamos a contar com mais uma alternativa para definição de tipos de variáveis e, conseqüentemente, para a composição de novos tipos de estruturas. Assim a struct reta foi definida como uma composição de duas variáveis do tipo struct ponto. Essas estruturas podem ser usadas para declarar tanto variáveis como argumentos de funções. Em C temos ainda a cláusula typedef, que permite definir o nome do novo tipo. Nesse caso, não precisamos usar a palavra reservada struct na declaração de variáveis do tipo definido. Na Figura 6 temos o uso de typedef. Veja que na definição do tipo Reta, o nome Ponto é usado sem a palavra reservada struct. Figura 6: Definição dos tipos Reta e Ponto. Estrutura de Dados versus Tipo Abstrato de Dados A definição de uma estrutura de dados se preocupa em demonstrar como o objeto é representado na memória de um computador (representação). Nessa definição são considerados aspectos do tipo: quais as informações que serão armazenadas ali e qual a quantidade destas informações. A definição de um Tipo Abstrato de Dados segue uma abordagem diferente. Essa definição é feita em termos das operações que podem ser realizadas sobre o tipo. A definição de um Tipo Abstrato de Dado (TAD) é chamada de especificação e consiste, basicamente, em definir as operações relacionadas ao tipo. Dizemos que essas operações definem o comportamento do TAD. Página 17

20 Vamos aplicar o conceito de TAD considerando os objetos Reta e Ponto. Um passo importante na definição do TAD, que já ajuda na programação de uma maneira geral, é que não conseguimos defini-lo sem conhecermos a sua finalidade e o contexto no qual será usado. Em nosso exemplo precisamos saber para quê nós queremos um ponto e uma reta. Geralmente essa informação é conseguida a partir do enunciado do problema. Assim, vamos supor a seguinte descrição para o nosso problema envolvendo retas e pontos: Problema A. É necessário um programa de computador que realize operações geométricas envolvendo pontos e retas localizadas no plano cartesiano. O programa deve permitir: calcular a distância do ponto até a origem do plano cartesiano; calcular a distância entre dois pontos; dada a representação da reta por dois pontos, calcular o ângulo de inclinação da reta, fornecer os parâmetros a e b correspondentes a equação da reta ax + b. Determinar a distância de uma reta a um ponto. Evidentemente, o programa deve permitir a leitura e impressão de pontos e retas conforme a necessidade das operações. Com base na descrição acima podemos identificar a necessidade do TAD ponto e do TAD Reta, bem como suas operações. Essas operações aparecem sublinhadas no texto do problema e são apresentadas nas Figuras 7 e 8. Figura 7: operações do TAD Ponto para o problema A. Figura 8: operações do TAD Reta para o problema A. Página 18

21 Agora, considere que estejamos desenvolvendo um programa para o problema abaixo: Problema B. É necessário um programa de computador para apresentar graficamente figuras geométricas formadas por pontos e retas, usando o monitor do computador como plano. O programa deve permitir: ler um ponto, plotar um ponto na tela, ligar dois pontos por um segmento de reta; dada uma reta passando por esse ponto, deslocar um outro ponto com base na equação dessa reta; dada uma reta representada por dois pontos, plotar esta reta no monitor; dada uma reta e um valor d, criar uma reta paralela à reta dada a uma distancia d da reta. As operações necessárias aos TAD Ponto e Reta neste problema são apresentadas nas Figuras 9 e 10. Figura 9: operações do TAD Ponto para o problema B. Figura 10: operações do TAD Reta para o problema B. Note que nos dois problemas foram definidos os tipos Ponto e Reta. No entanto, a abstração necessária difere de um problema para o outro, interferindo na definição das operações. Embora existam essas diferenças, iremos sempre tentar criar abstrações mais genéricas o quanto for possível. Quanto mais genérico um TAD, maior o número de problemas em que esse poderá ser aplicado. Página 19

22 Embora as operações não informem nada a respeito da representação interna de um TAD, elas fornecem ao programador tudo o que ele precisa para manipular o TAD. As operações de um TAD especificam a sua interface com o restante do programa. Isso significa que qualquer ação relacionada ao TAD deve ser feita mediante uma de suas operações. Temos como resultado prático que o programador, ao usar o TAD, não vai precisar se preocupar com sua implementação interna. Iremos agora analisar esse aspecto considerando os TAD Ponto e Reta e o problema A. Na implementação, ponto e reta foram definidos e implementados, originando dois módulos independentes: o módulo Ponto e o módulo Reta. Cada módulo em C é normalmente implementado por dois arquivos: o arquivo.h e o arquivo.c. No arquivo.c teremos a implementação das operações do TAD e no arquivo.h teremos a especificação da interface do TAD. A Figura 11 e a Figura 12 apresentam as interfaces dos módulos Ponto e Reta, respectivamente. Figura 11: Interface do TAD Ponto. Figura 12: Interface do TAD Reta. Com a implementação dos TADs Ponto e Reta concluídas e devidamente testadas, qualquer outro módulo do programa poderá utilizar esses tipos por meio das operações definidas para os mesmos. Quando um módulo A utiliza um módulo B em programação, dizemos que o módulo A é cliente do módulo B. Essa relação de clientela entre os módulos (ou TADs) de um programa pode ser representada graficamente por meio de um diagrama de estrutura modular - DEM. Página 20

23 Diagrama de Estrutura Modular Um diagrama de estrutura modular é formado por retângulos e linhas direcionadas relacionando os retângulos. Cada retângulo representa um módulo. As linhas direcionadas significam cliente de e indicam o acionamento de operações contidas no módulo apontado pelo módulo cliente. Esses digramas também são chamados diagramas hierárquicos, pois apresentam a hierarquia dos módulos, iniciando por um módulo que inicia o programa e acionam os demais módulos. Como exemplo, suponha que tenhamos também, junto aos módulos Ponto e Reta, um módulo chamado principal. Esse módulo é cliente dos módulos Ponto e Reta. A Figura 13 a seguir ilustra o DEM deste programa. O módulo que inicia o programa é o módulo principal (e deve conter uma função main()). Ele aciona as operações tanto do módulo ponto quanto do módulo reta. Reta, por sua vez, também é cliente do módulo ponto. Figura 13: DEM com módulos Ponto, Reta e Principal. A Figura 14 ilustra a implementação de um módulo Principal. Note que a única forma de acesso aos TADs Ponto e Reta é por meio das operações definidas em suas respectivas interfaces. Use diagramas de estrutura modular sempre que for iniciar um novo projeto. Defina os TADs e estabeleça o relacionamento entre eles por meio de DEMs. Junto às linhas, você pode especificar as operações do TAD que são acionadas pelo cliente. Isso vai ajudar você na especificação dos TADs. Página 21

24 Atividades Implementar as operações do TadPonto e do TadReta considerando o enunciado do problema 1, da Seção do texto, e desenvolver um programa usando a função principal (do quadro a seguir) de forma a testar as operações. Figura 14: Módulo Principal para o Problema A. Página 22

25 Até o momento, em nosso exemplo envolvendo Ponto e Reta, não abordamos a questão de como as operações serão implementadas propositalmente. É que até a parte que apresentamos do desenvolvimento não precisamos saber mesmo. Você por acaso lembra como se calcula a distância entre dois pontos? E a distância entre uma reta e um ponto? Pois bem, o importante é que você tenha compreendido a discussão feita e o exemplo dado, mesmo sem saber responder essas duas perguntas. Assim espero! Implementação de Tipos Abstratos de Dados Um dos principais benefícios da abstração de dados é separar o comportamento do TAD, especificado por meio da definição de suas operações, da sua implementação. Em nosso exemplo, o que definimos a respeito dos TAD Ponto e Reta foi o seu comportamento, as suas operações. Nesta seção, discutiremos melhor como separar em um projeto a definição do comportamento e da implementação de um TAD. O projeto completo de um TAD consiste de dois passos: 1. Especificação - Consiste na especificação do comportamento do TAD; 2. Implementação Implementação das operações e estruturas de dados. Especificação A especificação de um TAD descreve o que TAD faz, mas omite informações sobre como o mesmo é implementado. Por omitir detalhes de implementação, uma única especificação permite muitas implementações diferentes. A especificação é feita por meio da definição das operações do TAD. Para detalhar melhor cada uma destas operações, devemos estabelecer, para cada operação, dois elementos: - Pré-condições: definem as condições necessárias para que a operação possa ser realizada. Por exemplo, suponha que desejamos especificar o TAD Conjunto com a operação listarconjunto. Uma pré-condição para essa operação é que o Conjunto não esteja vazio. Página 23

26 - Pós-condições: definem o estado do TAD após a execução da operação. Por exemplo, suponha a operação inserirelemento no TAD conjunto. Uma pós-condição para essa operação seria: elementos no conjunto = elementos no conjunto + novo elemento. A Figura 15 ilustra a definição do TAD conjunto. Figura 15: Especificação do TAD Conjunto. Implementação Um TAD é implementado por um módulo de um programa. Uma única especificação permite diferentes implementações para um mesmo TAD. Uma implementação está correta se esta provê o comportamento especificado para o TAD. Implementações corretas podem diferir uma da outra, por exemplo, em termos do algoritmo ou da estrutura de dados que elas usam. Essas diferenças interferem na eficiência (desempenho em tempo de execução, ou ocupação de espaço) apresentado pelo TAD para realização das operações. Encapsulamento Para uma abstração funcionar corretamente, a sua implementação deve ser encapsulada. Se a implementação for encapsulada, nenhum outro módulo do programa vai depender de detalhes de implementação do TAD. Encapsulamento garante que módulos do programa podem ser implementados e reimplementados independentemente, sem afetar os outros módulos do programa. O encapsulamento geralmente é conseguido por meio da separação da interface e da implementação do módulo. Conforme já vimos anteriormente, em C a implementação de um TAD por meio de um módulo consiste em duas partes: a especificação da interface do Página 24

27 módulo por meio do arquivo header (com extensão.h) e da implementação das operações por meio de um arquivo com extensão.c Avaliação de Implementações de Tipos Abstratos de Dados É fundamental para um programador saber criticar e avaliar a qualidade de uma implementação! Uma implementação baseada em Abstração de Dados é um indicativo de boa qualidade. Nesta Seção, discutiremos elementos que permitem que você verifique se uma implementação realmente está de acordo com essa técnica. Embora a linguagem C não ofereça um mecanismo que impeça realmente que o programador tenha acesso à estrutura interna do TAD, esta é uma regra fundamental e deve ser respeitada pelo programador. Esta regra ou característica de TADs é o encapsulamento, discutido na seção anterior. Dizemos que um TAD é encapsulado por suas operações no sentido de que a estrutura interna do TAD fica preservada e invisível ao restante do programa. Violar essa regra significa não usar corretamente a Abstração de Dados. Localidade O maior benefício do encapsulamento chama-se princípio da Localidade. Esse princípio permite que um programa seja implementado, entendido e modificado um módulo de cada vez. A localidade aumenta a qualidade do software que está sendo desenvolvido. Dentre os benefícios oriundos do princípio da localidade temos: 1. O programador de uma abstração sabe o que é necessário pelo que está descrito na especificação. Dessa forma, ele não precisa interagir com programadores de outros módulos (ou, pelo menos, essa interação vai ser bem limitada). 2. De forma análoga, o programador de um módulo que usa a abstração sabe o que esperar desta abstração, apenas pelo comportamento descrito em sua especificação. Página 25

28 Uma ferramenta que pode contribuir para esse entendimento é a documentação do TAD. Ou seja, a explicação sobre o seu funcionamento e sobre como utilizá-lo. Procure sempre fazer uma boa documentação do TAD. Essa documentação pode vir como um documento à parte que acompanha o módulo. 3. É necessário apenas o raciocínio local (por módulo), para saber o que o programa faz e se está fazendo a coisa certa. Para estudar e compreender o programa podemos dividi-lo em módulos, e analisar um módulo de cada vez. Em cada caso, preocupamo-nos em saber se o módulo faz o que é suposto que faça. Ou seja, se ele cumpre o que está na especificação. Pode-se assim limitar a atenção para um módulo, ignorando tanto os módulos usados por este quanto os que o utilizam. Os módulos que utilizam o módulo estudado podem ser ignorados porque dependem apenas de sua especificação e não da sua implementação. Os módulos utilizados são ignorados, raciocinando-se sobre o que eles fazem utilizando apenas sua especificação em vez de sua codificação. Com isso, tem-se uma grande economia de esforço, dado que as especificações são muito menores que as implementações. Observando-se apenas as especificações evita-se também um efeito cascata. Por exemplo, se tivermos que olhar o código do módulo que utilizamos, teremos que olhar também o código dos módulos que são utilizados pelos módulos que utilizamos e assim por diante. 4. Finalmente, a modificação do programa pode ser feita módulo por módulo. Se uma abstração particular necessita ser reimplementada para prover um melhor desempenho, corrigir um erro ou prover uma nova funcionalidade, o módulo implementado anteriormente pode ser trocado por uma nova implementação sem afetar os outros módulos. Prototipagem Localidade também provê uma base firme para a prototipação ou prototipagem. Um protótipo é uma implementação inicial, rudimentar e incompleta de um programa a ser desenvolvido. Se mantivermos o princípio da localidade no desenvolvimento do protótipo, essa implementação inicial pode ir sendo completada ou substituída por implementações melhores sem grande esforço nem re-trabalho. Página 26

29 Localidade também provê suporte para evolução. Abstrações podem ser utilizadas nesse caso para encapsular modificações potenciais no programa. Por exemplo, suponha que desejamos um programa para ser executado em diferentes máquinas. Podemos tratar esse problema inventando abstrações que escondam as diferenças entre as máquinas de forma que, para mover o programa para uma máquina diferente, apenas essas abstrações precisem ser reimplementadas. Um bom princípio de projeto é pensar sobre modificações esperadas e organizar o desenvolvimento utilizando abstrações que encapsulem as mudanças. Domínio da complexidade Os benefícios da localidade são particularmente importantes para a abstração de dados. Estruturas de dados são muitas vezes complicadas e a visão mais abstrata mais simples provida pela especificação torna o resto do programa mais simples. Ainda, mudanças nas estruturas de armazenamento são uma das principais formas de evolução de programas. Portanto, os efeitos dessas mudanças devem ser minimizados encapsulando essas estruturas de dados em abstrações de dados. Se avaliarmos um programa segundo o critério da abstração de dados, devemos observar os seguintes fatores: 1. Os TADs estão realmente encapsulados? a. O entendimento de cada módulo do programa independe dos demais módulos? b. O efeito cascata é evitado na depuração? c. É possível reimplementar um módulo sem afetar os outros? 2. Potenciais mudanças foram previstas no projeto do TAD? 3. Os TADs oferecem abstrações suficientemente simples das estruturas de dados que encapsulam? Atividades Os códigos a seguir especificam as interfaces de dois módulos: Aluno e Turma. Página 27

30 /******** aluno.h ***********/ typedef struct aluno{ char nome[30]; int matricula; int cdgcurso; } Aluno; void lealuno(aluno *); void imprimealuno(aluno); void AlteraAluno(Aluno *); /******** turma.h **********/ #include "aluno.h" #define MAXTURMA 100 typedef struct turma { int nalunos; Aluno alunos[maxturma]; }Turma; void inserealuno(turma *,Aluno); /*insere o aluno passado como paramentro na turma */ void localizaaluno(turma *, char *); /* localiza um aluno na turma pelo nome */ void imprimeturma(turma); void atualizaalunodaturma(turma *, char *); Agora, suponha que tenhamos o seguinte módulo principal, utilizando esses módulos: /************ Modulo Principal **************/ #include "turma.h" Turma turma1; void principal(){ int opcao,i; aluno a; char nome[30]; do{ scanf("%d",&opcao); switch(opcao){ case 1: /* cadastrar aluno */ lealuno(&a); inserealuno(&turma1,a); break; case 2: scanf("%s",nome); a= localizaaluno(&turma1, nome); printf("%s - %d - %d",a.nome, a.matricula,a.cdgcurso); break; case 3: /* imprimir turma */ for (i=0;i<turma.nalunos;i++) imprimealuno(turma.alunos[i]); break; case 4: Página 28

31 nome); } } scanf("%s",nome); atualizaalunodaturma(&turma1, break; Tarefas: a) Critique a implementação do módulo acima com base nos critérios de avaliação de TADs discutidos acima. b) Faça uma implementação da operação atualizaalunodaturma, respeitando os princípios de programação baseada em tipos abstratos de dados. Dijkstra ( ) foi, sem dúvida, um dos cientistas que mais contribuíram para o desenvolvimento da Programação de Computadores. Terminamos este capítulo com uma frase dele, que resume o conceito de abstração: O propósito da abstração não é ser vaga, mas sim, criar um novo nível semântico no qual ela possa ser absolutamente precisa. Edsger. W. Dijkstra, The Humble Programmer (O programador Mediocre), Communications of the ACM, 15(10), Reflita sobre isso! Página 29

32 2. TIPOS ABSTRATOS DE DADOS FUNDAMENTAIS. Olá! Após o estudo e a compreensão dos conceitos que definem a técnica de Abstração de Dados, utilizaremos esses conceitos em nosso estudo até o final da disciplina. Portanto, se você não compreendeu ou não se sente ainda plenamente convencido de que deve utilzar Abstração de Dados em seus programas, recomendo que retorne ao Capítulo 2. O motivo disso é muito simples. Daqui para frente estudaremos problemas e soluções mais complexos, que exigem muito do estudante em sua capacidade de abstração. Neste Capítulo, em particular, iniciamos nosso estudo de um conjunto de TADs muito comuns e importantes: Os TAD Pilha e Fila. No decorrer da evolução da programação, padrões e práticas comuns têm sido observadas e transformadas em conceitos, modelos e mecanismos que podem ser utilizados em mais de uma situação diferente. Dentre esses elementos temos uma coleção de tipos abstratos de dados que são comuns a diversas situações e aplicáveis na solução de uma grande quantidade de problemas. Dois desses TADs são as Pilhas e as Filas, que estudaremos em profundidade neste capítulo. 2.1 PILHAS No mundo real uma pilha corresponde a um agregado de objetos que são acomodados um sobre o outro. A Figura 1 ilustra uma pilha em que os objetos são caixas. Página 30

33 Figura 1: Uma Pilha de Caixas Os números nas caixas indicam a ordem de empilhamento. Se quisermos agora remover as caixas da pilha (desempilhar), temos que remover a caixa 4 primeiro, depois a 3, a 2 e finalmente a 1. Não podemos remover as caixas abaixo da que está no topo da pilha sem antes remover a do topo. Esse comportamento pode ser definido pela estilo: O último a entrar é o primeiro a sair. No mundo real temos diversas situações em que esse comportamento deve ser respeitado. Assim, o uso de pilhas pode facilitar a solução de vários problemas. Um exemplo típico de uso de pilha é a operação desfazer, presente na maior parte dos editores de texto. Quando voce executa a operação desfazer, a última operação realizada é que deverá ser desfeita primeiro. Se você executar o desfazer novamente, a penúltima operação deverá ser desfeita, e assim sucessivamente. Concluindo, precisamos ter sempre a informação de qual foi a última operação realizada. Uma pilha é uma forma eficiente de obtermos esa informação. Se tivermos uma pilha em que empilhamos a operação que foi feita, teremos no topo da pilha sempre a operação que devemos desfazer. Realmente, editores texto que possuem a operação desfazer mantém uma pilha que guarda informações sobre as ações que vão sendo realizadas durante a edição. Por exemplo, no momento em que este texto era digitado, as informações passadas via teclado e mouse eram também empilhadas. Página 31

34 A aplicação de pilhas em editores de texto é um exemplo de uma funcionalidade muito comum de uso de pilha. Essa funcionalidade está presente em outros cenários, como em jogos, programas de logistica, robótica e redes de computadores. O que esses cenários têm em comum é a necessidade de retroceder por um caminho de dados ou ações que tenha realizado. Esse retocesso se dá também em algoritmos de backtracking, (algo como voltar na trilha) e é muito comum em algoritmos de busca e recuperação de informação. Veja a discussão sobre esses algoritmos em Especificação do TAD Pilha O TAD Pilha pode ser descrito pela seguinte especificação apresentada na Figura 2. Nessa especificação são definidas as operações Empilha, que insere elementos na Pilha e Desempilha, que remove elementos da Pilha. São definidas também as pré-condições e pós-condições dessas operações. Figura 2: especificação do TAD Pilha. Além das operações empilha e desempilha, temos também a operação inicializapilha, que coloca a Pilha em um estado inicial, com a pilha vazia. A Figura 3 ilustra uma possível implementação do TAD Pilha limitado a 5 (cinco) posições. Cada posição possui um índice. O topo mantém o índice do valor que está presente no topo. Nesse exemplo, Página 32

35 temos o elemento do topo na posição de índice 5, conforme indica a figura. Se convencionarmos que os elementos foram inseridos na pilha na ordem L I C A F, temos que: O primeiro elemento empilhado foi o L, seguido do I, C, A e F. Logo, podemos concluir que nessa implementação de pilha a atualização do topo consiste em incrementar de 1 na operação empilha e decrementar de 1 na operação desempilha. As pré-condições também podem ser obtidas da implementação. A operação Pilha Vazia pode ser verificada por meio do teste do valor do topo. Por exemplo, se iniciarmos a pilha com topo valendo 0, podemos usar o teste topo == 0 para verificar se pilha está vazia. Já a pré-condição pilha cheia pode ser verificada considerando o limite da implementação. No nosso exemplo esse limite é 5. Se o topo == 5, a pilha está cheia. Com isso, fica definida também a operação inicializapilha que deve fazer o topo valer 0 (zero). Figura 3: Implementação de uma Pilha. É importante neste momento notar que existem muitas implementações possíveis para a especificação do TAD pilha (conforme discutido no Capitulo 1). Esse exemplo apresentado é apenas uma das possíveis soluções. Um outro detalhe é que, além das operações empilhar e desempilhar, as pré-condições de pilha Cheia e pilha Vazia podem também se tornar operações do TAD Pilha na implementação. Na próxima seção discutiremos algumas implementações de Pilha usando arranjos estáticos. Página 33

36 Atividades 1. Na seqüência a seguir, uma letra significa empilha e um asterisco significa desempilha. Determine a seqüência de valores retornados pela operação desempilha quando essa seqüência de operações é realizada sob uma pilha inicialmente vazia. E A S * Y * Q U E * * * S T * * * I O * N * * * 2. Suponha que uma seqüência misturada de operações empilha e desempilha é realizada. As operações empilha empilham inteiros de 0 até 9 ordenadamente. A operação desempilha desempilha e imprime o valor desempilhado. Qual das seqüências abaixo não poderá ser impressa? (a) (b) (c) (d) Implementação de Pilhas em Arranjos A Figura 3 ilustra por meio de um diagrama uma implementação de Pilha. Usando arranjos estáticos (vetores) e fazendo algumas adaptações, podemos criar essa implementação em C. A implementação, conforme discutido na Seção 1.2.4, será formada de duas partes, a interface (arquivo com extensão.h) e a implementação das operações (arquivo com extensão.c). É recomendado primeiro a definição do arquivo de interface e depois a implementação das operações. A seguir discutiremos uma possível implementação do TAD Pilha, utilizando arranjos. A Figura 4 mostra o arquivo de interface tadpilha.h. Foi definido um novo tipo chamado Pilha, formado por dois elementos principais: Uma variável inteira topo e o vetor itens, que servirá de contêiner para a pilha. O vetor itens é do tipo Elemento, que é apenas uma redefinição do tipo char. A definição desse tipo Elemento facilita posteriores modificações no tipo básico da pilha. Se quisermos, por exemplo, alterar a pilha para que esta empilhe e desempilhe valores inteiros, basta redefinir o tipo Elemento como Página 34

37 int. Foram definidas assinaturas (protótipos) das funções correspondentes às operações inicializapilha, empilha, desempilha e aos testes das pré-condições, pilhacheia e pilhavazia. Observe que estamos seguindo a notação de protótipos padrão de C. Nessa notação, apenas os tipos dos argumentos (parâmetros das funções) são identificados, sendo os nomes mesmos desses argumentos apenas na implementação. Note também que a operação desempilha retorna um Elemento. Isso é bastante comum, pois normalmente se deseja fazer alguma coisa com o elemento desempilhado. Figura 4: Interface do TAD Pilha com arranjos estáticos. Na Figura 5, temos a implementação das operações feitas no arquivo tadpilha.c. A operação inicializapilha faz o topo da Pilha receber 0 (zero). PilhaCheia verifica se topo igual a MAX (tamanho máximo que a pilha pode ter) e PilhaVazia verfica se topo igual a 0. Na operação empilha temos a seguinte ordem: insere o elemento e depois incrementa o topo. Isso é necessário porque em C a primeira posição de um arranjo é a 0 (zero) e com a Pilha vazia o topo está em zero. Assim, o topo estará sempre com um índice do elemento no topo + 1. Para compensarmos isso, na operação desempilha devemos decrementar o topo retornando o elemento somente após o topo ser decrementado. Página 35

38 Figura 5: Implementação das operações do TAD Pilha. Atividades 1. Empilhamento decrescente. Uma empilhadeira carrega caixas de 7, 5 e 3 toneladas. Há três pilhas A, B e C. A pilha A é onde se encontram todas as caixas que chegam no depósito. Com um detalhe: caixas maiores não podem ser empilhadas sobre caixas menores. Elabore uma função cheganodeposito (Caixa* nova, Pilha* A) que efetue o controle das caixas, de forma que, caso uma caixa de maior peso do que uma que já está em A deva ser empilhada, então, todas as caixas que estão em A são movidas para as pilhas auxiliares B (contendo somente caixas de 5 Página 36

39 toneladas) e C (contendo somente caixas de 3 toneladas) até que se possa empilhar a nova caixa. Depois, todas as caixas são movidas de volta para a pilha A. 2. Implementar o TAD PilhaDupla, usando um arranjo de 100 posições. PilhaDupla deve usar um único arranjo para implementar as duas pilhas. Além disso, a ocupação da Pilha deve maximizar o uso do espaço do arranjo, ou seja, enquanto houver espaço no arranjo qualquer uma das duas pilhas pode utilizá-lo. 2.2 FILAS Em nosso cotidiano nos deparamos constantemente com filas. Ou melhor, estamos constantemente entrando e saindo de filas! Muitas pessoas se aborrecem com as filas. Todavia, podemos dizer que elas são um mal necessário. Por exemplo, imaginem se, para entrarem em um ônibus em uma cidade, as pessoas não fizessem uma fila e simplesmente se amontoassem na porta. Seria um tumulto, as pessoas que estivessem no ponto há mais tempo poderiam não conseguir entrar ou ficar sem assento. O mais incrível é que isso acontecia há uns 20 anos e ainda acontece em muitos lugares do Brasil e do mundo! Figura 6: Fila: O primeiro que chega é o primeiro a ser atendido. Esse exemplo ilustra a idéia de que o emprego de filas no dia-a-dia é fundamental para a organização das atividades feitas pelas pessoas, sempre que o número de clientes de um recurso é maior que a capacidade de atendimento desse recurso. No caso do ônibus, o recurso é a porta de entrada, que só atende uma pessoa por vez. Com mais de uma pessoa no ponto esperando para entrar, é necessário que elas formem uma fila. Um outro exemplo é fila em um banco, cujo recurso necessário é o caixa. Quando entram mais clientes do que o número de caixas, os clientes devem formar uma fila. Página 37

40 O comportamento de uma fila pode ser descrito pelo estilo: O primeiro que chega é o primeiro a ser atendido. Em uma Fila organizada e sem prioridades (Figura 6, por exemplo), essa regra é sempre obedecida. Na programação aplicamos o conceito de fila para tratar casos semelhantes ao do ônibus e ao do banco. Alguns exemplos de aplicação de filas são: Fila de espera de passagens aéreas Suponha, por exemplo, que você esteja desenvolvendo um sistema de reservas de passagens aéreas. Nesse tipo de sistema, as pessoas fazem reservas até o recurso (número de assentos no vôo) se esgotar. Quando isso acontece, se houver mais pessoas que querem viajar naquele vôo, elas entram em uma fila de espera. Se houver uma desistência das reservas, a primeira pessoa dessa fila será atendida. Fila de mensagens Suponha que você esteja desenvolvendo um programa A que envie constantemente mensagens a um programa B. O programa B precisa receber essas mensagens e processá-las. Se o número de mensagens que o programa A envia em um tempo x é maior do que a capacidade de processamento das mensagens no mesmo tempo x pelo programa B, o programa B deverá usar uma fila para guardar as mensagens até que elas possam ser processadas. Esse é um caso muito comum na Internet. Quando fazemos a requisição de uma página Web, o navegador (programa A) envia uma mensagem ao servidor Web (programa B). Esse servidor pode receber mais requisições (mensagens) do que a sua capacidade de processamento. Nesse caso, ele deve enfileirar as requisições para que elas não sejam perdidas e para que sejam atendidas na ordem de chegada. Teoria das Filas O estudo das Filas, do ponto de vista estatístico e probabilístico, denomina-se Teoria das Filas e compreende uma disciplina de grande interesse de diversas áreas da engenharia, computação e administração. Essa disciplina permite, dentre outras coisas, estimar a capacidade de recursos a serem construídos (p.exemplo, aeroportos, pontes, armazéns de estocagem), identificar gargalos (pontos de atraso) em sistemas e estimar o tempo para a realização de uma tarefa. Em nosso estudo, nos concentraremos apenas na implementação e emprego de filas em programação, e não na Teoria das Filas. Página 38

PROF. MATEUS CONRAD BARCELLOS DA COSTA TÉCNICAS DE PROGRAMAÇÃO AVANÇADA. [ Serra, ES ] [ 2008 ]

PROF. MATEUS CONRAD BARCELLOS DA COSTA TÉCNICAS DE PROGRAMAÇÃO AVANÇADA. [ Serra, ES ] [ 2008 ] PROF. MATEUS CONRAD BARCELLOS DA COSTA TÉCNICAS DE PROGRAMAÇÃO AVANÇADA [ Serra, ES ] [ 2008 ] CONTEÚDO 1 Abstração de dados... 1 1.1 Introdução... 1 1.2 Conceitos de abstração de dados... 3 1.2.1 Abstração

Leia mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

Leia mais

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO? Índice BlueControl... 3 1 - Efetuando o logon no Windows... 4 2 - Efetuando o login no BlueControl... 5 3 - A grade de horários... 9 3.1 - Trabalhando com o calendário... 9 3.2 - Cancelando uma atividade

Leia mais

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos.

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos. Visão Geral VISÃO GERAL Esse material abordará o acesso ao AVA (Ambiente Virtual de Aprendizagem) da Proativa do Pará, com intenção de ilustrar os aspectos na visão do Aprendiz. Essa abordagem dedica-se

Leia mais

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII A ocorrência tamanho ASCII codificação de Huffman é um A Codificação método de compactação de Huffman caracteres (American e a variável codificação dos usado símbolos Standard para por cada muitas no Code

Leia mais

O Princípio da Complementaridade e o papel do observador na Mecânica Quântica

O Princípio da Complementaridade e o papel do observador na Mecânica Quântica O Princípio da Complementaridade e o papel do observador na Mecânica Quântica A U L A 3 Metas da aula Descrever a experiência de interferência por uma fenda dupla com elétrons, na qual a trajetória destes

Leia mais

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

Leia mais

Exercícios Teóricos Resolvidos

Exercícios Teóricos Resolvidos Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Matemática Exercícios Teóricos Resolvidos O propósito deste texto é tentar mostrar aos alunos várias maneiras de raciocinar

Leia mais

Filas: conceitos e implementações

Filas: conceitos e implementações Estrutura de Dados I Filas: conceitos e implementações Cesar Rocha cesar@pontoweb.com.br 1 Objetivos Explorar os conceitos fundamentais acerca do uso de filas utilizando a linguagem C Organização e implementação,

Leia mais

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados Aula 1 Tipo Abstrato de Dados O que é um algoritmo? Luiz Chaimowicz e Raquel O. Prates Livro Projeto de Algoritmos Capítulo 1 O que é um programa? 2009-1 Algoritmos Sequência de ações executáveis para

Leia mais

Conceitos básicos da linguagem C

Conceitos básicos da linguagem C Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por

Leia mais

Montagem e Manutenção. Luís Guilherme A. Pontes

Montagem e Manutenção. Luís Guilherme A. Pontes Montagem e Manutenção Luís Guilherme A. Pontes Introdução Qual é a importância da Montagem e Manutenção de Computadores? Sistema Binário Sistema Binário Existem duas maneiras de se trabalhar e armazenar

Leia mais

MANUAL DA SECRETARIA

MANUAL DA SECRETARIA MANUAL DA SECRETARIA Conteúdo Tela de acesso... 2 Liberação de acesso ao sistema... 3 Funcionários... 3 Secretaria... 5 Tutores... 7 Autores... 8 Configuração dos cursos da Instituição de Ensino... 9 Novo

Leia mais

Manual das planilhas de Obras v2.5

Manual das planilhas de Obras v2.5 Manual das planilhas de Obras v2.5 Detalhamento dos principais tópicos para uso das planilhas de obra Elaborado pela Equipe Planilhas de Obra.com Conteúdo 1. Gerando previsão de custos da obra (Módulo

Leia mais

MANUAL MOODLE - PROFESSORES

MANUAL MOODLE - PROFESSORES MANUAL MOODLE - PROFESSORES VERSÃO 2.5 Faculdades Projeção FACULDADE PROJEÇÃO Prof. Oswaldo Luiz Saenger Presidente Prof.ª Catarina Fontoura Costa Diretora Geral das Unidades Educacionais Prof. José Sérgio

Leia mais

Unidade 5: Sistemas de Representação

Unidade 5: Sistemas de Representação Arquitetura e Organização de Computadores Atualização: 9/8/ Unidade 5: Sistemas de Representação Números de Ponto Flutuante IEEE 754/8 e Caracteres ASCII Prof. Daniel Caetano Objetivo: Compreender a representação

Leia mais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem

Leia mais

Capítulo 2. Processos de Software. 2011 Pearson Prentice Hall. Todos os direitos reservados. slide 1

Capítulo 2. Processos de Software. 2011 Pearson Prentice Hall. Todos os direitos reservados. slide 1 Capítulo 2 Processos de Software slide 1 Tópicos apresentados Modelos de processo de software. Atividades de processo. Lidando com mudanças. Rational Unified Process (RUP). Um exemplo de um processo de

Leia mais

agility made possible

agility made possible RESUMO DA SOLUÇÃO Utilitário ConfigXpress no CA IdentityMinder a minha solução de gerenciamento de identidades pode se adaptar rapidamente aos requisitos e processos de negócio em constante mudança? agility

Leia mais

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word 2010. Sumário

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word 2010. Sumário CADERNO DE INFORMÁTICA FACITA Faculdade de Itápolis Aplicativos Editores de Texto WORD 2007/2010 Sumário Editor de texto... 3 Iniciando Microsoft Word... 4 Fichários:... 4 Atalhos... 5 Área de Trabalho:

Leia mais

3 Qualidade de Software

3 Qualidade de Software 3 Qualidade de Software Este capítulo tem como objetivo esclarecer conceitos relacionados à qualidade de software; conceitos estes muito importantes para o entendimento do presente trabalho, cujo objetivo

Leia mais

Programação em papel quadriculado

Programação em papel quadriculado 4 NOME DA AULA: Programação em papel quadriculado Tempo de aula: 45 60 minutos Tempo de preparação: 10 minutos Objetivo principal: ajudar os alunos a entender como a codificação funciona. RESUMO Ao "programar"

Leia mais

Portal do Projeto Tempo de Ser

Portal do Projeto Tempo de Ser Sumário Portal do Projeto Tempo de Ser O que é um Wiki?...2 Documentos...2 Localizando documentos...3 Links...3 Criando um Documento...4 Criando um link...4 Editando um Documento...5 Sintaxe Básica...5

Leia mais

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores Conceitos Básicos de Rede Um manual para empresas com até 75 computadores 1 Conceitos Básicos de Rede Conceitos Básicos de Rede... 1 A Função de Uma Rede... 1 Introdução às Redes... 2 Mais Conceitos Básicos

Leia mais

Primeiros passos das Planilhas de Obra v2.6

Primeiros passos das Planilhas de Obra v2.6 Primeiros passos das Planilhas de Obra v2.6 Instalação, configuração e primeiros passos para uso das planilhas de obra Elaborado pela Equipe Planilhas de Obra.com Conteúdo 1. Preparar inicialização das

Leia mais

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Cronograma das Aulas. Hoje você está na aula Semana

Leia mais

Tipo Abstrato de Dados

Tipo Abstrato de Dados Tipo Abstrato de Dados David Menotti Algoritmos e Estruturas de Dados II DInf - UFPR Qual a diferença entre um algoritmo e um programa? Algoritmos e Estruturas de Dados Algoritmo: Sequência de ações executáveis

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

3.1 Definições Uma classe é a descrição de um tipo de objeto.

3.1 Definições Uma classe é a descrição de um tipo de objeto. Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Classes Autoria:Aristófanes Corrêa Silva Adaptação:

Leia mais

Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão.

Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão. Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão. Você deve ter bons conhecimentos de estoque, UM e administração de posições

Leia mais

UM MODELO PARA GESTÃO DE LICENCIATURAS NO EAD: EXPERIÊNCIA DO CURSO DE LICENCIATURA EM INFORMÁTICA IFES

UM MODELO PARA GESTÃO DE LICENCIATURAS NO EAD: EXPERIÊNCIA DO CURSO DE LICENCIATURA EM INFORMÁTICA IFES 1 UM MODELO PARA GESTÃO DE LICENCIATURAS NO EAD: EXPERIÊNCIA DO CURSO DE LICENCIATURA EM INFORMÁTICA IFES Instituto Federal do Espírito Santo (IFES) Campus Cachoeiro de Itapemirim 03/2010 Giovany F. Teixeira

Leia mais

Unidade 3: Personalizando o Excel *

Unidade 3: Personalizando o Excel * Unidade 3: Personalizando o Excel * material do 2010* 3.0 Introdução Visto que você está fazendo este curso, você provavelmente passa ou espera passar muito tempo trabalhando com o Excel. Assim, você precisa

Leia mais

Desenvolvimento de uma Etapa

Desenvolvimento de uma Etapa Desenvolvimento de uma Etapa A Fase Evolutiva do desenvolvimento de um sistema compreende uma sucessão de etapas de trabalho. Cada etapa configura-se na forma de um mini-ciclo que abrange as atividades

Leia mais

Mas, como utilizar essa ferramenta tão útil e que está à sua disposição?

Mas, como utilizar essa ferramenta tão útil e que está à sua disposição? Caríssimo aluno da Rede CEJA, Seja muito bem vindo à sua escola! Estamos muito felizes que você tenha optado por dar continuidade aos seus estudos conosco, confiando e acreditando em tudo o que poderemos

Leia mais

Resolução da lista de exercícios de casos de uso

Resolução da lista de exercícios de casos de uso Resolução da lista de exercícios de casos de uso 1. Explique quando são criados e utilizados os diagramas de casos de uso no processo de desenvolvimento incremental e iterativo. Na fase de concepção se

Leia mais

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação Lógica de Programação 3. INTRODUÇÃO À LINGUAGEM C Caro Aluno Vamos iniciar o terceiro capítulo da nossa disciplina. Agora vamos começar a aplicar os conceitos vistos nos capítulos anteriores em uma linguagem

Leia mais

COORDENAÇÃO DE EAD MANUAL DE UTILIZAÇÃO DO MOODLE 2.6 PERFIL ALUNO. Versão 1.0

COORDENAÇÃO DE EAD MANUAL DE UTILIZAÇÃO DO MOODLE 2.6 PERFIL ALUNO. Versão 1.0 COORDENAÇÃO DE EAD MANUAL DE UTILIZAÇÃO DO MOODLE 2.6 PERFIL ALUNO Versão 1.0 2015 SUMÁRIO 1. O MOODLE 3 2. Acesso à Plataforma 3 2.1. Cadastrar-se em uma disciplina 4 2.2. Página Inicial do Curso 5 3.

Leia mais

DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR

DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR Fortaleza - CE Introdução ao ambiente de desenvolvimento delphi e preparação da interface basíca O ambiente delphi foi criado pela Borland Software

Leia mais

9 Comandos condicionais

9 Comandos condicionais 9 Comandos condicionais Um comando condicional é uma instrução empregada quando se deseja criar um desvio, isto é, a opção de executar-se ou não um determinado trecho de código, segundo uma condição. Em

Leia mais

4Distribuição de. freqüência

4Distribuição de. freqüência 4Distribuição de freqüência O objetivo desta Unidade é partir dos dados brutos, isto é, desorganizados, para uma apresentação formal. Nesse percurso, seção 1, destacaremos a diferença entre tabela primitiva

Leia mais

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO MATERIAL DIDÁTICO IMPRESSO CURSO: Física DISCIPLINA: Informática para o Ensino de Física CONTEUDISTA: Carlos Eduardo Aguiar

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Aula 4 Estatística Conceitos básicos

Aula 4 Estatística Conceitos básicos Aula 4 Estatística Conceitos básicos Plano de Aula Amostra e universo Média Variância / desvio-padrão / erro-padrão Intervalo de confiança Teste de hipótese Amostra e Universo A estatística nos ajuda a

Leia mais

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW Ciclo de Vida Aula 2 Revisão 1 Processo de Desenvolvimento de Software 1 O Processo de desenvolvimento de software é um conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto

Leia mais

MANUAL DO AVA GOVERNO DO ESTADO DO AMAZONAS. Rua Ramos Ferreira, 991 A - Centro Fone: (92) 3878-7479 / 3233-6836 Manaus AM CEP: 69010-120

MANUAL DO AVA GOVERNO DO ESTADO DO AMAZONAS. Rua Ramos Ferreira, 991 A - Centro Fone: (92) 3878-7479 / 3233-6836 Manaus AM CEP: 69010-120 MANUAL DO AVA 1. O QUE É EDUCAÇÃO A DISTÂNCIA? A Educação a Distância, como dispõe o Decreto nº 5.622, de 19/12/2005, caracterizase como uma modalidade educacional na qual a mediação didático-pedagógica

Leia mais

1. Introdução. Avaliação de Usabilidade Página 1

1. Introdução. Avaliação de Usabilidade Página 1 1. Introdução Avaliação de Usabilidade Página 1 Os procedimentos da Avaliação Heurística correspondem às quatro fases abaixo e no final é apresentado como resultado, uma lista de problemas de usabilidade,

Leia mais

Morfologia Matemática Binária

Morfologia Matemática Binária Morfologia Matemática Binária Conceitos fundamentais: (Você precisa entender bem esses Pontos básicos para dominar a área! Esse será nosso game do dia!!! E nossa nota 2!!) Morfologia Matemática Binária

Leia mais

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona.

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona. Aula 14 Redes de Computadores 24/10/07 Universidade do Contestado UnC/Mafra Sistemas de Informação Prof. Carlos Guerber ROTEAMENTO EM UMA REDE DE COMPUTADORES A máscara de sub-rede é utilizada para determinar

Leia mais

O Gerenciamento de Documentos Analógico/Digital

O Gerenciamento de Documentos Analógico/Digital Tipos de GED: Document imaging Document management Document Imaging / Document Management O Gerenciamento de Documentos Analógico/Digital Mundo analógico Criação Revisão Processamento Arquivo Mundo digital

Leia mais

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova; Software Básico 2008.2 Trabalho Prático 1: programação de E/S, uso de sinais Prática de programação voltada a eventos Trabalho individual ou em dupla Data de entrega: 01/10/2008 1 O Objetivo Utilizando

Leia mais

Trabalho Prático 1 Tipos Abstratos de Dados

Trabalho Prático 1 Tipos Abstratos de Dados Universidade Federal de Minas Gerais Departamento de Ciência da Computação/ICEx Algoritmos e Estruturas de Dados II Prof. Jussara M. Almeida Trabalho Prático 1 Tipos Abstratos de Dados Data de entrega:

Leia mais

Descrição do Produto. Altus S. A. 1

Descrição do Produto. Altus S. A. 1 Descrição do Produto O software MasterTool IEC é um ambiente completo de desenvolvimento de aplicações para os controladores programáveis da Série Duo. Esta ferramenta permite a programação e a configuração

Leia mais

Simulado Informática Concurso Correios - IDEAL INFO

Simulado Informática Concurso Correios - IDEAL INFO Simulado Informática Concurso Correios - IDEAL INFO Esta prova de informática é composta por 20 (vinte) questões de múltipla escolha seguindo o molde adotado pela UnB/CESPE. O tempo para a realização deste

Leia mais

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

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Programação Servidor para Sistemas Web 1 Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Objetivo: Apresentar a teoria por trás dos padrões na construção de aplicações Web. INTRODUÇÃO Nas aulas anteriores

Leia mais

Computador Digital Circuitos de um computador (Hardware)

Computador Digital Circuitos de um computador (Hardware) Computador Digital SIS17 - Arquitetura de Computadores (Parte I) Máquina que pode resolver problemas executando uma série de instruções que lhe são fornecidas. Executa Programas conjunto de instruções

Leia mais

Trabalho 3: Agenda de Tarefas

Trabalho 3: Agenda de Tarefas INF 1620 Estruturas de Dados Semestre 08.2 Trabalho 3: Agenda de Tarefas O objetivo deste trabalho é a implementação de um conjunto de funções para a manipulação de uma agenda de tarefas diárias, de forma

Leia mais

Manual de utilização do EAD SINPEEM. EaD Sinpeem

Manual de utilização do EAD SINPEEM. EaD Sinpeem 2015 Manual de utilização do EAD SINPEEM EaD Sinpeem 2 SUMÁRIO 1 INTRODUÇÃO... 3 2. COMO ACESSAR UM CURSO... 3 3. COMO ALTERAR MINHA SENHA... 5 4. COMO EDITAR MEU PERFIL... 5 5. COMO ACESSAR O CURSO...

Leia mais

Q-Acadêmico. Módulo CIEE - Estágio. Revisão 01

Q-Acadêmico. Módulo CIEE - Estágio. Revisão 01 Q-Acadêmico Módulo CIEE - Estágio Revisão 01 SUMÁRIO 1. VISÃO GERAL DO MÓDULO... 2 1.1 PRÉ-REQUISITOS... 2 2. ORDEM DE CADASTROS PARA UTILIZAÇÃO DO MÓDULO CIEE... 3 2.1 CADASTRANDO EMPRESAS... 3 2.1.1

Leia mais

MANUAL DE UTILIZAÇÃO DO AMBIENTE EAD (Educação a Distância) ÍNDICE

MANUAL DE UTILIZAÇÃO DO AMBIENTE EAD (Educação a Distância) ÍNDICE MANUAL DE UTILIZAÇÃO DO AMBIENTE EAD (Educação a Distância) ÍNDICE FORMAS DE ACESSO AO AMBIENTE EAD... 2 O AMBIENTE EAD... 2 TERMO DE COMPROMISSO... 3 CONHECENDO A HOME PAGE DO TREINAMENTO EAD... 3 ETAPAS

Leia mais

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20 As informações contidas neste documento estão sujeitas a alterações sem o prévio aviso, o que não representa um compromisso da Virtuem Informática. As pessoas, organizações ou empresas e eventos de exemplos

Leia mais

COM O BROFFICE IMPRESS

COM O BROFFICE IMPRESS Unidade Unidade 5 4 Preparando Compondo suas planilhas apresentações eletrônicas com com o BrOffice o BrOffice Impress Calc UNIDADE 5 PREPARANDO SUAS APRESENTAÇÕES COM O BROFFICE IMPRESS OBJETIVOS ESPECÍFICOS

Leia mais

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios CURSO - TADS TURMA 2008.1 2 PERÍODO 3 MÓDULO AVALIAÇÃO MP2 DATA 02/10/2008 SISTEMAS OPERACIONAIS 2008/2 GABARITO COMENTADO SISTEMAS OPERACIONAIS PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida,

Leia mais

Algoritmos e Programação Parte Teórica

Algoritmos e Programação Parte Teórica Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte Teórica Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Escola de Contas Públicas Tribunal de Contas do Estado de São Paulo

Escola de Contas Públicas Tribunal de Contas do Estado de São Paulo Escola de Contas Públicas Tribunal de Contas do Estado de São Paulo PROGRAMA DE EDUCAÇÃO A DISTÂNCIA DA Novembro 2008 São Paulo SP Primeiramente queremos observar que este texto não se trata de um manual,

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

BSI Letramento Digital Prof. André Di Thommazo. Organização pessoal

BSI Letramento Digital Prof. André Di Thommazo. Organização pessoal Organização pessoal Os cursos de graduação exigem que os alunos cursem diversas disciplinas ao mesmo tempo e em alguns semestres a carga horária é grande. Em geral o aluno de ensino a distância tem outras

Leia mais

Estrutura de Dados Básica

Estrutura de Dados Básica Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 9: Filas com Alocação de Memória Estática O objetivo desta aula é apresentar estrutura de dados Fila e suas aplicações. Motivação A estrutura

Leia mais

Projeto ECA na Escola - Plataforma de Educação à Distância

Projeto ECA na Escola - Plataforma de Educação à Distância Página1 Apresentação Projeto ECA na Escola - Plataforma de Educação à Distância Olá Participante do Projeto ECA na Escola, Este tutorial pretende auxiliá-lo na navegação na Plataforma de Educação à Distância

Leia mais

Olá, Professores e Professoras. É um prazer estar aqui com vocês novamente. Sejam bem-vindos!

Olá, Professores e Professoras. É um prazer estar aqui com vocês novamente. Sejam bem-vindos! Transcrição do vídeo Caixa de edição e texto Duração: 10 minutos e 26 segundos Olá, Professores e Professoras. É um prazer estar aqui com vocês novamente. Sejam bem-vindos! Hoje vamos conversar sobre um

Leia mais

Curso Juventude Brasileira e Ensino Médio Inovador. Manual do ambiente Moodle

Curso Juventude Brasileira e Ensino Médio Inovador. Manual do ambiente Moodle Curso Juventude Brasileira e Ensino Médio Inovador Manual do ambiente Moodle CURSO DE INTRODUÇÃO AO MOODLE 1. Introdução Estamos começando nossa viagem e nossa primeira parada é na unidade denominada Curso

Leia mais

Manual do Instar Mail v2.0

Manual do Instar Mail v2.0 Manual do Instar Mail v2.0 Sumário Conteúdo Menu Principal... 2 Menu Cliente... 3 Pagina Categorias do Instar-Mail... 4 Importação... 4 Campanhas... 8 Cadastramento de campanhas do Instar-Mail... 9 Ações

Leia mais

Notas de versão. Versão 3.16.1.0

Notas de versão. Versão 3.16.1.0 Notas de versão Sistema Gescor Versão 3.16.1.0 Lançamento Abril/2016 Interface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 1. Nova interface e usabilidade do sistema.

Leia mais

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais.

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais. MICROSOFT WINDOWS O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais. Apresentaremos a seguir o Windows 7 (uma das versões do Windows)

Leia mais

2 Ferramentas Utilizadas

2 Ferramentas Utilizadas 2 Ferramentas Utilizadas Esta dissertação utiliza vários outros trabalhos para implementar os mecanismos de adaptação abordados. Essas ferramentas são descritas nas seções seguintes. 2.1 Lua Lua [7, 8]

Leia mais

Indicamos inicialmente os números de cada item do questionário e, em seguida, apresentamos os dados com os comentários dos alunos.

Indicamos inicialmente os números de cada item do questionário e, em seguida, apresentamos os dados com os comentários dos alunos. Os dados e resultados abaixo se referem ao preenchimento do questionário Das Práticas de Ensino na percepção de estudantes de Licenciaturas da UFSJ por dez estudantes do curso de Licenciatura Plena em

Leia mais

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues Modelo De Desenvolvimento De Software É uma representação abstrata do processo de desenvolvimento que define como as etapas relativas ao desenvolvimento de software serão conduzidas e interrelacionadas

Leia mais

Gerenciamento de memória

Gerenciamento de memória Na memória principal ficam todos os programas e os dados que serão executados pelo processador. Possui menor capacidade e custo maior. S.O buscam minimizar a ocupação da memória e otimizar sua utilização.

Leia mais

Especificação Operacional.

Especificação Operacional. Especificação Operacional. Para muitos sistemas, a incerteza acerca dos requisitos leva a mudanças e problemas mais tarde no desenvolvimento de software. Zave (1984) sugere um modelo de processo que permite

Leia mais

Unidade I Conceitos BásicosB. Conceitos BásicosB

Unidade I Conceitos BásicosB. Conceitos BásicosB à Engenharia de Software Unidade I Conceitos BásicosB Pedro de Alcântara dos Santos Neto pasn@ufpi.edu.br 1961 a 1963 Surgimento de novos Hardwares 1963-1968 Crise do Software! Incapacidade de se utilizar

Leia mais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1 ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1 Índice 1. Introdução...3 1.1. O que é um Computador?... 3 1.2. Máquinas Multiníveis... 3 2 1. INTRODUÇÃO 1.1 O QUE É UM COMPUTADOR? Para estudarmos como um computador

Leia mais

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA Manual do Moodle- Sala virtual UNIFAP MACAPÁ-AP 2012 S U M Á R I O 1 Tela de Login...3 2 Tela Meus

Leia mais

TUTORIAL PARA UTILIZAÇÃO DA PLATAFORMA LMS

TUTORIAL PARA UTILIZAÇÃO DA PLATAFORMA LMS TUTORIAL PARA UTILIZAÇÃO DA PLATAFORMA LMS Neste documento você encontrará um conjunto de orientações de como navegar na plataforma do MBA Gestão Empreendedora. Siga as instruções com atenção e salve este

Leia mais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES CAPÍTULO 5 5 VETORES E MATRIZES 5.1 Vetores Um vetor armazena uma determinada quantidade de dados de mesmo tipo. Vamos supor o problema de encontrar a média de idade de 4 pessoas. O programa poderia ser:

Leia mais

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza Software Básico Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly Prof. MSc. Hugo Vieira L. Souza Este documento está sujeito a copyright. Todos os direitos estão reservados para o todo

Leia mais

4- PROJETO DE BANCO DE DADOS

4- PROJETO DE BANCO DE DADOS 4- PROJETO DE BANCO DE DADOS OBJETIVOS DE ENSINO: 4 - Empregar a técnica da modelagem de dados no projeto de banco de dados. OBJETIVOS OPERACIONAIS Ao final desta unidade o aluno será capaz de: 4.1 - Definir

Leia mais

Aula 1 Tipo Abstrato de Dados

Aula 1 Tipo Abstrato de Dados Aula 1 Tipo Abstrato de Dados Luiz Chaimowicz e Raquel O. Prates Livro Projeto de Algoritmos Capítulo 1 2009-1 O que é um algoritmo? O que é um programa? Algoritmos Sequência de ações executáveis para

Leia mais

Capítulo 13 Pastas e Arquivos

Capítulo 13 Pastas e Arquivos Capítulo 13 Pastas e Arquivos À medida que a tecnologia avança, os dispositivos móveis vão ganhando cada vez mais funções e características que antes só pertenciam aos computadores pessoais. Com a expansão

Leia mais

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados.

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados. O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados. A multiprogramação tem como objetivo permitir que, a todo instante, haja algum processo

Leia mais

PERGUNTAS MAIS FREQÜENTES

PERGUNTAS MAIS FREQÜENTES PERGUNTAS MAIS FREQÜENTES PROGRAMAS COM CURSOS ACADÊMICO E PROFISSIONAL... 2 PROPOSTA DE PROGRAMA... 2 COMO COPIAR E COLAR... 2 INSTALAÇÃO DAS VERSÕES ANTERIORES DO COLETA DE DADOS:... 2 EXCLUSÃO DE UMA

Leia mais

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados Prof. Hugo Souza Até agora vimos como é formada a infraestrutura física e lógica das bases de dados com os principais componentes

Leia mais

TÉCNICAS DE PROGRAMAÇÃO

TÉCNICAS DE PROGRAMAÇÃO TÉCNICAS DE PROGRAMAÇÃO (Adaptado do texto do prof. Adair Santa Catarina) ALGORITMOS COM QUALIDADE MÁXIMAS DE PROGRAMAÇÃO 1) Algoritmos devem ser feitos para serem lidos por seres humanos: Tenha em mente

Leia mais

PMBoK Comentários das Provas TRE-PR 2009

PMBoK Comentários das Provas TRE-PR 2009 PMBoK Comentários das Provas TRE-PR 2009 Comentário geral: As provas apresentaram grau de dificuldade médio. Não houve uma preocupação da banca em aprofundar os conceitos ou dificultar a interpretação

Leia mais

Projeto da Disciplina Parte1: Estudo de Viabilidade. Um Estudo de Viabilidade

Projeto da Disciplina Parte1: Estudo de Viabilidade. Um Estudo de Viabilidade Projeto da Disciplina Parte1: Estudo de Viabilidade ENTREGA: 09/04/09 Professor: Carlos José Maria Olguin Um Estudo de Viabilidade Você deve fazer um estudo de viabilidade para um projeto de sistema de

Leia mais

Sobre o Sistema FiliaWEB

Sobre o Sistema FiliaWEB Setembro/2009 SUMÁRIO SOBRE O SISTEMA FILIAWEB... 3 I - PAPÉIS E RESPONSABILIDADES NA NOVA SISTEMÁTICA DAS LISTAS DE FILIAÇÃO PARTIDÁRIA... 4 II CADASTRAMENTO DE USUÁRIO... 5 III REGISTRO DE FILIADOS...

Leia mais

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela? Exercícios sobre Linguagem PHP: 1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela? 2) Considere a linguagem de programação PHP e seus operadores. A execução da sentença:

Leia mais

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Introdução ao Paradigma Orientado a Objetos. Principais conceitos Introdução ao Paradigma Orientado a Objetos Principais conceitos Paradigmas de Programação PROGRAMAÇÃO ESTRUTURADA X PROGRAMAÇÃO ORIENTADA A OBJETOS Paradigma Programação estruturada Na programação estrutura

Leia mais

Tabelas vista de estrutura

Tabelas vista de estrutura Tabelas vista de estrutura A vista de estrutura permite definir a configuração dos dados Vamos adicionar os restantes campos à tabela carros, de acordo com o modelo de dados feito no papel 47 Tabelas vista

Leia mais

Soluções via.net para otimização de processos paramétricos com Autodesk Inventor.

Soluções via.net para otimização de processos paramétricos com Autodesk Inventor. Soluções via.net para otimização de processos paramétricos com Autodesk Inventor. Michel Brites dos Santos MAPData A parametrização quando possível já é uma forma de otimizar o processo de criação na engenharia.

Leia mais