Ir ao conteúdo
  • Cadastre-se

Probleminha na ordenaçao do vetor


Flavia234

Posts recomendados

oi tenho esse algoritmo, a leitura de dois vetores A e B tamanho 5 cada, e criei um vetor C tamanho10 para receber a intercalaçao de forma crescente dos vetores A e B , mas ta dando lixo de memoria na impressao , agradeço desde ja ^_^

#include<conio.h>
#include<iostream>
using namespace std;

int const t = 5;

int main()
{

int vetA[t], vetB[t], vetC[t*2];

for( int i = 0; i<t; i++)
{
cout <<"informe o ["<<i+1<<"] elementos de A :";
cin >>vetA[i];
}
cout << " "<<endl;
for( int j = 0; j<t; j++)
{
cout <<"informe o["<<j+1<<"] elementos de B :";
cin >>vetB[j];
}
int i=0;
int j=0;

for (int n =0; n<t*2; n++)
{
if( vetA[i]<vetB[j])
{
vetC[n] = vetA[i];
i++;
n++;
}
else
{
vetC[n] = vetB[j];
j++;
n++;
}
}
for ( int n = 0; n<t*2; n++)
{
cout <<"O vetor C :"<<vetC[n]<<endl;
}




cout << " "<<endl;
system("pause");
}

Link para o comentário
Compartilhar em outros sites

voce esta somando n no laço e ainda soma n a cada recebimento que ele faz na execuçao de vetA e vetB dai deu esse problema , deixei a soma do indice n so no for de n ,funcionou da uma olhada

#include<conio.h>
#include<iostream>
using namespace std;

int const t = 5;

int main()
{

int vetA[t], vetB[t], vetC[t*2];

for( int i = 0; i<t; i++)
{
cout <<"informe o ["<<i+1<<"] elementos de A :";
cin >>vetA[i];
}
cout << " "<<endl;
for( int j = 0; j<t; j++)
{
cout <<"informe o["<<j+1<<"] elementos de B :";
cin >>vetB[j];
}
int i=0;
int j=0;

for (int n =0; n<t*2; n++)
{

if( vetA[i]<vetB[j])
{
vetC[n] = vetA[i];
i++;

}
else
{
vetC[n] = vetB[j];
j++;

}
}
for ( int n = 0; n<t*2; n++)
{
cout <<"O vetor C :"<<vetC[n]<<endl;
}




cout << " "<<endl;
system("pause");
}

Link para o comentário
Compartilhar em outros sites


for (int n =0; n<t*2; n++)
{
if( vetA[i]<vetB[j])
{
vetC[n] = vetA[i];
i++;
[U][B]n++;[/B][/U]
}
else
{
vetC[n] = vetB[j];
j++;
[U][B]n++;[/B][/U]
}
}

1- Tire esses n++ indicados, seu for já faz isso...

2- Controle melhor essa inserção, pois se i ou j chegarem a ser maiores ou iguais a 5 vai entrar lixo de memória também.

Sem falar que não faz sentido continuar comparando com algo que já acabou...

Se quiser testar isso é só copiar esse trecho:

for (int n =0; n<(t*2); n++)
{
cout<<"i="<<i<<" j="<<j;
if( vetA[i]<vetB[j])
{
cout<<" A<B"<<endl;
vetC[n] = vetA[i];
i++;
}
else
{
cout<<" B<=A"<<endl;
vetC[n] = vetB[j];
j++;
}
}

3- Seu vetor final dificilmente ficará 100% ordenado do menor pro maior pelo simples fato de você ir comparando dois a dois e já incluindo ao invés de procurar o menor de cada vetor...

Link para o comentário
Compartilhar em outros sites

Nossa agora que percebi, nao ta dando certo nao =/ ele nao ta ordenando nada coloquei o numero 100 na primeira posiçao de vetA e vetC recebeu os menores do vetB primeiro e jogou o 100 no meio do vetor C afff(_(

Sim, justamente pelo que eu falei acima...

Você só está comparando dois a dois, quando deveria procurar o menor de cada a cada passo...

Link para o comentário
Compartilhar em outros sites

É que tipo eu ja fiz um outro algoritmo pra ordenar os dois vetores A e B através de uma funçao e na funçao ordenei com um algoritmo bolha , deu certo tudo bem, dai o exercicio pede pra fazer depois disso uma funçao com um vetor tamanho 10 recebendo os 2 vetores ja ordenados e que recebesse seus dados em ordem crescente sem usar o metodo bolha !

vou tentar a segunda opção que você citou! nao sera fácil rsrss , vou tentar

Link para o comentário
Compartilhar em outros sites

É que tipo eu ja fiz um outro algoritmo pra ordenar os dois vetores A e B através de uma funçao e na funçao ordenei com um algoritmo bolha , deu certo tudo bem, dai o exercicio pede pra fazer depois disso uma funçao com um vetor tamanho 10 recebendo os 2 vetores ja ordenados e que recebesse seus dados em ordem crescente sem usar o metodo bolha !

vou tentar a segunda opção que você citou! nao sera fácil rsrss , vou tentar

Testei aqui com entradas previamente ordenadas e o problema é o segundo que falei na primeira resposta: você não está controlando os limites de comparação...

j chegou até 8 aqui só para você ter noção... 4 a mais que o limite...

Isso resolve:

===============================================

EDIT:

(Tava errado... Corrigido no post abaixo...)

Link para o comentário
Compartilhar em outros sites

É você ta certa fiz o teste de mesa aqui e foi isso mesmo , acho que se eu fizer o algoritmo de modelo de inclusao sequencial pode resolver , mas nao tenho certeza to tentando

Olhe minha resposta acima!

É só incluir um || j==5 no if!

Resolvido!

=]

=========================================

EDIT:

Vish, tinha um erro! XD

Na verdade tem que ser if( ((i<5)&&(vetA<vetB[j])) || (j==5) )

Link para o comentário
Compartilhar em outros sites

sim sim eu vi e colei no meu algoritmo, mas.... na execuçao eu digitei 100 e depois fiz tudo de 1 a 9 e a impressao foi 5,6,7,8,9,100,1,2,3,4

tenho que fazer algumas coisas ainda :s

Tu num disse que os vetores tinham que estar ordenados???

100 1 2 3 4 NÃO está em ordem crescente! :(

Esse algoritmo só funciona para A e B ORDENADOS!

Se quiser fazer genérico tem que pegar o menor de cada a cada passo...

Link para o comentário
Compartilhar em outros sites

:huh: hhahhahaa nossa me perdouaaaaa afff é o sonoooo ja tem que considerar que esta ordenado assa acabei de falar que tinha feito a ordenaçao la no algoritmo bolha fala serio em shara rsrsrsr vai ter paciencia assim hem rsrsr deu certo aqui ignora meu sono rsrsr:p mancada minha rsrs fiquei com vergonha aquiiii .. isso mesmo considerando os vetores ordenadosssss tem que por 100 em primeiro nada kkkk

==================================================================================================

Muitooo obrigadaaaaaa você tem me ajudado muitooooooo

Link para o comentário
Compartilhar em outros sites

:huh: hhahhahaa nossa me perdouaaaaa afff é o sonoooo ja tem que considerar que esta ordenado assa acabei de falar que tinha feito a ordenaçao la no algoritmo bolha fala serio em shara rsrsrsr vai ter paciencia assim hem rsrsr deu certo aqui ignora meu sono rsrsr:p mancada minha rsrs fiquei com vergonha aquiiii .. isso mesmo considerando os vetores ordenadosssss tem que por 100 em primeiro nada kkkk

haeoaheoaheoaheo :lol:

Tranquilo. =]

Eu também to só o bagaço aqui e ainda tenho que dirigir para casa...

Vou nessa.

Boa noite.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!