Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Solicitação de revisão

Realizei a minha terefa da seguinte forma: A mesma retorna o valor correto, mas não sei se atende conforma solicitado pelo enunciado ta tarefa. Achei que o enunciado ficou um tanto quanto vago!

Estaria errada? Segue:

// Inclui as bibliotecas
# include <stdio.h>

void soma (int *a, int *b){

int resultado = (*a)+(*b);


printf("Resultado é:%d\n", resultado);

}


    int main(){

int entrada1;
int entrada2;

printf("Entrada 1: \n\n");
scanf (" %d", &entrada1);

printf("Entrada 2: \n\n");
scanf (" %d", &entrada2);



soma (&entrada1,&entrada2);


}
2 respostas

Olá Giliandro, tudo bem?

Vou tentar deixar o enunciado um pouco mais claro para você :)

Escreva uma função soma que recebe um ponteiro de inteiro num e mais dois inteiros a e b. A função deve calcular a soma de a+b em num.

  • Precisamos criar uma função que receba um ponteiro para inteiro (int *) com o nome num
  • A função deve receber dois inteiros (int)
  • Calcular a soma e colocar o valor em numcom o nome a e b

Então precisamos arrumar um pouco seu código :)

>>> funcao main()

int resultado;

Criamos então a nossa variável que vai receber o resultado da conta

>>> funcao soma() 
void soma (int* num, int a, int b){

Na nossa função de soma vamos receber apenas um ponteiro de inteiro e os outros dois serão números inteiros normais

Por conta disso o que temos que fazer é o seguinte:

void soma(int* num, int a, int b) {
    *num = a + b;
}

Ou seja estamos indo no endereço da variável num e adicionando o valor da soma :)

Na nossa função main precisamos então corrigir como estamos chamando a função:

soma ( &resultado, entrada1, entrada2);

Estamos passando apenas o endereço de resultado que criamos anteriormente, e para checar se nosso código está certo podemos adicionar no final do nosso programa:

int main() {
    int resultado;
    int entrada1;
    int entrada2;

    printf("Entrada 1: \n\n");
    scanf (" %d", &entrada1);

    printf("Entrada 2: \n\n");
    scanf (" %d", &entrada2);

    soma(&resultado, entrada1, entrada2);

    printf("O valor do reusltado é : %d\n ", resultado);

}

Compreendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

solução!

Olá Giliandro.

Seu código está parcialmente correto com o que foi proposto no exercício, no enunciado temos que "Escreva uma função soma que recebe um ponteiro de inteiro num e mais dois inteiros a e b. A função deve calcular a soma de a+b em num.", então é dito que a nossa função deve receber 1 ponteiro num e 2 inteiros a e b, então a assinatura da nossa função ficaria assim:

void soma (int a, int b, int *num);

Mas porque ela deveria ser assim ? O motivo é que os valores das variáveis a e b não serão alterados por isso não temos a necessidade de usar ponteiros, ao contrario da variável num onde vamos guardar o resultado da soma então ela deve ser um ponteiro.

void soma (int a, int b, int *num){

    (*num) = a + b;

}

Nossa função vai ficar dessa maneira, recebemos os valor de a e b e recebemos um ponteiro num onde depois de acessa-lo (*num) salvamos o valor da soma a + b.

Agora dentro do main, criamos uma variável resultado e mandamos o seu endereço (&resultado) para a função soma ficando dessa maneira:

    int resultado;
    soma (entrada1, entrada2, &resultado);
    printf("Resultado é:\n%d\n", resultado);

O código completo fica assim:

// Inclui as bibliotecas
# include <stdio.h>

void soma (int a, int b, int *num){

    (*num) = a + b;

}


int main(){

    int entrada1;
    int entrada2;

    printf("Entrada 1: \n");
    scanf (" %d", &entrada1);

    printf("Entrada 2: \n");
    scanf (" %d", &entrada2);



    int resultado;
    soma (entrada1, entrada2, &resultado);
    printf("Resultado é:\n%d\n", resultado);

}

Um ponto importante a ser analisado no seu código original é o fato de porque usamos ponteiros:

void soma (int *a, int *b){

    int resultado = (*a)+(*b);


    printf("Resultado é:%d\n", resultado);

}

Estamos sim recebendo os endereços e fazendo uso dos ponteiros de a e b, porem não estamos alterando o seu valor nesse caso, então não faz sentido receber os valores dessa maneira.

Espero ter te ajudado a entender melhor o conceito de ponteiros, continue empenhado como está, parabéns.

Bons Estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software