Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com passagem de valores para função.


Centurion210

Pergunta

Boa noite povo!

Sei que é meu primeiro post, e infelizmente vou ter q sugar ao invés de ajudar. Estou com um abacaxi (dos grandes). Tenho um trabalho de PC1 da faculdade para entregar na segunda, e tá quase terminando, mas deu um treco aqui q tá me incomodando tem 2 dias já, será q alguém pode dar um help? Vou colocar o código abaixo:

/*
Trabalho de Programação de Computadores I (Prática)
Gustavo Dias Duarte Ramos
Engenharia de Controle e Automação
Junho de 2010
*/
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<string>
#include<vector>
#define TAM_VET 5 //definição do tamanho do vetor gerado aleatoriamente
#define VAL_MAX 100 //definição do valor maximo a ser obtido pelo gerador aleatório
using namespace std;

void preencheVetor( int vet[] );
void mostraVetor( int vet[], int tamanho );
void uniaoVetores( int vet1[], int vet2[], int vuniao[], int& tam_uniao );
void ordenaVetor( int vet1[], int tamanho );
void troca (int& x, int& y);
void recebeVetorTeclado( int vet[], int& tamanho );
void diferencaVetores( int vet1[], int& tam_vet1, int vet2[], int& tam_vet2, int vetdiff[], int& tam_vetdiff );
void interseccaoVetores( int vet1[], int& tam_vet1, int vet2[], int& tam_vet2, int vetint[], int& tam_vetint );
void multVecEscalar( int vet1[], int& tam_vet1, int escalar, int vetmult[], int& tam_vetmult );
int opMenuUniao( int vet1[], int& tam_vet1 );
int opMenuDiferenca();
int opMenuInterseccao();
int opMenuMultEscalar();
int opMenuBuscaBinaria( int vet1[], int& tam_vet1 );

int main()
{
    int vuniao[TAM_VET*2], tam_vuniao = 0;
    system( "cls" );
    int opcao;
    cout << "Trabalho de Programacao de Computadores";
    cout << "\nPUC MG";
    cout << "\nJunho de 2010";
    cout << "\nGustavo Ramos - Mat. 405928 - E.C.A";
    cout << "\nEscolha uma opcao do menu abaixo: ";
    cout << "\n\n_____________________________________________";
    cout << "\n\n1) Uniao de dois vetores gerados aleatoriamente";
    cout << "\n2) Diferenca de dois vetores informados pelo teclado";
    cout << "\n3) Interseccao de dois vetores informados pelo teclado";
    cout << "\n4) Produto de um vetor por um escalar";
    cout << "\n5) Pesquisa de um valor no vetor uniao da opcao 1";
    cout << "\n6) Sair do Programa";
    cout << "\nEscolha a sua opcao [ 1 - 6 ]: ";
    cin >> opcao;
    switch( opcao )
    {
        case 1:
        {
            opMenuUniao( vuniao, tam_vuniao );
            break;
        }
        case 2:
        {
            opMenuDiferenca();
            break;
        }
        case 3:
        {
            opMenuInterseccao();
            break;
        }
        case 4:
        {
            opMenuMultEscalar();
            break;
        }
        case 5:
        {
            opMenuBuscaBinaria( vuniao, tam_vuniao );
        }
    }
}


int opMenuUniao( int vet1[], int& tam_vet1 )
{
    char continua = 'S';
    do
    {
        vet1[0] = NULL; //necessario limpar a matriz em cada passada, porque ela fica por referencia, ai vai só aumentando se repetir
        tam_vet1 = 0;
        system( "cls" );
        int v1[TAM_VET], v2[TAM_VET]; //opção 1 do menu, vetor união
        cout << "Uniao de Vetores:" << endl;
        cout << "\nVetor1: ";
        srand( time( NULL ) );
        preencheVetor( v1 );
        ordenaVetor( v1, TAM_VET );
        mostraVetor(v1, TAM_VET);
        cout << "\n\nVetor2: ";
        srand( time( NULL ) * 2 );
        preencheVetor( v2 );
        ordenaVetor( v2, TAM_VET );
        mostraVetor(v2, TAM_VET);
        uniaoVetores( v1, v2, vet1, tam_vet1 );
        cout << "\n\nA uniao B: ";
        ordenaVetor( vet1, tam_vet1 );
        mostraVetor( vet1, tam_vet1 ); //multipliquei o tamanho do vetor para mostrar o vetor união com o tamanho certo
        cout << "\n\nDeseja repetir a operacao? [S / N ]: ";
        cin >> continua;
    }
    while( toupper( continua ) == 'S' );
    main();
}

int opMenuDiferenca()
{
    system( "cls" );
    int vet1[100], vet2[100], vetdiff12[100], vetdiff21[100], tam_vet1 = 0, tam_vet2 = 0, tam_vetdiff12 = 0, tam_vetdiff21 = 0; //opcao 2 do menu, diferenca entre vetores
    cout << "Diferenca entre vetores" << endl;
    cout << "\nPressione qualquer tecla para informar o primeiro vetor: \n " << endl;
    system( "pause" );
    recebeVetorTeclado( vet1, tam_vet1 );
    cout << "\nPressione qualquer tecla para informar o segundo vetor: \n " << endl;
    system( "pause" );
    recebeVetorTeclado( vet2, tam_vet2 );
    cout << "Vetor 1: ";
    ordenaVetor( vet1, tam_vet1 );
    mostraVetor( vet1, tam_vet1 );
    cout << "\n\nVetor 2: ";
    ordenaVetor( vet2, tam_vet2 );
    mostraVetor( vet2, tam_vet2 );
    cout << "\n\nVetor 1 - Vetor 2 :";
    diferencaVetores( vet1, tam_vet1, vet2, tam_vet2, vetdiff12, tam_vetdiff12 );
    ordenaVetor( vetdiff12, tam_vetdiff12 );
    mostraVetor( vetdiff12, tam_vetdiff12 );
    cout << "\n\nVetor 2 - Vetor 1 :";
    diferencaVetores( vet2, tam_vet2, vet1, tam_vet1, vetdiff21, tam_vetdiff21 );
    ordenaVetor( vetdiff21, tam_vetdiff21 );
    mostraVetor( vetdiff21, tam_vetdiff21 );
    cout << "\n\nPressione qualquer tecla para voltar ao menu principal...\n";
    system( "pause" );
    main();
}

int opMenuInterseccao()
{
    system( "cls" );
    int vet1[100], vet2[100], vetint[100], tam_vet1 = 0, tam_vet2 = 0, tam_vetint = 0; //opcao 3 do menu, interseccao entre vetores
    cout << "Interseccao entre vetores" << endl;
    cout << "\nPressione qualquer tecla para informar o primeiro vetor: \n " << endl;
    system( "pause" );
    recebeVetorTeclado( vet1, tam_vet1 );
    cout << "\nPressione qualquer tecla para informar o segundo vetor: \n " << endl;
    system( "pause" );
    recebeVetorTeclado( vet2, tam_vet2 );
    cout << "Vetor 1: ";
    ordenaVetor( vet1, tam_vet1 );
    mostraVetor( vet1, tam_vet1 );
    cout << "\n\nVetor 2: ";
    ordenaVetor( vet2, tam_vet2 );
    mostraVetor( vet2, tam_vet2 );
    cout << "\n\nVetor 1 * Vetor 2 :";
    interseccaoVetores( vet1, tam_vet1, vet2, tam_vet2, vetint, tam_vetint );
    ordenaVetor( vetint, tam_vetint );
    mostraVetor( vetint, tam_vetint );
    cout << "\n\nPressione qualquer tecla para voltar ao menu principal...\n";
    system( "pause" );
    main();
}

int opMenuMultEscalar()
{
    system( "cls" );
    int vet1[100], vetesc[100], tam_vet1 = 0, tam_vetesc = 0; //opcao 4 do menu, multiplicacao de vetor por escalar real
    float escalar;
    cout << "Multiplicacao de um vetor por um escalar real" << endl;
    cout << "\nPressione qualquer tecla para informar o primeiro vetor: \n " << endl;
    system( "pause" );
    recebeVetorTeclado( vet1, tam_vet1 );
    cout << "\nVetor 1: ";
    ordenaVetor( vet1, tam_vet1 );
    mostraVetor( vet1, tam_vet1 );
    cout << "\nInforme o escalar real utilizado na multiplicacao do vetor: ";
    cin >> escalar;
    system( "cls" );
    cout << "Multiplicacao de um vetor por um escalar real";
    cout << "\n\nVetor 1: ";
    mostraVetor( vet1, tam_vet1 );
    cout << "\n\nVetor 1 * " << escalar << " : ";
    multVecEscalar( vet1, tam_vet1, escalar, vetesc, tam_vetesc );
    ordenaVetor( vetesc, tam_vetesc );
    mostraVetor( vetesc, tam_vetesc );
    cout << "\n\nPressione qualquer tecla para voltar ao menu principal...\n";
    system( "pause" );
    main();
}

int opMenuBuscaBinaria( int vet1[], int& tam_vet1)
{
    system( "cls" );
    cout << "Pesquisa Binaria no Vetor Uniao da Opcao 1" << endl;
    cout << "\nVetor Uniao: ";
    mostraVetor( vet1, tam_vet1 );
}

void uniaoVetores( int vet1[], int vet2[], int vuniao[], int& tam_uniao )
{
   for( int i = 0; i < TAM_VET; ++i ) {
      vuniao[i] = vet1[i];
      ++tam_uniao;
   }

   int tam_uniao_antigo = tam_uniao;

   for( int i = 0; i < TAM_VET; ++i) {
      bool encontrado = false;
      for(int j=0; j < tam_uniao_antigo; ++j) {
         if ( vet2[i] == vuniao[j] ) {
            encontrado = true;
            break;
         }
      }
      if ( !encontrado ) {
         vuniao[tam_uniao] = vet2[i];
         ++tam_uniao;
      }
   }
}



void preencheVetor( int vet[] )
{
    for( int i = 0; i < TAM_VET; i++)
    {
        vet[i] = ( rand()%VAL_MAX ) + 1;
    }

}

void mostraVetor( int vet[], int tamanho )
{
    for( int i = 0; i < tamanho; i++)
    {
        cout << " " << vet[i] << " ";
    }
}

void ordenaVetor( int vet1[], int tamanho )
{
    int ind, ult, x;
    for( ult = tamanho - 1; ult > 0; ult--)
        for( ind = 0; ind < ult; ind++)
            if( vet1[ind] > vet1[ind+1] )
            {
                x = vet1[ind];
                vet1[ind] = vet1[ind+1];
                vet1[ind+1] = x;
            }
}

void troca (int &x, int &y)
{
   int temp;
   temp = x;
   x = y;
   y = temp;
}

void recebeVetorTeclado( int vet[], int& tamanho )
{
    int i = 0;
    char continua = 'S';
    do
    {
        system( "cls" );
        cout << "Informe o " << i+1 << "o valor do vetor: ";
        cin >> vet[i];
        tamanho++;
        i++;
        cout << "\nDeseja entrar com mais valores? [ S / N ]: ";
        cin >> continua;
    }
    while( toupper( continua ) == 'S' );

}

void diferencaVetores( int vet1[], int& tam_vet1, int vet2[], int& tam_vet2, int vetdiff[], int& tam_vetdiff )
{
    for( int i = 0; i < tam_vet1; ++i ) {
      bool encontrado = false;
      for( int j = 0; j < tam_vet2; ++j ) {
         if ( vet1[i] == vet2[j] ) {
            encontrado = true;
            break;
         }
      }
      if ( !encontrado ) {
         vetdiff[tam_vetdiff] = vet1[i];
         ++tam_vetdiff;
      }
   }
}

void interseccaoVetores( int vet1[], int& tam_vet1, int vet2[], int& tam_vet2, int vetint[], int& tam_vetint )
{
   for( int i = 0; i < tam_vet1; ++i) {
      for( int j = 0; j < tam_vet2; ++j ) {
         if ( vet1[i] == vet2[j] ) {
            vetint[tam_vetint] = vet1[i];
            ++tam_vetint;
         }
      }
   }
}

void multVecEscalar( int vet1[], int& tam_vet1, int escalar, int vetmult[], int& tam_vetmult  )
{
    for( int i = 0; i < tam_vet1; i++ )
    {
        vetmult[i] = vet1[i]*escalar;
        tam_vetmult++;
    }
}

int pesquisaBinaria ( int vet1[], int chave , int tam_vet1)
{
     int inf = 0; //Limite inferior      (o primeiro elemento do vetor em C é zero          )
     int sup = tam_vet1 - 1; //Limite superior    (termina em um número a menos 0 à 9 são 10 numeros )
     int meio;
     while (inf <= sup)
     {
          meio = (inf+sup) / 2;
          if (chave == vet1[meio])
               return meio;
          else if (chave < vet1[meio])
               sup = meio - 1;
          else
               inf = meio + 1;
     }
     return -1;   // não encontrado
}

Então, é o seguinte, a opção 1 do menu gera dois vetores aleatoriamente e depois faz a união deles ( elementos comuns aos 2 conjuntos ) e botei um contador pra poder medir o tamanho desse conjunto. O problema é q na opção 5 eu preciso desse vetor de novo pra poder fazer uma busca binária, aí do jeito q eu to passando num ta funcionando nem a pau! Alguém pode tentar me esclarecer o que tá errado? Acho que to ficando cego já, porque tem 2 dias já q to tentando resolver exatamente esse problema, já tentei de toda forma! O google até cansou de mim já :wacko:

Qualquer ajuda vai ser MUITO Bem-Vinda!

Obrigado ai povo!

Gustavo Ramos aka Centurion210

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...