Ir ao conteúdo
  • Cadastre-se

C Nao estou entendo o motivo dessa logica


UmPrograma

Posts recomendados

consegui resolver por acaso o exercicio, mas não entendi o seu real motivo.

 

A PARTE ESTÁ COMENTADA. (no segundo for)!!!

/*10. Escreva um algoritmo que leia um vetor de 20 posições e mostre- o. Em seguida, troque o primeiro elemento
 com o último, o segundo com o penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. Mostre o novo
  vetor depois da troca.*/
  #include <stdio.h>
  #include <stdlib.h>
  main (){
    int vet[20], i,j, cont=20, aux;

    for(i=0;i<20;i++){
        printf("Vetor [%d]: ", i);
        scanf("%d", &vet[i]);
    }
    for(i=0;i<10;i++){// NAO SEI PORQUE AQUI TEM QUE SER 10
        cont--;
        aux=vet[cont];
        vet[cont]=vet[i];
        vet[i]=aux;
    }
    printf("\n\n\n");
    for(i=0;i<20;i++){
        printf("Vetor [%d]: %d\n", i, vet[i]);
    }


  system("pause");
  return 0;
  }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Essa parte é a troca. Se são 20 números ao total, o número de trocas é 10. A quantidade de operações.

Eu quero trocar 1 e 2 eu vou fazer uma operação, ou seja, uma troca. Somente o primeiro com o último.

Eu quero trocar 1, 10, 20, 5 eu vou fazer duas operações: o primeiro com o último e o segundo com o penúltimo.

adicionado 3 minutos depois

O funcionamento desse trecho é mais ou menos assim:

 

'cont' vale 19 (cont--)

'i' vale 0

 

a troca ocorre entre 'cont' e 'i'. A posição 0 troca com a posição 19

Na próxima iteração, a posição 1 troca com a 18, a 2 com a 17, a 3 com a 16, e assim por diante. Existem 10 iterações. Por isso o laço de repetição é de 10 posições.

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Nesse tipo de situação faça um "teste de mesa":

 

1 2 3 4 5 6 -> tem 6 números

 

1ª troca: 6 2 3 4 5 1

2ª troca: 6 5 3 4 2 1

3ª troca: 6 5 4 3 2 1

 

Foram necessárias 3 (= 6/2) trocas para mudar todos os 6 números. Ou seja só precisa ir até a metade, pois troca 2 de 1 vez.

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Olá Josesousa.

Muito simples vejá como seria.:

Entrada.:

Digite o N do vetor 1.:

Digite o N do vetor 2.:

Digite o N do vetor 3.:

............... .... até o 18.:

............... .... até o 19.:

............... .... até o 20.:

Usa um for para a saida da variavel.

Saida.:

Vetor 1.: 20

Vetor 2.: 19

Vetor 3.: 18

............

Vil, basta sô inverter usado while ou for, que seja de sua vantade.

Vai ter  a saida com valor invertido.

Espero ter ajudado é até...

Luís.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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