Informatică, întrebare adresată de dinesculidia, 8 ani în urmă

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.

Anexe:

Răspunsuri la întrebare

Răspuns de Sergetec
1

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;

}


dinesculidia: Multumesc pentru ajutor!
Alte întrebări interesante