Orar semigroup #2

Orar semigroup #2

12 ianuarie - Fisa de lucru 3

1. Sa se scrie un subprogram care returneaza cel mai mare divizor comun a doua numere naturale.

            A  Sa se determine cmmdc pt n valori memorate intr-un  tablou.
B  Pentru n valori citite sa se determine perechile de numere prime intre ele
#include<iostream>
#include<math.h>
using namespace std;
int cmmdc(int a, int b)
{int c;
while(b)
{c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{int a[100],c[100],i,j=0,k,r=0,p,n;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
for(i=0;i<n;i++)
    for(r=i+1;r<n;r++)
{    c[j]=cmmdc(a[i],a[r]);
    j++;
}
p=c[0];
for(k=0;k<j;k++)
    if(c[k]<p)p=c[k];
cout<<endl<<"CMMDC "<<p;
cout<<endl<<endl<<"Prime intre ele"<<endl<<endl;
for(i=0;i<n;i++)
    for(r=i+1;r<n;r++)
        if(cmmdc(a[i],a[r])==1)
            cout<<a[i]<<";"<<a[r]<<endl;
}
2. Scrieţi o funcţie găseşte_cifra care returnează valoarea cifrei aflate pe poziţia k în  numărul n, începând de la dreapta (n şi k vor fi argumentele funcţiei).
#include<iostream>
#include<math.h>
using namespace std;
int find_za_number(int n, int k)
{int i=1;
while(n!=0 && i!=k)
{    n=n/10;
i++;}
if(n!=0)
    return n%10;
else return 10;
}
int main()
{int n,k;
cout<<"n=";cin>>n;
cout<<"k=";cin>>k;
if(find_za_number(n,k)<10)cout<<find_za_number(n,k);
else cout<<"Nu fii jmecher si nu da un k mai mare decat numaru de cifre ale numarului"<<endl;
}
3. Sa se afiseze  numere toate numerele prime din intervalul [a,b]. Se va folosi o functie care verifica daca un numar este prim. 
#include<iostream>
#include<math.h>
using namespace std;
int prim(int n)
{int d,ok=1;
for(d=2;d<=n/2;d++)
    if(n%d==0)
        ok=0;
if(ok==1)
    return ok;
else return 0;
}
int main()
{int a,b,n;
cin>>a>>b;
while(a>b)
{    cout<<"Nu fi jmecher si nu da inceputul de interval mai mic decat sfarsitul,ok?. Citeste din nou"<<endl;
cin>>a>>b;
}
while(a==1)
{cout<<"Nu fi jmecher, stii bine ca numerele prime incep de la 2,ok?. Citeste din nou"<<endl;
cin>>a>>b;}
for(n=a;n<=b;n++)
    if(prim(n)==1)
        cout<<n<<";";
}
4. Numerele 220 si 284 sunt numere prietene deoarece:
220=1+2+3+5+10+11+20+22+44+55+110=284 si
284=1+2+3+71+142=220
            Sa se genereze primele n perechi de numere prietene.
#include<iostream>
using namespace std;
int suma(int a){
int s=0,i;
for(i=1;i<=a/2;i++)
if(a%i==0)
s=s+i;
return s;
}
void prietene(int n)
{int k=0,x=2,s;

while(k<n)
{s=suma(x);
if(s<x){x++;
continue;}
if(suma(s)==x){cout<<s<<" "<<x<<endl;
k++;}
x++;}
}
int main()
{int n;
cin>>n;
prietene(n);
return 0;
}
5. Numerele triangulare se calculeaza ca suma a primelor numere naturale. Exemplu: 10 este un numar triangular: 10=1+2+3+4. Sa se genereze primele n numere triangulare. Ex pt n=4 se vor genera 1,3,6,10.
#include<iostream>
using namespace std;
void trian(int nr)
{int n,i,s,j,k,p,r;
j=0;
while(j<nr)
{    for(n=1;n<INT_MAX;n++)
        {s=0;
        for(i=1;i<=n;i++)
            {s=s+i;
             if(s>=n)
                 break;
            }
        if(s==n)
            {cout<<n<<";";
            j++;}
        if(j>=nr)
            break;
        }
}
}

int main()
{int n;
cin>>n;
trian(n);
}
6. Un numar care este divizibil cu suma cifrelor lui, este numar Niven. Verificati care dintre numerele citite dintr-un fisier text sunt numere Niven.
#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;
int niven(int n)
{int s=0,nr;
nr=n;
while(nr)
{    s=s+nr%10;
    nr=nr/10;
}
if(n%s==0)
    return 1;
else return 0;
}
int main()
{int n;
ifstream f("date.in");
while(f>>n)
    if(niven(n)==1)
        cout<<n<<";";
}

joi, 13 ianuarie 2011 by DlMuresan
Categories: , , , , , , | Leave a comment

Leave a Reply