Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Gente alguém pode me dar uma ajuda nesse exercicio, não estou conseguindo realiza-lo, nem entende-lo muito bem, agradeço.

Tenho que fazer um programa em C, que permita que o usuário digite e armazene 5 pares de números inteiros, em um vetor chamado números(dessa forma o vetor deverá armazenar 10 números inteiros). Preencher um vetor chamado SaoAmigos com 5 números inteiros, sendo estes números 0s ou 1s, em que o número 1 é definido quando os elementos de uma par de números, contidos no vetor Numeros, são números amigos, e 0 caso contrário. Obs: dois números A e B são amigos, se a soma dos divisores de A, excluindo A, é igual a B; e a soma dos divisores de B, excluindo B, é igual a A . Só falta esta questão para eu poder entregar meu trabalho, agradeço ai gente.

1 resposta

Olá Mataht.

"Tenho que fazer um programa em C, que permita que o usuário digite e armazene 5 pares de números inteiros, em um vetor chamado números(dessa forma o vetor deverá armazenar 10 números inteiros). Preencher um vetor chamado SaoAmigos com 5 números inteiros."

#include <stdio.h>

int main(){
    int numeros[5][2];
    int sao_amigos[5];
    return 0;
}

Criei uma matriz de 5 linhas e 2 colunas na variável numeros e um vetor de inteiro de 5 linhas na variável sao_amigos.

#include <stdio.h>

int main(){
    int numeros[5][2];
    int sao_amigos[5];

   for(int i=0; i<5; i++){
        printf("(%d, %d):",i,0);
        scanf("%d", &(numeros[i][0]));
        printf("(%d, %d):",i,1);
        scanf("%d", &(numeros[i][1]));
    }

    return 0;
}

Depois criei um for que varia i de 0 até 4, ele vai percorrer as linhas da nossa matriz, e vou pedir para o usuário digitar dois números que serão salvos nas colunas 0 e 1 da respectiva linha.

"Preencher um vetor chamado SaoAmigos com 5 números inteiros, sendo estes números 0s ou 1s, em que o número 1 é definido quando os elementos de uma par de números, contidos no vetor Numeros, são números amigos, e 0 caso contrário."

#include <stdio.h>

int main(){
    int numeros[5][2];
    int sao_amigos[5];

   for(int i=0; i<5; i++){
        printf("(%d, %d):",i,0);
        scanf("%d", &(numeros[i][0]));
        printf("(%d, %d):",i,1);
        scanf("%d", &(numeros[i][1]));
    }

    for(int i=0; i<5; i++){
        sao_amigos[i] = definePar(numeros[i][0], numeros[i][1]);
    }
    return 0;
}

Nesse trecho vamos incluir mais um for para preencher o vetor sao_amigos com o retorno da função definePar, que ainda vai ser criada.

"Obs: dois números A e B são amigos, se a soma dos divisores de A, excluindo A, é igual a B; e a soma dos divisores de B, excluindo B, é igual a A . "

int definePar(int num1, int num2) {
    int somaNum1 = 0, somaNum2 = 0;
    for(int i = 1; i < num1; i++) {
        if(num1 % i == 0) {
            somaNum2 += i;
        }
    }

    if(somaNum2 != num2) {
        return 0;
    }

    for (int i = 1; i < num2; i++) {
        if(num2 % i == 0) {
            somaNum1 += i;
        }
    }

    if(somaNum1 != num1) {
        return 0;
    }
    return 1;
}

Nessa função temos dois for e eles variam a variável i de 1 até o num1 e num2, dentro desses for temos um if que verifica se i é divisível por num1 ou num2, e se for verdade ele soma o valor de i ao acumulado nas variáveis somaNum1 ou somaNum2 .

Depois de cada for temos um if que verifica se o acumulado é diferente ao outro numero, por exemplo: somaNum1 != num1, se for diferente já retornamos 0, na função.

No final se ele não entro em nenhum dos ifs, retornamos 1 , indicando que ele são números amigos.

#include <stdio.h>

int main(){
    int numeros[5][2];
    int sao_amigos[5];

   for(int i=0; i<5; i++){
        printf("(%d, %d):",i,0);
        scanf("%d", &(numeros[i][0]));
        printf("(%d, %d):",i,1);
        scanf("%d", &(numeros[i][1]));
    }

    for(int i=0; i<5; i++){
        sao_amigos[i] = definePar(numeros[i][0], numeros[i][1]);
    }

    for(int i=0; i<5; i++){
        printf("%d e %d: %d\n",numeros[i][0], numeros[i][1], sao_amigos[i]);
    }
    return 0;
}

Por fim criei um for para imprimir o resultado.

Entrei com esse números no programa:


(0, 0):220
(0, 1):284
(1, 0):1000
(1, 1):10
(2, 0):15
(2, 1):25
(3, 0):30
(3, 1):90
(4, 0):2
(4, 1):1

Obtive como resultado esses valores:


220 e 284: 1
1000 e 10: 0
15 e 25: 0
30 e 90: 0
2 e 1: 0

Utilizei a discussão nesse tópico como referencia. Qualquer duvida não hesite em perguntar.

Bons Estudos.