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:
Pergunta
Centurion210
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:
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.