source: liacs/pm/backup/opdracht1.cc@ 291

Last change on this file since 291 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

  • Property svn:executable set to *
File size: 12.2 KB
RevLine 
[2]1// datum.cc
2// Asking questions about date-of-birth
3// Author Pascal Vos Rick van der Zwet
4
5#include <iostream>
6#include <time.h>
7
8using namespace std;
9
10struct Datum {int Jaar, Maand, Dag, Weekdag;};
11
12//Toelatingsberekeing
13
14//ACTIE: Print logo op het scherm
15void Logo() {
16 cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl
17 << "+ +" << endl
18 << "+ University of Leiden +" << endl
19 << "+ Programeermethoden 1 +" << endl
20 << "+ Programeeropdracht Beta-Test +" << endl
21 << "+ +" << endl
22 << "+ ---FREE TO USE--- +" << endl
23 << "+ +" << endl
24 << "+ \\\\ _ -- _.d888888b._ +" << endl
25 << "+ `/\\ - _o8P^' `^?8o_ +" << endl
26 << "+ `/\\ - - .8P' `?8. +" << endl
27 << "+ `/\\ dP' -,d8888888, `?b +" << endl
28 << "+ \\ `/\\ - dP' -,8P' `?8 `?b +" << endl
29 << "+ \\ _- `/\\ _.--. dP' -,8' `?b +" << endl
30 << "+ \\ _- `/`-..--\\ ) d8' ,8' `8b +" << endl
31 << "+ \\ \\ _- `,',' / ,')88 -88 88 +" << endl
32 << "+ `-_ - ` -- ~ ,',' 88 88 88 +" << endl
33 << "+ \\ `- ,',' 88 - 88 88 +" << endl
34 << "+ \\ \\,--. ____==-~ ?8, `8, ,8P +" << endl
35 << "+ \\ \\_-~\\ - ?b, `8, ,dP +" << endl
36 << "+ `_-~_.-' ?b, `8b, ,d8 ,dP +" << endl
37 << "+ \\-~ - - ?b, `88888888' ,dP +" << endl
38 << "+ `8b, ,d8' +" << endl
39 << "+ Created at 21-09-2004 by: - - `^8b._ _.d8^' +" << endl
40 << "+ -Pascal de Vos - _ `^?888888P^' +" << endl
41 << "+ -Rick van der Zwet +" << endl
42 << "+ +" << endl
43 << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
44 << endl;
45} //end Logo
46
47//Tijd uit het bestand ophalen en in locale variablen opslaan
48Datum TijdOphalen()
49{
50 Datum Huidige = {0, 0, 0, 0};
51
52 time_t ruwetijd;
53 struct tm * tijd_tm;
54 time ( &ruwetijd );
55 tijd_tm = localtime ( &ruwetijd );
56 Huidige.Jaar = tijd_tm->tm_year + 1900;
57 Huidige.Maand = tijd_tm->tm_mon + 1;
58 Huidige.Dag = tijd_tm->tm_mday;
59 Huidige.Weekdag = tijd_tm->tm_wday;
60 return Huidige;
61}
62
63//INPUT: jaar, maand ,dag
64//ACTIE: Bepaal dag van de week
65//Voorwaarden: alles geldig
66//UITVOER: dag van de week (integer)
67
68int DagvandeWeek (int Jaar, int Maand, int Dag)
69{
70 time_t ruwetijd;
71 struct tm * tijd_tm;
72 time ( &ruwetijd );
73 tijd_tm = localtime ( &ruwetijd );
74 tijd_tm->tm_wday = 0;
75 tijd_tm->tm_mday = Dag;
76 tijd_tm->tm_mon = Maand -1;
77 tijd_tm->tm_year = Jaar - 1900;
78 mktime(tijd_tm);
79 int tmp_wday = tijd_tm->tm_wday;
80 tijd_tm =localtime ( &ruwetijd );
81 return tmp_wday;
82}
83
84//INPUT: maand, jaar
85//ACTIE: bepalen hoeveel dagen de maand bevat
86//VOORWAARDEN: schikkeljaar is een jaar die te delen is door 4, en
87//als ie te delen is door 100, dan moet door 400 ook kunnen
88int DageninMaand(int Maand, int Jaar)
89{
90 const int daginmaand[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
91
92 if (Maand == 2) //Maand is februari
93 {
94 int SchrikkelTest = 4;
95 while ( SchrikkelTest <= Jaar )
96 {
97 if ( SchrikkelTest == Jaar ) //Jaar deelbaar door 4
98 {
99 SchrikkelTest = 100;
100 while ( SchrikkelTest <= Jaar )
101 {
102 if ( SchrikkelTest == Jaar )
103 { //Jaar is deelbaar door 100, dus testen
104 SchrikkelTest = 400; //of ook deelbaar door 400 is
105 while ( SchrikkelTest <= Jaar )
106 {
107 if ( SchrikkelTest == Jaar )
108 { //Jaar is deelbaar door 4, 100, 400
109 return (29); //dus schikkeljaar
110 }
111 SchrikkelTest = SchrikkelTest + 400;
112 }
113 return (28);
114 }
115 SchrikkelTest = SchrikkelTest + 100;
116 }
117 return (29);
118 }
119 SchrikkelTest = SchrikkelTest + 4;
120 }
121 return (28);
122 }
123 else { //Maand is geen februri, haal het max aantal dagen dus uit daginmaand tabel
124 return (daginmaand[Maand]);
125 }
126 return (99); //error in function
127} //end DageninMaand
128
129Datum GeboorteDatumInvoer(Datum Huidige)
130{
131 const char * month[] = { "", "Januari", "Februari", "Maart",
132 "April", "Mei", "Juni", "Juli",
133 "Augustus", "September", "October",
134 "November" , "December" };
135 Datum Geboorte = {0, 0, 0, 0};
136
137 //Geboortejaar invoer. Testen op ouder dan 150, jonger dan huidige jaar
138 cout << "Geef uw: \n" << "-Geboortejaar [yyyy]: ";
139 cin >> Geboorte.Jaar;
140 if (Geboorte.Jaar > Huidige.Jaar)
141 {
142 cout << "We leven in " << Huidige.Jaar << ", komt u later maar eens terug" << endl;
143 return (Geboorte);
144 }
145 else
146 {
147 if (Geboorte.Jaar <= (Huidige.Jaar - 150))
148 {
149 cout << "Sorry " << (Huidige.Jaar - Geboorte.Jaar)
150 << " jaar is te oud voor deze studie" <<endl;
151 return (Geboorte);
152 }
153 }
154
155 //Geboortemaand. Testen op geldige geboortemaand
156 cout << "-Geboortemaand [1-12]: ";
157 cin >> Geboorte.Maand;
158 if ( (Geboorte.Maand > 12) | (Geboorte.Maand < 1) )
159 {
160 cout << "Sorry, deze maand bestaat niet" << endl;
161 return (Geboorte);
162 }
163
164 //Geboortedag. Testen op geldige geboortedag
165 cout << "-Geboortedag [1-" << DageninMaand(Geboorte.Maand , Geboorte.Jaar) << "]: ";
166 cin >> Geboorte.Dag;
167 if ( (Geboorte.Dag > DageninMaand(Geboorte.Maand, Geboorte.Jaar) ) | (Geboorte.Dag < 1) )
168 {
169 cout << "Sorry, " << month[ Geboorte.Maand ] << " heeft geen "
170 << Geboorte.Dag << " dagen" <<endl;
171 return (Geboorte);
172 }
173 if ( (Geboorte.Jaar == Huidige.Jaar) && (Geboorte.Maand >= Huidige.Maand)
174 && (Geboorte.Dag > Huidige.Dag) )
175 {
176 cout << "Sorry, u kunt u pas inschrijven als u geboren bent";
177 Geboorte.Dag = 0;
178 return (Geboorte);
179 }
180 return (Geboorte);
181}
182
183int GeboorteDatumUitvoer(Datum Geboorte, Datum Huidige)
184{ //uitrekenen, leeftijd
185 const char * weekday[] = { "Zondag", "Maandag",
186 "Dinsdag", "Woensdag", "Donderdag",
187 "Vrijdag", "Zaterdag" };
188 const char * month[] = { "", "Januari", "Februari", "Maart",
189 "April", "Mei", "Juni", "Juli",
190 "Augustus", "September", "October",
191 "November" , "December" };
192 int JarenOud = 0;
193 int MaandenOud = 0;
194 if ( Huidige.Maand == Geboorte.Maand )
195 {
196 if ( Huidige.Dag >= Geboorte.Dag )
197 {
198 JarenOud = Huidige.Jaar - Geboorte.Jaar;
199 MaandenOud = (JarenOud * 12) + (Huidige.Maand - Geboorte.Maand);
200 }
201 else
202 {
203 JarenOud = (Huidige.Jaar - Geboorte.Jaar) - 1;
204 MaandenOud = (JarenOud * 12) + (Huidige.Maand - Geboorte.Maand) - 1;
205 }
206 }
207 else
208 {
209 if (Huidige.Maand > Geboorte.Maand)
210 {
211 if ( Huidige.Dag >= Geboorte.Dag )
212 {
213 JarenOud = Huidige.Jaar - Geboorte.Jaar;
214 MaandenOud = (JarenOud * 12) + (Huidige.Maand - Geboorte.Maand);
215 }
216 else
217 {
218 JarenOud = (Huidige.Jaar - Geboorte.Jaar);
219 MaandenOud = (JarenOud * 12) + (Huidige.Maand - Geboorte.Maand) - 1;
220 }
221 }
222 else
223 {
224 if ( Huidige.Dag >= Geboorte.Dag )
225 {
226 JarenOud = (Huidige.Jaar - Geboorte.Jaar) - 1;
227 MaandenOud = (12 - Geboorte.Maand) + (JarenOud * 12) + (Huidige.Maand);
228 }
229 else
230 {
231 JarenOud = (Huidige.Jaar - Geboorte.Jaar) -1;
232 MaandenOud = (12 - Geboorte.Maand) + (JarenOud * 12) + (Huidige.Maand - 1);
233 }
234 }
235 }
236 //Gegevens weergeven
237 cout << "Het is vandaag : " << weekday[Huidige.Weekdag] << " " << Huidige.Dag << " "
238 << month[Huidige.Maand] << " " << Huidige.Jaar <<endl
239 << "U bent geboren op: " << weekday[DagvandeWeek(Geboorte.Jaar, Geboorte.Maand, Geboorte.Dag)]
240 << " " << Geboorte.Dag << " " << month[Geboorte.Maand] << " " << Geboorte.Jaar << endl
241 << "Dan bent u vandaag: " << endl
242 << "* " << JarenOud << " jaar" <<endl
243 << "* " << MaandenOud << " maanden oud."
244 << endl;
245 return(JarenOud);
246} //end GeboorteDatumInvoer
247
248
249int ToelatingEnCollegeGeld(int JarenOud)
250{
251
252 int WiB1 = 0;
253 int WiB2 = 0;
254 int Na = 0;
255
256 int Aantalonvoldoendes = 0;
257
258 char antwoord;
259
260 int TweedeKans = 1;
261 const double marge = 0.02;
262 const double antwoord2 = 3.142;
263 double antwoordreeel = 0;
264
265 double tmp_CollegeGeld = 0;
266 int HoogsteCijfer = 0;
267 int CollegeGeld = 0;
268
269 cout << "Geef je Wiskunde B1 eindcijfer[1-10], 0 = niet gedaan: ";
270 cin >> WiB1;
271
272 cout << "Geef je Wiskunde B2 eindcijfer[1-10], 0 = niet gedaan: ";
273 cin >> WiB2;
274
275 cout << "Geef je Natuurkunde eindcijfer[1-10], 0 = niet gedaan: ";
276 cin >> Na;
277
278// aantal onvoldoendes wordt getelt
279
280 if ( WiB1 <= 5 ) Aantalonvoldoendes++;
281 if ( WiB2 <= 5 ) Aantalonvoldoendes++;
282 if ( Na <= 5 ) Aantalonvoldoendes++;
283
284// Alle 3 de vakken niet gedaan is meteen het einde
285// Bij 2 of meer onvoldoendes of wanneer er 2 van de 3 vakken niet gedaan zijn
286// volgt er een meerkeuze vraag.
287
288
289 if ( ( WiB1 + WiB2 + Na ) == 0 )
290 {
291 cout << "U bent niet geschikt voor deze opleiding" << endl;
292 return(1);
293 }
294 else
295 {
296 if ( Aantalonvoldoendes >= 2 )
297 {
298 cout << " U zal de volgende meerkeuzenvraag moeten beantwoorden" << endl
299 << " Wat is de afgeleide van de volgende functie: 2 * e^3x + e^x^2,"
300 << "kies uit de volgende opties" << endl
301 << " A) 6 * e^3x + 2x * e^x" << endl
302 << " B) 6 * e^3x + 2x * e^x^2" << endl
303 << " C) 3 * e^3x + 2x * e^x^2" << endl
304 << " D) 9 * e^2x + 4x * e^x^3" << endl
305 << "Kies nu [A/B/C/D]: ";
306 cin >> antwoord;
307
308 if ( antwoord != 'B' )
309 {
310 cout << " Dat is niet correct" << endl;
311 return(1);
312 }
313 }
314 }
315 cout << "U heeft talent ;)" << endl
316 << "U mag door naar de controlevraag!"
317 << endl;
318
319 //Bij de controlevraag wordt er om een reeel getal gevraagt
320 //Ouderen (20+) krijgen een 2e kans
321 while (TweedeKans < 3)
322 {
323 cout << "Poging " << TweedeKans <<endl
324 << "Geef Pie in 3 decimalen naukeurig zonder de rekenmachine te gebruiken" << endl
325 << "Geef het antwoord gevolgt door \'Enter\': ";
326 cin >> antwoordreeel;
327 if ( ( antwoordreeel > (antwoord2 - marge) ) && ( antwoordreeel < (antwoord2 + marge) ) )
328 {
329 TweedeKans = 3;
330 cout << "Het Correcte antwoord: " << antwoord2 << endl
331 << "Marge: " << marge << endl
332 << "U bent toegelaten." << endl
333 << endl;
334 }
335 else
336 {
337 if (JarenOud > 19) TweedeKans = TweedeKans + 1;
338
339 if ((JarenOud < 20) || (TweedeKans == 3))
340 {
341 cout << "Incorrect, U bent niet geschikt voor deze opleiding" << endl;
342 return(1);
343 }
344 }
345 }
346
347 if (antwoord2 > antwoord) {
348 tmp_CollegeGeld = (antwoord2 - antwoordreeel) * 10000;
349 }
350 else {
351 tmp_CollegeGeld = (antwoordreeel - antwoord2) * 10000;
352 }
353
354 if ((WiB1 >= WiB2) && (WiB1 >= Na )) HoogsteCijfer = WiB1;
355 if ((WiB2 >= WiB1) && (WiB2 >= Na )) HoogsteCijfer = WiB2;
356 if ((Na >= WiB1) && (Na >= WiB2)) HoogsteCijfer = Na;
357
358 tmp_CollegeGeld = tmp_CollegeGeld + (JarenOud * 123.45) - (HoogsteCijfer * 42);
359
360 if ( (int(tmp_CollegeGeld) % 10) < 5) { //collegegeld afronden naar beneden
361 CollegeGeld = ((int(tmp_CollegeGeld)) - (int(tmp_CollegeGeld) % 10));
362 }
363 else { //collegegeld afronden naar boven
364 CollegeGeld = ((int(tmp_CollegeGeld)) - (int(tmp_CollegeGeld) % 10)) + 10;
365 }
366 if ((tmp_CollegeGeld < 0) | (CollegeGeld < 0) ) {
367 tmp_CollegeGeld = 0;
368 CollegeGeld = 0;
369 }
370 cout << "Collegegeld onafgerond: E " << tmp_CollegeGeld << endl
371 << "Collegegeld afgerond: E " << CollegeGeld << ",-"
372 << endl;
373 return (0);
374}
375int main( )
376{
377 int JarenOud = 0;
378 Datum Huidige = {0, 0, 0, 0};
379 Datum Geboorte = {0, 0, 0, 0};
380
381 Logo();
382 Huidige = TijdOphalen();
383 Geboorte = GeboorteDatumInvoer(Huidige);
384 JarenOud = GeboorteDatumUitvoer(Geboorte, Huidige);
385 cout << JarenOud;
386 ToelatingEnCollegeGeld(JarenOud);
387 return(0);
388}
Note: See TracBrowser for help on using the repository browser.