/*####################################################################### # RDOS operating system # Copyright (C) 1988-2009, Leif Ekblad # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. The only exception to this rule # is for commercial usage in embedded systems. For information on # usage in commercial embedded systems, contact embedded@rdos.net # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # The author of this program may be contacted at leif@rdos.net # # quizge.cpp # Quiz final version 2, experimental release class # #######################################################################*/ #include #include #include #include "quizge.h" #include "file.h" #include "quizdbge.h" #define CI 1 #define MAX_IN_ROW 4096 #define FALSE 0 #define TRUE !FALSE class TRace { public: TRace(); void Add(TQuizRow *Row); void WriteUsRow(TFile &file, int index, const char *text); void WriteNonUsRow(TFile &file, int index, const char *text); void WriteEntry(TFile &file, int val, int count); static void WriteHeader(TFile &file); int UsCount[10]; int UsAsCount[10]; int NonUsCount[10]; int NonUsAsCount[10]; }; /*########################################################################## # # Name : TQuizExp2::TQuizExp2 # # Purpose....: Constructor for TQuizExp2 # # In params..: Filename to load quiz from # Out params.: * # Returns....: * # ##########################################################################*/ TQuizExp2::TQuizExp2(const char *FileName, TQuiz *QuizI, TQuiz *QuizII, TQuiz *QuizIII, TQuiz *QuizNd, TQuiz *Quiz5, TQuiz *Quiz6, TQuiz *Quiz7, TQuiz *Quiz8, TQuiz *Quiz9, TQuiz *QuizR1, TQuiz *QuizR2, TQuiz *QuizR3, TQuiz *QuizR4, TQuiz *QuizR5, TQuiz *QuizR6, TQuiz *QuizR7, TQuiz *QuizS1, TQuiz *QuizS2, TQuiz *QuizS3, TQuiz *QuizS4, TQuiz *QuizS5, TQuiz *QuizS6, TQuiz *QuizS7, TQuiz *QuizS8, TQuiz *QuizS9, TQuiz *QuizS10, TQuiz *QuizS11, TQuiz *QuizS12, TQuiz *QuizN1, TQuiz *QuizN2, TQuiz *QuizN3, TQuiz *QuizN4, TQuiz *QuizFI, TQuiz *QuizF1, TQuiz *QuizF2, TQuiz *QuizF3, TQuiz *QuizF4, TQuiz *QuizF5, TQuiz *QuizF6, TQuiz *QuizF7, TQuiz *QuizF8, TQuiz *QuizF9, TQuiz *QuizF10, TQuiz *QuizF11, TQuiz *QuizF12, TQuiz *QuizF13, TQuiz *QuizF14, TQuiz *QuizF15) : TQuiz(172), FDataFile(FileName) { DefineCross(0, QuizI); DefineCross(1, QuizII); DefineCross(2, QuizIII); DefineCross(3, QuizNd); DefineCross(4, Quiz5); DefineCross(5, Quiz6); DefineCross(6, Quiz7); DefineCross(7, Quiz8); DefineCross(8, Quiz9); DefineCross(9, QuizR1); DefineCross(10, QuizR2); DefineCross(11, QuizR3); DefineCross(12, QuizR4); DefineCross(13, QuizR5); DefineCross(14, QuizR6); DefineCross(15, QuizR7); DefineCross(16, QuizS1); DefineCross(17, QuizS2); DefineCross(18, QuizS3); DefineCross(19, QuizS4); DefineCross(20, QuizS5); DefineCross(21, QuizS6); DefineCross(22, QuizS7); DefineCross(23, QuizS8); DefineCross(24, QuizS9); DefineCross(25, QuizS10); DefineCross(26, QuizS11); DefineCross(27, QuizS12); DefineCross(28, QuizN1); DefineCross(29, QuizN2); DefineCross(30, QuizN3); DefineCross(31, QuizN4); DefineCross(32, QuizFI); DefineCross(33, QuizF1); DefineCross(34, QuizF2); DefineCross(35, QuizF3); DefineCross(36, QuizF4); DefineCross(37, QuizF5); DefineCross(38, QuizF6); DefineCross(39, QuizF7); DefineCross(40, QuizF8); DefineCross(41, QuizF9); DefineCross(42, QuizF10); DefineCross(43, QuizF11); DefineCross(44, QuizF12); DefineCross(45, QuizF13); DefineCross(46, QuizF14); DefineCross(47, QuizF15); // DefineQuiz(); SetupTexts(); SetupCross(QuizI, QuizII, QuizIII, QuizNd, Quiz5, Quiz6, Quiz7, Quiz8, Quiz9, QuizR1, QuizR2, QuizR3, QuizR4, QuizR5, QuizR6, QuizR7, QuizS1, QuizS2, QuizS3, QuizS4, QuizS5, QuizS6, QuizS7, QuizS8, QuizS9, QuizS10, QuizS11, QuizS12, QuizN1, QuizN2, QuizN3, QuizN4, QuizFI, QuizF1, QuizF2, QuizF3, QuizF4, QuizF5, QuizF6, QuizF7, QuizF8, QuizF9, QuizF10, QuizF11, QuizF12, QuizF13, QuizF14, QuizF15); InitReferers(); LoadReferers(); SetupControlGroups(); SortReferers(); LoadPopulations(); Calculate(); } /*########################################################################## # # Name : TQuizExp2::~TQuizExp2 # # Purpose....: Destructor for TQuizExp2 # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ TQuizExp2::~TQuizExp2() { } /*################## TQuizExp2::GetCatCount ########################## * Purpose....: Return number of categories for question # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ int TQuizExp2::GetCatCount(int Question) { return 3; } /*################## TQuiz::GetQuizN ########################## * Purpose....: Return number of questions in the quiz (not counting fictive or temporary questions) # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ int TQuizExp2::GetQuizN() { return 172; } /*########################################################################## # # Name : TQuizExp2::WriteName # # Purpose....: Write quiz name # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::WriteName(TFile &File) { File.Write("GE"); } /*########################################################################## # # Name : TQuizExp2::WriteLongName # # Purpose....: Write long quiz name # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::WriteLongName(TFile &File) { File.Write("final version 2:experimental"); } /*################## TQuizExp2::DefineQuiz ########################## * Purpose....: Define global IDs in quiz # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::DefineQuiz() { } /*########################################################################## # # Name : TQuizExp2::InitReferers # # Purpose....: Init referers # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::InitReferers() { AddReferer("livejournal.com/community/asperger", "livejournal.com/community/asperger"); AddReferer("flashback.info", "flashback.info"); AddReferer("aspiesforfreedom.", "aspiesforfreedom.com"); AddReferer("aspergianisland.com", "aspergianisland.com"); AddReferer("wrongplanet.net", "wrongplanet.net"); AddReferer("rdos.net/sv", "rdos.net/sv"); AddReferer("aspalsta.net", "aspalsta.net/viewtopic.php?t=1951"); AddReferer("circvsmaximvs.com", "circvsmaximvs.com/showthread.php?t=14129"); AddReferer("panterachat.com", "panterachat.com/phpBB/viewtopic.php?t=24332"); AddReferer("kaytastrophe.com", "kaytastrophe.com/index.php?topic=708.0"); AddReferer("tbg.nu", "tbg.nu/news_show/109118/40"); AddReferer("vof.se", "vof.se/forum/viewtopic.php?t=3080"); AddReferer("autismspeaks.org", "autismspeaks.org/community/forums"); AddReferer("nordisk.nu", "nordisk.nu/showthread.php?t=3117"); AddReferer("swedvdr.org", "swedvdr.org/forums.php?action=viewtopic"); AddReferer("filmtipset.se", "filmtipset.se/forum.cgi?id=1339244"); AddReferer("tvsushi.com", "forum.tvsushi.com/index.php?showtopic=52752"); AddReferer("smogon.com", "smogon.com/forums/showthread.php?t=29171"); AddReferer("mommyconnection.org", "mommyconnection.org/board/index.php/topic,2840.0.html"); AddReferer("calientemamas.com", "calientemamas.com/forum_posts.asp?TID=12136"); AddReferer("forums.britxbox.co.uk", "forums.britxbox.co.uk/viewtopic.php?t=54722"); AddReferer("goonfleet.com", "goonfleet.com/showthread.php?t=77152"); AddReferer("weebls-stuff.com", "weebls-stuff.com"); AddReferer("keithandthegirl.com", "keithandthegirl.com/forums/showthread.php?t=9785"); } /*########################################################################## # # Name : TQuizExp2::SetupControlGroups # # Purpose....: Setup control-groups # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::SetupControlGroups() { DefineNt("flashback.info"); DefineNt("rdos.net/sv"); DefineNt("circvsmaximvs.com"); DefineNt("panterachat.com"); DefineNt("kaytastrophe.com"); DefineNt("tbg.nu"); DefineNt("vof.se"); DefineNt("nordisk.nu"); DefineNt("swedvdr.org"); DefineNt("filmtipset.se"); DefineNt("tvsushi.com"); DefineNt("smogon.com"); DefineNt("mommyconnection.org"); DefineNt("calientemamas.com"); DefineNt("forums.britxbox.co.uk"); DefineNt("goonfleet.com"); DefineNt("weebls-stuff.com"); DefineNt("keithandthegirl.com"); DefineAspie("wrongplanet.net"); DefineAspie("livejournal.com/community/asperger"); DefineAspie("aspiesforfreedom."); DefineAspie("aspergianisland.com"); DefineAspie("assupportgrouponline.co.uk"); DefineAspie("neurodiversity.com/diagnostic_instruments.html"); } /*########################################################################## # # Name : TQuizExp2::SetupTexts # # Purpose....: Init quiz texts and more # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::SetupTexts() { Quiz[13].Reverse = TRUE; Quiz[17].Reverse = TRUE; Quiz[27].Reverse = TRUE; Quiz[28].Reverse = TRUE; Quiz[29].Reverse = TRUE; Quiz[30].Reverse = TRUE; Quiz[31].Reverse = TRUE; Quiz[32].Reverse = TRUE; Quiz[33].Reverse = TRUE; Quiz[34].Reverse = TRUE; Quiz[65].Reverse = TRUE; Quiz[103].Reverse = TRUE; Quiz[105].Reverse = TRUE; Quiz[107].Reverse = TRUE; Quiz[108].Reverse = TRUE; Quiz[109].Reverse = TRUE; Quiz[111].Reverse = TRUE; Quiz[112].Reverse = TRUE; Quiz[147].Reverse = TRUE; Quiz[155].Reverse = TRUE; Quiz[156].Reverse = TRUE; Quiz[157].Reverse = TRUE; Quiz[158].Reverse = TRUE; Quiz[159].Reverse = TRUE; Quiz[163].Reverse = TRUE; Quiz[165].Reverse = TRUE; Quiz[167].Reverse = TRUE; Quiz[168].Reverse = TRUE; Quiz[169].Reverse = TRUE; Quiz[0].MyGroup = GROUP_ASPIE_TALENT; Quiz[1].MyGroup = GROUP_ASPIE_TALENT; Quiz[2].MyGroup = GROUP_ASPIE_TALENT; Quiz[3].MyGroup = GROUP_ASPIE_TALENT; Quiz[4].MyGroup = GROUP_ASPIE_TALENT; Quiz[5].MyGroup = GROUP_ASPIE_TALENT; Quiz[6].MyGroup = GROUP_ASPIE_TALENT; Quiz[7].MyGroup = GROUP_ASPIE_TALENT; Quiz[8].MyGroup = GROUP_NT_TALENT; Quiz[9].MyGroup = GROUP_NT_TALENT; Quiz[10].MyGroup = GROUP_NT_TALENT; Quiz[11].MyGroup = GROUP_NT_TALENT; Quiz[12].MyGroup = GROUP_NT_TALENT; Quiz[13].MyGroup = GROUP_NT_TALENT; Quiz[14].MyGroup = GROUP_NT_TALENT; Quiz[15].MyGroup = GROUP_NT_TALENT; Quiz[16].MyGroup = GROUP_NT_TALENT; Quiz[17].MyGroup = GROUP_NT_TALENT; Quiz[18].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[19].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[20].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[21].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[22].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[23].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[24].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[25].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[26].MyGroup = GROUP_ASPIE_OBSESSION; Quiz[27].MyGroup = GROUP_NT_SOCIAL; Quiz[28].MyGroup = GROUP_NT_OBSESSION; Quiz[29].MyGroup = GROUP_NT_OBSESSION; Quiz[30].MyGroup = GROUP_NT_SOCIAL; Quiz[31].MyGroup = GROUP_NT_OBSESSION; Quiz[32].MyGroup = GROUP_NT_OBSESSION; Quiz[33].MyGroup = GROUP_NT_HUNTING; Quiz[34].MyGroup = GROUP_NT_OBSESSION; Quiz[35].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[36].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[37].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[38].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[39].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[40].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[41].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[42].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[43].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[44].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[45].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[46].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[47].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[48].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[49].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[50].MyGroup = GROUP_NT_TALENT; Quiz[51].MyGroup = GROUP_NT_SOCIAL; Quiz[52].MyGroup = GROUP_NT_OBSESSION; Quiz[53].MyGroup = GROUP_ENVIRONMENT; Quiz[54].MyGroup = GROUP_NT_OBSESSION; Quiz[55].MyGroup = GROUP_NT_SOCIAL; Quiz[56].MyGroup = GROUP_NT_SOCIAL; Quiz[57].MyGroup = GROUP_NT_SOCIAL; Quiz[58].MyGroup = GROUP_NT_SOCIAL; Quiz[59].MyGroup = GROUP_NT_SOCIAL; Quiz[60].MyGroup = GROUP_NT_SOCIAL; Quiz[61].MyGroup = GROUP_NT_SOCIAL; Quiz[62].MyGroup = GROUP_NT_SOCIAL; Quiz[63].MyGroup = GROUP_NT_SOCIAL; Quiz[64].MyGroup = GROUP_NT_SOCIAL; Quiz[65].MyGroup = GROUP_NT_SOCIAL; Quiz[66].MyGroup = GROUP_NT_SOCIAL; Quiz[67].MyGroup = GROUP_ASPIE_NVC; Quiz[68].MyGroup = GROUP_NT_NVC; Quiz[69].MyGroup = GROUP_ASPIE_NVC; Quiz[70].MyGroup = GROUP_ASPIE_NVC; Quiz[71].MyGroup = GROUP_ASPIE_NVC; Quiz[72].MyGroup = GROUP_ASPIE_NVC; Quiz[73].MyGroup = GROUP_ASPIE_NVC; Quiz[74].MyGroup = GROUP_ASPIE_NVC; Quiz[75].MyGroup = GROUP_ASPIE_HUNTING; Quiz[76].MyGroup = GROUP_ASPIE_NVC; Quiz[77].MyGroup = GROUP_ASPIE_NVC; Quiz[78].MyGroup = GROUP_ASPIE_NVC; Quiz[79].MyGroup = GROUP_ASPIE_NVC; Quiz[80].MyGroup = GROUP_ASPIE_NVC; Quiz[81].MyGroup = GROUP_ASPIE_NVC; Quiz[82].MyGroup = GROUP_ASPIE_NVC; Quiz[83].MyGroup = GROUP_ASPIE_NVC; Quiz[84].MyGroup = GROUP_NT_NVC; Quiz[85].MyGroup = GROUP_ASPIE_NVC; Quiz[86].MyGroup = GROUP_ASPIE_NVC; Quiz[87].MyGroup = GROUP_ASPIE_NVC; Quiz[88].MyGroup = GROUP_ASPIE_NVC; Quiz[89].MyGroup = GROUP_ASPIE_NVC; Quiz[90].MyGroup = GROUP_ASPIE_NVC; Quiz[91].MyGroup = GROUP_ASPIE_NVC; Quiz[92].MyGroup = GROUP_NT_NVC; Quiz[93].MyGroup = GROUP_NT_NVC; Quiz[94].MyGroup = GROUP_NT_NVC; Quiz[95].MyGroup = GROUP_NT_NVC; Quiz[96].MyGroup = GROUP_NT_NVC; Quiz[97].MyGroup = GROUP_NT_NVC; Quiz[98].MyGroup = GROUP_NT_NVC; Quiz[99].MyGroup = GROUP_NT_NVC; Quiz[100].MyGroup = GROUP_ASPIE_NVC; Quiz[101].MyGroup = GROUP_NT_NVC; Quiz[102].MyGroup = GROUP_NT_NVC; Quiz[103].MyGroup = GROUP_NT_NVC; Quiz[104].MyGroup = GROUP_NT_NVC; Quiz[105].MyGroup = GROUP_NT_SOCIAL; Quiz[106].MyGroup = GROUP_NT_NVC; Quiz[107].MyGroup = GROUP_NT_NVC; Quiz[108].MyGroup = GROUP_NT_NVC; Quiz[109].MyGroup = GROUP_NT_NVC; Quiz[110].MyGroup = GROUP_NT_NVC; Quiz[111].MyGroup = GROUP_NT_SOCIAL; Quiz[112].MyGroup = GROUP_NT_NVC; Quiz[113].MyGroup = GROUP_NT_NVC; Quiz[114].MyGroup = GROUP_NT_SENSORY; Quiz[115].MyGroup = GROUP_NT_NVC; Quiz[116].MyGroup = GROUP_ASPIE_HUNTING; Quiz[117].MyGroup = GROUP_ASPIE_HUNTING; Quiz[118].MyGroup = GROUP_ASPIE_HUNTING; Quiz[119].MyGroup = GROUP_ASPIE_HUNTING; Quiz[120].MyGroup = GROUP_ASPIE_HUNTING; Quiz[121].MyGroup = GROUP_ASPIE_HUNTING; Quiz[122].MyGroup = GROUP_ASPIE_HUNTING; Quiz[123].MyGroup = GROUP_NT_HUNTING; Quiz[124].MyGroup = GROUP_NT_HUNTING; Quiz[125].MyGroup = GROUP_NT_HUNTING; Quiz[126].MyGroup = GROUP_NT_HUNTING; Quiz[127].MyGroup = GROUP_NT_HUNTING; Quiz[128].MyGroup = GROUP_NT_HUNTING; Quiz[129].MyGroup = GROUP_ASPIE_SENSORY; Quiz[130].MyGroup = GROUP_ASPIE_SENSORY; Quiz[131].MyGroup = GROUP_ASPIE_SENSORY; Quiz[132].MyGroup = GROUP_ASPIE_SENSORY; Quiz[133].MyGroup = GROUP_ASPIE_SENSORY; Quiz[134].MyGroup = GROUP_ASPIE_SENSORY; Quiz[135].MyGroup = GROUP_ASPIE_SENSORY; Quiz[136].MyGroup = GROUP_ASPIE_SENSORY; Quiz[137].MyGroup = GROUP_ASPIE_SENSORY; Quiz[138].MyGroup = GROUP_ASPIE_SENSORY; Quiz[139].MyGroup = GROUP_ASPIE_SENSORY; Quiz[140].MyGroup = GROUP_NT_SENSORY; Quiz[141].MyGroup = GROUP_NT_SENSORY; Quiz[142].MyGroup = GROUP_NT_SENSORY; Quiz[143].MyGroup = GROUP_NT_SENSORY; Quiz[144].MyGroup = GROUP_NT_SENSORY; Quiz[145].MyGroup = GROUP_NT_SENSORY; Quiz[146].MyGroup = GROUP_NT_SENSORY; Quiz[147].MyGroup = GROUP_NT_SENSORY; Quiz[148].MyGroup = GROUP_ENVIRONMENT; Quiz[149].MyGroup = GROUP_ENVIRONMENT; Quiz[150].MyGroup = GROUP_ENVIRONMENT; Quiz[151].MyGroup = GROUP_ENVIRONMENT; Quiz[152].MyGroup = GROUP_ENVIRONMENT; Quiz[153].MyGroup = GROUP_ENVIRONMENT; Quiz[154].MyGroup = GROUP_ENVIRONMENT; Quiz[155].MyGroup = GROUP_NT_TALENT; Quiz[156].MyGroup = GROUP_NT_SOCIAL; Quiz[157].MyGroup = GROUP_NT_NVC; Quiz[158].MyGroup = GROUP_NT_SENSORY; Quiz[159].MyGroup = GROUP_ENVIRONMENT; Quiz[160].MyGroup = GROUP_NT_NVC; Quiz[161].MyGroup = GROUP_NT_NVC; Quiz[162].MyGroup = GROUP_NT_NVC; Quiz[163].MyGroup = GROUP_NT_NVC; Quiz[164].MyGroup = GROUP_ASPIE_SOCIAL; Quiz[165].MyGroup = GROUP_NT_SOCIAL; Quiz[166].MyGroup = GROUP_NT_NVC; Quiz[167].MyGroup = GROUP_NT_NVC; Quiz[168].MyGroup = GROUP_NT_NVC; Quiz[169].MyGroup = GROUP_NT_NVC; Quiz[170].MyGroup = GROUP_NT_NVC; Quiz[171].MyGroup = GROUP_ASPIE_SOCIAL; #ifdef ENGLISH Quiz[0].Text = "Do you tend to get so absorbed by your special interests that you forget or ignore everything else?"; Quiz[1].Text = "Do you focus on one interest at a time and become an expert on that subject?"; Quiz[2].Text = "Do you or others think that you have unconventional ways of solving problems?"; Quiz[3].Text = "Do you have values & views that are either very old-fashioned or way ahead of their time?"; Quiz[4].Text = "Do you need periods of contemplation?"; Quiz[5].Text = "Do you take an interest in, and remember, details that others do not seem to notice?"; Quiz[6].Text = "Do you notice patterns in things all the time?"; Quiz[7].Text = "Do you have one special talent which you have emphasised and worked on?"; Quiz[8].Text = "Do you get confused by verbal instructions - especially several at the same time?"; Quiz[9].Text = "Do you tend to get so stuck on details that you miss the overall picture?"; Quiz[10].Text = "Do you find it hard to multi-task or shift your attention rapidly from one thing to another and therefore need to finish one task before turning to the next?"; Quiz[11].Text = "Do you have difficulty describing & summarising things for example events, conversations or something you've read?"; Quiz[12].Text = "Do you need to do things yourself in order to remember them?"; Quiz[13].Text = "If there is an interruption, can you quickly return to what you were doing before?"; Quiz[14].Text = "Do you find it very hard to learn things that you are not interested in?"; Quiz[15].Text = "Do you find it difficult to take notes in lectures?"; Quiz[16].Text = "Are you easily distracted?"; Quiz[17].Text = "Can you easily keep track of several different people's conversations?"; Quiz[18].Text = "Does it feel vitally important to be left undisturbed when focusing on your special interests?"; Quiz[19].Text = "Before doing something or going somewhere, do you need to have a picture in your mind of what's going to happen so as to be able to prepare yourself mentally first?"; Quiz[20].Text = "Do you prefer to wear the same clothes and/or eat the same food every day?"; Quiz[21].Text = "Do you become frustrated if an activity that is important to you gets interrupted?"; Quiz[22].Text = "Do you get frustrated if you can't sit on your favorite seat?"; Quiz[23].Text = "Do you have strong attachments to certain favorite objects?"; Quiz[24].Text = "Do you have certain routines which you need to follow?"; Quiz[25].Text = "Do you find it disturbing or upsetting when others show up either later or sooner than agreed?"; Quiz[26].Text = "Do you need lists and schedules in order to get things done?"; Quiz[27].Text = "Do you enjoy meeting new people?"; Quiz[28].Text = "Are your views typical of your peer group?"; Quiz[29].Text = "Do you naturally fit into the expected gender stereotypes?"; Quiz[30].Text = "Do you enjoy hosting or arranging events?"; Quiz[31].Text = "Do you have an interest for the current fashions?"; Quiz[32].Text = "Do you enjoy gossip?"; Quiz[33].Text = "Are friends of the same gender important to you?"; Quiz[34].Text = "Do you prefer the company of those of the same generation as yourself?"; Quiz[35].Text = "Do you find it easier to understand and communicate with odd & unusual people than with ordinary people?"; Quiz[36].Text = "Is your sense of humor different from mainstream or considered odd?"; Quiz[37].Text = "Do you or others think that you have unusual eating habits?"; Quiz[38].Text = "Are you somewhat of a daydreamer, often lost in your own thoughts?"; Quiz[39].Text = "Do you have an alternative view of what is attractive in the opposite sex?"; Quiz[40].Text = "Do you see your own activities as more important than other people's?"; Quiz[41].Text = "Do you tend to become obsessed with a potential partner and cannot let go of him/her?"; Quiz[42].Text = "Do your feelings cycle regulary between hopelessness and extremely high confidence?"; Quiz[43].Text = "Do you have trouble with authority?"; Quiz[44].Text = "Do you have atypical or irregular sleeping patterns that deviate from the 24-h cycle?"; Quiz[45].Text = "Do you have problems starting and / or finishing projects?"; Quiz[46].Text = "Do you find the norms of hygiene too strict?"; Quiz[47].Text = "Do you sometimes lie awake at night because of too many thoughts?"; Quiz[48].Text = "Have you have had long-lasting urges to take revenge?"; Quiz[49].Text = "Do you have unusual sexual preferences?"; Quiz[50].Text = "Do you prefer to read directions only when all else have failed?"; Quiz[51].Text = "Do you have a tendency to become stuck when asked questions in social situation?"; Quiz[52].Text = "Do you often feel out-of-sync with others?"; Quiz[53].Text = "Has it been harder for you than for others to keep friends?"; Quiz[54].Text = "Do you dislike or have difficulty with team sports and other group endeavours?"; Quiz[55].Text = "Do you avoid talking face to face with someone you don't know very well?"; Quiz[56].Text = "Do you get very tired after socializing, and need to regenerate alone?"; Quiz[57].Text = "Do people think you are aloof and distant?"; Quiz[58].Text = "Do you dislike being touched or hugged unless you're prepared or have asked for it?"; Quiz[59].Text = "Do you find it hard to be emotionally close to other people?"; Quiz[60].Text = "Do you dislike shaking hands?"; Quiz[61].Text = "Do you prefer animals to people?"; Quiz[62].Text = "Do you prefer to only meet people you know, one-on-one, or in small, familiar groups?"; Quiz[63].Text = "Do you prefer to do things on your own even if you could use others' help or expertise?"; Quiz[64].Text = "Do you dislike it when people drop by to visit you uninvited?"; Quiz[65].Text = "Do you find it natural to wave or say 'hi' when you meet people?"; Quiz[66].Text = "Do you dislike reading aloud?"; Quiz[67].Text = "Do people comment on your unusual mannerisms and habits?"; Quiz[68].Text = "Do people sometimes think you are smiling at the wrong occasion?"; Quiz[69].Text = "Do you often have lots of thoughts that you find hard to verbalize?"; Quiz[70].Text = "Do you often don't know where to put your arms?"; Quiz[71].Text = "Have others commented or have you observed yourself that you make unusual facial expressions?"; Quiz[72].Text = "Do you tend to talk either too softly or too loudly?"; Quiz[73].Text = "Have you been accused of staring?"; Quiz[74].Text = "Have others told you that you have an odd posture or gait?"; Quiz[75].Text = "Do you mistake noises for voices?"; Quiz[76].Text = "Do you wring your hands, rub your hands together or twirl your fingers?"; Quiz[77].Text = "Do you rock back-&-forth or side-to-side (e.g. for comfort, to calm yourself, when excited or overstimulated)?"; Quiz[78].Text = "In conversations, do you use small sounds that others don't seem to use?"; Quiz[79].Text = "Do recently heard phrases, tunes or rhythms tend to stick and repeat themselves in your head?"; Quiz[80].Text = "Do you have a habit of repeating your own or others' last words, internally or out loud (echolalia)?"; Quiz[81].Text = "Do you tap your ears or press your eyes (e.g. when thinking, when stressed or distressed)?"; Quiz[82].Text = "Do you fiddle with things?"; Quiz[83].Text = "Do you use stock phrases or phrases borrowed from other situations or people?"; Quiz[84].Text = "Do you expect other people to know your thoughts, experiences and opinions without you having to tell them?"; Quiz[85].Text = "Do you pace (e.g. when thinking or anxious)?"; Quiz[86].Text = "Do you stutter when stressed?"; Quiz[87].Text = "Do you tend to look a lot at people you like and little or not at all at people you dislike?"; Quiz[88].Text = "Do you bite your lip, cheek or tongue (e.g. when thinking, when anxious or nervous)?"; Quiz[89].Text = "Do you talk to yourself?"; Quiz[90].Text = "Do you sometimes mix up pronouns and, for example, say \"you\" or \"we\" when you mean \"me\" or vice versa?"; Quiz[91].Text = "Do you have difficulties with pronunciation?"; Quiz[92].Text = "Do you find it difficult to figure out how to behave in various situations?"; Quiz[93].Text = "In conversations, do you have trouble with things like timing and reciprocity?"; Quiz[94].Text = "Do you tend to express your feelings in ways that may baffle others?"; Quiz[95].Text = "Do others often misunderstand you?"; Quiz[96].Text = "Do you forget you are in a social situation when something gets your attention?"; Quiz[97].Text = "Are you usually unaware of social rules & boundaries unless they are clearly spelled out?"; Quiz[98].Text = "Do you find it difficult to work out people's intentions?"; Quiz[99].Text = "Do you tend to interpret things literally and/or reply to rhetorical questions?"; Quiz[100].Text = "In conversations, do you need extra time to carefully think out your reply, so that there may be a pause before you answer?"; Quiz[101].Text = "Do you tend to say things that are considered socially inappropriate?"; Quiz[102].Text = "Do you sometimes not feel anything at all, even though other people expect you to?"; Quiz[103].Text = "Do you instinctively know when it is your turn to speak when talking on the phone?"; Quiz[104].Text = "In a conversation, do you tend to focus on your own thoughts rather than on what your listener might be thinking?"; Quiz[105].Text = "Are you good at returning social courtesies and gestures?"; Quiz[106].Text = "Do you often talk about your special interests whether others seem to be interested or not?"; Quiz[107].Text = "Do you know when you are expected to offer an apology?"; Quiz[108].Text = "Can you pick up quickly if someone says one thing but means another?"; Quiz[109].Text = "Are you good at interpreting facial expressions?"; Quiz[110].Text = "Have you taken initiative only to find out it was not wanted?"; Quiz[111].Text = "Do you find yourself at ease in romantic situations?"; Quiz[112].Text = "Do you find it easy to describe your feelings?"; Quiz[113].Text = "Do you have a monotonous voice?"; Quiz[114].Text = "Do you have problems recognizing faces (prosopagnosia)?"; Quiz[115].Text = "Are you so honest and sincere yourself that you assume everyone is?"; Quiz[116].Text = "Do you enjoy watching a spinning or blinking object?"; Quiz[117].Text = "Do you have a fascination for slowly flowing water?"; Quiz[118].Text = "Do you sometimes have an urge to jump over things?"; Quiz[119].Text = "Do you enjoy mimicking animal sounds?"; Quiz[120].Text = "Are you or have you been hyperactive?"; Quiz[121].Text = "Do you enjoy walking on your toes?"; Quiz[122].Text = "Have you been fascinated about making traps?"; Quiz[123].Text = "Do you find it difficult to take messages on the telephone and pass them on correctly?"; Quiz[124].Text = "Do you drop things when your attention is on other things?"; Quiz[125].Text = "Do you have problems filling out forms?"; Quiz[126].Text = "Do you find it hard to recognise phone numbers when said in a different way?"; Quiz[127].Text = "Do you mix up digits in numbers like 95 and 59?"; Quiz[128].Text = "Do you have trouble reading clocks?"; Quiz[129].Text = "Do you suddenly feel distracted by distant sounds?"; Quiz[130].Text = "Do you notice small sounds that others don't, or feel pained by loud or irritating noise?"; Quiz[131].Text = "Do you have difficulties filtering out background noise when talking to someone?"; Quiz[132].Text = "Do you dislike when people walk behind you?"; Quiz[133].Text = "Do you feel tortured by clothes tags, clothes that are too tight or are made in the 'wrong' material?"; Quiz[134].Text = "Are you hypo- or hypersensitive to physical pain, or even enjoy some types of pain?"; Quiz[135].Text = "Are your eyes extra sensitive to stong light and glare?"; Quiz[136].Text = "Are you sensitive to changes in humidity and air pressure?"; Quiz[137].Text = "Do you instinctively become frightened by the sound of a motor-bike?"; Quiz[138].Text = "Do you dislike it when people stamp their foot in the floor?"; Quiz[139].Text = "Does it come more natural to you to think in pictures than in words?"; Quiz[140].Text = "Do you have poor awareness or body control and a tendency to fall, stumble or bump into things?"; Quiz[141].Text = "Do you have difficulties imitating & timing the movements of others, e.g. when learning new dance steps or in gym class?"; Quiz[142].Text = "Do you have poor concept of time?"; Quiz[143].Text = "Do you find it hard to tell the age of people?"; Quiz[144].Text = "Do you have difficulties judging distances, height, depth or speed?"; Quiz[145].Text = "Do you have difficulties with activities requiring manual precision, e.g sewing, tying shoe-laces, fastening buttons or handling small objects?"; Quiz[146].Text = "Do you have problems finding your way to new places?"; Quiz[147].Text = "Do you have a good sense of how much pressure to apply when doing things with your hands?"; Quiz[148].Text = "Do you tend to shut down or have a meltdown when stressed or overwhelmed?"; Quiz[149].Text = "Has it been harder for you to make it on your own, than it seems to be for most others of the same age?"; Quiz[150].Text = "Are you sometimes afraid in safe situations?"; Quiz[151].Text = "Do you have difficulty accepting criticism, correction, and direction?"; Quiz[152].Text = "Are you prone to getting depressions?"; Quiz[153].Text = "Have you been bullied, abused or taken advantage of?"; Quiz[154].Text = "Are you impatient and have low frustration tolerance?"; Quiz[155].Text = "Can you easily remember verbal instructions?"; Quiz[156].Text = "Are you good at teamwork?"; Quiz[157].Text = "Do you have a good sense for what is the right thing to do socially?"; Quiz[158].Text = "Do you find it easy to estimate the age of people?"; Quiz[159].Text = "Are you gracious about criticism, correction and direction?"; #endif Quiz[160].Text = "As a teenager, did you find it difficult to figure out how to behave in various situations?"; Quiz[161].Text = "Do others often misunderstand you when you act naturally?"; Quiz[162].Text = "As a teenager, were you usually unaware of social rules & boundaries unless they were clearly spelled out?"; Quiz[163].Text = "Can you quickly and naturally work out people's intentions in conversations?"; Quiz[164].Text = "Do you tend to say things that are considered socially inappropriate when you are tired, frustrated or when you act naturally?"; Quiz[165].Text = "Are you naturally good at returning social courtesies and gestures?"; Quiz[166].Text = "As a teenager, did you often talk about your special interests whether others seemed to be interested or not?"; Quiz[167].Text = "Do you instinctively know when you are expected to offer an apology?"; Quiz[168].Text = "In a conversation, can you quickly pick up if someone says one thing but means another?"; Quiz[169].Text = "Are you naturally good at interpreting facial expressions?"; Quiz[170].Text = "Are you naturally so honest and sincere yourself that you assume everyone should be?"; Quiz[171].Text = "Do you think a long-term relationship should start with sex?"; } /*################## TQuizExp2::LoadReferers ########################## * Purpose....: Load referers # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::LoadReferers() { TQuizRow Row; TReferer *ref; FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { if (Row.Gender == 1) UpdateReferer(&MaleRef, Row.AsResult, Row.NtResult, Row.GroupResult); else UpdateReferer(&FemaleRef, Row.AsResult, Row.NtResult, Row.GroupResult); ref = FindReferer(Row.Referer); if (!ref) ref = AddReferer(Row.Referer, Row.Referer); if (ref) UpdateReferer(ref, Row.AsResult, Row.NtResult, Row.GroupResult); if (Row.Aspie == 1) UpdateReferer(&SelfAsRef, Row.AsResult, Row.NtResult, Row.GroupResult); if (Row.Aspie == 2) UpdateReferer(&AsRef, Row.AsResult, Row.NtResult, Row.GroupResult); if (Row.ADHD == 2) UpdateReferer(&AddRef, Row.AsResult, Row.NtResult, Row.GroupResult); if (Row.OCD == 2) UpdateReferer(&OCDRef, Row.AsResult, Row.NtResult, Row.GroupResult); if (Row.Social == 2) UpdateReferer(&SocialPhobiaRef, Row.AsResult, Row.NtResult, Row.GroupResult); if (Row.Aspie) { if (Row.Gender == 1) UpdateReferer(&MaleAsRef, Row.AsResult, Row.NtResult, Row.GroupResult); else UpdateReferer(&FemaleAsRef, Row.AsResult, Row.NtResult, Row.GroupResult); } } } /*########################################################################## # # Name : TQuizExp2::LoadPopulations # # Purpose....: Load populations # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::LoadPopulations() { TQuizRow Row; int i; int id; TReferer *ref; char DxArr[DX_COUNT]; char score; int IdArr[MAX_QUESTIONS]; for (i = 0; i < N; i++) { Quiz[i].NoAnswer = 0; IdArr[i] = GetGlobalId(i); } FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { BirthMonth.Add(Row.AsResult, Row.NtResult, Row.BirthMonth); for (i = 0; i < N; i++) { if (Row.Quiz[i] == 0) Quiz[i].NoAnswer++; else { if (i < 161) { score = Row.Quiz[i] - 1; id = IdArr[i]; // DsmAs.Add(Row.Aspie, id, score); // DsmAdd.Add(Row.ADHD, id, score); // DsmSocialPhobia.Add(Row.Social, id, score); } } } for (i = 0; i < DX_COUNT; i++) DxArr[i] = DX_STATE_UNKNOWN; if (Row.Aspie == 2) DxArr[DX_AS] = DX_STATE_YES; if (Row.Aspie == 1) DxArr[DX_AS] = DX_STATE_SELF; if (Row.Aspie == 0) DxArr[DX_AS] = DX_STATE_NO; if (Row.ADHD == 2) DxArr[DX_ADD] = DX_STATE_YES; if (Row.ADHD == 1) DxArr[DX_ADD] = DX_STATE_SELF; if (Row.ADHD == 0) DxArr[DX_ADD] = DX_STATE_NO; if (Row.OCD == 2) DxArr[DX_OCD] = DX_STATE_YES; if (Row.OCD == 1) DxArr[DX_OCD] = DX_STATE_SELF; if (Row.OCD == 0) DxArr[DX_OCD] = DX_STATE_NO; if (Row.Social == 2) DxArr[DX_SOCIAL_PHOBIA] = DX_STATE_YES; if (Row.Social == 1) DxArr[DX_SOCIAL_PHOBIA] = DX_STATE_SELF; if (Row.Social == 0) DxArr[DX_SOCIAL_PHOBIA] = DX_STATE_NO; All.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Aspie) { if (Row.AsResult < Row.NtResult) LowAs.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Gender == 1) { if (Row.BirthYear > 1986) YoungMale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); AsMale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } else { if (Row.BirthYear > 1986) YoungFemale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); AsFemale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } if (Row.Aspie == 2) As.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Aspie == 1) AspieControl.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } if (Row.ADHD >= 1) { Add.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Gender == 1) AddMale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); else AddFemale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } if (Row.Social >= 1) SocialPhobia.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (strlen(Row.Referer) == 0) { Mix.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Gender == 1) MixMale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); else MixFemale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } else { ref = FindReferer(Row.Referer); if (ref && ref->NT) NtControl.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } if (Row.NtResult - Row.AsResult >= 35) { Nt.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Gender == 1) NtMale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); else NtFemale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } if (Row.AsResult - Row.NtResult >= 35) { Aspie.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); if (Row.Gender == 1) AspieMale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); else AspieFemale.Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } } } /*########################################################################## # # Name : TQuizExp2::SetupCross # # Purpose....: Setup cross-references # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::SetupCross(TQuiz *QuizI, TQuiz *QuizII, TQuiz *QuizIII, TQuiz *QuizNd, TQuiz *Quiz5, TQuiz *Quiz6, TQuiz *Quiz7, TQuiz *Quiz8, TQuiz *Quiz9, TQuiz *QuizR1, TQuiz *QuizR2, TQuiz *QuizR3, TQuiz *QuizR4, TQuiz *QuizR5, TQuiz *QuizR6, TQuiz *QuizR7, TQuiz *QuizS1, TQuiz *QuizS2, TQuiz *QuizS3, TQuiz *QuizS4, TQuiz *QuizS5, TQuiz *QuizS6, TQuiz *QuizS7, TQuiz *QuizS8, TQuiz *QuizS9, TQuiz *QuizS10, TQuiz *QuizS11, TQuiz *QuizS12, TQuiz *QuizN1, TQuiz *QuizN2, TQuiz *QuizN3, TQuiz *QuizN4, TQuiz *QuizFI, TQuiz *QuizF1, TQuiz *QuizF2, TQuiz *QuizF3, TQuiz *QuizF4, TQuiz *QuizF5, TQuiz *QuizF6, TQuiz *QuizF7, TQuiz *QuizF8, TQuiz *QuizF9, TQuiz *QuizF10, TQuiz *QuizF11, TQuiz *QuizF12, TQuiz *QuizF13, TQuiz *QuizF14, TQuiz *QuizF15) { DefineCross(QuizF15, 0, 1); DefineCross(QuizF15, 1, 3); DefineCross(QuizF15, 2, 4); DefineCross(QuizF15, 3, 5); DefineCross(QuizF15, 4, 8); DefineCross(QuizF15, 5, 6); DefineCross(QuizF15, 6, 7); DefineCross(QuizNd, 7, 68); DefineCross(QuizF15, 8, 9); DefineCross(QuizF15, 9, 10); DefineCross(QuizF15, 10, 11); DefineCross(QuizF15, 11, 12); DefineCross(QuizF15, 12, 13); DefineCross(QuizF15, 13, 14); DefineCross(QuizF15, 14, 15); DefineCross(QuizF15, 15, 16); DefineCross(QuizF15, 16, 35); DefineCross(QuizF15, 17, 17); DefineCross(QuizF15, 18, 18); DefineCross(QuizF15, 19, 19); DefineCross(QuizF15, 20, 20); DefineCross(QuizF15, 21, 21); DefineCross(QuizF15, 22, 22); DefineCross(QuizF15, 23, 23); DefineCross(QuizF15, 24, 24); DefineCross(QuizF15, 25, 25); DefineCross(QuizF15, 26, 26); DefineCross(QuizF15, 27, 27); DefineCross(QuizF15, 28, 28); DefineCross(QuizF15, 29, 132); DefineCross(QuizF15, 30, 29); DefineCross(QuizF15, 31, 30); DefineCross(QuizF15, 32, 32); DefineCross(QuizF11, 33, 176); DefineCross(QuizF15, 34, 31); DefineCross(QuizF15, 35, 138); DefineCross(QuizF15, 36, 2); DefineCross(QuizF15, 37, 139); DefineCross(QuizF15, 38, 33); DefineCross(QuizF15, 39, 131); DefineCross(QuizF15, 40, 161); DefineCross(QuizF15, 41, 150); DefineCross(QuizF15, 42, 154); DefineCross(QuizF15, 43, 157); DefineCross(QuizR4, 44, 113); DefineCross(QuizF15, 45, 34); DefineCross(QuizF15, 46, 155); DefineCross(QuizF15, 47, 158); DefineCross(QuizF15, 48, 151); DefineCross(QuizF15, 49, 133); DefineCross(QuizF15, 50, 175); DefineCross(QuizF15, 51, 39); DefineCross(QuizF15, 52, 0); DefineCross(QuizF15, 53, 41); DefineCross(QuizF15, 54, 40); DefineCross(QuizF15, 55, 42); DefineCross(QuizF15, 56, 43); DefineCross(QuizF15, 57, 45); DefineCross(QuizF15, 58, 44); DefineCross(QuizF15, 59, 46); DefineCross(QuizF15, 60, 47); DefineCross(QuizF15, 61, 153); DefineCross(QuizF13, 62, 168); DefineCross(QuizF15, 63, 48); DefineCross(QuizF15, 64, 50); DefineCross(QuizF15, 65, 51); DefineCross(QuizF15, 66, 52); DefineCross(QuizF15, 67, 53); DefineCross(QuizF15, 68, 54); DefineCross(QuizF15, 69, 55); DefineCross(QuizF15, 70, 56); DefineCross(QuizF15, 71, 58); DefineCross(QuizF15, 72, 57); DefineCross(QuizF15, 73, 59); DefineCross(QuizF15, 74, 60); DefineCross(QuizN1, 75, 152); DefineCross(QuizF15, 76, 61); DefineCross(QuizF15, 77, 62); DefineCross(QuizF15, 78, 64); DefineCross(QuizF15, 79, 63); DefineCross(QuizF15, 80, 65); DefineCross(QuizF15, 81, 66); DefineCross(QuizF15, 82, 67); DefineCross(QuizF15, 83, 68); DefineCross(QuizF15, 84, 144); DefineCross(QuizF15, 85, 69); DefineCross(QuizF15, 86, 70); DefineCross(QuizF15, 87, 71); DefineCross(QuizF15, 88, 72); DefineCross(QuizF15, 89, 73); DefineCross(QuizF15, 90, 74); DefineCross(QuizF15, 91, 75); DefineCross(QuizF15, 92, 76); DefineCross(QuizF15, 93, 77); DefineCross(QuizF15, 94, 79); DefineCross(QuizF15, 95, 78); DefineCross(QuizF15, 96, 80); DefineCross(QuizF15, 97, 81); DefineCross(QuizF15, 98, 83); DefineCross(QuizF15, 99, 82); DefineCross(QuizF15, 100, 136); DefineCross(QuizF15, 101, 84); DefineCross(QuizF15, 102, 135); DefineCross(QuizF15, 103, 85); DefineCross(QuizF15, 104, 185); DefineCross(QuizF15, 105, 86); DefineCross(QuizF15, 106, 87); DefineCross(QuizF15, 107, 88); DefineCross(QuizF15, 108, 183); DefineCross(QuizF15, 109, 89); DefineCross(QuizF15, 110, 140); DefineCross(QuizF15, 111, 90); DefineCross(QuizF15, 112, 91); DefineCross(QuizF15, 113, 92); DefineCross(QuizF15, 114, 93); DefineCross(QuizF15, 115, 94); DefineCross(QuizF15, 116, 95); DefineCross(QuizF15, 117, 96); DefineCross(QuizF15, 118, 97); DefineCross(QuizF15, 119, 98); DefineCross(QuizF15, 120, 37); DefineCross(QuizF15, 121, 99); DefineCross(QuizF15, 122, 100); DefineCross(QuizF15, 123, 101); DefineCross(QuizF15, 124, 102); DefineCross(QuizF15, 125, 103); DefineCross(QuizF15, 126, 104); DefineCross(QuizF15, 127, 106); DefineCross(QuizF15, 128, 105); DefineCross(QuizF15, 129, 107); DefineCross(QuizF15, 130, 108); DefineCross(QuizF15, 131, 109); DefineCross(QuizF15, 132, 49); DefineCross(QuizF15, 133, 110); DefineCross(QuizF15, 134, 111); DefineCross(QuizF15, 135, 112); DefineCross(QuizF15, 136, 113); DefineCross(QuizF15, 137, 114); DefineCross(QuizF15, 138, 115); DefineCross(QuizF15, 139, 116); DefineCross(QuizF15, 140, 117); DefineCross(QuizF15, 141, 118); DefineCross(QuizF15, 142, 119); DefineCross(QuizF15, 143, 120); DefineCross(QuizF15, 144, 121); DefineCross(QuizF15, 145, 122); DefineCross(QuizF15, 146, 123); DefineCross(QuizR5, 147, 1); DefineCross(QuizF15, 148, 124); DefineCross(QuizF15, 149, 125); DefineCross(QuizF15, 150, 126); DefineCross(QuizF15, 151, 127); DefineCross(QuizF15, 152, 128); DefineCross(QuizF15, 153, 129); DefineCross(QuizN1, 154, 42); DefineCross(QuizF15, 155, 145); DefineCross(QuizF15, 156, 146); DefineCross(QuizF15, 157, 147); DefineCross(QuizF15, 158, 148); DefineCross(QuizF15, 159, 149); DefineGlobalId(160, 1436); DefineGlobalId(161, 1437); DefineGlobalId(162, 1438); DefineGlobalId(163, 1439); DefineGlobalId(164, 1440); DefineGlobalId(165, 1441); DefineGlobalId(166, 1442); DefineGlobalId(167, 1443); DefineGlobalId(168, 1444); DefineGlobalId(169, 1445); DefineGlobalId(170, 1446); DefineGlobalId(171, 1447); } /*########################################################################## # # Name : TQuizExp2::GetReferer # # Purpose....: Get referer population # # In params..: * # Out params.: * # Returns....: * # ##########################################################################*/ void TQuizExp2::GetReferer(const char *referer, TPopulation *pop) { int i; TReferer *ref; TQuizRow Row; char DxArr[DX_COUNT]; for (i = 0; i < DX_COUNT; i++) DxArr[DX_COUNT] = DX_STATE_UNKNOWN; for (i = 0; i < RefCount; i++) { ref = RefArr[i]; if (ref->IsMatch(referer)) break; } FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) if (ref->IsMatch(Row.Referer)) pop->Add(Row.AsResult, Row.NtResult, DxArr, Row.Gender, Row.Quiz, Row.GroupResult, Row.DxResult); } /*################## IsPca ########################## * Purpose....: Check quiz row against pca-type # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ static int IsPca(TQuizRow *row, int PcaType) { switch (PcaType) { case PCA_TYPE_ALL: case PCA_TYPE_MIXED: return TRUE; case PCA_TYPE_MALE: if (row->Gender == 1) return TRUE; else return FALSE; case PCA_TYPE_FEMALE: if (row->Gender == 2) return TRUE; else return FALSE; case PCA_TYPE_YOUNG: if (row->BirthYear >= 1975) return TRUE; else return FALSE; case PCA_TYPE_OLD: if (row->BirthYear < 1975) return TRUE; else return FALSE; case PCA_TYPE_AS: if (row->Aspie == 2) return TRUE; else return FALSE; } return FALSE; } /*################## TQuizExp2::ExportExcelCases ########################## * Purpose....: Export cases as excel-data. Make ? into 'NO' case # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::ExportExcelCase(const char *filename, int PcaType) { TQuizRow Row; int i; int ival; char str[80]; TFile file(filename, 0); file.Write("\"\", "); file.Write("\"\", "); for (i = 0; i < GetQuizN(); i++) { if (PcaType != PCA_TYPE_MIXED || Quiz[i].MyGroup == GROUP_MIXED) { file.Write("\""); // strncpy(str, Quiz[i].Text, 35); // str[35] = 0; sprintf(str, "#%d", i + 1); file.Write(str); file.Write("\""); if (i != N - 1) file.Write(", "); } } file.Write("\n"); FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { if (IsPca(&Row, PcaType)) { sprintf(str, "\"%d\", ", Row.AsResult); file.Write(str); sprintf(str, "\"%d\", ", Row.NtResult); file.Write(str); for (i = 0; i < GetQuizN(); i++) { if (PcaType != PCA_TYPE_MIXED || Quiz[i].MyGroup == GROUP_MIXED) { ival = Row.Quiz[i]; if (ival) ival--; if (ival > 2) ival = 0; sprintf(str, "%d", ival); file.Write(str); if (i != GetQuizN() - 1) file.Write(", "); } } file.Write("\n"); } } } /*################## TQuizExp2::ExportExcelAspie ########################## * Purpose....: Export cases as excel-data. Invert NT questions # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::ExportExcelAspie(const char *filename) { TQuizRow Row; int i; int ival; char str[80]; TFile file(filename, 0); file.Write("\"\", "); file.Write("\"\", "); for (i = 0; i < N; i++) { file.Write("\""); sprintf(str, "#%d", i + 1); file.Write(str); file.Write("\""); if (i != N - 1) file.Write(", "); } file.Write("\n"); FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { if (1) { sprintf(str, "\"%d\", ", Row.AsResult); file.Write(str); sprintf(str, "\"%d\", ", Row.NtResult); file.Write(str); for (i = 0; i < N; i++) { ival = Row.Quiz[i]; if (ival) { if (Quiz[i].Reverse) ival = GetCatCount(i) - ival; else ival--; } if (ival >= GetCatCount(i)) ival = 0; sprintf(str, "%d", ival); file.Write(str); if (i != N - 1) file.Write(", "); } file.Write("\n"); } } } /*################## TQuizExp2::ExportExcelGroups ########################## * Purpose....: Export group cases in excel format # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::ExportExcelGroups(const char *filename) { TQuizRow Row; int i; int ival; int group; int ok; char str[80]; TFile file(filename, 0); int GroupSum[GROUP_COUNT]; int GroupCount[GROUP_COUNT]; file.Write("\"\", "); file.Write("\"\", "); for (i = 0; i < GROUP_COUNT; i++) { file.Write("\""); strncpy(str, Group[i].PosName, 35); str[35] = 0; // sprintf(str, "#%d", i + 1); file.Write(str); file.Write("\""); if (i != GROUP_COUNT - 1) file.Write(", "); } file.Write("\n"); FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { for (i = 0; i < GROUP_COUNT; i++) { GroupSum[i] = 0; GroupCount[i] = 0; } for (i = 0; i < GetQuizN(); i++) { ival = Row.Quiz[i]; if (ival) { if (Quiz[i].Reverse) ival = 3 - ival; else ival--; group = Quiz[i].MyGroup; GroupSum[group] += ival; GroupCount[group]++; } } ok = TRUE; for (i = 0; i < GROUP_COUNT; i++) if (GroupCount[i] == 0) ok = FALSE; if (ok) { sprintf(str, "\%d\", ", Row.AsResult); file.Write(str); sprintf(str, "\"%d\", ", Row.NtResult); file.Write(str); for (i = 0; i < GROUP_COUNT; i++) { ival = round(100.0 * (long double)GroupSum[i] / (long double)GroupCount[i]); sprintf(str, "\"%d\"", ival); file.Write(str); if (i != GROUP_COUNT - 1) file.Write(", "); } file.Write("\n"); } } } /*################## TQuizExp2::ImportMvsp ########################## * Purpose....: Import MVSP loadings # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::ImportMvsp(const char *filename, int PcaType) { char buf[MAX_IN_ROW]; int size; char *rowstr; char *ptr; long pos = 0; int i; long double d1, d2, d3, d4; int q; int count; TFile infile(filename); while (size = infile.Read(buf, MAX_IN_ROW)) { buf[size] = 0; rowstr = strstr(buf, "#"); if (rowstr) { rowstr++; ptr = strstr(rowstr, "\r"); if (ptr) *ptr = 0; else rowstr = 0; } pos += strlen(buf) + 1; infile.SetPos(pos); if (rowstr) { for (i = 0; i < strlen(rowstr); i++) { switch (rowstr[i]) { case ',': rowstr[i] = '.'; break; case 0x9: case 0xd: rowstr[i] = ' '; break; } } if (sscanf(rowstr, "%d %Lf %Lf %Lf %Lf", &q, &d1, &d2, &d3, &d4) == 5) { if (PcaType != PCA_TYPE_MIXED) { if (PcaType == PCA_TYPE_FEMALE || PcaType == PCA_TYPE_MALE) d2 = -d2; if (PcaType == PCA_TYPE_ALL) d3 = -d3; // if (PcaType == PCA_TYPE_ALL) // d4 = -d4; // if (d1 > 0 && d2 > 0) // { // if (d1 > d2) // { // d1 = d1 - d2; // d2 = 0; // } // else // { // d2 = d2 - d1; // d1 = 0; // } // } } switch (PcaType) { case PCA_TYPE_ALL: Quiz[q - 1].Pca[0] = d1; Quiz[q - 1].Pca[1] = d2; Quiz[q - 1].Pca[2] = d3; Quiz[q - 1].Pca[3] = d4; break; case PCA_TYPE_MALE: Quiz[q - 1].MalePca[0] = d1; Quiz[q - 1].MalePca[1] = d2; Quiz[q - 1].MalePca[2] = d3; Quiz[q - 1].MalePca[3] = d4; break; case PCA_TYPE_FEMALE: Quiz[q - 1].FemalePca[0] = d1; Quiz[q - 1].FemalePca[1] = d2; Quiz[q - 1].FemalePca[2] = d3; Quiz[q - 1].FemalePca[3] = d4; break; case PCA_TYPE_YOUNG: Quiz[q - 1].YoungPca[0] = d1; Quiz[q - 1].YoungPca[1] = d2; Quiz[q - 1].YoungPca[2] = d3; Quiz[q - 1].YoungPca[3] = d4; break; case PCA_TYPE_OLD: Quiz[q - 1].OldPca[0] = d1; Quiz[q - 1].OldPca[1] = d2; Quiz[q - 1].OldPca[2] = d3; Quiz[q - 1].OldPca[3] = d4; break; case PCA_TYPE_ASIA: Quiz[q - 1].AsiaPca[0] = d1; Quiz[q - 1].AsiaPca[1] = d2; Quiz[q - 1].AsiaPca[2] = d3; Quiz[q - 1].AsiaPca[3] = d4; break; case PCA_TYPE_AS: Quiz[q - 1].AsPca[0] = d1; Quiz[q - 1].AsPca[1] = d2; Quiz[q - 1].AsPca[2] = d3; Quiz[q - 1].AsPca[3] = d4; break; case PCA_TYPE_MIXED: Quiz[q - 1].MixedPca[0] = d1; Quiz[q - 1].MixedPca[1] = d2; Quiz[q - 1].MixedPca[2] = d3; Quiz[q - 1].MixedPca[3] = d4; break; } } } } } /*################## round ########################## * Purpose....: round long double to int # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ int round(long double val) { return (int)(val + 0.5); } /*################## WriteCenteredFieldHeader ########################## * Purpose....: Write centered field header for table # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void WriteCenteredFieldHeader(TFile &File, int RelWidth) { char str[80]; sprintf(str, "\n\n", RelWidth); File.Write(str); File.Write("

\n"); File.Write("\n"); } /*################## WriteFieldFooter ########################## * Purpose....: Write field footer for table # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void WriteFieldFooter(TFile &File) { File.Write("\n\n"); File.Write("

\n"); File.Write("\n"); } /*################## TRace::TRace ########################## * Purpose....: Initialize TRace # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ TRace::TRace() { int i; for (i = 0; i < 10; i++) { UsCount[i] = 0; UsAsCount[i] = 0; NonUsCount[i] = 0; NonUsAsCount[i] = 0; } } /*################## TRace::Add ########################## * Purpose....: Add an answer # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TRace::Add(TQuizRow *Row) { int index = -1; int diff = Row->AsResult - Row->NtResult; if (Row->Country == 7302) { if (Row->Ancestry == 3) index = 0; // american indian if (Row->Ancestry == 5) index = 1; if (Row->Ancestry == 6) index = 2; // hispanic if (Row->Ancestry >= 1000 && Row->Ancestry < 2000) index = 1; if ((Row->Ancestry >= 2000 && Row->Ancestry < 3000) || Row->Ancestry == 3205) index = 3; // white if (Row->Ancestry >= 3000 && Row->Ancestry < 4000 && Row->Ancestry != 3205) index = 4; // arab if (Row->Ancestry >= 4000) index = 5; // asian if (index >= 0) { UsCount[index]++; if (diff >= 35) UsAsCount[index]++; } } else { if (Row->Ancestry == 3) // && Row->Hair >= 6 && Row->Eye >= 5) index = 0; // american indian if (Row->Ancestry == 5) index = 1; // african american if (Row->Ancestry == 6) index = 2; // hispanic if (Row->Ancestry >= 1000 && Row->Ancestry < 2000) index = 3; // black african if ((Row->Ancestry >= 2000 && Row->Ancestry < 3000) || Row->Ancestry == 3205) index = 4; // white if (Row->Ancestry >= 3000 && Row->Ancestry < 4000 && Row->Ancestry != 3205) index = 5; // arab if (Row->Ancestry >= 4000) index = 6; // asian if (index >= 0) { NonUsCount[index]++; if (diff >= 35) NonUsAsCount[index]++; } } } /*################## TRace::WriteHeader ########################## * Purpose....: Write header in table # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TRace::WriteHeader(TFile &file) { file.Write(""); WriteCenteredFieldHeader(file, 25); file.Write("Race"); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); file.Write("All"); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); file.Write("Aspie"); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); file.Write("Interest"); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); file.Write("AS proportion"); WriteFieldFooter(file); file.Write(""); } /*################## TRace::WriteEntry ########################## * Purpose....: Write entry in table # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TRace::WriteEntry(TFile &file, int val, int count) { char str[80]; long double dev; long double sd; long double mean; long double r; long double rsum; int ival; WriteCenteredFieldHeader(file, 12); #ifdef CI mean = (long double)val / (long double)count; r = 1.0 - mean; rsum = (long double)val * r * r; r = -mean; rsum += (long double)(count - val) * r * r; if (count > 1 && val) { sd = sqrt(rsum / ((long double)count - 1)); dev = 1.96 * sd / sqrt(count); r = mean - dev; if (r < 0.0) r = 0.0; ival = round(1000.0 * r); sprintf(str, "%d.%01d", ival / 10, ival % 10); file.Write(str); r = mean + dev; if (r > 1.0) r = 1.0; ival = round(1000.0 * r); sprintf(str, "-%d.%01d%", ival / 10, ival % 10); file.Write(str); } else file.Write("---"); #else ival = val * 1000 / count; sprintf(str, "%d.%01d%", ival / 10, ival % 10); file.Write(str); #endif WriteFieldFooter(file); } /*################## TRace::WriteUsRow ########################## * Purpose....: Write row in table # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TRace::WriteUsRow(TFile &file, int index, const char *text) { char str[80]; int sum; int i; file.Write(""); WriteCenteredFieldHeader(file, 25); file.Write(text); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); sprintf(str, "%d", UsCount[index]); file.Write(str); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); sprintf(str, "%d", UsAsCount[index]); file.Write(str); WriteFieldFooter(file); sum = 0; for (i = 0; i < 10; i++) sum += UsCount[i]; if (sum) { WriteEntry(file, UsCount[index], sum); if (UsCount[index]) WriteEntry(file, UsAsCount[index], UsCount[index]); } else file.Write("---"); file.Write(""); } /*################## TRace::WriteNonUsRow ########################## * Purpose....: Write row in table # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TRace::WriteNonUsRow(TFile &file, int index, const char *text) { char str[80]; int sum; int i; file.Write(""); WriteCenteredFieldHeader(file, 25); file.Write(text); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); sprintf(str, "%d", NonUsCount[index]); file.Write(str); WriteFieldFooter(file); WriteCenteredFieldHeader(file, 12); sprintf(str, "%d", NonUsAsCount[index]); file.Write(str); WriteFieldFooter(file); sum = 0; for (i = 0; i < 10; i++) sum += NonUsCount[i]; if (sum) { WriteEntry(file, NonUsCount[index], sum); if (NonUsCount[index]) WriteEntry(file, NonUsAsCount[index], NonUsCount[index]); } else file.Write("---"); file.Write(""); } /*################## TQuizExp2::WriteRace ########################## * Purpose....: Write race report # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::WriteRace(const char *filename) { TQuizRow Row; int i; int ival; char str[80]; TFile file(filename, 0); TRace race; FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) race.Add(&Row); file.Write("

US population

"); file.Write(""); TRace::WriteHeader(file); race.WriteUsRow(file, 0, "Native American"); race.WriteUsRow(file, 1, "Black African"); race.WriteUsRow(file, 2, "Hispanic"); race.WriteUsRow(file, 3, "Caucasian"); race.WriteUsRow(file, 4, "Arab"); race.WriteUsRow(file, 5, "Asian"); file.Write("
"); file.Write("

"); file.Write("

Non-US population

"); file.Write(""); TRace::WriteHeader(file); race.WriteNonUsRow(file, 0, "Native American"); race.WriteNonUsRow(file, 1, "African American"); race.WriteNonUsRow(file, 2, "Hispanic"); race.WriteNonUsRow(file, 3, "African"); race.WriteNonUsRow(file, 4, "Caucasian"); race.WriteNonUsRow(file, 5, "Arab"); race.WriteNonUsRow(file, 6, "Asian"); file.Write("
"); } /*################## TQuizExp2::WriteRetest ########################## * Purpose....: Write retest report # * In params..: * # * Out params.: * # * Returns....: * # * Created....: 96-11-20 le # *##########################################################################*/ void TQuizExp2::WriteRetest(const char *filename) { TQuizRow Row; int userid; int i; int index; int birthyear; int birthmonth; int gender; long double val; long double AsSum; long double NtSum; long double AsMean; long double NtMean; long double QMean[147]; long double AsSd; long double NtSd; long double QSd[147]; long double AsTot; long double NtTot; int AsCount; int NtCount; long double QTot[147]; int QCount[147]; long double sd; int AsArr[20]; int NtArr[20]; int q; int count; long double sum; int QArr[14][20]; int ok; char str[80]; TFile file(filename, 0); for (userid = 0; userid < MAX_USERS; userid++) UserInfo[userid] = 0; FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { userid = Row.userid; if (userid) { if (UserInfo[userid] == 0) { UserInfo[userid] = new TUserInfo; UserInfo[userid]->Count = 1; UserInfo[userid]->BirthYear = Row.BirthYear; UserInfo[userid]->BirthMonth = Row.BirthMonth; UserInfo[userid]->AsSum = Row.AsResult; UserInfo[userid]->NtSum = Row.NtResult; } else UserInfo[userid]->Count++; } } AsCount = 0; NtCount = 0; AsTot = 0; NtTot = 0; for (q = 0; q < 147; q++) { QTot[q] = 0; QCount[q] = 0; } for (userid = 1; userid < MAX_USERS; userid++) { if (UserInfo[userid]) { if (UserInfo[userid]->Count > 1) { for (i = 0; i < 20; i++) { AsArr[i] = 0; NtArr[i] = 0; for (q = 0; q < 14; q++) QArr[q][i] = 0; } index = 0; FDataFile.SetPos(0); while (FDataFile.Read(&Row, sizeof(Row))) { if (Row.userid == userid) { ok = FALSE; if (index == 0) { birthyear = Row.BirthYear; birthmonth = Row.BirthMonth; gender = Row.Gender; ok = TRUE; UserInfo[userid]->Count = 1; UserInfo[userid]->BirthYear = Row.BirthYear; UserInfo[userid]->BirthMonth = Row.BirthMonth; UserInfo[userid]->AsSum = Row.AsResult; UserInfo[userid]->NtSum = Row.NtResult; } else { if ( birthyear == Row.BirthYear && birthmonth == Row.BirthMonth && gender == Row.Gender) { ok = TRUE; UserInfo[userid]->Count++; UserInfo[userid]->AsSum += Row.AsResult; UserInfo[userid]->NtSum += Row.NtResult; } } if (ok) { AsArr[index] = Row.AsResult; NtArr[index] = Row.NtResult; for (q = 0; q < 14; q++) QArr[q][index] = Row.Quiz[q]; index++; } } } if (index > 1) { AsSum = 0; NtSum = 0; for (i = 0; i < index; i++) { AsSum += AsArr[i]; NtSum += NtArr[i]; } AsMean = AsSum / index; NtMean = NtSum / index; for (q = 0; q < 147; q++) { count = 0; sum = 0; for (i = 0; i < index; i++) { if (QArr[q][i]) { sum += QArr[q][i] - 1; count++; } } if (count) QMean[q] = sum / count; else QMean[q] = 0; } AsSum = 0; NtSum = 0; for (i = 0; i < index; i++) { val = AsArr[i] - AsMean; AsSum += val * val; val = NtArr[i] - NtMean; NtSum += val * val; } AsSd = sqrt(AsSum / index); NtSd = sqrt(NtSum / index); for (q = 0; q < 147; q++) { count = 0; sum = 0; for (i = 0; i < index; i++) { if (QArr[q][i]) { val = QArr[q][i] - 1 - QMean[q]; sum += val * val; count++; } } if (count) { QSd[q] = sqrt(sum / count); QTot[q] += QSd[q]; QCount[q]++; } else QSd[q] = 0; } AsTot += AsSd; AsCount++; NtTot += NtSd; NtCount++; // sprintf(str, "Userid: %d, AS: %5.1Lf (%5.1Lf), NT: %5.1Lf (%5.1Lf)
", userid, AsMean, AsSd, NtMean, NtSd); // file.Write(str); // // for (q = 0; q < 135; q++) // { // if (QSd[q] > 0.1) // { // sprintf(str, "#%d, Sd = %5.1Lf
", q, QSd[q]); // file.Write(str); // } // } } } } } AsSd = AsTot / AsCount; NtSd = NtTot / NtCount; #ifdef ENGLISH file.Write("

Retest result

\n"); #endif #ifdef SWEDISH file.Write("

Omtestnings resultat

\n"); #endif #ifdef ENGLISH sprintf(str, "Population size: %d", AsCount); #endif #ifdef SWEDISH sprintf(str, "Populationsstorlek: %d", AsCount); #endif file.Write(str); file.Write("

"); #ifdef ENGLISH sprintf(str, "AS score standard deviation: %2.1Lf", AsSd); #endif #ifdef SWEDISH sprintf(str, "AS poäng standardavvikelse: %2.1Lf", AsSd); #endif file.Write(str); file.Write("
"); #ifdef ENGLISH sprintf(str, "NT score standard deviation: %2.1Lf", NtSd); #endif #ifdef SWEDISH sprintf(str, "NT poäng standardavvikelse: %2.1Lf", NtSd); #endif file.Write(str); file.Write("

"); }