Ir para conteúdo
Fórum Script Brasil

Centurion210

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que Centurion210 postou

  1. 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
×
×
  • Criar Novo...