Curso de Programação C#

William Ivanski

Exemplos Capítulo 5


1) Busca por Índice

int[] vetor; // declaração do vetor

vetor = new int[10]; // alocação do vetor

// armazenando valores dentro do vetor
vetor [0] = 50;
vetor [1] = 150;
vetor [2] = 250;
vetor [3] = 350;
vetor [4] = 450;
vetor [5] = 550;
vetor [6] = 650;
vetor [7] = 750;
vetor [8] = 850;
vetor [9] = 950;

// imprimindo todos os valores do vetor
for (int i = 0; i < 10; i++)
    Console.WriteLine("{0} {1}", i, vetor[i]);
Console.WriteLine();

// BUSCA POR ÍNDICE
// Dada a posição dentro do vetor (índice), basta retornar seu valor.
// Isso é feito instantâneamente.

Console.WriteLine("O valor que está na posição 2 é {0}", vetor[2]);

Console.ReadKey();

2) Busca por Valor Sequencial

int[] vetor; // declaração do vetor
int k; // indice da busca por valor
bool achou; // informa se já achou ou não o elemento

vetor = new int[10]; // alocação do vetor

// armazenando valores dentro do vetor
vetor [0] = 50;
vetor [1] = 150;
vetor [2] = 250;
vetor [3] = 350;
vetor [4] = 450;
vetor [5] = 550;
vetor [6] = 650;
vetor [7] = 750;
vetor [8] = 850;
vetor [9] = 950;

// imprimindo todos os valores do vetor
for (int i = 0; i < 10; i++)
    Console.WriteLine("{0} {1}", i, vetor[i]);
Console.WriteLine();

// BUSCA POR VALOR SEQUENCIAL (o vetor não precisa estar ordenado)
// estamos procurando a posição em que se encontra o valor 450

achou = false; // você assume que o valor não está no vetor
k = 0; // o primeiro índice como sendo a primeira posição do vetor
while (k < 10 && ! achou) // enquanto não percorreu todos os elementos do vetor e não achou
{
    if (vetor [k] == 450) // se a posição atual do vetor contém um valor igual ao valor buscado
        achou = true; // marca que achou e sai do while
    else
        k++; // senão, incrementa o índice para continuar o while na próxima posição
}
if (achou)
    Console.WriteLine("Valor {0} encontrado na posição {1}", 450, k);
else
    Console.WriteLine("O valor {0} não existe no vetor", 450);

Console.ReadKey();

3) Busca por Valor Binária

int[] vetor; // declaração do vetor
bool achou; // informa se já achou ou não o elemento
int esquerda, direita, meio; // índices da busca binária

vetor = new int[10]; // alocação do vetor

// armazenando valores dentro do vetor
vetor [0] = 50;
vetor [1] = 150;
vetor [2] = 250;
vetor [3] = 350;
vetor [4] = 450;
vetor [5] = 550;
vetor [6] = 650;
vetor [7] = 750;
vetor [8] = 850;
vetor [9] = 950;

// imprimindo todos os valores do vetor
for (int i = 0; i < 10; i++)
    Console.WriteLine("{0} {1}", i, vetor[i]);
Console.WriteLine();

// BUSCA POR VALOR BINÁRIA (o vetor precisa estar ordenado)
// É muito mais rápida que a busca sequencial

esquerda = 0; // a primeira posição do vetor
direita = 9; // a última posição do vetor
meio = (esquerda + direita) / 2; // posição do meio
achou = false;

while (esquerda <= direita && ! achou)
{
    meio = (esquerda + direita) / 2; // posição do meio

    Console.WriteLine("esquerda = {0}, direita = {1}, meio = {2}, valor atual = {3}", esquerda, direita, meio, vetor[meio]);

    if (vetor [meio] == 850)
        achou = true;
    else
    {
        if (vetor [meio] < 850)
            esquerda = meio + 1;
        else
            direita = meio - 1;
    }
}
if (achou)
    Console.WriteLine("Valor {0} encontrado na posição {1}", 850, meio);
else
    Console.WriteLine("O valor {0} não existe no vetor", 850);

Console.ReadKey();

4) Inserção no Final

int[] original;
int[] temporario;
int n; // tamanho do vetor
int valor; // valor a ser inserido

n = 0;
original = new int[n];
temporario = new int[n];

do
{
    Console.WriteLine("Digite um valor a ser inserido no vetor.");
    Console.Write("Para parar de inserir valores no vetor, digite 0: ");
    valor = int.Parse(Console.ReadLine());

    if (valor > 0)
    {
        // ALGORITMO DE INSERÇÃO EM VETOR ESTÁTICO

        // para alocar o vetor temporário, é necessário que N >= 1
        if (n >= 1)
        {
            // alocando o vetor temporário
            temporario = new int[n];

            // copiando os dados do vetor original para o vetor temporário
            for (int i = 0; i < n; i++)
                temporario [i] = original [i];
        }

        // realocando vetor original
        original = new int[n + 1];

        // para copiar os dados do vetor temporário para o original, é necessário que N >= 1
        if (n >= 1)
        {
            // copiando de volta os dados do vetor temporário para o vetor original
            for (int i = 0; i < n; i++)
                original [i] = temporario [i];
        }

        // valor digitado vai para a última posição
        original [n] = valor;

        // o vetor tem uma posição a mais
        n++;

        // imprimindo todas as posições do vetor para conferência
        Console.WriteLine();
        for (int i = 0; i < n; i++)
            Console.WriteLine("{0} {1}", i, original [i]);
        Console.WriteLine();
    }
}
while (valor > 0);

Console.ReadKey();

5) Inserção Ordenada

int[] original; // vetor original
int[] temporario; // vetor temporario ou auxiliar
int n; // tamanho do vetor
int valor; // valor a ser inserido
int k;

n = 0;
original = new int[n];
temporario = new int[n];

do
{
    Console.WriteLine("Digite um valor a ser inserido no vetor.");
    Console.Write("Para parar de inserir valores no vetor, digite 0: ");
    valor = int.Parse(Console.ReadLine());

    if (valor != 0)
    {
        // ALGORITMO DE INSERÇÃO EM VETOR ESTÁTICO
        // INSERE ORDENADAMENTE

        // para alocar o vetor temporário, é necessário que N >= 1
        if (n >= 1)
        {
            // alocando o vetor temporário
            temporario = new int[n];

            // copiando os dados do vetor original para o vetor temporário
            for (int i = 0; i < n; i++)
                temporario [i] = original [i];
        }

        // realocando vetor original
        original = new int[n + 1];

        // para copiar os dados do vetor temporário para o original, é necessário que N >= 1
        if (n >= 1)
        {
            // 1) copiando os dados do vetor temporario para o vetor original
            //    enquanto os elementos forem menores do que o elemento a ser inserido
            // OBS.: aqui foi utilizado o conceito de "shortcut", para testar o tamanho antes do valor do elemento
            k = 0;
            while (k < n && temporario[k] < valor)
            {
                original[k] = temporario[k];
                k++;
            }

            // 2) inserindo na posição atual o valor que o usuário digitou
            original[k] = valor;

            // 3) copiando o restante do vetor temporario de volta para o vetor original
            for (int i = k; i < n; i++)
                original[i+1] = temporario[i];
        }
        else
            original [n] = valor;

        // o vetor tem uma posição a mais
        n++;

        // imprimindo todas as posições do vetor para conferência
        Console.WriteLine();
        for (int i = 0; i < n; i++)
            Console.WriteLine("{0} {1}", i, original [i]);
        Console.WriteLine();
    }
}
while (valor != 0);

Console.ReadKey();

6) Remoção

int[] original;
int[] temporario;
int n;
int valor;
int k;
bool achou;
int j;

n = 10;
original = new int[n];
temporario = new int[0];

// armazenando valores dentro do vetor
original [0] = 50;
original [1] = 150;
original [2] = 250;
original [3] = 350;
original [4] = 450;
original [5] = 550;
original [6] = 650;
original [7] = 750;
original [8] = 850;
original [9] = 950;

// imprimindo todas as posições do vetor para conferência
Console.WriteLine();
for (int i = 0; i < n; i++)
    Console.WriteLine("{0} {1}", i, original [i]);
Console.WriteLine();

do
{
    Console.WriteLine("Digite um valor a ser removido do vetor.");
    Console.Write("Para parar de remover valores, digite 0: ");
    valor = int.Parse(Console.ReadLine());

    // BUSCANDO ELEMENTO A SER REMOVIDO

    achou = false; // você assume que o valor não está no vetor
    k = 0; // o primeiro índice como sendo a primeira posição do vetor
    while (k < n && ! achou) // enquanto não percorreu todos os elementos do vetor e não achou
    {
        if (original [k] == valor) // se a posição atual do vetor contém um valor igual ao valor buscado
            achou = true; // marca que achou e sai do while
        else
            k++; // senão, incrementa o índice para continuar o while na próxima posição
    }

    if (achou)
    {
        Console.WriteLine("Valor {0} encontrado na posição {1}", valor, k);

        // para alocar o vetor temporário, é necessário que N >= 1
        if (n >= 1)
        {
            // alocando o vetor temporário
            temporario = new int[n];

            // copiando os dados do vetor original para o vetor temporário
            for (int i = 0; i < n; i++)
                temporario [i] = original [i];
        }

        // realocando vetor original
        original = new int[n - 1];

        // para copiar os dados do vetor temporário para o original, é necessário que N >= 1
        if (n >= 1)
        {
            // copiando de volta os dados do vetor temporário para o vetor original
            // pulando a posição k
            j = 0;
            for (int i = 0; i < n; i++)
            {
                if (i != k) // se a posição do vetor temporário for diferente da posição do elemento a ser removido
                {
                    original [j] = temporario [i];
                    j++;
                }
            }
        }

        // o vetor tem uma posição a menos
        n--;

        // imprimindo todas as posições do vetor para conferência
        Console.WriteLine();
        for (int i = 0; i < n; i++)
            Console.WriteLine("{0} {1}", i, original [i]);
        Console.WriteLine();
    }
    else
    {
        Console.WriteLine("Impossível remover, valor {0} não existe no vetor", valor);
        Console.WriteLine();
    }
}
while (valor != 0);

Console.ReadKey();

7) Ordenação (Bubble Sort)

int[] vetor; // declaração
int tmp; // variável temporária usada somente na troca
int n;

n = 5; // número de elmentos do vetor

vetor = new int[n]; // alocação

// inicialização
vetor [0] = 4;
vetor [1] = 7;
vetor [2] = 10;
vetor [3] = 1;
vetor [4] = 5;

// imprimindo vetor inicial
Console.WriteLine("O vetor desordenado é: ");
for (int i = 0; i < n; i++)
    Console.WriteLine("{0} {1}", i, vetor[i]);

// ALGORITMO DA BOLHA
for (int i = 0; i < n-1; i++) // ancorando N-1 elementos, começando em 0
{
    for (int j = i + 1; j < n; j++) // percorrendo todos os elementos à direita da âncora
    {
        if (vetor [i] > vetor [j]) // valor da âncora é maior do que o valor atual à direita
        {
            // trocando os valores entre as duas posições
            tmp = vetor [i];
            vetor [i] = vetor [j];
            vetor [j] = tmp;
        }
    }
}

// imprimindo vetor resultante
Console.WriteLine("O vetor ordenado é: ");
for (int i = 0; i < n; i++)
    Console.WriteLine("{0} {1}", i, vetor[i]);

Console.ReadKey();