Salut! Va rog mult sa ma ajutati la niste probleme folosind subprograme in c++;
11. Scrieţi un subprogram cifra care returnează printr-un parametru de ieșire cifra aflată pe poziţia k în cadrul numărului natural n, începând de la dreapta.
12. Un număr este perfect dacă este egal cu suma divizorilor săi mai puțin el însuși (ex 6=1+2+3). Scrieți un subprogram care afișează, separate prin câte un spațiu, numerele perfecte din intervalul [a,b], unde a și b sunt parametri de intrare ai subprogramului.
Răspunsuri la întrebare
Buna!
Ai rezolvarile la probleme in C++ mai jos
11.
void cifra(int n, int k, int& c) {
int cnt = 0;
while (n) {
cnt++;
if (cnt == k) {
c = n % 10;
}
n /= 10;
}
}
12.
int sumdiv(int n)
{
if (n == 1) {
return 0;
}
int s = 1;
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) {
s += i + (n / i);
}
if (i * i == n) {
s -= i;
}
}
return s;
}
void perfect(int a, int b) {
bool exista = false;
for (int i = b; i >= a; --i) {
if (sumdiv(i) == i) {
cout << i << " ";
exista = true;
}
}
if (!exista) {
cout << "nu exista";
}
}
De aici sunt exercitiile din poza
a)
void schimba(int& a, int& b) {
int aux = a;
a = b;
b = aux;
//swap(a, b) este o functie predefinita pe care am putea sa o utilizam
}
b)
#include <iostream>
using namespace std;
void schimba(int& a, int& b) {
int aux = a;
a = b;
b = aux;
//swap(a, b) este o functie predefinita pe care am putea sa o utilizam
}
int main() {
int n, a[101][101];
//Citire
cin >> n;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cin >> a[i][j];
}
}
//Interschimbare
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
//daca suntem pe diagonala principala
if (i == j) {
//interschimbam cu diagonala secundara, adica a[i][n + 1 - j]
schimba(a[i][j], a[i][n + 1 - j]);
}
}
}
//Afisare
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cout << a[i][j] << " ";
}
cout << '\n';
}
return 0;
}