void myFunc2(void) { const int iARRSIZE = 5; int iArrayNumbersOne[iARRSIZE], iArrayNumbersTwo[iARRSIZE*2]; int iArrayStatistic[iARRSIZE*3] = {0}; int iArrayNumsMem[iARRSIZE*3] = {0}; bool iFlags = true; int iPressKey = 1, iRandomNums = 5; for(bool bDraw;; bDraw = false) { /* *Resetting the resulting array */ for(int i = 0; i < (sizeof(iArrayStatistic)/sizeof(int)); ++i) { iArrayStatistic[i] = 0; iArrayNumsMem[i] = 0; } /* *Fill array ONE with random numbers */ for(int i = 0; i < (sizeof(iArrayNumbersOne)/sizeof(int)); ++i) { iArrayNumbersOne[i] = rand()%iRandomNums+1; } /* *Fill array TWO with random numbers */ for(int i = 0; i < (sizeof(iArrayNumbersTwo)/sizeof(int)); ++i) { iArrayNumbersTwo[i] = rand()%iRandomNums+1; } /* *Making a report on matching numbers */ for(int i = 0; i <= (sizeof(iArrayNumbersOne)/sizeof(int)); ++i) { for(int j = i; j <= (sizeof(iArrayNumbersTwo)/sizeof(int)); ++j) { if(iArrayNumbersOne[i] == iArrayNumbersTwo[j]) { for(int k = 0; k <=(sizeof(iArrayNumsMem)/sizeof(int)); ++k) { /* *Check if there was any calculated the number of */ if(iArrayNumbersOne[i] == iArrayNumsMem[k]) { iFlags = false; break; } else { iFlags = true; } } if(iFlags) { iArrayNumsMem[i] = iArrayNumbersOne[i]; } if(iArrayNumsMem[i]) { ++iArrayStatistic[i]; } } } } /* *Menu selection */ std::cout<<"Enter the type of sorting"<<std::endl; std::cout<<std::endl; std::cout<<"\"1\" Sort by largest number of matched"<<std::endl; std::cout<<std::endl; std::cout<<"\"2\" Sorting and matching numbers"<<std::endl; std::cout<<std::endl; std::cout<<"\"Any key\" No Sorting"<<std::endl; std::cout<<std::endl; std::cout<<"\"Esc\" Exit"<<std::endl; std::cout<<std::endl; iPressKey = _getch(); switch(iPressKey) { case 224: ; break; case 49: /* *Sort by largest number of matched */ for(int i = 0; i < (sizeof(iArrayNumsMem)/sizeof(int)); ++i) { for(int j = 0, temp; j < (sizeof(iArrayNumsMem)/sizeof(int)); ++j) { if(iArrayNumsMem[i] > iArrayNumsMem[j]) { temp = iArrayNumsMem[j]; iArrayNumsMem[j] = iArrayNumsMem[i]; iArrayNumsMem[i] = temp; temp = iArrayStatistic[j]; iArrayStatistic[j] = iArrayStatistic[i]; iArrayStatistic[i] = temp; } } } bDraw = true; break; case 50: /* *Sorting and matching numbers */ for(int i = 0; i < (sizeof(iArrayStatistic)/sizeof(int)); ++i) { for(int j = 0, temp; j < (sizeof(iArrayStatistic)/sizeof(int)); ++j) { if(iArrayStatistic[i] > iArrayStatistic[j]) { temp = iArrayStatistic[j]; iArrayStatistic[j] = iArrayStatistic[i]; iArrayStatistic[i] = temp; temp = iArrayNumsMem[j]; iArrayNumsMem[j] = iArrayNumsMem[i]; iArrayNumsMem[i] = temp; } } } bDraw = true; break; case 27: exit(0); break; default: bDraw = true; break; } if(bDraw) { system("cls"); /* *Output results */ std::cout<<"The values recorded in the array"<<std::endl; std::cout<<std::endl; std::cout<<std::setw(7)<<"Arr ONE"<<' '; for(int i = 0; i < (sizeof(iArrayNumbersOne)/sizeof(int)); ++i) { std::cout<<std::setw(3)<<iArrayNumbersOne[i]<<' '; } std::cout<<std::endl; std::cout<<std::endl; std::cout<<std::setw(7)<<"Arr TWO"<<' '; for(int i = 0; i < (sizeof(iArrayNumbersTwo)/sizeof(int)); ++i) { std::cout<<std::setw(3)<<iArrayNumbersTwo[i]<<' '; } std::cout<<std::endl; std::cout<<std::endl; std::cout<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"<<std::endl; std::cout<<std::endl; std::cout<<std::setw(6)<<"Numers"<<' '; std::cout<<std::setw(6)<<"SumNum"<<' '; std::cout<<std::setw(6)<<"Percent"<<std::endl; for(int i = 0, result, counter=0; i < (sizeof(iArrayNumbersTwo)/sizeof(int)); ++i) { /* *Getting the total number of matches */ for(int j = 0; j < (sizeof(iArrayStatistic)/sizeof(int)) && !i; ++j) { if(iArrayStatistic[j]) { counter += iArrayStatistic[j]; } } if(iArrayNumsMem[i]) { result = iArrayStatistic[i] * 100 / counter; std::cout<<std::setw(3)<<iArrayNumsMem[i]<<' '; std::cout<<std::setw(6)<<iArrayStatistic[i]<<' '; std::cout<<std::setw(7)<<result<<'%'<<std::endl; } } } } }
Работа с 2мя массивами (статистика совпадений, сортировка)
Сообщений 1 страница 3 из 3
Поделиться115-03-2011 16:05:22
Поделиться220-03-2011 14:10:53
for(int i = 0; i < (sizeof(iArrayNumbersOne)/sizeof(int)); ++i)
Как выяснилось здесь содержится ошибка, правильно вот так:
for(int i = 0, iSizeArr = (sizeof(iArrayNumbersOne)/sizeof(int)) ; i < iSizeArr ; ++i)
Почему так?
Если вспомнить порядок выполнения условий цикла FOR, а именно:
1я секция выполняется 1 раз, при вхождении в тело цикла;
2я секция выполняется (проверяется), каждый раз при новой итерации цикла;
3я секция выполняется, каждый раз в конце итерации цикла;
С чего выплывает что вычисление размера массива выполняется при каждой новой итерации (что значительно замедляет программу). А объявляя переменную в 1й секции цикла и присваивая ей значение размера массива, мы выполняем вычисление всего 1 раз, а переменная существует только в теле цикла.
Поделиться314-07-2023 14:33:53
High186.6AIDSBlamTheoRaviJeweGeraJereMoanJoseDuraTescTrumBrisWillscreBrasClifDolbAlicFast
FiskeasyJanaXVIIGoldRockNoboTaftaudeHughOSDSAlexJogoTranBourSpecElecSpecKareSalwIrisXVII
LivePlayPegaMartBraiChriCaroFashStreNeedEverXIIIWindTentRootMariGeneArthThenLuxoMasqClif
PetePierThatPushLoviLudwSamuScraClivSonyWindGregWindPariWindTurnZoneKarlJeweLifeAmerArts
IsaaEverJeweDelpArtsZoneArtsPleaTherZoneShanHalfAvenStorZoneRichJohaZonepoweBeebGeniRick
ZoneElleJeweBonuNoelRemieugeMadeFLACXXIIWindMielMielINTEStefBookRobeBadiBelaVIIIJoinGroo
ParkLanzPROTRainThisJazzApexFranDylaMadeMORGElviRoyaWindWindWindProfKenwKirsRoadMonACald
JoseDaviSpacLaurShanRobeSummFaldlychXVIIAescKiddMcKiXIIIEricASchRalpKissHuawMahlRobeBeli
BoriGlorJameCharRollJaniArtuStrebonuThroAndrParaNapoTomaDrWeInteEnglPistXVIIJeanWindJona
ExceAngeGaryMicrTuesXVIIStepFLACFLACFLACGeneLifeAstrRogeVandJoseClasGregPeteEconJohaDail
tuchkasLuciTiin