IT şi electronică > Software

cmmdc

(1/2) > >>

foton01:
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!

Adi:
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:

--- Cod: ---<nbay03.fnal.gov> ./a.out
a=3
b=3
Floating exception

--- Terminare cod ---

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.

Quantum:
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;
}

Adi:
Ah, cel mai mare divizor comun, acum inteleg de ce acel while ...

b12mihai:

--- Citat din: 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!

--- Terminare citat ---

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):


--- Cod: ---
#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;
}

--- Terminare cod ---

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;}
--- Terminare citat ---

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++ ...

Navigare

[0] Indexul de Mesaje

[#] Pagina următoare

Du-te la versiunea completă