Informatică, întrebare adresată de sanziana009, 9 ani în urmă

C++:
În fişierul date.in se găsesc pe o singură linie, separate prin câte un spaţiu, mai multe numere naturale din intervalul închis [10,106-1], reprezentând un șir de numere naturale.
Se consideră subprogramele:
• S1 cu un singur parametru, k, prin intermediul căruia primeşte un număr natural nenul cu cel mult 6 cifre, k>9; subprogramul returnează numărul obținut prin eliminarea ultimei cifre a valorii parametrului k;
Exemplu. Pentru k=12345 subprogramul returnează valoarea 1234.
• S2 cu un singur parametru, k, prin intermediul căruia primeşte un număr natural nenul cu cel mult 6 cifre, k>9; subprogramul returnează valoarea 1 dacă valoarea parametrului k este un număr prim, altfel returnează valoarea 0.

Cerinţe:
a) Scrieţi definiţia completă a subprogramului S1;
b) Scrieţi definiţia completă a subprogramului S2;
c) Să se scrie un program C++ care citește șirul de numere din fișierul date.in și înlocuiește fiecare număr x din șir cu cel mai mare prefix număr prim al său. Dacă nu există un astfel de prefix, numărul x va fi înlocuit în șir cu valoarea 0. Numerele din șirul obținut se vor afişa pe ecran, pe prima linie, separate prin câte un spațiu. Se vor folosi apeluri utile ale subprogramelor S1 și S2 pentru determinarea prefixelor numere prime.

Exemplu. Dacă fişierul date.in are conţinutul alăturat 13736 12345 22349 226 , programul va afişa numerele următoare:
1373 0 22349 2

Răspunsuri la întrebare

Răspuns de Mister7
2
#include <iostream>
#include <fstream>
using namespace std;

int s1(int k)
{
    return k/10;
}

int s2(int k)
{
    int i, ok=1;
    for(i=2;i<k;i++)
    {
        if(k%i==0) ok=0;
    }
    return ok;
}

int main()
{
    int n, i;
    ifstream f("date.in");
    while(!f.eof())
    {
        f >> n;
        if(s2(n))
        {
            cout << n << " ";
        }
        else
        {
            while(s2(n)==0)
            {
                n=s1(n);
            }
            if(n==1) cout << "0 ";
            else cout << n << " ";
        }
    }
    f.close();
    return 0;
}

sanziana009: multumesc mult !
Alte întrebări interesante