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.