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

Dúvidas no Exercicio

Faça um programa em C que preencha um vetor com 10 números inteiros positivos e crie um segundo vetor, em que cada posição receberá o fatorial do valor armazenado no 1º vetor na posição correspondente. Você deve utilizar uma função para o cálculo do fatorial. Ao final, o programa deve exibir os dois vetores na tela.

Eu criei um vetor chamado v1[10] . Minha dúvida é como criar um segundo vetor, em que cada posição receberá o fatorial do valor armazenado no 1º vetor na posição correspondente.

4 respostas

Oi Rafael, tudo bem?

Considere que você tenha duas variáveis: VetorA e VetorB, onde o primeiro guardará os 10 números inteiros e o segundo, os fatoriais respectivos.

Sendo assim , você pode fazer o segundo vetor receber o fatorial do primeiro vetor na mesma posição. Desta forma:

 vetorB[i] = fatorial(vetorA[i]);

Ou seja:

  • vetorB na posição 0 receberá o fatorial do vetor A na posição 0.
  • vetorB na posição 1 receberá o fatorial do vetor A na posição 1.
  • vetorB na posição 2 receberá o fatorial do vetor A na posição 2.

E assim por diante.

Neste caso, considere que o trecho acima estará dentro de um loop:

  for(i =0; i<10; i++){
        vetorB[i] = fatorial(vetorA[i]);
    }

Pegou a ideia?

Qualquer dúvida é só falar, estou a disposição. Abraços e bons estudos!

Boa noite Nadia. Muito Obrigado pelo retorno. Estarei colocando meu código aqui. Ele esta dando erro nessa linha vetorB[i] = fatorial (vetorA [i]); . o Cálculo do fatorial está correto?

#include <stdio.h>



int main(){
 int vetorB[10] , vetorA[10];  // Declarando dois vetores 
 int fatorial , i;

    for(fatorial = 1; i > 1; i = i -1) // Calculando Fatorial 
    fatorial = fatorial * i;

    for(i=0; i<10; i++){
        vetorB[i] = fatorial (vetorA [i]); 
    }

    return 0;
    }

/*
    vetorB na posição 0 receberá o fatorial do vetor A na posição 0.
    vetorB na posição 1 receberá o fatorial do vetor A na posição 1.
    vetorB na posição 2 receberá o fatorial do vetor A na posição 2.
    */
solução!

Rafael, boa noite. O cálculo do fatorial está correto, porém, duas coisinhas estão levando o seu código ao erro.

A primeira delas é que o vetorA está vazio, ou seja, não há nenhum valor em nenhuma posição do mesmo. Observe que você apenas cria a variável vetorA, mas não a preenche. E para sanarmos isto, podemos fazer um laço de repetição para preencher estes valores automaticamente:

for(i = 0; i< 10; i++){
        vetorA[i] = i;
    }

Neste caso, estamos preenchendo cada posição do vetorA conforme ocorre o incremento da variável i, dentro do laço de repetição. Observe:

  • VetorA na posição 0 recebe 0, pois, i vale 0
  • Variável i sofre o incremento
  • VetorA na posição 1 recebe 1, pois, i agora vale 1
  • Variável i sofre o incremento
  • VetorA na posição 2 recebe 2, pois, i agora vale 2

E assim por diante.

O segundo fator que está levando seu código ao erro, é devido a linha abaixo:

 vetorB[i] = fatorial (vetorA [i]); 

Quando escrevemos fatorial (vetorA [i]), espera-se que fatorial seja uma função que receba como parâmetro um inteiro. No caso do seu código não há esta função, pois você calcula o fatorial diretamente na main. Podemos corrigir isto isolando o código e criando uma função que retorne o valor do fatorial calculado, como é pedido no exercício:

int fatorial(int i){

    int fatorial = 1;
    for(fatorial = 1; i > 1; i = i -1){
        fatorial = fatorial * i;
    }

    return fatorial;
}

Com estas correções já será possível alcançar o objetivo do exercício.

Código completo:

int fatorial(int i){

    int fatorial = 1;
    for(fatorial = 1; i > 1; i = i -1){
        fatorial = fatorial * i;
    }

    return fatorial;
}

#include <stdio.h>

int main(){
  int vetorA[10];
  int vetorB[10];
  int i;

  for(i = 0; i< 10; i++){
        vetorA[i] = i;
  }
   for(i =0; i<10; i++){
        vetorB[i] = fatorial(vetorA[i]);
   }
    printf("Fatorial dos números do primeiro vetor: ");
    for(i = 0; i<10; i++){
        printf("%d\n", vetorB[i]);
    }
}

Qualquer dúvida é só falar. Espero ter ajudado. Abraços e bons estudos!

Boa noite Nadia. Consegui compreender o exercicio, obrigado pela ajuda!