Você está na página 1de 12

CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A

OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE


INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: ALEXANDRE LÊNIN CARNEIRO

AULA 0 - APRESENTAÇÃO

ATENÇÃO
ESTE CURSO ON-LINE ABRANGE OS ITENS VII, XIII E XV DO EDITAL PARA O

CARGO 25 DO CERTAME MPU 2010.

Olá, colegas,

Meu nome é Lênin Carneiro. Sou Analista de Planejamento e


Orçamento do Ministério do Planejamento, da área de Tecnologia da
Informação. Trabalho na Secretaria de Planejamento e Investimentos
Estratégicos – SPI, na Coordenação de Sistemas de Planejamento. Fui
funcionário do Serpro, Ibama e Receita Federal. Sempre trabalhando na
área de informática.

Tenho mestrado em Ciência da Computação, pela Universidade de


Brasília, área de concentração: Inteligência Artificial. Relaciono o
mestrado aqui, pois trabalhei com algoritmos inteligentes. Sou professor
de informática desde os 18 anos (1990), tendo lecionado em cursos
técnicos, graduação e pós-graduação. Minhas principais disciplinas na
graduação são ligadas à área de programação: algoritmos, estruturas
de dados, programação estruturada e orientada a objetos, linguagens
formais e compiladores e inteligência artificial.

Fiquei honrado com o convite do Ponto dos Concursos para ministrar


este curso de conteúdo específico para a área de Tecnologia da
Informação. Analisei o edital e escolhi estes tópicos para iniciarmos esta
parceria. Sim, parceria. Vamos juntos estudar os itens deste curso para
que você possa obter sucesso nesta empreitada. Estou certo de que

1
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

com dedicação, minha e sua, a tarefa será cumprida com perfeição.


Vamos lá! Falta pouco! Aproveite bem nossas aulas!

Esta aula é uma demonstração, possuindo um conteúdo reduzido. Ela


foi construída para que você possa avaliar a qualidade do meu
trabalho. Aproveite para aquecer os motores!

O curso, que ora apresento, aborda os itens VII, XIII e XV (parte


específica) do concurso MPU/2010, cargo 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS. É um curso em TEORIA E
EXERCÍCIOS, dividido em 4 aulas semanais, além desta aula
demonstrativa. Eis os assuntos que trabalharemos durante as quatro
semanas do curso (extraído do edital):

VII LÓGICA DE PROGRAMAÇÃO: Construção de algoritmos; tipos de


dados simples e estruturados; variáveis e constantes; comandos de
atribuição, entrada e saída; avaliação de expressões; funções pré-
definidas; conceito de bloco de comandos; estruturas de controle,
seleção, repetição e desvio; operadores e expressões; passagem de
parâmetros; recursividade; conceitos básicos de programação
estruturada e orientada a objetos; métodos de ordenação, pesquisa e
“hashing”. XIII PROGRAMAÇÃO ORIENTADA A OBJETOS: Conceitos
básicos: classes, objetos, métodos, mensagens, sobrecarga, herança,
polimorfismo, interfaces e pacotes; tratamento de exceção. XV TESTES:
Teste funcional e de unidade.

Quero destacar que o nosso curso foi preparado para o certame do


MPU, com conteúdo atualizado e concentrado nos tópicos descritos
acima. Sempre que possível, além da teoria e dos exercícios

2
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

selecionados, trarei para as aulas minhas experiências em provas de


programação.

Veja abaixo a organização do conteúdo.


Aula 0. Aula Demonstrativa: Método de Ordenação Bolha.
Aula 1. LÓGICA DE PROGRAMAÇÃO: Construção de algoritmos; tipos de
dados simples; variáveis e constantes; comandos de atribuição, entrada
e saída; avaliação de expressões; funções pré-definidas; conceito de
bloco de comandos; estruturas de controle, seleção, repetição e
desvio; operadores e expressões; conceitos básicos de programação
estruturada;
Aula 2. Modularização; procedimentos e funções; passagem de
parâmetros; recursividade; métodos de ordenação, pesquisa e
“hashing”.
Aula 3. PROGRAMAÇÃO ORIENTADA A OBJETOS: Conceitos básicos:
classes, objetos, métodos, mensagens, sobrecarga, herança,
polimorfismo, interfaces e pacotes; tratamento de exceção.
Aula 4. TESTES: Teste funcional e de unidade. Simulado.

Observe que os itens “modularização” e “procedimentos e funções”,


presentes na aula 2, não constam explicitamente do edital, mas devem
ser abordados e cobrados.

Nosso curso de Lógica de Programação, Programação Orientada a


Objetos e Testes para o MPU abordará, em teoria e exercícios, o que é
importante dentro dos tópicos relacionados na programação das aulas.
Procurarei ser objetivo, sem divagações ou aprofundamentos
desnecessários. Será um curso focado na prova e consciente de que
estamos na reta final. Em alguns momentos precisaremos evocar alguns

3
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

conceitos importantes para entender a matéria, mas manteremos o


foco no certame e tópicos indicados.

ATENÇÃO: esta é uma aula demonstrativa para que você


possa avaliar meu trabalho. Para esta demonstração,
selecionei alguns tópicos da primeira aula.

Aula 0 – Demonstrativa: Método de Ordenação Bolha

1. Conceitos de Ordenação

Ordenação é o processo de re-arranjo de determinado conjunto de


objetos de acordo com um critério (ordem) específico. O objetivo da
ordenação é facilitar e aumentar a eficiência na localização dos
membros de um conjunto de dados. Por exemplo: listas telefônicas,
cadastro de usuários, dicionários etc.
É um dos processos mais frequentes e importantes em processamento
de dados, sendo uma tarefa que prepara os dados para que as demais
operações sejam executadas de forma mais eficiente. Além da
relevância para os usuários da computação, a ordenação é muito
utilizada para demonstrar meios de se obter ganhos significativos de
desempenho através do desenvolvimento de algoritmos sofisticados. Em
muitos casos, são utilizados para testar técnicas de implementação e
otimização, especialmente quando o método de ordenação está bem
definido.
O processo de classificação é afetado pelas características do
ambiente no qual os dados estão armazenados (ou estarão durante o
processo): memória principal ou secundária. Uma das características
mais importantes de uma memória primária é o fato de que o tempo de
4
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

acesso a qualquer um de seus endereços é constante e igual para


todos os dados. Isto significa que a sequência na qual são acessados os
dados na memória primária não afeta o tempo médio de acesso a um
dado, já que é constante. Já os dados armazenados em memória
secundária devem ser, antes, transferidos para a memória primária,
para possibilitar as ações do processador sobre tais dados.
Na visão da ordenação de dados, pode-se concluir que os métodos de
classificação de dados armazenados em memória principal podem
envolver a manipulação destes dados em qualquer seqüência, ao
passo que os métodos de classificação de dados armazenados em um
disco magnético devem manipular os dados bloco a bloco.
Chamamos o processo de classificação de um conjunto de dados em
memória primária de classificação interna, enquanto que a
classificação de um conjunto de dados não inteiramente armazenado
na memória primária é denominado classificação externa.

Neste curso serão analisadas cinco das principais famílias de algoritmos


de classificação interna. Cada uma destas famílias abriga algoritmos
que seguem um mesmo princípio na classificação dos dados. Estas
famílias são:
• Classificação por Inserção: dividem a tabela em dois segmentos,
sendo o 1o ordenado e o 2o não ordenado. A seguir, todos os
elementos do 2o segmento vão, um a um, sendo inseridos no 1o
segmento. Os principais algoritmos desta família são inserção direta
com busca seqüencial, inserção direta com busca binária e
incrementos decrescentes (shellsort).

• Classificação por Trocas: efetuam a classificação por comparação


entre pares de chaves, trocando-as de posição caso estejam fora de
ordem. Os principais algoritmos desta família são bubblesort,
shakesort, combsort e quicksort.

• Classificação por Seleção: selecionam, a cada iteração, a chave de


menor (ou maior) valor da tabela, colocando-a em sua posição
correta (início ou final) dentro da tabela por permutação com a

5
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

chave que ocupa aquela posição. Os principais algoritmos desta


família são o de seleção direta (selectsort) e o heapsort.

• Classificação por Intercalação: divide a tabela em dois ou mais


segmentos, ordena estes segmentos e depois os intercalam,
terminando, ao final, com um único segmento (toda a tabela)
ordenado. O principal algoritmo desta família é o mergesort.

• Classificação por Distribuição de Chaves: cada elemento é


sucessivamente, distribuído em slots (escaninhos)conforme o valor
dos dígitos de sua chave. O principal algoritmo desta família é o
radixsort.

IMPORTANTE
Nesta aula abordaremos o método de ordenação chamado
método da bolha (bubble sort), que é um exemplo de
método de ordenação por troca.

2. Método da Bolha (Bubble Sort).


Os métodos que trabalham por troca efetuam a classificação por meio
de comparações entre pares de chaves, trocando-as de posição caso
estejam fora da ordem. Dentre todos os métodos de ordenção, o
Bubble Sort é, certamente, o mais conhecido e simples. Seu princípio
norteador é a troca de valores entre posições consecutivas, fazendo
com que os valores mais altos (conforme o critério de ordenação)
"borbulhem" para o final do arranjo. Assim, em poucas palavras o
método:
• Compara pares de chaves, trocando-as caso não estejam
ordenadas;
• Enquanto houverem pares desordenados, continua o processo.

Considere o seguinte arranjo desordenado:

6
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

1) O algoritmo faz a comparação entre os dois primeiros elementos


do arranjo (par):

2) Já que os dois primeiros elementos estão desordenados (critério


de ordenação crescente), o método determina que suas
posições sejam trocadas.

3) O processo continua, tomando-se os dois próximos elementos


(segundo e terceiro). Observe que, seguindo este algoritmo, o
maior elemento sempre ficará do lado direito do par e será parte
da próxima comparação.

4) Após esta “passagem” de comparações, o maior elemento


estará presente na última posição do arranjo. Dizemos que ele
“boubulhou” para a última posição.

7
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

5) Uma vez que o maior elemento está na última posição, basta


repetir o processo reiniciando as comparações (volte ao item 1).
Caso seja realizada uma passagem sem que exista alguma troca,
então o algoritmo encerra. Se não houve troca, os elementos
estão em ordem.
Veja:
2ª passagem 3ª passagem 4ª passagem

1. Algoritmo Bolha
2. Constantes
3. TAMANHO = 2000
4. Declaração de variáveis
5. vet: vetor[1..TAMANHO] de inteiros
6. indice, temp : inteiro
7. troca: lógico
8. Início
9. troca = VERDADEIRO
10. Enquanto troca Faça // se troca for falso, interrompe
11. troca = FALSO
12. Para indice de 1 até TAMANHO Faça
13. Se vet[indice] > vet[indice + 1] Então
14. temp = vet[indice]
15. vet[indice] = vet[indice + 1]
16. vet[indice + 1] = temp
17. troca = verdadeiro
18. Fim-Se
19. Fim-para
20. Fim-Enquanto
21. Fim.

8
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

Esta é uma implementação bem simples e sem otimizações. Optei por


mostrá-la para que você possa entender claramente os conceitos
apresentados. Observe como o algoritmo compara duas posições
consecutivas do vetor linha 13 e realiza a troca caso estejam fora da
ordem (linhas 14 a 17). Este procedimento de comparar e trocar ocorre
tantas quantas forem as posições do vetor, indicadas pela constante
TAMANHO. Na linha 12 uma estrutura de repetição para será executada
uma vez para cada posição do vetor. Se, ao final do laço, ao menos
uma troca for realizada, então a estrutura enquanto será executada
novamente. É para isto que serve a variável lógica trocou. Ela, ao iniciar
a repetição recebe o valor falso e, se permanecer assim, indica que
não houve trocas, pois seu valor só é alterado para VERDADEIRO se
ocorrer alguma troca. Dessa forma, o laço Enquanto será interrompido
e o algoritmo finalizado.

Existem variações desta implementação que melhoram o desempenho.


Por exemplo, poderíamos criar uma variável para indicar o último
elemento a ser comparado, já que a cada “varredura” o último
elemento estará na ordem correta e não será preciso mais compará-lo.
Poderíamos, ainda, criar outra variável para indicar a posição em que
ocorreu a última troca e assim reduzir a posição final de comparação
da próxima rodada a esta última posição de troca. Se, após tal troca
não ocorrer outra, isto significa que os elementos dali para diante estão
ordenados. Estas modificações melhoram o desempenho do algoritmo
em alguns casos, mas não a ponto de elevar a categoria do algoritmo.
É, sim, um dos algoritmos mais lentos para ordenação de dados.

Algumas modificações relevantes:

9
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

„ Método do Pente (CombSort): melhoramento que compara


chaves que distam uma certa distância h umas das outras.
Melhora em relação ao Bubble Sort em até 27x
„ Método da Agitação (ShakeSort): outra variação do método da
bolha, onde ao final de cada iteração, outra é executada em
sentido inverso. Há ganho apenas na diminuição do número de
comparações. O número de trocas é o mesmo.

Façamos uma breve análise da complexidade deste algoritmo.


Consideremos como itens relevantes para a análise a quantidade de
trocas e de comparações. Consideremos, nesta análise, a
implementação mais corriqueira do método, onde o tamanho do vetor
é reduzido a cada iteração.

No pior caso, quando a lista está com os números em ordem invertida:


Considere N como a quantidade de elementos a serem ordenados.
a) N-1 comparações e N-1 trocas para colocar um elemento na
ordem correta.
b) N-2 comparações e N-2 trocas para colocar o 2º elemento no
lugar.
c) Continua reduzindo até que faça 1 comparação para colocar o
último elemento no lugar.
d) Ao final disso teremos um total de 1 + 2 + 3 + ... + N-1
comparações e trocas.
e) 1 + 2 + 3 + ... + N-1 = (N-1).N / 2 = (N2 – N)/2 comparações e trocas.
f) Ordem quadrática Î N2

Isso equivale a dizer que, no pior caso, se temos 5 elementos, serão


realizadas 25 comparações e trocas. Se tivermos 10 elementos, serão
100; se forem 1000, então serão 1.000.000 de operações. Observe como

10
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

a quantidade de operações cresce exponencialmente em função da


quantidade de elementos. No melhor caso, quando os elementos estão
em ordem, serão realizadas N-1 comparações e nenhuma troca.

Vejamos algumas questões já aplicadas em provas.


01. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário) São algoritmos de
classificação por trocas apenas os métodos
a) SelectionSort e InsertionSort.
b) MergeSort e BubbleSort.
c) QuickSort e SelectionSort.
d) BubbleSort e QuickSort.
e) InsertionSort e MergeSort.

GABARITO: D

Comentário: Veja a tabela abaixo.

Classificação por Método


Inserção Inserção Direta com Busca Sequencial
INSERÇÃO DIRETA COM BUSCA BINÁRIA
Incrementos Decrescentes (Shellsort)

Troca Bolha (BubbleSort)


Pente (CombSort)
Agitação (ShakeSort)
Partição e Troca (QuickSort)
Seleção Direta (SelectSort)
HeapSort

Intercalação MergeSort (Intercalação Simples)

Distribuição de Chaves RadixSort (Indexação Direta)

02. (CESPE - 2009 - ANAC - Técnico Administrativo - Informática) O


desempenho de um sistema computacional depende de vários fatores,
como volume de dados, capacidade do sistema e adequação dos
algoritmos, das estruturas de dados e dos objetos que são utilizados
para realizar as operações. Acerca desse assunto, julgue os itens que se
seguem.
A ordenação de um vetor contendo n elementos, utilizando-se
algoritmo de bolha, realiza, no pior caso, mais que n/2 comparações.
( ) Certo ( ) Errado

11
www.pontodosconcursos.com.br
CURSO ON-LINE DE LÓGICA DE PROGRAMAÇÃO / PROGRAMAÇÃO ORIENTADA A
OBJETOS / TESTES (TEORIA E EXERCÍCIOS) PARA O CARGO 25: ANALISTA DE
INFORMÁTICA/DESENVOLVIMENTO DE SISTEMAS – MPU/2010.
PROFESSOR: LÊNIN CARNEIRO

GABARITO: CERTO

Comentário: O método da Bolha realiza a ordenação, no pior caso, em


n2 comparações. Imagine se fossem n/2 comparações. Nem todos os
elementos do arranjo seriam comparados!

03. (ESAF - 2005 - Receita Federal - Auditor Fiscal da Receita Federal -


Área Tecnologia da Informação - Prova 3) Analise as seguintes
afirmações relacionadas a noções básicas de programação:
I. A idéia básica do algoritmo de ordenação bubble sort é montar uma
árvore com os dados a serem ordenados, percorrer esses dados pela
última camada denominada folhas e, a cada passagem, comparar
cada elemento da folha com o seu sucessor. Se os elementos não estão
ordenados deve-se trocá-los de posição.

Comentários: Vamos aproveitar apenas este primeiro item da questão.


O método bolha não cria árvores. Ele transfere um elemento para sua
posição final a cada passagem de comparações.

Bem, chegamos ao final de nossa aula demonstrativa!


Espero vocês em breve. Ótimos estudos!

Lênin

12
www.pontodosconcursos.com.br

Você também pode gostar