• No se han encontrado resultados

Passagem de Parametros

N/A
N/A
Protected

Academic year: 2020

Share "Passagem de Parametros"

Copied!
33
0
0

Texto completo

(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

(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,

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

(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

(5)

Procedimentos e Funções

Solução:

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

int aux;

(6)

Procedimentos e Funções

Solução:

void SomaEmA(int* A, int B) {

(7)

Procedimentos e Funções

Solução:

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

prod) {

(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

(9)

Procedimentos e Funções

Solução:

void ImprimeVetor(int V[100], int N) {

int i;

for (i = 0; i < N; 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

(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

(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

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

(15)

Procedimentos e Funções

Problema :

E se os vetores do exercício anterior estivessem

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

(17)

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

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

(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

(20)

Procedimentos e Funções

Exercício :

(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

(23)

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

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

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

(27)

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

(28)

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

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

(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

(32)

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 2

i = 2;

30 8 15 56 23 2 57 i = 0;

30 8 15 57 56 23 2

i = 3;

30 8 15 56 57 23 2

i = 4;

30 8 15 56 23 57 2

i = 5;

30 8 15 56 23 2 57

i = 6;

8 30 15 56 23 2 57

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

Referencias

Documento similar

Il tente de montrer que ce roman correspond à un récit polymorphe, puisque celui-ci dévore plusieurs genres, comme le roman historique, la tragédie, dont les mécanismes

O objetivo desta tese é investigar sobre a relação entre identidade, alteridade e alteração entre grupos indígenas da família linguística Tukano, que migraram da Terra Indígena do

O argumento principal da discussão aqui é justamente este, ou seja, que os projetos de Escola Sem Partido ou contra a &#34;chamada ideologia de gênero&#34; e, ainda, a

No Brasil, é estabelecido que podem receber o órgão pessoas com problemas graves de saúde cuja função do seu órgão ou tecido esteja comprometida, não possa ser

dizer que estes nomes são desconhecidos para muitos educadores, da mesma forma que o pensamento sobre o método natural e o bom-senso de Freinet foi ocultado por suas técnicas de

Para além do mais, quando é certo que, gramatical e teleologicamente, aquela norma integra, apenas, um especial regime transitório de supervisão financeira das

É por isso que a primeira etapa do TEF (1979-1993) é marcada pela utilização do teatro de rua (ou teatro callejero), como uma ferramenta do grupo para fazer política através da

é al nuestro Alcalde Entregador de las dichas nuestras Cañadas, é à sus Lugares-Thenientes; assi à los que agora son, como à los que seràn de aqui adelante, à quien esta