Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...

Jante noi shitbox

Trinitas TV 4K
 Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebuii sa vindem imobiliarele...
 Dupa renuntarea la aparat dentar

pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade
 Probleme accesare nr test telefon

Parola la lock screen

Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...
 

[TEMA]Cel mai mare divizor comun a n numere.

- - - - -
  • Please log in to reply
14 replies to this topic

#1
mojonono

mojonono

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 30.05.2014
Se citesc de la tastaturã n numere întregi. Sã se afiºeze, pentru fiecare, cel mai mare divizor comun dintre ele ºi inversul lor.

#include <iostream>
using namespace std;

int main()
{
int n,invers=0,x,r,;
  cout<<"n= ";
  cin>>n;
for(int i=1;i<=n;i++)
{   cout<<"x=";
	 cin>>x;
}
while (x!=0)
{
	   invers=invers*10+x%10;
	   x=x/10;
}
while(invers!=0)
{
		r=x%invers;
		x=invers;
		invers=r;
}
		cout<<"cmmdc este: "<<x;
return 0;
}


Edited by mojonono, 10 February 2016 - 17:17.


#2
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,665
  • Înscris: 29.08.2013
Aşa, unde e buba?

L.E. Pune codul calumea în tagul [ CODE ] şi indentează-l.

Spoiler

for(int i=1; i<=n; i++)
{
	cout << "x=";
	cin >> x;
}


Aici citeşti n numere şi în final reţii doar ultimul citit.

while(invers!=0)
{
	r=x%invers;
	x=invers;
	invers=r;
}


Aici x are valoarea 0.

Edited by sftpdt, 10 February 2016 - 17:11.


#3
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014
Dupa primul while x-ul devine 0. Foloseste alta variabila in al doilea while care sa fie egala cu x-ul tau initial.

Edited by aLexCM, 10 February 2016 - 17:14.


#4
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Si unde e vectorul care inmagazineaza valorile introduce de la tastatura? Apoi, pentru fiecare valoare a vectorului trebuie sa gasesti cmmdc si sa-l afisezi. Asadar ai nevoie de o parcurgere a vectorului (care se face intr-o bucla for).

Asa cum e acum, doar ultima valoare este luata in calcul (ca se rescrie peste celelalte introduce anterior).

#5
mojonono

mojonono

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 30.05.2014

View PostaLexCM, on 10 februarie 2016 - 17:14, said:

Dupa primul while x-ul devine 0. Foloseste alta variabila in al doilea while care sa fie egala cu x-ul tau initial.

Am incercat asa

#include <iostream>
using namespace std;

int main()
{int n,invers=0,x,r,y;
cout<<"n= ";
cin>>n;

for(int i=1;i<=n;i++)
{ cout<<"x=";
cin>>x;
}

while (x!=0)
{
	 invers=invers*10+x%10;
	 x=x/10;
}

y=x;
while(invers!=0)
{
	 r=y%invers;
	 y=invers;
	 invers=r;
}
	 cout<<"cmmdc este: "<<y;
return 0;
}



#6
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014
Pune-l inainte de primul while. Problema e ca tu ai un singur numar acolo. Foloseste un vector.

#7
mojonono

mojonono

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 30.05.2014

View PostaLexCM, on 10 februarie 2016 - 17:25, said:

Pune-l inainte de primul while. Problema e ca tu ai un singur numar acolo. Foloseste un vector.

Stiu ca nu e corect,dar nu stiu cum sa afisez la final,si nici cum sa fac cmmdc pentru fiecare numar.

#include <iostream>
using namespace std;

int main()
{
int n,i,a[20],invers,r;
cout<<"n=";
cin>>n;

for(i=1;i<=n;i++)
{
	 cout<<"a["<<i<<"]=";
	 cin>>a[i];
}
while (a[i]!=0)
{
	 invers=invers*10+a[i]%10;
	 a[i]=a[i]/10;
}

while(invers>0)
{
	 r=a[i]%invers;
	 a[i]=invers;
	 invers=r;
}

for(i=0;i<n;i++)
cout<<"Cmmdc este"<<a[i];
return 0;
}




#8
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Trebuie sa parcurgi vectorul de fiecare data cand vrei sa lucrezi cu elementele acestuia.

#9
mojonono

mojonono

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 30.05.2014

View Postjegmihai, on 10 februarie 2016 - 17:51, said:

Trebuie sa parcurgi vectorul de fiecare data cand vrei sa lucrezi cu elementele acestuia.

Ok,si de exemplu,daca vreau sa calculez inversul a n numere,cum trebuie sa afisez la final?
Am incercat asa dar imi afiseaza inversul ca fiind 0.

#include <iostream>
using namespace std;

int main()
{
int n,i,a[20],invers,r;
cout<<"n=";cin>>n;

for(i=1;i<=n;i++)
{
	 cout<<"a["<<i<<"]=";
	 cin>>a[i];
}

for(i=0;i<n;i++)
while (a[i]!=0)
{
	 invers=invers*10+a[i]%10;
	 a[i]=a[i]/10;
}

for(i=0;i<n;i++)
cout<<"Inversul este "<<a[i];
return 0;
}



#10
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014
Iti afiseaza 0 deoarece tu acolo afisezi numerele din vector, numere care iau valoarea 0 dupa ce trec prin while-ul ala.

Parcurge vectorul. Copiaza fiecare element din vector intr-o alta variabila, invers-ului ii dai valoarea zero si-l bagi la inceputul parcurgerii si apoi pui cele doua while-uri ale tale. La final afisezi cmmdc.

#11
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Cand citesti vectorul de ce pleci de la 1 si cand il parcurgi pleci de la 0 ?

Uite, asa s-ar face problema ta pentru 2 numere. Incearca sa o faci cu vector acum :

#include <iostream>
using namespace std;

int cmmdc(int a, int B)
{
	int b1=b,a1=a;
	while(a1!=b1)
		if(a1>b1)
			a1=a1-b1;
		else
			b1=b1-a1;
	return a1;
}
int invers(int a)
{
	int a1=a, inv=0;
	while(a1!=0)
	{
		inv=inv*10 + a1%10;
		a1=a1/10;
	}
	return inv;
}
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<cmmdc(a,B)<<endl;
	cout<<invers(B);
	return 0;
}


Am facut copie pentru variabile ca poate o sa intelegi cum va trebui sa faci si tu.

#12
mojonono

mojonono

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 30.05.2014

View Postjegmihai, on 10 februarie 2016 - 18:09, said:

Cand citesti vectorul de ce pleci de la 1 si cand il parcurgi pleci de la 0 ?

Uite, asa s-ar face problema ta pentru 2 numere. Incearca sa o faci cu vector acum :

#include <iostream>
using namespace std;

int cmmdc(int a, int B)
{
int b1=b,a1=a;
while(a1!=b1)
	 if(a1>b1)
		 a1=a1-b1;
	 else
		 b1=b1-a1;
return a1;
}
int invers(int a)
{
int a1=a, inv=0;
while(a1!=0)
{
	 inv=inv*10 + a1%10;
	 a1=a1/10;
}
return inv;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<cmmdc(a,B)<<endl;
cout<<invers(B);
return 0;
}


Am facut copie pentru variabile ca poate o sa intelegi cum va trebui sa faci si tu.

Ok,dar eu trebuie sa calculez cmmdc dintre numar si inversul lui
Ex: Pentru 234, inversul este 432, iar c.m.m.d.c. (234, 432)=18

#13
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Se pare ca am inteles cerinta gresit, scuze. In cazul asta problema ta devine si mai usoara.

#14
mojonono

mojonono

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 30.05.2014

View PostaLexCM, on 10 februarie 2016 - 18:04, said:

Iti afiseaza 0 deoarece tu acolo afisezi numerele din vector, numere care iau valoarea 0 dupa ce trec prin while-ul ala.

Parcurge vectorul. Copiaza fiecare element din vector intr-o alta variabila, invers-ului ii dai valoarea zero si-l bagi la inceputul parcurgerii si apoi pui cele doua while-uri ale tale. La final afisezi cmmdc.

Cum pot sa copiez fiecare element in alta variabila?

#15
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
for(i=1;i<=n;i++ ) {
cin>>x;
si dupa afli inversu , faci cmmdc si la final resetezi ( reinitializezi cu 0 ) variabila inv , pentru ca vine urmatorul x ( numar ) din for

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate