Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Ani bisecti  (Citit de 10092 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Thenewbie
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 7



Vezi Profilul
« : Noiembrie 24, 2011, 20:31:46 »

Sunt clasa a 9-a si sunt incepator la informatica. Am o tema pe care nu o pot rezolva ma puteti ajuta ?

Cerinta:O problema importanta in astrologie este determinarea anilor bisecti. Un an se considera "bisect" daca este multiplu de 4, dar nu este multiplu de 100. Dintre anii eliminati conform acestui criteriu sunt considerati "bisecti" cei care sunt multipli de 400. Scrieti un program care determina si afiseaza toti anii bisecti intre an1 si an2.

Date de intrare: De la tastatura se vor citi valorile an1 si an2
Date de iesire: Se vor afisa anii bisecti din intervalul [an1;an2], separati prin cate un spatiu.
Restrictii si Precizari: 1600<=an1,an2<=2200

Exemplu:
Intrare: an1=1990 an2=2005
Iesire: 1992 1996 2000 2004
Explicatie: 1992, 1996 si 2004 sunt multipli de 4 si nu sunt multiplii de 100, iar 2000 este multiplu de 400.

Am facut un algoritm, dar nu stiu unde am gresit fiindca dupa ce pornesc programul si introduc an1 si an2, programul se termina si nu imi afisaza anii. Imi puteti arata cum se face corect si eventual sa imi spuneti si unde am gresit ? (folosesc MinGW Developer Studio )

Cod:
#include<iostream>
using namespace std;
int an1,an2;
int main()
{
cout<<"an1=";
cin>>an1;
cout<<"an2=";
cin>>an2;
    while(an2!=an1)
an2--;
if(((an2%4==0)&&(an2%100!=0))||(an2%400==0))
cout<<an2<<" ";
return 0;
}
Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #1 : Noiembrie 24, 2011, 21:03:47 »

Programul tau se termina fiindca la while nu ai pus acolade sa cuprinzi tot blocul de instructiuni pe care ti-l doreai,practic tu in while faceai numai an2--

Deci corect cu acolade ar fi asa:
Cod:
#include<iostream>
using namespace std;
int an1,an2;
int main()
{
cout<<"an1=";
cin>>an1;
cout<<"an2=";
cin>>an2;
    while(an2!=an1)
{
an2--;
if(((an2%4==0)&&(an2%100!=0))||(an2%400==0))
cout<<an2<<" ";
}
return 0;
}

Merge bine (chiar daca se poate mai eficient de atat),doar ca astfel anii vor fi afisati in ordine descrescatoare. Mergand tot pe ideea ta,ca sa nu o schimb,ca sa ai anii in ordine crescatoare porneste de la an1 catre an2 :

Cod:
#include<iostream>
using namespace std;
int an1,an2;
int main()
{
cout<<"an1=";
cin>>an1;
cout<<"an2=";
cin>>an2;
    while(an1!=an2)
{
an1++;
if(((an1%4==0)&&(an1%100!=0))||(an1%400==0))
cout<<an1<<" ";
}
return 0;
}

Si ca ultima observatie,daca am inteles bine din enunt,inclusiv anul an1 sau anul an2 poate fi bisect,deci la varianta de mai sus de exemplu,intrucat si an1 ar putea fi bisect iar tu sari peste el,inainte de while ar trebui sa mai pui asta:
Cod:
if(((an1%4==0)&&(an1%100!=0))||(an1%400==0))
cout<<an1<<" ";

Sper ca ai inteles  Thumb up
Memorat
Thenewbie
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 7



Vezi Profilul
« Răspunde #2 : Noiembrie 25, 2011, 19:21:24 »

Mersi mult, am inteles Very Happy
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines