Problemer med en "beregnings" kode??

Tags:    c++

<< < 123 > >>
Hej
Jeg er ny her på siden, så jeg ved ikke rigtig hvordan det hele fungerer, men jeg vil gøre mit bedste for det. Jeg er begyndt at programmere i c++ i min fritid, og derfor løser jeg en masse opgaver for at få det trænet og blive rigtig god.
Jeg er nu gået lidt i stå med denne opgave:

Write a program that prompts the user for the current year and month, the user’ s current age in years and months, and another year and month. It then calculates the age that the user was or will be in the second year and month entered.
The program will produce the following output:

Enter the current year and then press RETURN:
2009
Enter the current month (a number from 1 to 12):
9
Enter your current age in years:
35
Enter the month in which you were born (a number from 1 to 12):
8
Enter the year for which you wish to know your age:
2020
Enter the month in this year:
6

Your age in 6/2020: 45 years and 10 months.

Fold kodeboks ind/udKode 


-Det jeg har problemer med er hvordan den såkaldte "beregning" i c++ ser ud?? Og her mener jeg hvordan man griber en kode an når den selv skal kunne finde alderen???

Og en anden ting jeg også har spekuleret lidt over er om man kan lave den sidste sætning i koden grammatisk korrekt.?? Dvs. hvis alderen bliver 4 years and 3 months, kan man så få programmet til selv at sætte et s ind hvor der er flertal??.. Det kunne egentlig være ret cool hvis man kunne få den til at gøre det.

tak.



29 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Der er sådan set ikke nogen let og elegant måde at gøre det på, så det er rent håndværk...

Man kunne lave en helt enkel, trin for trin løsning:
Beregn hvor mange dage der er fra en arbitrær dato til hver af de to datoer og træk disse to afstande fra hinanden. Den arbitrære dato kunne være 1/1 år 0

I den første udgave kan du bare gå ud fra at der er 30 dage i hver måned og ingen skudår.

Derpå kan du udvide programmet med det rigtige antal dage i månederne og til slut kan du tage højde for skudår.



wow, hvad er en arbitrære dato? Har prøvet at finde noget om det på google, men synes ikke rigtig der står præcis hvad det er.



Det er blot et tilfældig udvalgt dato som du sætter som dit nul-punkt. Datoer inden dette tidspunkt kan have en negativ værdi og datoer efter en positiv værdi.

På mange platforme er 1/1 1970 den arbitrære dato, sikkert fordi der ikke rigtigt var ret mange computere inden den dato.

Arbitrær kan med nogen tilnærmelse oversættes til "tilfældig", men der er oftest et vist skøn involveret så helt tilfældig er det ikke.

1/1 synes at være et godt valg, 29/2 synes at være et dårligt valg.



ahh det gav mere mening. Tror du man kan redde sig ud af opgaven ved blot at ændre på følgende:
Fold kodeboks ind/udKode 


Eller er det rent dovenskab???




Man kan ikke trække måneder fra år. Det er som at trække cm fra meter, og det går jo ikke.
Det letteste er at regne det hele i måneder (hvis det er præcist nok), ca:

Age_another = (Year_another*12 - (Year_current*12 - Month_current - Age_current*12))/12;



men så regner den det hele ud i år, eller den runder vel bare op til antal år. dvs når resultatet fx. skal give 45 years og 10 months, runder den bare op til 46 år.




I C++ runder man altid ned.

Du kan få antal måneder, som resten af divisionen, med % operatoren:
DiffMonths = (Year_another*12 - (Year_current*12 - Month_current - Age_current*12))%12;



Det med at runde ned lyder godt nok spøjst. Er det muligt at man kan bruge "and" i koden så den både viser antal år samt måneder.

Fold kodeboks ind/udKode 


Jeg kan se du har meget erfaring i c++, så hvad synes du om sværhedsgraden i denne opgave. Er det en god opgave at lave når man godt vil lære c++ programmering.



Du kan skrive ud med:
cout << Age_another << " and " << DiffMonths << endl;

Jeg synes egentlig opgaven er udmærket, men måske lidt rigelig svær til det niveau du er på.



Ja jeg synes også selv at opgaven jeg har valgt er svær i forhold til de mange andre opgaver jeg har lavet med fakultet, løkker, while statements osv. Men synes virkelig der er meget teori i opgaven og man dermed kommer meget vidt omkring i c++.

Problemet nu er, at programmet jo ikke giver 45 years og 10 months som output, men i stedet giver: 46 years and 9 måneder. Skyldes det skudår eller de forskellige antal dage i hver måned??? Og kan man få programmet til at forstå, at der er tale om skudår og de forskellige antal månedsdage vha. array???

Fold kodeboks ind/udKode 





<< < 123 > >>
t