Procedimentos e Funções

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Dados Listas Prof. Rodrigo Rocha
Advertisements

Ordenação de Dados em Memória
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
Aula 10 Algoritmos de Busca
Estruturas de Dados Árvores Binárias
Recursividade Prof. Rosana Palazon.
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Algoritmos de Ordenação
Programação II Estruturas de Dados
Algoritmos e Estrutura de Dados I
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Métodos de Classificação por Seleção: HeapSort
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Linguagem C Estruturas de Seleção.
Matrizes e Funções - Continuação
Ponteiros.
Listas Encadeadas.
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
Algoritmos de Ordenação
Algoritmos de Ordenação
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
PROGRAMAÇÃO ESTRUTURADA II
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Heap Sort TPA – Prof. Mateus Costa
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação II Estruturas de Dados Aula 02 - continuação
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Prof. Ricardo Santos PONTEIROS
Vetores e Matrizes Ameliara Freire
Técnicas de Desenvolvimento de Programas
Linguagem de Programação
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Introdução à Linguagem C
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Aula 10 Algoritmos de Busca
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações.
Prof. Hilton Cardoso Marins Junior
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Introdução a Programação
Algoritmo e Estrutura de Dados I
Linguaguem de Programação II
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
USP – ICMC – SSC SSC0300 2º Semestre 2015
PRE 1002 Éverlin Marques 2015/1.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Estruturas Homogêneas - Vetores
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Procedimentos e Funções Problema 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. Problema 2: que retorna a soma e o produto de dois valores A e B.

Procedimentos e Funções Passagem de Parâmetros: Passagem por Valor: Quando a função é chamada o parâmetro passado por valor é copiado, ou seja, o valor da variável utilizada como parâmetro não é alterado. Passagem por Referência: Quando a função é chamada o endereço do parâmetro passado por referência é atribuído à um ponteiro, ou seja, qualquer alteração no conteúdo apontado será refletida no conteúdo da variável utilizada como parâmetro.

Procedimentos e Funções Exemplo : void FuncaoInutil(int A, int* B) { A = 1; *B = 2; } int main() int X = 0, Y = 0; FuncaoInutil(X, &Y); printf(“%d %d”, X, Y); return 0;

Procedimentos e Funções Exercício 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. Exercício 2: que recebe dois valores A e B, calcula a soma e guarda o resultado em A. Exercício 3: que retorna a soma e o produto de dois valores A e B.

Procedimentos e Funções Solução: void troca(int* A, int* B) { int aux; aux = *A; *A = *B; *B = aux; }

Procedimentos e Funções Solução: void SomaEmA(int* A, int B) { *A = *A + B; }

Procedimentos e Funções Solução: void SomaProduto(int A, int B, int* soma, int* prod) { *soma = A + B; *prod = A * B; }

Procedimentos e Funções Exercício : Escreva um procedimento ou função em linguagem C que recebe um vetor de números inteiros V de tamanho 100, e um inteiro N, em seguida você deve imprimir os N primeiros valores do vetor.

Procedimentos e Funções Solução: void ImprimeVetor(int V[100], int N) { int i; for (i = 0; i < N; i++) printf(“%d ”, V[i]); }

Procedimentos e Funções Exercício : Escreva um procedimento ou função em linguagem C que recebe um vetor de números inteiros V de tamanho 100, e um inteiro N por referência, em seguida você deve ler valores inteiros da entrada até que o usuário digite -1. Ao final todos os valores diferentes de -1 devem estar armazenados em V e o total de valores deve estar em N.

Procedimentos e Funções Solução: void LeVetor(int V[100], int* N) { int aux; *N = 0; scanf(“%d”, &aux); while (aux != -1) V[*N] = aux; (*N)++; }

Procedimentos e Funções Exercício : Escreva uma função em linguagem C que recebe um vetor de números inteiros V de tamanho 100, um inteiro N que contém o número de posições preenchidas de V, e um número inteiro X. A sua função deve retornar 1 se V contém o valor X e zero caso contrário.

Procedimentos e Funções Algoritmo : Percorra todos os valores do Vetor Compare cada valor com o número procurado Se um dos valores for igual então retorne 1 Senão continue procurando Se chegar ao fim da busca retorne zero, porque o valor não foi encontrado.

Procedimentos e Funções Busca Linear: int BuscaLinear(int V[100], int N, int X) { int i; for (i = 0; i < N; i++) if( V[i] == X ) return 1; } return 0;

Procedimentos e Funções Problema : E se os vetores do exercício anterior estivessem sempre ordenados? Seria necessário verificar todos os elementos para determinar se X está em V?

Procedimentos e Funções Algoritmo : Marque os extremos direito (dir) e esquerdo (esq) do vetor. Compare o valor procurado com o valor central (meio) Se for igual retorne saia do laço. Senão, se o valor for maior que o valor de meio, então esq recebe meio mais 1. Senão dir recebe meio menos 1. Atualize o valor do meio. Repita enquanto esq for menor que dir. Ao sair do laço se valor for igual a meio retorne 1, senão retorne 0.

Procedimentos e Funções Busca Binária : X = 3; esq = 0; dir = N – 1; meio = (esq + dir)/2; esq meio dir 1 2 7 15 23 56 57 58 70 72 78 esq meio dir 1 2 7 15 23 56 57 58 70 72 78 esq meio dir 1 2 7 15 23 56 57 58 70 72 78 esq meio dir 1 2 7 15 23 56 57 58 70 72 78

Procedimentos e Funções Busca Binária: esq = 0; dir = N - 1; meio = (esq + dir) / 2; while (esq < dir) { if ( X == V[meio] ) break; else if ( X > V[meio] ) esq = meio + 1; else dir = meio - 1; meio = (esq + dir) / 2; } return 1; return 0;

Procedimentos e Funções Problema : Não há como garantir que o usuário sempre digitará um vetor ordenado. E agora? Como devemos fazer para que seja possível utilizar a busca binária sempre?

Procedimentos e Funções Exercício : Escreva uma função em linguagem C que retorna a posição no vetor (não é o valor) do menor elemento. A função recebe como parâmetros um vetor V de 100 elementos e um inteiro N que indica o número de elementos de V.

Procedimentos e Funções Solução: int MenorElemento(int V[100], int N) { int i, menor = 0; for(i = 1; i < N; i++) if(V[i] < V[maior]) menor = i; return menor; }

Procedimentos e Funções Algoritmo : Remova o menor elemento do vetor (V) e insira na primeira posição livre do vetor auxiliar (Ordenado). Repita este processo até acabarem os elementos do vetor V.

Procedimentos e Funções Ordenação por Seleção (Selection Sort) : N = 11; M = 0; 3 20 78 15 56 23 2 1 19 28 6 N = 10; M = 1; 3 20 78 15 56 23 2 6 19 28 1 N = 9; M = 2; 3 20 78 15 56 23 28 6 19 58 2

Procedimentos e Funções Ordenação por Seleção (Selection Sort) : void SelectionSort(int V[100], int N, int Ordenado[100]) { int M = 0, i; while(N > 0) i = MenorElemento(V, N); Ordenado[M] = V[i]; V[i] = V[N - 1]; N--; M++; }

Procedimentos e Funções Problema : Como ordenar um vetor sem alterar os dados do vetor original V ?

Procedimentos e Funções Algoritmo : Percorra o vetor (V) Para cada elemento (aux) de V, insira uma cópia de aux na primeira posição livre do vetor auxiliar (Ordenado). Se o valor de aux for menor que do elemento anterior, então troque aux com o anterior. Senão saia do laço. Repita as trocas até que aux chegue na primeira posição.

Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : M = 0; i = 0; 2 15 1 3 6 23 57 2 M = 1; i = 1; 2 15 1 3 6 23 57 2 15 2 15 M = 2; i = 2; 2 15 1 3 6 23 57 2 15 1 2 1 15 1 2 15

Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : 2 15 1 3 6 23 57 M = 3; i = 3; 1 2 15 3 1 2 3 15 1 2 3 15 2 15 1 3 6 23 57 M = 4; i = 4; 1 2 3 15 6 1 2 3 6 15 1 2 3 6 15

Procedimentos e Funções Solução : void InsertionSort( int V[100], int N, int Ordenado[100]) { int M = 0, i, j, k; for (i = 0; i < N; i++) Ordenado[M] = V[i]; k = M; for (j = M - 1; j >= 0; j--) if (Ordenado[k] < Ordenado[j] ) Troca(&Ordenado[k--], &Ordenado[j]); else break; M++; }

Procedimentos e Funções Problema : Como ordenar um vetor sem o uso de um vetor auxiliar (Ordenado) ?

Procedimentos e Funções Algoritmo : Para cada elemento i do vetor V. Se o valor de i + 1 for menor que i Então troque i + 1 com i. Senão incremente o valor de i. Repita este processo até i chegue ao fim do vetor. Repita todo o processo até que todos os elementos do vetor tenham sido comparados.

Procedimentos e Funções Ordenação por Troca (Bubble Sort) : i = 0; 57 30 8 15 56 23 2 i = 1; 30 57 8 15 56 23 2 i = 2; 30 8 57 15 56 23 2 i = 3; 30 8 15 57 56 23 2 i = 4; 30 8 15 56 57 23 2 i = 5; 30 8 15 56 23 57 2 i = 6; 30 8 15 56 23 2 57 i = 0; 30 8 15 56 23 2 57 i = 1; 8 30 15 56 23 2 57

Procedimentos e Funções Solução : void BubbleSort( int V[100], int N) { int j, i; for ( i = 0; i < N - 1; i++ ) for ( j = 0; j < N - 1; j++ ) if ( V[j] < V[j + 1] ) Troca( &V[j], &V[j + 1] ); }