Orar semigroup #2

Orar semigroup #2

9/15 - Recapitulare

1. Subprogramul sub are trei parametri:
    n, prin care primeste un număr natural (0<n<100);
    v, prin care primeste un tablou unidimensional care memorează un sir de n numere naturale, fiecare având cel putin două cifre si cel mult patru cifre;
    s, un număr natural (0<s<18).
Subprogramul determină si afisează pe ecran, separate prin câte un spatiu, în ordine descrescătoare, toate numerele din sir care au suma dintre cifra unitătilor si cifra zecilor strict mai mare decât s. Dacă sirul nu contine niciun astfel de număr, subprogramul afisează pe ecran mesajul NU EXISTA. În urma apelului, tabloul transmis subprogramului ca parametru nu se modifică.
Scrieti în limbajul C/C++ definitia completă a subprogramului sub.
Exemplu: pentru n=10, v=(351,149,3794,502,785,258,258,1512,489,693),
s=12 în urma apelului, subprogramul afisează pe ecran, în această ordine, valorile:
3794 785 489 258 258 149.
#include<iostream>
using namespace std;
void ordonare(int a[], int j)
{int i,k;
for(i=0;i<j;i++)
    for(k=i+1;k<j;k++)
        if(a[i]<a[k])
            swap(a[i],a[i+1]);
}

void sub(int n, int v[], int s)
{int a[100],i,j=0,m;
for(i=0;i<n;i++)
    if(v[i]%10+v[i]/10%10>s)
        {a[j]=v[i];j++;}
if(j==0)
    {cout<<"NU EXISTA";return;}
ordonare(a,j);
for(i=0;i<j;i++)
    cout<<a[i]<<" ";
}

int main()
{int n,v[100],s,i;
cin>>n>>s;
for(i=0;i<n;i++)
    cin>>v[i];
sub(n,v,s);
}
2. Se citesc cele n elemente ale unui tablou de numere intregi. Sa se scrie un subprogram care afiseaza mesajul DA dacă elementele pare în şir sunt în ordine crescătoare, iar cele impare sunt în ordine descrescătoare şi mesajul NU în caz contrar.
Exemplu:  n=8    10 1133 12 331 42 1354 221 13 Se va afisa DA

#include<iostream>
using namespace std;
void ordonare(int a[], int j)
{int i,k;
for(i=0;i<j;i++)
    for(k=i+1;k<j;k++)
        if(a[i]<a[k])
            swap(a[i],a[i+1]);
}

void afisare(int a[],int n)
{int i;
for(i=0;i<n;i++)
    cout<<a[i]<<" ";}

void sub(int n, int v[], int s)
{int a[100],b[100],i,j=0,k=0,t,ok=1;
for(i=0;i<n;i++)
    if(v[i]%2==0)
        {a[j]=v[i];j++;}
    else {b[k]=v[i];k++;}

/*    cout<<endl;   
afisare(a,j);
    cout<<endl;
afisare(b,k);
    cout<<endl;
*/
   
for(i=0;i<j-1;i++)
    if(a[i]>a[i+1])
        {ok=0;break;}

if(ok==0)
    {cout<<"NU";return;}

ok=1;
for(i=0;i<k-1;i++)
    if(b[i]<b[i+1])
        ok=0;

if(ok==0)
    cout<<"NU";
else cout<<"DA";
}

int main()
{int n,v[100],s,i;
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
sub(n,v,12);
}
3. Se consideră subprogramul pr, care primeşte prin intermediul parametrului a un număr natural nenul cu cel mult 9 cifre şi returnează 1 dacă numărul este prim şi 0 în caz contrar.
a) Scrieţi subprogramul pr.
b) Considerăm un număr natural nenul n>99 cu cel mult 9 cifre. Să se realizeze un program C/C++ care citeşte numărul n şi care, folosind apeluri utile ale subprogramul pr, afişează pe ecran, separate prin câte un spaţiu, doar valorile prime din şirul numerelor obţinute din n, prin eliminarea succesivă a ultimei cifre, apoi a ultimelor două cifre, apoi a ultimelor trei cifre etc., până se obţine un număr de două cifre, ca în exemplu.
Exemplu: pentru n=193124 se obţine şirul de valori 19312,1931, 193, 19. din care se
vor afişa pe ecran doar valorile 1931 193 19.

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

int main()
{int n,p,k;
cin>>n;
p=n/10;
while(p>9)
{if(pr(p)==1)
    cout<<p<<" ";
p=p/10;}
}
4. Considerăm definite subprogramele:
- pr, care primeşte prin intermediul parametrului x un număr natural cu cel mult 4 cifre şi
returnează 1 dacă numărul este prim şi 0 în caz contrar;
- sdiv care primeşte prin intermediul parametrului y un număr natural cu cel mult 4 cifre
şi returnează suma tuturor divizorilor numărului y.
a) Scrieţi numai antetul subprogramelor pr şi sdiv.
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (n<1000) şi
care afişează pe ecran toate numerele mai mici decât n cu proprietatea că suma divizorilor
lor este număr prim. Se vor utiliza apeluri utile ale subprogramelor pr şi sdiv.
Exemplu: dacă n=20, atunci programul va afişa: 2 4 9 16

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

int sdiv(int y)
{int d,s=0;
for(d=1;d<=y;d++)
    if(y%d==0)
        s+=d;
    return s;}

int main()
{int n,p,k;
cin>>n;
for(p=2;p<n;p++)
    if(pr(sdiv(p))==1)
        cout<<p<<" ";
}

5. Folosind subprograme utile sa se rezolve urmatoarele probleme:
a. Să se determine diferenta minima intre un numar dat n si un numar prim.
b. Sa se determine media a k numere dintr-un sir dat, incepand cu pozitia poz.
c. Sa se permute circular la stanga cu o pozitie numerele dintr-un vector.
d. Sa se determine valoarea minima si cea maxima din sir si media aritmetica a celorlalte elemente.
e. Sa se elimine elementele x[i], x[i+1], …,  x[j] dintr-un sir citit.
int pr(int a)
{int d,ok=1,i;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;}
int main()
{int n,p,k,a,b;
cin>>n;
a=n-1;b=n+1;
while(pr(a)==0 && pr(b)==0)
    {a--;b++;}
if(pr(a)==1)
    cout<<"Diferenta minima: "<<n-a;
else cout<<"Diferenta minima: "<<abs(n-b);
}
float medie(int a[],float k, int poz)
{int i,s=0;
for(i=poz;i<poz+k;i++)
    s+=a[i];
return float(s/k);
}

int main()
{int n,a[100],poz,i;
float k;
cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
cout<<"poz/k?"<<endl;
cin>>poz>>k;
cout<<medie(a,k,poz);
}
int maxim(int a[], int n)
{int max=0,i;
for(i=0;i<n;i++)
    if(a[i]>max)
        max=a[i];
    return max;
}

int minim(int a[], int n)
{int min=a[0],i;
for(i=0;i<n;i++)
    if(a[i]<min)
        min=a[i];
    return min;
}
   
int main()
{int n,a[100],poz,i;
float k=0,s=0;
cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
for(i=0;i<n;i++)
    if(a[i]!=minim(a,n) && a[i]!=maxim(a,n))
        {s+=a[i];k++;}
cout<<float(s/k);
}

miercuri, 14 septembrie 2011 by DlMuresan
Categories: , , , , , , | Leave a comment

Leave a Reply