Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
gprilopes

RESOLVIDO Inverter vetores em linguagem C

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Olá Math.Pi, desculpa mas esse lik ainda não me ajudou com o problema, o ultimo codigo postado não compila

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    beleza, poste aí o que já conseguiu fazer.

     

    Obs: use tag code.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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}
    Editado por CiroboyBR

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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");
    }

    Compartilhar este post


    Link para o post
    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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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. . .

    Compartilhar este post


    Link para o post
    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. . .

    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");}
    Editado por CiroboyBR
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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");}

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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/topic/1136585-imprimir-o-%C3%ADndice-par-e-impar-de-2-vetores/?hl=%2Bindice+%2Bdo+%2Bvetor#entry6250374

    Compartilhar este post


    Link para o post
    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/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?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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]);

    Compartilhar este post


    Link para o post
    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...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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. . .

    Compartilhar este post


    Link para o post
    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....

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×