» Utilizator
LAMP
» Parteneri» De citit» Recomandari» Taskuri securitate » Statistici
  • 64782 de mesaje.
  • 7635 de topicuri.
  • 1081 de utilizatori.
  •  
  • purcelllefevreo e ultimul utilizator inregistrat.
[Detalii]

 

| |
Pagini: [1]
Print

[Bacalaureat][C]functii si divizori primi [1022 afisari]

Archangel
*


Mesaje: 1392
OfflineOffline

WWW

Varianta 4 / Problema 2
Quote
realizati urmatoarele cerinte utilizand limajul Pascal/C/C++:
a) Scrieti definitia completa a unei functii produs cu un parametru, functie care:
* primeste prin intermediul parametrului a un numar natural cu cel mult 8 cifre (a>1)
* returneaza produsul divizorilor primi ai valorii parametrului a

De exemplu, pentru valoarea 300 a parametrului a, functia va returna valoarea 30 deoarece a=2*2*3*5*5 si 2*3*5=30

b) Scrieti programul in care se citesc de la tastatura numerele naturale nenule a, b si c de cel mult 8 cifre fiecare (a>1, b>1, c>1) si in care se verifica daca numerele citite au exact aceiasi factori in descompunerea lor in factori primi, folosind apeluri ale programului produs. Daca cele trei numere au exact aceiasi factori (exponentii lor putand sa difere), programul va afisa pe ecran mesajul DA, in caz contrar va afisa mesajul NU.

De exemplu, daca a=300, b=1500 si c=30, atunci se va afisa mesajul DA, iar pentru numerele a=300, b=700 si c=140, se va afisa mesajul NU.
Logged

Archangel on deviantART | Archangel on Flickr |
"Daca voi nu ma vreti, eu va vreu!"
27-02-2008, 22:03 Twitt ::
boogey69
*


Mesaje: 56
OfflineOffline


Varianta 4 / Problema 2 - Rezolvare:
Code:
#include<iostream.h>
#include<conio.h>

unsigned long int produs(unsigned long int n)
{
unsigned long int p=1, div=2;
while(n!=1)
    {
    if(n%div==0)
{
p=p*div;
while(n%div==0) n=n/div;
        }
    div++;
    }
return p;
}

void main()
{

long int a,b,c;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
if (produs(a)==produs(b) && produs (b)==produs(c) && produs(a)==produs(c))
cout<<"DA";
else cout<<"NU";

}
Logged
28-02-2008, 09:48 Twitt ::
Archangel
*


Mesaje: 1392
OfflineOffline

WWW

nu-mi iese functia Straight face
Code:
#include<iostream.h>
int produs(long int a)
{
int i,k,p,f;
p=1; f=1;
for(i=2;i<=a;i++)
if(a%i==0)
{    for(k=2;k<=i;k++)
if(i%k==0) f=0;
if(f==1) p=p*i;}


return p;
}
void main()
{
long int a;
cout<<"dati nr "<<endl;
cin>>a;
cout<<endl<<produs(a);
}
divizorii ii calculeaza bine, dar testul de numar prim nu am idee de ce nu merge Broken heart
Logged

Archangel on deviantART | Archangel on Flickr |
"Daca voi nu ma vreti, eu va vreu!"
02-03-2008, 18:05 Twitt ::
boogey69
*


Mesaje: 56
OfflineOffline


Problema ta este la
Code:
for(k=2;k<=i;k++)   if(i%k==0)   f=0;
Tu vrei sa verifici daca un numar este prim prin impartirea lui cu toate numerele de la 2 pana la radical din numar (sau hai, jumatate din numar, sa nu folosesti math.h) , nu pana la numar, pentru ca daca faci asa, nu vei gasi nici un numar prim Winking
Logged
02-03-2008, 19:16 Twitt ::
Archangel
*


Mesaje: 1392
OfflineOffline

WWW

prima data cand am invatat sa fac test de numar prim, am facut cu i-ul pana la numar si mergea... am incercat acum sa pun pana la jumatatea numarului si s-a schimbat ceva, dar la unele numere tot nu merge, de exemplu pentru 6 imi afiseaza 6, dar pentru 20 imi afiseaza 2
Logged

Archangel on deviantART | Archangel on Flickr |
"Daca voi nu ma vreti, eu va vreu!"
02-03-2008, 19:30 Twitt ::
boogey69
*


Mesaje: 56
OfflineOffline


De asemenea, trebuie sa initializezi f=1 pentru fiecare numar pe care il verifici sa fie prim... deci functia trebuie sa arate asa:
Code:
int produs(long int a)
{
int i,k,p,f;
p=1;

for(i=2;i<=a;i++)
    if(a%i==0)
    {f=1;
    for(k=2;k<=sqrt(i);k++)
            if(i%k==0) f=0;
    if(f==1) p=p*i;}

return p;
}
Logged
02-03-2008, 19:46 Twitt ::
Archangel
*


Mesaje: 1392
OfflineOffline

WWW

asta era problema! mama ce nervi mi-am facut ... multumesc, m-ai luminat Laughing o sa revin si cu restul programului
Logged

Archangel on deviantART | Archangel on Flickr |
"Daca voi nu ma vreti, eu va vreu!"
02-03-2008, 20:07 Twitt ::
Archangel
*


Mesaje: 1392
OfflineOffline

WWW

in sfarsit si programul, care n-a fost deloc greu
Code:
#include<iostream.h>
int produs(long int a)
{
int i,k,p,f;
p=1;
for(i=2;i<=a;i++)
{f=1; if(a%i==0)
{     for(k=2;k<=i/2;k++)
if(i%k==0) f=0;
if(f==1) p=p*i;}}
return p;
}

void main()
{
long int a,b,c;
cout<<"a= "; cin>>a;
cout<<endl<<"b="; cin>>b;
cout<<endl<<"c="; cin>>c;

if(produs(a)==produs(b) && produs(a)==produs(c))
cout<<"DA";
else
cout<<"NU";
}
Logged

Archangel on deviantART | Archangel on Flickr |
"Daca voi nu ma vreti, eu va vreu!"
03-03-2008, 17:55 Twitt ::
Pagini: [1]
Print
SkullBox Forum  |  Development  |  Programe facute de userii forumului  |  Topic: [Bacalaureat][C]functii si divizori primi