A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Procedimentos e Funções Problema 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. Problema 2: Escreva um procedimento."— Transcrição da apresentação:

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

2 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.

3 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; }

4 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: Escreva um procedimento ou função em linguagem C que recebe dois valores A e B, calcula a soma e guarda o resultado em A. Exercício 3: Escreva um procedimento ou função em linguagem C que retorna a soma e o produto de dois valores A e B.

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

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

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

8 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.

9 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]); }

10 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.

11 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)++; scanf(“%d”, &aux); }

12 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.

13 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.

14 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; }

15 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?

16 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.

17 Procedimentos e Funções Busca Binária : X = 3; esq = 0; dir = N – 1; meio = (esq + dir)/2; esqmeiodir esq meiodir esq meio dir esq meio dir

18 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; } if ( X == V[meio] ) return 1; return 0;

19 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?

20 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.

21 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; }

22 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.

23 Procedimentos e Funções Ordenação por Seleção (Selection Sort) : N = 11; M = 0; N = 10; M = 1; N = 9; M = 2;

24 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++; }

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

26 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.

27 Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : M = 0; i = 0; M = 1; i = 1; M = 2; i = 2;

28 Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : M = 3; i = 3; M = 4; i = 4;

29 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++; }

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

31 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.

32 Procedimentos e Funções Ordenação por Troca (Bubble Sort) : i = 0; i = 1; i = 2; i = 0; i = 3; i = 4; i = 5; i = 6; i = 1;

33 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] ); }


Carregar ppt "Procedimentos e Funções Problema 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. Problema 2: Escreva um procedimento."

Apresentações semelhantes


Anúncios Google