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

Last change on this file since 8 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
Line 
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.