Ir ao conteúdo

Inverter vetores em linguagem C


Ir à solução Resolvido por Visitante,

Posts recomendados

Postado
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

Postado

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

Postado

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}
Postado

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");
}

Postado

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.

Postado

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. . .

  • Solução
Postado

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");}
Postado

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

Postado

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");}
Postado

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

Postado

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?

Postado

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]);

Postado

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...

Postado

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. . .

Postado

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....

Postado

OK obrigado, vou abrir outro tópico não precisa mais perder seu tempo me ajudando, mas programação é isso, fazer o impossível virar possível, obrigado pelo seu tempo perdido

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...