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

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

Embed Size (px)

Citation preview

Page 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

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.

Page 2: 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

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.

Page 3: 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

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;

}

Page 4: 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

Procedimentos e Funções

Exercício 1:

Escreva um procedimento ou função em linguagem Cque troca dois valores A e B.

Exercício 2:

Escreva um procedimento ou função em linguagem Cque recebe dois valores A e B, calcula a soma eguarda o resultado em A.

Exercício 3:

Escreva um procedimento ou função em linguagem Cque retorna a soma e o produto de dois valores A e B.

Page 5: 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

Procedimentos e Funções

Solução:

void troca(int* A, int* B){

int aux;aux = *A;*A = *B;*B = aux;

}

Page 6: 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

Procedimentos e Funções

Solução:

void SomaEmA(int* A, int B){

*A = *A + B;}

Page 7: 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

Procedimentos e Funções

Solução:

void SomaProduto(int A, int B, int* soma, int* prod)

{*soma = A + B;*prod = A * B;

}

Page 8: 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

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.

Page 9: 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

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

Page 10: 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

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.

Page 11: 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

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);

}}

Page 12: 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

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.

Page 13: 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

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.

Page 14: 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

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;

}

Page 15: 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

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?

Page 16: 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

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.

Page 17: 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

Procedimentos e Funções

Busca Binária :

X = 3; esq = 0; dir = N – 1; meio = (esq + dir)/2;

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

esq meio dir

Page 18: 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

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;

Page 19: 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

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?

Page 20: 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

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.

Page 21: 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

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

Page 22: 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

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.

Page 23: 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

Procedimentos e Funções

Ordenação por Seleção (Selection Sort) :

3 20 78 15 56 23 2 1 19 28 6

3 20 78 15 56 23 2 6 19 28

1

N = 11; M = 0;

N = 10; M = 1;

3 20 78 15 56 23 28 6 19

58 2

N = 9; M = 2;

Page 24: 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

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

Page 25: 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

Procedimentos e Funções

Problema :

Como ordenar um vetor sem alterar os dados do vetor

original V ?

Page 26: 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

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.

Page 27: 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

Procedimentos e Funções

Ordenação por Inserção (Insertion Sort) :

2 15 1 3 6 23 57

2

2 15 1 3 6 23 57

2 15

M = 0; i = 0;

M = 1; i = 1;

2 15

2 15 1 3 6 23 57

2 15 1

M = 2; i = 2;

2 1 15

1 2 15

Page 28: 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

Procedimentos e Funções

Ordenação por Inserção (Insertion Sort) :

2 15 1 3 6 23 57

1 2 15 3

M = 3; i = 3;

1 2 3 15

1 2 3 15

2 15 1 3 6 23 57

1 2 3 15 6

M = 4; i = 4;

1 2 3 6 15

1 2 3 6 15

Page 29: 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

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

Page 30: 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

Procedimentos e Funções

Problema :

Como ordenar um vetor sem o uso de um vetor auxiliar

(Ordenado) ?

Page 31: 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

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.

Page 32: 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

Procedimentos e Funções

Ordenação por Troca (Bubble Sort) :

57 30 8 15 56 23 2

30 57 8 15 56 23 2

i = 0;

i = 1;

30 8 57 15 56 23 2i = 2;

30 8 15 56 23 2 57i = 0;

30 8 15 57 56 23 2i = 3;

30 8 15 56 57 23 2i = 4;

30 8 15 56 23 57 2i = 5;

30 8 15 56 23 2 57i = 6;

8 30 15 56 23 2 57i = 1;

Page 33: 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

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