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

Dessa forma também está correto?

Favor verificar!

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


int soma (int a, int b, int c){

    int total = 0;

     total = (a+b+c);

    return total;
}



int main () {

int nums [3];

nums [0]= 10;

nums [1]= 20;

nums [2]= 30;


int total = soma (nums[0],nums[1],nums[2]);


printf("Total e: %d\n\n", total);

}

3 respostas

Opa Giliandro, tudo bem com você?

Está certinho dessa maneira também :)

Mas você compreendeu a maneira como o instrutor respondeu a questão? A maneira dele nos permite somar vários valores de uma maneira mais fácil!

Vou dar um exemplo:

E se ao invés de 3 números, tivéssemos que somar 10 números?

Da sua forma a nossa funçao de soma ficaria algo como:

soma( nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], nums[6], nums[7], nums[8], nums[9], nums[10])

Ficou confuso né?

Da maneira do professor teríamos

soma(nums, 10)

E para isso na função soma precisamos fazer um for, criando uma variável para armazenar nosso total

int soma(int* nums, int tam) {
    int total = 0;

    for(int i = 0; i < tam; i++) {
        total = total +  nums[i];
    }

    return total;
}

Veja que estamos somando no total o valor de nums[i] que vai valer, nums[0], nums[1], de uma maneira mais automática :)

Compreendeu? Qualquer coisa estou a disposição

Abraços e Bons Estudos!

Olá Giliandro.

Está correto sim, porem a proposta do exercício é praticar ponteiros e conseguir uma maior entendimento que os arrays também são ponteiros.

Então para praticar vamos modificar para receber ponteiro invés de cada numero individualmente, para isso vamos ter a assinatura da função soma dessa maneira:

int soma (int* nums, int tamanho){

Onde vamos receber um ponteiro do array nums e o tamanho de desse array.

Agora dentro da função vamos declarar uma variável para salvar a soma, vamos chama-la de resultado:

int soma (int* nums, int tamanho){

    int resultado = 0;

}

Depois vamos utilizar um for que começa de 0 e vai até o tamanho do nosso array, isso para conseguirmos acessar cada posição do nosso array.

int soma (int* nums, int tamanho){
    int resultado = 0;

    for (int i=0; i<tamanho; i++){
    }
}

Para acessar as posições vamos utilizar colchetes [ ] e depois de acessar vamos somar com o que já tiver acumulado na variável resultado.

int soma (int* nums, int tamanho){
    int resultado = 0;

    for (int i=0; i<tamanho; i++){
        resultado += nums[i];
    }
}

No final, basta retorna o valor acumulado na variável resultado.

int soma (int* nums, int tamanho){
    int resultado = 0;

    for (int i=0; i<tamanho; i++){
        resultado += nums[i];
    }

    return resultado;
}

No main vamos chamar nossa função de uma maneira diferente, agora passando o array e o tamanho dele.

int total = soma (nums, tamanho);

Nosso código vai ficar assim:

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

int soma (int* nums, int tamanho){
    int resultado = 0;

    for (int i=0; i<tamanho; i++){
        resultado += nums[i];
    }

    return resultado;
}


int main () {
    int tamanho = 3;

    int nums [tamanho];

    nums [0]= 10;

    nums [1]= 20;

    nums [2]= 30;


    int total = soma (nums, tamanho);


    printf("O total eh: %d\n", total);

}

Mas agora vamos analisar as vantagens do nosso novo código para o antigo.

Na nossa função soma antiga ficávamos limitados a somar 3 números e se resolvêssemos somar mais números, teríamos que criar uma nova função ou modificar a nossa original para cada quantidade de numero.

int soma (int a, int b, int c)

Já na nossa nova função podemos somar quantos números quisermos:

int soma (int* nums, int tamanho)

Espero ter te ajudado a entender arrays, ponteiros e qual a vantagem que ganhamos utilizando essa abordagem.

Bons Estudos

solução!

Pessoal,

Muito agradecido pela ajuda! Em todos os tópicos de fórum que eu tenho feito. eu estou sendo devidamente amparado pelos colegas acima. Peço desculpas de certa forma se as perguntas são em geral de nível básico. Mas tenho de expressar minha gratidão e agrado com os feedbacks que estão sendo dados. Estão de parabéns!