Trouble in Variable Passage

Hello fellow c++ programmers! This is my fisrt post here and sorry but i need to suck up some information form you. :D

We're learning C++ at college and i have a kinda big project to deliver at monday, i'll post it below:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#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, pq 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();
}

{ ... program chopped to fit in ... } 

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
}



well, that said, sorry for not being in english, but i must do it in Portuguese, my mother tongue. my problem is at functions opMenuPesquisaBinaria and opMenuUniao. I must use the _same_ variables, an array and an integer in both functions, because opMenuUniao calls a function that generates an union vector from 2 another ones generated randomly, and the second one does a binary search ( binary chop algorithim ) in that same array. What am i doing wrong here? i call opMenuUniao option in menu ( op 1 ), it generates the array and i press N for not continuing, after that i call op 5 , which is opMenuPesquisaBinaria, with same arguments, but it doesnt works? any ideas? i'm searching for that solution for 2 days now, i'm becoming crazy!!!!

thanks in advance !!!

Centurion210

PS: i had to chop the program to fit in content!
anyone?

i'm still trying that, exaustive hours without any solution, googled the whole internet, lol!

=(((
Topic archived. No new replies allowed.