Tot C++

Rezolvarea problemelor de matematica prin realizarea unor programe.
mara_silvioara
junior
junior
Mesaje: 105
Membru din: 13 Ian 2008, 22:03

Tot C++

Mesaj de mara_silvioara » 22 Oct 2010, 23:27

1)Se citeste x numar intreg. Care este suma de factori primi?
2)Se citeste x numar intreg. Care este suma divizorilor primi?
3)Se citeste x numar intreg. Care este cel mai mic numar cu cifrele sale?


Scuzati-ma daca sunt prea multe insa am aceste exercitii si nu stiu sa le fac deoarece nu am mai facut informatica pana acum :cry:

Avatar utilizator
larry91
utilizator
utilizator
Mesaje: 49
Membru din: 16 Sep 2009, 20:33

Mesaj de larry91 » 23 Oct 2010, 20:06

1 si 2 se refera la suma factorilor primi ai numarului x respectiv suma divizorilor primi ai numarului x?

3) Se retin cifrele numarului intr-un vector si apoi se sroteaza crescator:

Cod: Selectaţi tot

#include <iostream>
#include <cmath> // Numai pentru prima metoda

using namespace std;

int x, cf=0; // numarul citit, numarul de cifre ale nr
int nr&#91;100&#93;; // maximum 100 de cf

int main&#40;&#41;
&#123;
    cin>>x;
    while&#40;x&#41;
    &#123;
        nr&#91;++cf&#93; = x%10;
        x /= 10;
    &#125;

    // Bubble Sort - cea mai simpla sortare existenta, dar si cea mai slaba
    for&#40;int i=1;i<=cf-1;i++&#41;
        for&#40;int j=i+1;j<=cf;j++&#41;
            if&#40;nr&#91;i&#93;>nr&#91;j&#93;&#41;
            &#123;
                int tmp = nr&#91;i&#93;;
                nr&#91;i&#93; = nr&#91;j&#93;;
                nr&#91;j&#93; = tmp;
            &#125;
    
    // Se poate afisa vectorul sau se poate forma un numar cu valorile vectorului
    // Met I - formarea numarului.
    int n = 0;
    for&#40;int i=cf;i>0;i--&#41; n += nr&#91;i&#93; * pow&#40;10, cf-i&#41;;
    cout<<n<<endl;

    // Met II - afisarea vectorului
    for&#40;int i=1;i<=cf;i++&#41; cout<<nr&#91;i&#93;;cout<<endl;

    return 0;
&#125;
In cazul in care observi ca nu merge ceva sa ma anunti pentru ca nu am testat programul!
Ultima oară modificat 30 Oct 2010, 18:06 de către larry91, modificat 1 dată în total.

mara_silvioara
junior
junior
Mesaje: 105
Membru din: 13 Ian 2008, 22:03

Mesaj de mara_silvioara » 25 Oct 2010, 20:59

Asa am sa fac :D . Cat despre 1 si 2 sunt 2 programe diferite. Acelea sunt cerintele. :?

Avatar utilizator
larry91
utilizator
utilizator
Mesaje: 49
Membru din: 16 Sep 2009, 20:33

Mesaj de larry91 » 29 Oct 2010, 15:23

Sa presupunem ca se refera la suma fact primi ai nr x.

1) si 2)

Cod: Selectaţi tot

#include <iostream>
#include <cmath>

using namespace std;

int x;
int fp&#91;2&#93;&#91;100&#93;;
int nr_f=0;
int sum = 0;

int main&#40;&#41;
&#123;
	cin>>x;
	for&#40;int i=2;i<=x;i++&#41;
	&#123;
		for&#40;int j=0;!&#40;x%i&#41;;j++, x/=i&#41;;
		if&#40;j&#41; fp&#91;0&#93;&#91;nr_f&#93; = i, fp&#91;1&#93;&#91;nr_f++&#93; = j;
	&#125;

	for&#40;i=0;i<nr_f;i++&#41; sum+=fp&#91;0&#93;&#91;i&#93;; // Suma fara exponent - suma div primi &#40;1&#41;
	cout<<sum<<endl;

	sum = 0;
	for&#40;i=0;i<nr_f;i++&#41; sum+=pow&#40;fp&#91;0&#93;&#91;i&#93;, fp&#91;1&#93;&#91;i&#93;&#41;; // Suma fact cu exp &#40;2&#41;
	cout<<sum<<endl;
   return 0;
&#125;
Algoritmul poate fi optimizat, dar cred ca nu ai nevoie neaparat de un alg optim! Daca da, atunci imi spui, iar daca nu intelegi ceva, la fel lasi un reply! Success!

mara_silvioara
junior
junior
Mesaje: 105
Membru din: 13 Ian 2008, 22:03

Mesaj de mara_silvioara » 31 Oct 2010, 20:46

Multumesc mult ca ma ajuti :D
Cat despre exercitii ni s-a cerut sa fie un algoritm optim, sa mearga cu numere negative, n=0, n=1 si n=2 pt exercitiu 1 si pt exercitiul 2 tot asa, sa se includa si cazurile particulare.

Avatar utilizator
larry91
utilizator
utilizator
Mesaje: 49
Membru din: 16 Sep 2009, 20:33

Mesaj de larry91 » 07 Noi 2010, 15:18

Am optimizat programul si l-am pus aici, cat despre numere negative nu imi dau seama ce vrei sa faca programul! Fii mai explicita! :D

Cod: Selectaţi tot

#include <iostream>
#include <cmath>
#include <conio.h>

int x;
int fp&#91;2&#93;&#91;100&#93;;
int nr_f=0;
int sum = 0;

using namespace std;

int main&#40;&#41;
&#123;
	clrscr&#40;&#41;;
	cin>>x;
	for&#40;int i=2;x>1;i++&#41;
	&#123;
		for&#40;int j=0, s=1;!&#40;x%i&#41;;x/=i, j++, s*=i&#41;;
		if&#40;j&#41; cout<<i<<" la "<<j<<endl, fp&#91;0&#93;&#91;nr_f&#93; = i, fp&#91;1&#93;&#91;nr_f++&#93; = j;
		if&#40;j&#41; sum+=s;
	&#125;

	//for&#40;i=0;i<nr_f;i++&#41; sum+=pow&#40;fp&#91;0&#93;&#91;i&#93;, fp&#91;1&#93;&#91;i&#93;&#41;; // Suma fact cu exp
	cout<<sum<<endl;
	sum = 0;
	for&#40;i=0;i<nr_f;i++&#41; sum+=fp&#91;0&#93;&#91;i&#93;; // Suma fara exponent
	cout<<sum<<endl;
   return 0;
&#125;

mara_silvioara
junior
junior
Mesaje: 105
Membru din: 13 Ian 2008, 22:03

Mesaj de mara_silvioara » 08 Noi 2010, 20:34

Multumesc :D , cat despre numerele negative....Ni s-a cerut ca programul sa mearga si cu numere negative.

mara_silvioara
junior
junior
Mesaje: 105
Membru din: 13 Ian 2008, 22:03

Mesaj de mara_silvioara » 08 Noi 2010, 20:44

Multumesc :D , cat despre numerele negative....Ni s-a cerut ca programul sa mearga si cu numere negative.

Scrie răspuns