Welcome, Guest. Please login or register.

Autor Subiect: cmmdc  (Citit de 6118 ori)

0 Membri şi 1 Vizitator vizualizează acest subiect.

Offline foton01

  • Experimentat
  • ***
  • Mesaje postate: 588
  • Popularitate: +1/-7
cmmdc
« : Ianuarie 15, 2011, 04:02:21 p.m. »
Salut!
Am facut programul:

#include <iostream.h>
int main()
{int a,b,r;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
if(a>b)
{r=a;
a=b;
b=r;}
while(a!=0)
{r=a%b;
a=b;
b=r;}
cout<<a;}


Imediat dupa ce introduc valorile (a;b) programul se intrerupe. Ma puteti ajuta va rog frumos?
Mesajul ce apare imediat dupa intrerupere spune " daca esti in mijlocul a ceva, informatiile cu care lucrezi au fost pierdute".

Multumesc!

Offline Adi

  • Global Moderator
  • *****
  • Mesaje postate: 11301
  • Popularitate: +15/-7
    • Site personal Adrian Buzatu
Re: cmmdc
« Răspuns #1 : Ianuarie 15, 2011, 05:58:13 p.m. »
Fiind un "int main", ar trebui sa inchei cu return 0, nu?

De ce ai pus titlul "cmmdc"? Trebuie sa pui titluri sugestive, complete, care sa ajute oamenii sa gaseasca pe google acest post.

Update: am rulat programul si imi zice asa:
<nbay03.fnal.gov> ./a.out
a=3
b=3
Floating exception

Tie ce mesaj iti da? Poate aia trebuie sa faca programul, sa se intrerupa, in sensul ca a ajuns la final in mod corect. Tu ce vrei sa faca programul tau? Dupa cum vezi, tu ai zis ca daca a e mai mare ca b sa faca ceva, dar daca a e egal cu b sau a mai mic decat b sa nu faca nimic.

Apoi acel while cred ca trebuie sa fie un if.
« Ultima Modificare: Ianuarie 15, 2011, 06:04:51 p.m. de Adi »
Pagina personala: http://adrianbuzatu.ro

Offline Quantum

  • Junior
  • **
  • Mesaje postate: 164
  • Popularitate: +6/-3
Re: cmmdc
« Răspuns #2 : Ianuarie 15, 2011, 09:46:31 p.m. »
Banuiesc ca cmmdc este cel mai mare divizor comun. Atunci programul ar arata ceva de genul asta:
#include <iostream>
using namespace std;
int a=0,b=0;

int main()

     cout<<"a=";
     cin>>a;
     cout<<"b=";
     cin>>b;
  while (a != b) {
    if (a > b)
      a -= b;
    else
      b -= a;
  }
         cout<<"\ncel mai mare divizor comun=";
         cout<<a;     

         cin>>a; //asteapta pt. a vedea rezultatul 
     return 0;
}

Offline Adi

  • Global Moderator
  • *****
  • Mesaje postate: 11301
  • Popularitate: +15/-7
    • Site personal Adrian Buzatu
Re: cmmdc
« Răspuns #3 : Ianuarie 15, 2011, 09:47:47 p.m. »
Ah, cel mai mare divizor comun, acum inteleg de ce acel while ...
Pagina personala: http://adrianbuzatu.ro

Offline b12mihai

  • Senior
  • ****
  • Mesaje postate: 1124
  • Popularitate: +2/-0
Re: cmmdc
« Răspuns #4 : Ianuarie 16, 2011, 03:44:21 p.m. »
Salut!
Am facut programul:

#include <iostream.h>
int main()
{int a,b,r;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
if(a>b)
{r=a;
a=b;
b=r;}
while(a!=0)
{r=a%b;
a=b;
b=r;}
cout<<a;}


Imediat dupa ce introduc valorile (a;b) programul se intrerupe. Ma puteti ajuta va rog frumos?
Mesajul ce apare imediat dupa intrerupere spune " daca esti in mijlocul a ceva, informatiile cu care lucrezi au fost pierdute".

Multumesc!

Salut. Banuiesc ca esti clasa a noua si asa ceva va invata la informatica. Ai idee ce limbaj "va spune" ca va invata? Pentru ca nu prea e C++, desi ei spun ca e C++...V-a invatat si de do .. while "statement"? (Vezi aici la the do while loop: http://cplusplus.com/doc/tutorial/control/)

Ceea ce iti trebuie tie este algoritmul lui Euclid, si iata o varianta corecta a lui (in C - inlocuiesti tu scanf - citirea, cu cin si afisarea - printf - cu cout, am incredere ca esti destept, la fel directivele de preprocesare #include - cu ce iti trebuie):


#include<stdio.h>
#include<conio.h> /* foloseste asta daca esti in DEV sau Borland si vrei sa vezi rezultatul cum trebuie, vei avea nevoie de functia getch(); */
int main()
{
int a,b,r;
scanf("%d%d", &a, &b);
do { r=a%b;
       a=b;
       b=r; } while(r!=0);
printf("%d \n", a);

getch(); /* prototipul functiei getch(); se afla in conio.h */
return 0;
}

Sau mai exista algoritmul prin scaderi repetate, pe care ti l-a prezentat Qunatum mai sus.

Tu ai folosit algoritmul lui Euclid si problema ta era ca trebuia sa initializezi pe r cu o valoare (tu doar faci o interschimbare pe acolo, care e complet inutila si aiurea, mai exact liniile de cod citate mai jos) pentru ca sa iti intre in bucla while. Eu am folosit do while pentru a nu fi nevoie sa il initializez pe r, tocmai pentru ca am nevoie sa il calculez inainte de a intra cumva in bucla:

Citat
if(a>b)
{r=a;
a=b;
b=r;}

Sper ca au fost clare explicatiile, desi s-ar putea sa fi fost un pic prea "stiintific" pentru clasa a noua.

Ca si compilator, folosesti cumva DEV CPP? E foarte bun pentru lucrul sub Windows, dupa parerea mea. Evita Borland sau TurboC/TurboC++ ...
Fiecare are scopul lui in lumea asta nebuna.

laurentiu

  • Vizitator
Re: cmmdc
« Răspuns #5 : Ianuarie 19, 2011, 12:20:07 a.m. »
Da si eu i-as recomanda sa-si instaleze Linux ca sistem de operare si sa foloseasca compilatorul gcc:D
Am glumit!:))