Помогите новичку. Скажите нафига нужны массивы, а то в книгах как то заумно пишут. Объясните понятным языком
agent669212 удобно данными управлять из массива... допустим у тебя есть сайт с расписанием на занятий , расписание хранится в базе по дням недели с понедельника по субботу, вытаскиваешь данные sql запросом все сразу, и запихиваешь в javascript массив из 6 ячеек, и читаешь из него когда тебе надо, допустим человек нажал на "вторник" ему ячейка массива для вторника показывается, без дополнительных запросов к базе... или допустим у меня кеш файл читается в массив, там много категорий в общем удобно...
Массивы нужны для разных задач. Обычно для того, чтобы хранить вместе логически связаные между собой данные. Например, без массив хранить данные пользователей надо было бы так: PHP: <?php // Пользователи $user1_name = 'Alex'; $user1_password = '123qwe'; $user2_name = 'Vasya'; $user2_password = '75227'; // Просмотр данных echo 'Пользователь 1, Имя: ', $user1_name, ' пароль: ', $user1_password, '<br>'; echo 'Пользователь 2, Имя: ', $user2_name, ' пароль: ', $user2_password, '<br>'; а с массивами удобнее: PHP: <?php // Пользователи $users = array(); $users[1] = array('name' => 'Alex', 'password' => '123qwe'); $users[2] = array('name' => 'Vasya', 'password' => '75227'); // Просмотр данных foreach ($users as $n => $user) { echo 'Пользователь ',$n, ', Имя: ', $user['name'], ' пароль: ', $user['password'], '<br>'; }
Код (Text): #include <cstdlib> #include <cstdio> #include <cmath> using namespace std; int main() { // Массив с данными __int16 Degrees[] = {30, 45, 60, 90, 180, 270, 360}; const double PI = asin((float)1)*2; // Считаем синусы углов в массиве for(int i = 0; i < (sizeof Degrees / sizeof(__int16));i++) { printf("sin %d = %f\n", *(Degrees + i), sin(Degrees[i]*PI/180)); } return EXIT_SUCCESS; } Может, уважаемый автор темы, у вас есть другой вариант без массивов?
Apple слушай, есть в Си++ норм таймер в миллисекундах, нужно замерить время работы функции чё-то вот это даёт больно мелкие значения... Код (Text): long double UpdateTime(){ long double deltaTime; static __int64 gTime,gLastTime; __int64 freq; QueryPerformanceCounter((LARGE_INTEGER *) &gTime); QueryPerformanceFrequency((LARGE_INTEGER *) &freq); deltaTime = (long double)((long double)(gTime - gLastTime)/(long double)freq); gLastTime = gTime; return deltaTime; }
Mr.M.I.T. http://codelab.ru/task/microsec_counter/ Вот по такому типу, готового в С++ ничего нет =) Твой вариант ты можешь просто формировать подобным образом: Код (Text): std::printf("%f\n", timer->Get()*10E4); Значащие цифры довольно точные получаются, но такты зависят уже от системы. Можно использовать встроенную функцию clock (смотри доку по ctime.h). Там идет отсчет со времени работы программы, его брать за абсолютную величину.
Ну это нормально =) Встроенного таймера в С++ нет, т.е считать микросекунды мы не можем, просто вызвав функцию. Обходные пути - это WinAPI с фиксированым хендлером. Значение времени выполнения и должно быть разным, можно из нескольких запусков брать среднее арифметическое/геометрическое, от него уже не будет отличаться. А так - нет. Хотя может я чего не понял, но это вполне нормальное поведение измерений.
вообще прикол в том, что время для первого выбранного метода возвращается всегда около 0.000096 для остальных около 0.00010 всё это дело в цикле Код (Text): while(1){ string method; cout <<"Enter operation type(MPD,MN,MPI)"<<endl; cin >>method; transform(method.begin(),method.end(),method.begin(),toupper); long double timer=UpdateTime(); switch(methods[method]){ case MPD: result=MethodMPD(); timer=UpdateTime(); break; case MN: result=MethodMN(); timer=UpdateTime(); break; case MPI: result=MethodMPI(); timer=UpdateTime(); break; default: cout <<"Error: Method "<<method<<" not exists"<<endl; goto end; } что-то тут не так всётаки с Код (Text): long double UpdateTime(){ long double res; static __int64 gTime=NULL,gLastTime=NULL; QueryPerformanceCounter((LARGE_INTEGER *) &gTime); if(!gLastTime){ gLastTime=gTime; res=(long double)gTime; }else{ __int64 freq; QueryPerformanceFrequency((LARGE_INTEGER *) &freq); res=(long double)(gTime - gLastTime)/(long double)freq; gLastTime=NULL; } return res; }
Слух, я набросал тебе пример, плиз, разберись с ним сам) Мне лень разбивать его на функцию отдельную =) А вообще, я предпочел бы класс с методами Start, Stop, Clear и Get Код (Text): #include <cstdlib> #include <cstdio> #include <windows.h> /** * Entry Point */ int main(int argc, char* argv[]) { unsigned __int64 freq, start, end; // Инициализируем QueryPerformanceFrequency((LARGE_INTEGER*) &freq); QueryPerformanceCounter((LARGE_INTEGER*) &start); // Выполняем херню разную на время for(int i = 0; i <= 2048; i++) { std::printf("%d\n", (i*i)); } // Фиксируем время остановки таймера QueryPerformanceCounter((LARGE_INTEGER*) &end); // Вернем правильный результат =) std::printf("----\n\nTime: %f\n\n", ((float)(end - start) / freq)); system("pause"); return 0; };
тоже прыгает. от 0.072 до 0.089 Код (Text): #include <cstdlib> #include <cstdio> #include <windows.h> /** * Entry Point */ int main(int argc, char* argv[]) { signed __int64 freq, start, end; // Инициализируем QueryPerformanceFrequency((LARGE_INTEGER*) &freq); QueryPerformanceCounter((LARGE_INTEGER*) &start); // Выполняем херню разную на время for(int i = 0; i <= 2048; i++) { printf("%d\n", (i*i)); } // Фиксируем время остановки таймера QueryPerformanceCounter((LARGE_INTEGER*) &end); // Вернем правильный результат =) printf("----\n\nTime: %f\n\n", ((float)(end - start) / freq)); system("pause"); return 0; };