Ir ao conteúdo
  • Cadastre-se
UmPrograma

C Nao estou entendo o motivo dessa logica

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 3
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Math.Pi Ah sim. 

Por isso que quando o for com 20 iteracao ficava na mesma posicao. Pois ele trocava e depois destrocava.

Valeu, amigo!!!

  • Curtir 2

Compartilhar este post


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

Compartilhar este post


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

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

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

×