Ir ao conteúdo
  • Cadastre-se

Inverter vetores em linguagem C


gprilopes
Ir à solução Resolvido por CiroboyBR,

Posts recomendados

Olá pessoal, preciso de uma ajuda, preciso criar um programa que leia 20 elementos de um vetor A e construir uma B de mesma dimensão com os mesmos elementos do vetor A invertidos. Ou seja, o primeiro elemento de A passa a ser último de B, o segundo elemento de A passa a

ser o penúltimo de B e assim por diante. Apresentar os vetores A e B, alguém pode me dar uma força

Link para o comentário
Compartilhar em outros sites

A minha ideia é mais ou menos assim

 

#include <stdlib.h>
#include <stdio.h>

main (){
    // VARIÁVEIS
    int i;
    int a[5];
    int b[5];
    
    // FOR PARA LER OS DOIS VETORES    
    printf("Digite os Numeros: \n");
    for ( i = 0 ; i < 5 ; i++ ){
        scanf("%d", &a);
    }
    
    printf("Digite os Numeros: \n");
    for ( i = 0 ; i < 5 ; i++ ){
        scanf("%d", &b);
    }
    
    // FOR PARA ATRIBUIR VETOR A EM B E VETOR B EM A
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        b = a;
    }
    
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        a = b;
    }
    
    // FOR PARA IMPRIMIR
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        printf("Invertido: %d\n",a);
    }
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        printf("Invertido: %d\n",b);
    }


system ("pause");
}

 

#code

Link para o comentário
Compartilhar em outros sites

gprilopes, tente mais uma vez, observe o código e tente entende-lo, se tiver alguma dúvida não hesite em perguntar.  Lembre-se, seu objetivo é aprender. Leia o código com calma...

#include <stdio.h>#include <stdlib.h>#define TAM 5int main() {  int v[TAM], inverso[TAM], i;  for (i = 0; i < TAM ; i++)    scanf("%d", &v[i]);  for (i = 0; i < TAM ; i++)    inverso[TAM-i-1] = v[i] ;//preenche o vetor auxiliar inversamente  //vetor invertido  printf("\nVetor Invertido: ");  for (i = 0; i < TAM ; i++)    printf("%d ", inverso[i]);  system("pause");  return 0}
Link para o comentário
Compartilhar em outros sites

Olá meu caro CyroBoy fiz desta forma, o que você acha?

 

#include <stdlib.h>
#include <stdio.h>

main (){
    // VARIÁVEIS
    int i;
    int a[5];
    int b[5];
    int aux[5];
    
    // FOR PARA LER OS DOIS VETORES    
    printf("Vetor A: \n");
    for ( i = 0 ; i < 5 ; i++ ){
        scanf("%d", &a);
    }
    
    printf("Vetor B: \n");
    for ( i = 0 ; i < 5 ; i++ ){
        scanf("%d", &b);
    }
    
    // FOR PARA ATRIBUIR VETOR A EM B E VETOR B EM A
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        aux = a;
    }
    
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        a = b;
    }
    
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        b = aux;
    }
    
    // FOR PARA IMPRIMIR
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        printf("Invertido A: %d\n",a);
    }
    for (i = 5 - 1 ; i >= 0 ; i-- ){
        printf("Invertido B: %d\n",b);
    }


system ("pause");
}

Link para o comentário
Compartilhar em outros sites

Olá meu caro CyroBoy fiz desta forma, o que você acha?

 

#include <stdlib.h>

#include <stdio.h>

main (){

    // VARIÁVEIS

    int i;

    int a[5];

    int b[5];

    int aux[5];

    

    // FOR PARA LER OS DOIS VETORES    

    printf("Vetor A: \n");

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

        scanf("%d", &a);

    }

    

    printf("Vetor B: \n");

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

        scanf("%d", &b);

    }

    

    // FOR PARA ATRIBUIR VETOR A EM B E VETOR B EM A

    for (i = 5 - 1 ; i >= 0 ; i-- ){

        aux = a;

    }

    

    for (i = 5 - 1 ; i >= 0 ; i-- ){

        a = b;

    }

    

    for (i = 5 - 1 ; i >= 0 ; i-- ){

        b = aux;

    }

    

    // FOR PARA IMPRIMIR

    for (i = 5 - 1 ; i >= 0 ; i-- ){

        printf("Invertido A: %d\n",a);

    }

    for (i = 5 - 1 ; i >= 0 ; i-- ){

        printf("Invertido B: %d\n",b);

    }

system ("pause");

}

Seu código está imprimindo os vetores, mas você não está invertendo nenhum vetor, se você imprimir da posição 0...N, o vetor não vai estar invertido.

Se o exercício pede apenas isso, então está bem. Caso contrário, você vai ter que inverter o vetor. De uma olhada no meu código se este for o caso.

Link para o comentário
Compartilhar em outros sites

Esse codigo esta tendo esse saída

 

Vetor A:
9 1º de A
8 2º de A
7
6
5
Vetor B:
1
2
3
4
5
Invertido A: 5
Invertido A: 4
Invertido A: 3
Invertido A: 2
Invertido A: 1
Invertido B: 5
Invertido B: 6
Invertido B: 7
Invertido B: 8 Penultimo B
Invertido B: 9 Ultimo de B
Pressione qualquer tecla para continuar. . .

Link para o comentário
Compartilhar em outros sites

  • Solução

Esse codigo esta tendo esse saída

 

Vetor A:

9 1º de A

8 2º de A

7

6

5

Vetor B:

1

2

3

4

5

Invertido A: 5

Invertido A: 4

Invertido A: 3

Invertido A: 2

Invertido A: 1

Invertido B: 5

Invertido B: 6

Invertido B: 7

Invertido B: 8 Penultimo B

Invertido B: 9 Ultimo de B

Pressione qualquer tecla para continuar. . .

Sim, seu código está imprimindo tudo certo, só que se você for ver o valor dos vetores, vai ver que:

A[0] = 1

A[1] = 2

A[2] = 3

A[3] = 4

A[4] = 5

e

B[0] = 9

B[1] = 8

B[2] = 7

B[3] = 6

B[4] = 5

Seu algoritmo está imprimindo certo, mas o vetor em si não está invertido. Como eu disse, se o importante é só a saída então esse detalhe não tem importância.

Vou dar outro exemplo utilizando seu código pra inverter vetores, talvez assim você entenda melhor:

 

#include <stdlib.h>#include <stdio.h>main (){    // VARIÁVEIS    int i, j;    int a[5];    int b[5];    int aux;    // FOR PARA LER OS DOIS VETORES    printf("Vetor A: \n");    for ( i = 0 ; i < 5 ; i++ ){        scanf("%d", &a[i]);    }    printf("Vetor B: \n");    for ( i = 0 ; i < 5 ; i++ ){        scanf("%d", &b[i]);    }    // FOR PARA ATRIBUIR VETOR A EM B E VETOR B EM A    //inicia i=4 e j=0    //a cada iteração ele aumenta j+1 e i-1    for (i = 4, j = 0 ; i >= 0 ; i--, j++ ){        aux = a[i];        a[i] = b[j];        b[j] = aux;    }    // FOR PARA IMPRIMIR    for (i = 0 ; i < 5 ; i++ ){        printf("Invertido A: %d\n",a[i]);    }    for (i = 0; i < 5 ; i++ ){        printf("Invertido B: %d\n",b[i]);    }system ("pause");}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Agora sim enetendi, muito boa sua explicação, lembra daquele indice par e indice impar kkkk então ainda estou com problema nele, coloquei em outro post a minha duvida e o que preciso

Aquele código tem múltiplas resoluções para ele no tópico dele, de uma olhada nesse código:

 

#include <stdio.h>#include <stdlib.h>#define MAXV 6int main() {  int a[MAXV], b[MAXV], c[MAXV], d[MAXV], i, i_c = 0, i_d = 0;  //procura os indices no vetor A  for (i = 0; i< MAXV; i++)    if (i % 2 == 0) {      c[i_c] = i;      i_c++;    }    else {      d[i_d] = i;      i_d++;    }  //procura os indices no vetor B  for (i = 0; i< MAXV; i++)    if (i % 2 == 0) {      c[i_c] = i;      i_c++;    }    else {      d[i_d] = i;      i_d++;    }  imprime_vetor(c);  imprime_vetor(d);  system("pause");  return 0;}void imprime_vetor(int *v) {  int j;  printf("\nVetor: ");  for (j = 0; j < MAXV; j++)    if(v[j] != -1)      printf("%d ", v[j]);  printf("\n");}
Link para o comentário
Compartilhar em outros sites

Esse codigo esta usando o mesmo contador para o vetor a e para o vetor b, eu preciso de contadores diferentes o pulo do gato é justamente isso contadores diferentes eu preciso saber se no contador i tem par e impar e no contador j se tem par e impar


http://forum.clubedohardware.com.br/forums/topic/1136585-imprimir-o-%C3%ADndice-par-e-impar-de-2-vetores/?hl=%2Bindice+%2Bdo+%2Bvetor#entry6250374

Link para o comentário
Compartilhar em outros sites

Esse codigo esta usando o mesmo contador para o vetor a e para o vetor b, eu preciso de contadores diferentes o pulo do gato é justamente isso contadores diferentes eu preciso saber se no contador i tem par e impar e no contador j se tem par e impar

http://forum.clubedohardware.com.br/forums/topic/1136585-imprimir-o-%C3%ADndice-par-e-impar-de-2-vetores/?hl=%2Bindice+%2Bdo+%2Bvetor#entry6250374

Especifique onde o código está usando o mesmo contador para ambos os vetores?

Link para o comentário
Compartilhar em outros sites

De uma olhada neste condigo:

 

#include <stdio.h>
#include <stdlib.h>
#define MAXV 6

int main() {
  int a[MAXV];
  int b[MAXV];
  int c[MAXV];
  int d[MAXV];
  int i;
  int par = 0;
  int impar = 0;

  printf("Insira os valores do vetor A: \n");
  for(i = 0; i < MAXV; i++) CONTADOR i
    scanf("%d", &a);

  printf("Insira os valores do vetor B: \n");
  for(i = 0; i < MAXV; i++) CONTADOR i (esse contador esta repetindo esse contador tinha que ser j)
    scanf("%d", &b);

  //procura os indices no vetor A
  for (i = 0; i< MAXV; i++)
    if (i % 2 == 0) {
      c[par] = i;
      par++;

    }
    else {
      d[impar] = i;
      impar++;
    }

  //procura os indices no vetor B
  for (i = 0; i< MAXV; i++)
    if (i % 2 == 0) {
      c[par] = i; (contador repetido, esse contador tinha que ser j)
      par++;

    }
    else {
      d[impar] = i;
      impar++;
    }
    
    for (i = 0; i< MAXV; i++){
        printf ("Os indices pares sao: %d\n",c);
        printf ("Os indices impares sao: %d\n",d);        
    }

  system("pause");
}


Esse é a ideia para os contadores:

 

printf("Insira os valores do vetor A: \n");
  for(i = 0; i < MAXV; i++)
    scanf("%d", &a);

  printf("Insira os valores do vetor B: \n");
  for(j = 0; j < MAXV; j++)
    scanf("%d", &b[j]);

Link para o comentário
Compartilhar em outros sites

De uma olhada neste condigo:

 

#include <stdio.h>

#include <stdlib.h>

#define MAXV 6

int main() {

  int a[MAXV];

  int b[MAXV];

  int c[MAXV];

  int d[MAXV];

  int i;

  int par = 0;

  int impar = 0;

  printf("Insira os valores do vetor A: \n");

  for(i = 0; i < MAXV; i++) CONTADOR i

    scanf("%d", &a);

  printf("Insira os valores do vetor B: \n");

  for(i = 0; i < MAXV; i++) CONTADOR i (esse contador esta repetindo esse contador tinha que ser j)

    scanf("%d", &b);

  //procura os indices no vetor A

  for (i = 0; i< MAXV; i++)

    if (i % 2 == 0) {

      c[par] = i;

      par++;

    }

    else {

      d[impar] = i;

      impar++;

    }

  //procura os indices no vetor B

  for (i = 0; i< MAXV; i++)

    if (i % 2 == 0) {

      c[par] = i; (contador repetido, esse contador tinha que ser j)

      par++;

    }

    else {

      d[impar] = i;

      impar++;

    }

    

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

        printf ("Os indices pares sao: %d\n",c);

        printf ("Os indices impares sao: %d\n",d);        

    }

  system("pause");

}

Esse é a ideia para os contadores:

 

printf("Insira os valores do vetor A: \n");

  for(i = 0; i < MAXV; i++)

    scanf("%d", &a);

  printf("Insira os valores do vetor B: \n");

  for(j = 0; j < MAXV; j++)

    scanf("%d", &b[j]);

Vamos lá, vou comentar o parte que você especificou

 

 #include <stdio.h>#include <stdlib.h>#define MAXV 6int main() {  int a[MAXV];  int b[MAXV];  int c[MAXV];  int d[MAXV];  int i;  int par = 0;  int impar = 0;  printf("Insira os valores do vetor A: \n");  for(i = 0; i < MAXV; i++) CONTADOR i // aki o contador começa em 0 e só sai do for quando for 4    scanf("%d", &a[i]);                //Quando ele chegar ate 4, terminou sua utilidade                                        printf("Insira os valores do vetor B: \n");  for(i = 0; i < MAXV; i++) CONTADOR i (esse contador esta repetindo esse contador tinha que ser j)    scanf("%d", &b[i]);                //Aqui o contador ainda é o mesmo, mas não faz diferença                                       // Ele pode ser i, j ou o diabo_4, pois a porra do contador  //procura os indices no vetor A      // Vai começar denovo do 0, e vai ate 4 e só depois sai do for  for (i = 0; i< MAXV; i++)    if (i % 2 == 0) {      c[par] = i;      par++;    }    else {      d[impar] = i;      impar++;    }  //procura os indices no vetor B  for (i = 0; i< MAXV; i++)    if (i % 2 == 0) {      c[par] = i; (contador repetido, esse contador tinha que ser j)      par++;      // Aqui sim, precisa-se de um contador auxiliar, mas já tem                  // e esses contadores chaman-se "par" e "impar"    }             //perceba que uso "par++" e "impar++"    else {        //pois além do "i", tive que usar outros 2 contadores      d[impar] = i;      impar++;    }        for (i = 0; i< MAXV; i++){        printf ("Os indices pares sao: %d\n",c[i]);        printf ("Os indices impares sao: %d\n",d[i]);            }  system("pause");}Esse é a ideia para os contadores://Acho que você não está percebendo a inutilidade de ter 2 contadores para inserir//os números nos vetores abaixo, tente perceber que com apenas 1 contador, vc pode inserir//em 1 trilhão de vetores, claro preenchendo 1 vetor por vez//só haveria necessidade de utilizar 2 contadores caso você fosse inserir nos 2// vetores ao mesmo tempo,printf("Insira os valores do vetor A: \n");  for(i = 0; i < MAXV; i++)     scanf("%d", &a[i]);  printf("Insira os valores do vetor B: \n");  for(j = 0; j < MAXV; j++)    scanf("%d", &b[j]);

Contadores são como baldes, depois que você carrega a água de um lado para o outro e esvazia o balde, o balde fica livre para você utilizar onde bem entender. O que não pode fazer é utilizar um balde para carregar ao mesmo tempo, areia, água, pedra, tijolos etc...

Espero que eu tenha sido claro e sanado suas dúvidas.

Abrss...

Link para o comentário
Compartilhar em outros sites

CiroBoy calma....kkkkk eu sei que o negocio é da China mas olha só o mesmo código sem o vetor b ele faz a mesma coisa se tivesse com o vetor, por isso que precisa de 2 contadores compila esse código que eu estou t enviando para você ver que desta forma ele esta repetindo o mesmo contador por isso que precisa ser dois

 

#include <stdio.h>
#include <stdlib.h>
#define MAXV 6

int main() {
  int a[MAXV];
  //int b[MAXV];
  int c[MAXV];
  int d[MAXV];
  int i;
  int par = 0;
  int impar = 0;

  printf("Insira os valores do vetor A: \n");
  for(i = 0; i < MAXV; i++)
    scanf("%d", &a);

  /*printf("Insira os valores do vetor B: \n");
  for(i = 0; i < MAXV; i++)
    scanf("%d", &b);*/


  //procura os indices no vetor A
  for (i = 0; i< MAXV; i++)
    if (i % 2 == 0) {
      c[par] = i;
      par++;

    }
    else {
      d[impar] = i;
      impar++;
    }

  //procura os indices no vetor B
  for (i = 0; i< MAXV; i++)
    if (i % 2 == 0) {
      c[par] = i;
      par++;

    }
    else {
      d[impar] = i;
      impar++;
    }
    
    for (i = 0; i< MAXV; i++){
        printf ("Os indices pares sao: %d\n",c);
    }
     for (i = 0; i< MAXV; i++){
        printf ("Os indices impares sao: %d\n",d);        
    }


  system("pause");
}

 

 

 a saida correta tem que ser assim:

 

Insira os valores do vetor A:
9
8
7
6
5
4
Insira os valores do vetor B:
3
2
1
2
3
4
Os indices pares sao: 0 indice do vetor A
Os indices pares sao: 2 indice do vetor A
Os indices pares sao: 4 indice do vetor A
Os indices pares sao: 0 indice do vetor B
Os indices pares sao: 2 indice do vetor B
Os indices pares sao: 4 indice do vetor B
Os indices impares sao: 1 indice do vetor A
Os indices impares sao: 3 Indide do vetor A
Os indices impares sao: 5 Indice do vetor A
Os indices impares sao: 1 Indice do vetor B
Os indices impares sao: 3 Indice do vetor B
Os indices impares sao: 5 indice do vetor B
Pressione qualquer tecla para continuar. . .

Link para o comentário
Compartilhar em outros sites

Bem, não vou mais perder tempo com isso, a saída ta correta e o algoritmo ta funcionando, se não faz diferença se o vetor B existe ou não, é sinal que o vetor B é mais algo inútil no código, pois sem ele a saída continua correta.

Como eu falei no outro tópico, essa questão está mal formada, pois digitar os valores é uma perda de tempo, pois não se faz nada com os valores digitados,  em nenhum momento se faz operações com o vetor A ou o Vetor B.

Conclusão: Se essa questão tiver sido feita pelo seu professor, ou ele não soube faze-la ou você não explicou a questão direito.

Vou dar o exemplo de que sem usar o vetor A e B, e sem digitar os valores no vetor A e B, você consegue resolver esse problema com a mesma saida.

 

#include <stdio.h>#include <stdlib.h>#define MAXV 6int main() {  int c[MAXV];  int d[MAXV];  int i;  int par = 0;  int impar = 0;  //procura os indices no vetor A  for (i = 0; i< MAXV; i++)    if (i % 2 == 0) {      c[par] = i;      par++;    }    else {      d[impar] = i;      impar++;    }  //procura os indices no vetor B  for (i = 0; i< MAXV; i++)    if (i % 2 == 0) {      c[par] = i;      par++;    }    else {      d[impar] = i;      impar++;    }    for (i = 0; i< MAXV; i++){        printf ("Os indices pares sao: %d\n",c[i]);    }     for (i = 0; i< MAXV; i++){        printf ("Os indices impares sao: %d\n",d[i]);    }  system("pause");}

Se quiser mais ajuda abra um novo tópico e explique direito o que você quer, e espero que faça sentido, pois se não fizer eu nem vou perder meu tempo.

Abrs....

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!