Ir ao conteúdo
  • Cadastre-se

Duvidas: Vetor com While


souLLL

Posts recomendados

Preciso inserir valores em um vetor e depois com o While devo imprimi-los e ordenar em ordem decrescente a que eu inclui no vetor...até agora só consegui o vetor....to quebrando a cabeça para fazer este procedimento...segue o código parcial:


#include <iostream>
using namespace std;
int main()
{
int vetor[6];
int i;
for (i=0; i<6; i++){
cout<<"Digite um numero ";
cin>>vetor[i];
}
for (i=0; i<6; i++){
cout<<" O vetor "<<i<< " Contem: " <<vetor[i]<<endl;
}
return 0;
}

Link para o comentário
Compartilhar em outros sites

Procure depois sobre a biblioteca STL.

Você pode usar o tipo list, pra isso:

#include <iostream>
#include <list>
using namespace std;

int main () {
list<int> lista1;
cout << "Qual o numero de elementos?";
int n, tmp;
cin >> n;
for (int i = 0; i < n; i++) {
cout << "Digite o numero " << i+1 <<": ";
cin >> tmp;
lista1.push_back(tmp); //Insere no final da lista
}
lista1.sort(); //Ordem crescente
lista1.reverse(); //Ordem decrescente
while (lista1.empty() == 0) { //Enquanto a lista não estiver vazia
cout << lista1.front() << endl; //Elemento da frente
lista1.pop_front(); //Remove elemento da frente
}
return 0;
}

Qualquer dúvida, estou on o dia todo: [email protected]

Link para o comentário
Compartilhar em outros sites

Tem como eu inserir a ordenacao com while somente utilizandob a biblioteca <iostream> ? E como ficaria a sintaxe?

Procure depois sobre a biblioteca STL.

Você pode usar o tipo list, pra isso:

#include <iostream>
#include <list>
using namespace std;

int main () {
list<int> lista1;
cout << "Qual o numero de elementos?";
int n, tmp;
cin >> n;
for (int i = 0; i < n; i++) {
cout << "Digite o numero " << i+1 <<": ";
cin >> tmp;
lista1.push_back(tmp); //Insere no final da lista
}
lista1.sort(); //Ordem crescente
lista1.reverse(); //Ordem decrescente
while (lista1.empty() == 0) { //Enquanto a lista não estiver vazia
cout << lista1.front() << endl; //Elemento da frente
lista1.pop_front(); //Remove elemento da frente
}
return 0;
}

Qualquer dúvida, estou on o dia todo: [email protected]

Link para o comentário
Compartilhar em outros sites

Não costumo trabalhar muito com ordenação a mão, mas aqui vai um algoritmo:

for(i=0; i<n; i++){
for(j=0; j<n-1; j++){
if(v[j]>v[j+1]) {
aux=v[j];
v[j]=v[j+1];
v[j+1]=aux;
}
}
}

OBS: Não testei.

Seu código ficaria assim:

#include <iostream>
using namespace std;
int main()
{
int vetor[6];
int i;
for (i=0; i<6; i++){
cout<<"Digite um numero ";
cin>>vetor[i];
}
int aux;
for(i=0; i<6; i++){
for(j=0; j<5; j++){
if(vetor[j]>vetor[j+1]) {
aux=vetor[j];
vetor[j]=vetor[j+1];
vetor[j+1]=aux;
}
}
}
for (i=0; i<6; i++){
cout<<" O vetor "<<i<< " Contem: " <<vetor[i]<<endl;
}
return 0;
}

Link para o comentário
Compartilhar em outros sites

soul, se você não se importa com problemas de otimização, use o bubbleSort (Muito simples de implementar, porém é custoso) pra fazer a ordenação do vetor e depois imprime com um for na ordem inversa...

liuriloami, corrigindo seu código, pois o nosso amigo Soul precisa que os elementos estejam em ordem decrescente

Este é o (não)famoso BubbleSort


#include <iostream>
using namespace std;
int main()
{
int vetor[6];
int i, j;
for (i=0; i<6; i++){
cout<<"Digite um numero ";
cin>>vetor[i];
}
int aux;
for(i=0; i<6; i++){
for(j=0; j<5; j++){
if(vetor[j]<vetor[j+1]) {
aux=vetor[j];
vetor[j]=vetor[j+1];
vetor[j+1]=aux;
}
}
}
for (i=0; i<6; i++){
cout<<" O vetor "<<i<< " Contem: " <<vetor[i]<<endl;
}
return 0;
}

Link para o comentário
Compartilhar em outros sites

Já aprendi como ordenar os valores inseridos no vetor quando vou imprimimos (através dos comentários aqui postados).

Tenho uma duvida: na codificação atual, utilizando a mesma biblioteca...classe...como eu faço para ordenar a impressão dos vetores de forma decrescente...independente dos valores... ordenar do tipo:

vetor5

vetor4

vetor3

vetor2....

Obs.:

Normalmente a disposição da impressão seria crescente...

vetor1

vetor2

vetor3

vetor4

vetor5...

soul, se você não se importa com problemas de otimização, use o bubbleSort (Muito simples de implementar, porém é custoso) pra fazer a ordenação do vetor e depois imprime com um for na ordem inversa...

liuriloami, corrigindo seu código, pois o nosso amigo Soul precisa que os elementos estejam em ordem decrescente

Este é o (não)famoso BubbleSort


#include <iostream>
using namespace std;
int main()
{
int vetor[6];
int i, j;
for (i=0; i<6; i++){
cout<<"Digite um numero ";
cin>>vetor[i];
}
int aux;
for(i=0; i<6; i++){
for(j=0; j<5; j++){
if(vetor[j]<vetor[j+1]) {
aux=vetor[j];
vetor[j]=vetor[j+1];
vetor[j+1]=aux;
}
}
}
for (i=0; i<6; i++){
cout<<" O vetor "<<i<< " Contem: " <<vetor[i]<<endl;
}
return 0;
}

Link para o comentário
Compartilhar em outros sites

Se eu entendi bem, você quer imprimir o vetor do fim para o começo, certo ?

Isso é simples, basta modificar o for de impressão:


for (i = 5; i >= 0; i--){
cout<<" O vetor "<<i<< " Contem: " <<vetor[i]<<endl;
}

O contador inicia-se com 5 (ultima posicao do vetor) e vai até a primeira posicao do vetor 0.

Como funciona as posições de um vetor:

0 | 1 | 2 | 3 | 4 | 5 | --> Vetor de tamanho 6, começa a contador do 0

Link para o comentário
Compartilhar em outros sites

não entendi porque resolvido não era para usar while, acho q o codigo certo seria assim

#include <iostream>

using namespace std;

int main()

{

int vetor[6];

int i;

for (i=0; i<6; i++){

cout<<"Digite um numero ";

cin>>vetor;

}

i = 5;

while(i>=0)

{

cout<<" O vetor "<<i<<" Contem: "<<vetor<<endl;

i--;

}

}

Link para o comentário
Compartilhar em outros sites

Eu não entendi porque o "i=5" depois de os valores serem inseridos no vetor...não entendi a lógica :confused: ...utilizando o for para mudar a ordem de disposição eu entendo...mas neste caso eu gostaria de saber qual o papel do "i=5"..Desde já agradeço...


#include <iostream>
using namespace std;
int main()
{
int vetor[6];
int i;
for (i=0; i<6; i++){
cout<<"Digite um numero ";
cin>>vetor[i];
}
i = 5; // ???
while(i>=0) // ???
{
cout<<" O vetor "<<i<<" Contem: "<<vetor[i]<<endl;
i--;
}
}

Link para o comentário
Compartilhar em outros sites

quando você usa o for e faz for (i=5 ... )

o primeiro parâmetro do for é a atribuição a variável. No caso do while, não tem como fazer essa atribuição dentro dele. Por este motivo, o nosso amigo edifesf fez a atribuição fora e ANTES do while.

Com isso, o i começa com 5 e a cada loop do while ele é decrementado 1 vez até chegar a 0.

É a mesma coisa, só que escritas de maneira distintas.

Link para o comentário
Compartilhar em outros sites

eu li la em cima na sua duvida e onde você diz assim (Preciso inserir valores em um vetor e depois com o While devo imprimi-los e ordenar em ordem decrescente), bom para usar o comando while em orde decrescente eu tenho que começar do 5 e ir voltando ate o numero 0, no caso do while eu tenho que comparar antes de rodar então eu comparei se i é maior q zero , como não é pois o valor inicial de i é 5 ele roda o bloco e ao rodar o bloco decrementa menos 1 (--i ) do valor de i assim sendo ele vai rodar na ordem inversa 6 vezes

i = 5 - roda

i = 4 - roda

i = 3 - roda

i = 2 - roda

i = 1 - roda

i = 0 - roda

i = -1 - finaliza

voce postou "Resolvido...valeu mestres pelas dicas", mas na verdade eu achei que nao tava porque você usou o for e nao usou o while, beleza. qualquer coisa estamos ai, valeu.

valeu gustavolm

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!