Orar semigroup #2

Orar semigroup #2

9/23

5. Fişierul text bac.txt conţine, pe o singură linie, cel mult 1000 de numere naturale nenule cu cel mult 4 cifre fiecare, numerele fiind separate prin câte un spaţiu. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural nenul n (n<999) şi numerele din fişierul bac.txt şi care afişează pe ecran, separate prin câte un spaţiu, toate numerele din fişier care sunt divizibile cu n. Dacă fişierul nu conţine niciun astfel de număr, atunci se va afişa pe ecran mesajul NU EXISTA.
Exemplu: dacă fişierul bac.txt conţine numerele: 3 100 40 70 25 5 80 6 3798, pentru n=10 atunci pe ecran se va afişa: 100 40 70 80

#include<iostream>
#include<fstream>
using namespace std;
int main()
{ifstream f("bac.txt");
int n,a,ok=0;
cin>>n;
while(f>>a)
    if(a%n==0)
    {    cout<<a<<" ";ok=1;}
    if(ok==0)
        cout<<"NU EXISTA";
}
6. Subprogramul sub, cu trei parametri, primeşte prin intermediul parametrilor:
– v un tablou unidimensional cu cel mult 100 de componente ce memorează numere întregi de cel mult 4 cifre fiecare;
– n un număr natural nenul mai mic sau egal cu 100 ce reprezintă numărul efectiv de componente ale tabloului primit prin intermediul parametrului v;
– a un număr întreg cu cel mult 4 cifre.
Subprogramul sub returnează numărul componentelor tabloului primit prin intermediul parametrului v ale căror valori sunt strict mai mici decât valoarea parametrului a.
Exemplu: pentru valorile n=5, v=(1,21,9,21,403), a=20 ale parametrilor, în urma apelului, subprogramului sub va returna valoarea 2.
a) Scrieţi definiţia completă a subprogramului sub.
b) Să se scrie un program C/C++ care să citească de la tastatură un număr natural nenul n (n≤100) şi n numere întregi, fiecare având cel mult 4 cifre, şi care, folosind apeluri utile ale subprogramului sub, să afişeze pe ecran mesajul DA dacă oricare două dintre cele n numere întregi citite sunt distincte două câte două, sau mesajul NU în caz contrar.
Exemplu: pentru n=6 şi cele n numere citite de la tastatură: 47 183 69 8 134 -56
se va afişa pe ecran mesajul DA

#include<iostream>
#include<fstream>
using namespace std;
int sub(int v[], int n, int a)
{int i,k=0;
for(i=0;i<n;i++)
    if(v[i]<a)
        k++;
return k;
}

int main()
{int v[100],n,i,a,j,ok=1;
cout<<"a=";cin>>a;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
cout<<sub(v,n,a)<<endl;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(sub(v,n,v[i])==sub(v,n,v[j]))
            {ok=0;}
if(ok)
    cout<<"DA";
else cout<<"NU";
}
7. Un număr n se numeşte extraprim dacă atât el, cât şi orice număr obţinut prin permutarea cifrelor lui n, sunt numere prime. De exemplu, numărul 113 este un număr extraprim deoarece 113, 311, 131 sunt numere prime.
a) Scrieţi definiţia completă a unui subprogram f, cu un parametru, subprogram care:
- primeşte prin intermediul parametrului a un număr natural cu cel mult 3 cifre (a>1)
- returnează suma tuturor exponenţilor din descompunerea în factori primi a valorii
parametrului a.
Exemplu: pentru a=90 subprogramul va returna valoarea 4, deoarece a=2*32*5 şi
1+2+1=4.
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n, 2≤n≤999 şi,
folosind apeluri utile ale subprogramului f, verifică dacă n este un număr extraprim. În caz afirmativ, programul afişează pe ecran mesajul DA, în caz contrar afişând mesajul NU.

#include<iostream>
#include<fstream>
using namespace std;

int prim(int a)
{int i,d,ok=1;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;
}
    
int permutari(int &n)
{int z,nn,k,i,j=0;
z=1;nn=n;k=0;

while(n>9)
{z=z*10;n=n/10;k++;}
n=nn;k++;
for(i=0;i<k;i++)
{
n=(n%10)*z+n/10;
return n;
}
}

int nr_cif(int n)
{int i=0;
while(n)
{i++;n=n/10;}
return i;}

int main()
{int i,n,j,ok=1;
cin>>n;
for(i=0;i<nr_cif(n);i++)
    if(prim(permutari(n))==0)
        ok=0;
if(ok)
    cout<<"DA";
else cout<<"NU";
}
Fur le function f:
#include<iostream>
#include<fstream>
using namespace std;

int prim(int a)
{int i,d,ok=1;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;
}

int f(int a)
{int i,j=0,s=0,v[100],f[100]={0};
while(a>1)
    for(i=2;i<=a;i++)
        if(prim(i))
            if(a%i==0)
                {v[j]=i;j++;a=a/i;}
for(i=0;i<j;i++)
    f[v[i]]++;
for(i=0;i<100;i++)
    s=s+f[i];
return s;}
              
int main()
{int a;
cin>>a;
cout<<f(a);
}

vineri, 23 septembrie 2011 by DlMuresan
Categories: , , , , , , , | Leave a comment

Leave a Reply