Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ponteiro em C


Rodrigo Imai

Pergunta

Pessoal, desculpa a minha ignorancia mas, não estou conseguindo utilizar ponteiro nesse programa, alguém poderia me uma ajuda?

Elaborar um programa que leia 12 elementos inteiros de um vetor A. A partir de A

construir um vetor B também de 12 elementos da seguinte forma: os elementos

ímpares de A são multiplicados por 3 enquanto os elementos pares não são

alterados. Apresente os elementos de B. Todo o acesso aos elementos de vetores

deve ser feito por meio de ponteiros.

#include <stdlib.h>
#include <stdio.h>
int main(){
    int A[12], B[12], c;
    for(c=1;c<=12;c++){
    printf("Digite um numero para A[%d]\n", c);
    scanf("%d", &A[c]);
    if(A[c]%2!=0)
    A[c]=A[c]*3;
    B[c]=A[c];
    }
    for(c=1;c<=12;c++){
    printf("B[%d]=%d\n", c, B[c]);}
    system("PAUSE");
    return 0;
}

Como utilizar ponteiro nesse programa?

Desde já agradeço pela atenção!

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Não entendi o enunciado do exercício, qual a necessidade de ponteiros?

Bom, uma forma fácil de transformar para o "formato ponteiro", seria trocar A por *(A + i).

O que A[x] significa? Significa que o programa pega o endereço da variável A (como é um array, é o endereço do primeiro elemento), adiciona x ao endereço levando em consideração a aritmética de ponteiros e depois o desreferencia, pegando o valor contido no novo endereço. Passando isso para a forma "normal", ficaria assim:

*(A + x)

A -> endereço do primeiro elemento do array. se não fosse um array, seria necessário utilizar &A

+ x -> soma x ao endereço do A

* -> operador desreferência, pega o valor localizado no endereço

Isto o A[X] faz automaticamente para você.

Então, você pode trocar tudo que está na forma A[x] para *(A + x). Com uma exceção, porém: se você quiser apenas o endereço, não é mais necessário utilizar &, como é utilizado no scanf. No seu scanf, você deveria trocar &A[c] para apenas A + c.

Não irei te dar o código, pois você deve ir fazendo e entendendo, caso tenha mais dúvidas, erros de compilação etc. continue postando neste tópico.

Outra coisa (agora referente ao seu código), acho que o enunciado, ao dizer que quer que você faça um novo array B com aqueles parâmetros, significa que você não deve alterar o A como está fazendo e depois associar, mas sim alterar o B. Se A[x] for impar, você está fazendo A[x] *= 3 e depois B[x] = A[x], enquanto o que deveria realmente estar fazendo é: B[x] = A[x] * 3.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Durub, muito obrigado pela a sua ajuda! Fiquei muito feliz por você ter respondido ao meu tópico! Consegui fazer o programa graças a sua ajuda!

o código do programa ficou assim:

#include <stdlib.h>
#include <stdio.h>
int main(){
    int A[12], B[12], c;
    int *p, *q;
    p=&A[0];
    q=&B[0];
    for(c=1;c<=12;c++){
    printf("Digite um numero para A[%d]\n", c);
    scanf("%d", &A[c]);
    if(*(p+c)%2!=0)
    *(p+c)=*(p+c)*3;
    *(q+c)=*(p+c);
    }
    for(c=1;c<=12;c++){
    printf("B[%d]=%d\n", c, B[c]);}
    system("PAUSE");
    return 0;
}

Muito obrigado pela Ajuda,

Um grande abraço!

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...