Escolar Documentos
Profissional Documentos
Cultura Documentos
• O estudo de linguagens de programação é • cond faz com que condições executem ações.
valioso por diversas razões:
– Aumenta nossa capacidade de usar • eq testa se são o mesmo objeto
diferentes construções ao escrever • eql testa se são eq, se são números do
programas mesmo tipo ou se são caracteres
– Permite que escolhamos linguagens para os representando o mesmo objeto
projetos de forma mais • equal testa se são estruturalmente idênticos
inteligente (mesma árvore)
– Torna mais fácil o aprendizado de novas • equalp testa números de tipos diferentes e
linguagens caracteres diferentes.
• Critérios mais importantes para a avaliação
de linguagens:
– Legibilidade, facilidade de escrita,
confiabilidade e custo geral
• As principais influências no projeto de
linguagens são a arquitetura de
máquina e as metodologias de projeto de
software
• Os principais métodos de implementar
linguagens de programação são
a compilação, a interpretação pura e a
implementação híbrida.
Turtle LOGO
• Comandos (Tartaruga com um lápis):
• Andar x – FORWARD(x), BACK(x) onde x
são os passos
• Girar y – LEFT(a), RIGHT(a) onde a ângulos
em graus.
• Levantar ou abaixar lápis – PEN UP, PEN
DOWN
• Repetição – REPEAT {number of
times}[{command}]
• COLOR [color|#RGB]
LISP
• Comando Básicos:
• Aspas Simples ‘ é para ignorar a lista.
• list constrói a lista.
• length te entrega o tamanho da lista
• nth te entrega a posição do número a partir
de 0.
• char encontra um carácter.
• cdr te entrega o final da lista, car te entrega o
inicio. (OBS: Pode ser feito tudo junto, cxxr)
• cons adiciona um elemento em uma lista
• append junta listas.
• setq atribui qualquer variável.
• psetq atribuição em paralelo.
Lista Linear Sequencial Lista Ligada Dinâmica
• Uma lista linear possui armazenamento • Estática - se utiliza um arranjo para
sequencial, tanto física quanto lógica. armazenar
• O arranjo terá um tamanho fixo controlado os registros, se define um tamanho fixo (MAX)
por uma variável. • Dinâmica - utiliza alocação e deslocação da
• Buscar por um elemento memória dos elementos sob demanda
– Recebe o valor do elemento a buscar • Vantagens: melhor uso da memória e não é
– Retorna a posição em que o elemento preciso ter uma lista de elementos disponíveis
encontra-se na lista
– Se não encontra o elemento retorna -1 Buscar um elemento da estrutura.
• Recebe uma chave do usuário.
• Inserir um elemento numa posição • Retorna ao endereço onde está o elemento .
indicada pelo usuário • Retorna NULL caso não exista um registro
Procedimento: com essa chave.
1. Comprovar se posso inserir o elemento. • Tem que ser uma busca seqüencial
1. Se a lista está cheia não posso
inserir. Inserir elementos da estrutura.
2. Se o índice passado pelo usuário • O usuário passa como parâmetro um registro
não é válido, está fora, não poderá a ser inserido na lista.
inseri-lo. • Realizar inserção ordenada por a chave sim
2. Deslocar todos os elementos posteriores à permitir elementos repetidos.
posição indicada pelo usuário para a direita. • É preciso identificar entre quais elementos o
3. Inserir o elemento na posição desejada. novo elemento será inserido.
4. Somar um ao número de elementos. • Alocar memória para o novo elemento.
• Saber quem é o predecessor do elemento.
• Excluir um elemento pela posição
Procedimento: Função auxiliar
1. O usuário passa a posição do elemento que • Descobrir o predecessor
ele que deseja ser excluído. • Função para retornar, dada uma chave:
2. Desloca todos os elementos posteriores – o endereço do elemento.
uma posição para a esquerda. – o endereço do predecessor (exista o
3. Diminuir em um o número de elementos. não na lista)
• Retornar dois endereços
• Excluir um elemento pelo valor – Utilizar parâmetros por referência.
Procedimento:
1. O usuário passa o valor do elemento que Excluir um elemento
ele quer excluir. • Se houver um elemento com a chave na lista
1. Buscar o elemento se houver excluir o elemento da lista.
2. Desloca todos os elementos posteriores • Saber quem é o predecessor dele.
uma posição para a esquerda. • Acertar os ponteiros envolvidos, liberar a
3. Diminuir em um o número de elementos. memória dele e retorna true
• Caso contrário retorna false.
Lista Ligada Estática
• Ordem lógica e física diferente. Reinicializar a estrutura
• A lógica prossegue com o número abaixo. • Excluir todos os seus elementos e liberar a
• Para inserir o número você precisa organizar memória utilizada.
a posição em um espaço aberto e organizar
suas sequências.
• Para retirar, você precisa retirar o número e
reorganizar os elementos sequências.
• Sempre começa do 0.
Filas, Pilhas e Deque
Fila - FIFO Fila - FIFO
• Só podemos acessar o primeiro e o último Inicializar.
elemento da estrutura Excluir um elemento (pop)
• Os itens são consumidos por ordem de Inserir um elemento (push)
chegada Acessar um elemento (first)
• FIFO (first input, first output)
Algoritmos de Busca
• Busca sequencial: forma mais simples de
buscar um elemento em um arranjo de dados:
procurando-o ao longo de todos os seus
elementos – no caso de um vetor, verificando
todas as suas posições.
• Busca binária: Se os elementos do vetor não
estiverem ordenados, não teremos outro
método de busca, a não ser o sequencial.
Mas, se os elementos do vetor estiverem
ordenados,existem métodos mais eficientes
do que a busca sequencial.
Elementos da estrutura de dados
estiverem ordenados
Ideia de “dividir para conquistar”
– A divisão acontece sempre
comparando o valor que se busca
com o elemento localizado no meio do
vetor. • Se o vetor não está ordenado, tem
(1) O valor desse elemento central é igual à algoritmos de ordenação:
chave de busca; – Algoritmo de ordenação por troca;
(2) O valor é menor do que a chave de busca; – Algoritmo de ordenação por inserção;
(3) O valor é maior do que a chave de busca; – Algoritmo de ordenação por seleção;
– Algoritmo de ordenação por intercalação;
Algoritmos de Ordenação I Árvore
Inserção – A árvore é construída pegando o centro de
• Algoritmo eficiente para ordenar um número cada separação.
pequeno de elementos.
• Funciona da maneira como muitas pessoas
ordenam as cartas em um
jogo de bridge ou pôquer.
– Inicia com a mão esquerda vazia e
as cartas viradas com a face para
baixo na mesa.
– Remover uma carta de cada vez da
mesa, inserindo-a na posição correta
na mão esquerda.
– Para encontrar a posição correta de
uma carta, compara-se a cada uma
das cartas que já estão na mão, da
direita para a esquerda
Seleção - (selection_sort)
• Ordenar de n números
– Localizando primeiro o menor elemento do
vetor,
– Permutar esse elemento como o elemento
contido na primeira posição do vetor.
– Em seguida encontrar o segundo menor
elemento do vetor e trocar por o elemento
na segunda posição.
– Continuar para os primeiros n-1 elementos
Flutuação - (bubble_sort)
• Organizar através de pares.
– Pegue um par no inicio e vá trocando de
lugar até encontrar um número maior,
prossiga até o final e repita até estar tudo
organizado.
Algoritmos de Ordenação II
Merge - (merge_sort)
– Separe em duas pilhas e comece pela
menor, vá separando até poder organizar na
ordem correta.
Quicksort - (quick_sort)
– Número pode trocar apenas com o lado
enquanto o que está sendo trocado pode
trocar mais longe.
Heap - (heap_sort)
– Segue a ideia de uma árvore da esquerda
pra direita da lista.