Forumul Scientia

IT şi electronică => Software => Subiect creat de: foton01 din Ianuarie 15, 2011, 04:02:21 p.m.

Titlu: cmmdc
Scris de: foton01 din 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!
Titlu: Re: cmmdc
Scris de: Adi din 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.
Titlu: Re: cmmdc
Scris de: Quantum din 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;
}
Titlu: Re: cmmdc
Scris de: Adi din Ianuarie 15, 2011, 09:47:47 p.m.
Ah, cel mai mare divizor comun, acum inteleg de ce acel while ...
Titlu: Re: cmmdc
Scris de: b12mihai din 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++ ...
Titlu: Re: cmmdc
Scris de: laurentiu din 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!:))