Maksim Neimerik: Нет, не туго. Неумесное замечание с Вашей стороны, и совсем не дружественное...
Вообще-то я очень дружелюбный человек, но твой вопрос не соответствует тому в чём не получается решить эту проблему. Что плохого в моём вопросе? Если без массива сможешь сделать то что надо, то и вопрос будет другой. В отличии от многих на этом форуме я стараюсь направить мысль в нужном направлении, а не писать примеры кода. Исключением являются вопросы которые я не знаю и которые надо проверять прежде чем что-то говорить по этому поводу.
Что за «Проблема XY»?Это ошибка, которая зачастую приводит к бессмысленной трате времени как просящего о помощи, так и тех, кто пытается ему отвечать. Её ещё называют «Проблемой Молотка». Суть её,...
к чему нужно стремиться. 1 краткость кода, короче код быстрее выполнение. 2 меньшее количество переменных в работе, меньше переменных меньше памяти занимает программа в озу. 3 заменять "дорогие" функции "дешевыми", в данном случае цена это машинное время, если функция выполняется дольше, чем ее аналог по времени, замените ее аналогичной функцией. 4 рекурсивный вызов, если это необходимо, вместо написания дополнительной функции, вызов функции самой себя с новыми параметрами вместо написания дополнительной функции которая делает то же самое что и первая.
а еще говорят краткость сестра таланта.
double zz(int w)//получаем номер фрактала который нужно найти
{
int sch=0,q=-1;double pr=0;
while(sch<w)
{
q++;
pr=Ind(q);
if(pr!=0)sch++;
}
//return(pr);//если нужно вернуть цену, снять комментарий с этой строкиreturn(q);//если нужно вернуть номер бара
}
Andrey Kisselyov: к чему нужно стремиться. 1 краткость кода, короче код быстрее выполнение. 2 меньшее количество переменных в работе, меньше переменных меньше памяти занимает программа в озу. 3 заменять "дорогие" функции "дешевыми", в данном случае цена это машинное время, если функция выполняется дольше, чем ее аналог по времени, замените ее аналогичной функцией. 4 рекурсивный вызов, если это необходимо, вместо написания дополнительной функции, вызов функции самой себя с новыми параметрами вместо написания дополнительной функции которая делает то же самое что и первая.
а еще говорят краткость сестра таланта. с уважением. P.S. таже функция без лишних слов. )))
Насчет короче код быстрее выполнение хочу Вас разочаровать. Вот два примера, результат одинаков. Длинный выполняется быстрее
int t=0; for(int k=1; k<101; k++) t+=k; Alert("t=",t);
А вот такой вариант дает тот же результат, но у кого-то вызовет недоумение
int y,n; for(y=0, n=1; n<101; y+=n, ++n); Alert("y=",y);
Согласно легенде, школьный учитель математики юного Гаусса,
чтобы занять детей на долгое время, предложил им сосчитать сумму чисел
от 1 до 100. Гаусс заметил, что попарные суммы с противоположных концов
одинаковы: 1+100=101, 2+99=101 и т. д. Как только учитель закончил, он сказал: Готово, 5050. Программист-математик, знающий прогрессии написал бы короче и быстродействующе.
Alert("Сумма прогрессии = ",100*(1+100)/2); // При перестановке округляет при делении (1+100)/2*100 = 5000 вместо 5050
Насчет короче код быстрее выполнение хочу Вас разочаровать. Вот два примера, результат одинаков. Длинный выполняется быстрее
Какой-то любитель краткости может записать так
А вот такой вариант вполне допустим, но у кого-то вызовет недоумение
Согласно легенде, школьный учитель математики юного Гаусса,
чтобы занять детей на долгое время, предложил им сосчитать сумму чисел
от 1 до 100. Гаусс заметил, что попарные суммы с противоположных концов
одинаковы: 1+100=101, 2+99=101 и т. д. Как только учитель закончил, он сказал: Готово, 5050. Программист-математик, знающий прогрессии написал бы короче и быстродействующе.
добрый день. меня вы не разочаруете, смотрите пункт 3. и вам станет понятно почему математическая операция, приведенная вами, выполняется быстрее. в теле цикла мы тратим машинное время не только на математику(она там присутствует по любому как и в примере 1), но и на 1 запоминание переменной 2 ее приращение 3 сравнение с условием и это на каждом сложении. получаем что самым скоростным из всех ваших примеров будет последний.
Спасибо за солидарность и развернутое пояснение. Потом проверил исправил выбросил (int). Компьютер выполняет все действия поочередно. И после каждого сложения результат запоминается. В зависимости от оптимизации транслятором запоминать может в регистре (что быстрее), а может в оперативной памяти. В варианте с циклом также могут использоваться регистровые переменные
Спасибо за солидарность и развернутое пояснение. Потом проверил исправил выбросил (int). Компьютер выполняет все действия поочередно. И после каждого сложения результат запоминается. В зависимости от оптимизации транслятором запоминать может в регистре (что быстрее), а может в оперативной памяти. В варианте с циклом также могут использоваться регистровые переменные
Alert("Сумма прогрессии = ",100*(1+100)/2); // При перестановке округляет при делении (1+100)/2*100 = 5000 вместо 5050
почему считает так и выдает ошибку. (1+100)результат101 101/2 результат 50 (почему 50 скажете вы да потому что здесь по умолчанию применяются числа INT что в результате дает округление до целых) 50*100=5000 как написать чтоб получить верный ответ в таком порядке? можно так (1.0+100.0)/2.0*100.0, тут мы сразу все числа приводим к формату DOUBLE а можно привести только первое число к этому формату и все выражение будет считаться в этом формате(не проверял, но по идее должно работать.) (1.0+100)/2*100
Но второй вариант самый простой. Посмотрите внимательно - там запись трижды в одну переменную. Массив для обработки многих однородных элементов
Нет, не туго. Неумесное замечание с Вашей стороны, и совсем не дружественное...
Вообще-то я очень дружелюбный человек, но твой вопрос не соответствует тому в чём не получается решить эту проблему. Что плохого в моём вопросе? Если без массива сможешь сделать то что надо, то и вопрос будет другой. В отличии от многих на этом форуме я стараюсь направить мысль в нужном направлении, а не писать примеры кода. Исключением являются вопросы которые я не знаю и которые надо проверять прежде чем что-то говорить по этому поводу.
Примерно вот так происходит довольно часто:
1 краткость кода, короче код быстрее выполнение.
2 меньшее количество переменных в работе, меньше переменных меньше памяти занимает программа в озу.
3 заменять "дорогие" функции "дешевыми", в данном случае цена это машинное время, если функция выполняется дольше, чем ее аналог по времени, замените ее аналогичной функцией.
4 рекурсивный вызов, если это необходимо, вместо написания дополнительной функции, вызов функции самой себя с новыми параметрами вместо написания дополнительной функции которая делает то же самое что и первая.
а еще говорят краткость сестра таланта.
с уважением.
P.S. таже функция без лишних слов. )))
к чему нужно стремиться.
1 краткость кода, короче код быстрее выполнение.
2 меньшее количество переменных в работе, меньше переменных меньше памяти занимает программа в озу.
3 заменять "дорогие" функции "дешевыми", в данном случае цена это машинное время, если функция выполняется дольше, чем ее аналог по времени, замените ее аналогичной функцией.
4 рекурсивный вызов, если это необходимо, вместо написания дополнительной функции, вызов функции самой себя с новыми параметрами вместо написания дополнительной функции которая делает то же самое что и первая.
а еще говорят краткость сестра таланта.
с уважением.
P.S. таже функция без лишних слов. )))
Насчет короче код быстрее выполнение хочу Вас разочаровать. Вот два примера, результат одинаков. Длинный выполняется быстрее
Какой-то любитель краткости может записать так
А вот такой вариант дает тот же результат, но у кого-то вызовет недоумение
Согласно легенде, школьный учитель математики юного Гаусса, чтобы занять детей на долгое время, предложил им сосчитать сумму чисел от 1 до 100. Гаусс заметил, что попарные суммы с противоположных концов одинаковы: 1+100=101, 2+99=101 и т. д. Как только учитель закончил, он сказал: Готово, 5050. Программист-математик, знающий прогрессии написал бы короче и быстродействующе.Насчет короче код быстрее выполнение хочу Вас разочаровать. Вот два примера, результат одинаков. Длинный выполняется быстрее
Какой-то любитель краткости может записать так
А вот такой вариант вполне допустим, но у кого-то вызовет недоумение
Согласно легенде, школьный учитель математики юного Гаусса, чтобы занять детей на долгое время, предложил им сосчитать сумму чисел от 1 до 100. Гаусс заметил, что попарные суммы с противоположных концов одинаковы: 1+100=101, 2+99=101 и т. д. Как только учитель закончил, он сказал: Готово, 5050. Программист-математик, знающий прогрессии написал бы короче и быстродействующе.меня вы не разочаруете, смотрите пункт 3.
и вам станет понятно почему математическая операция, приведенная вами, выполняется быстрее. в теле цикла мы тратим машинное время не только на математику(она там присутствует по любому как и в примере 1), но и на 1 запоминание переменной 2 ее приращение 3 сравнение с условием и это на каждом сложении. получаем что самым скоростным из всех ваших примеров будет последний.с уважением.
Спасибо за солидарность и развернутое пояснение. Потом проверил исправил выбросил (int). Компьютер выполняет все действия поочередно. И после каждого сложения результат запоминается. В зависимости от оптимизации транслятором запоминать может в регистре (что быстрее), а может в оперативной памяти. В варианте с циклом также могут использоваться регистровые переменные
Спасибо за солидарность и развернутое пояснение. Потом проверил исправил выбросил (int). Компьютер выполняет все действия поочередно. И после каждого сложения результат запоминается. В зависимости от оптимизации транслятором запоминать может в регистре (что быстрее), а может в оперативной памяти. В варианте с циклом также могут использоваться регистровые переменные
с уважением.
почему считает так и выдает ошибку.
(1+100)результат101
101/2 результат 50 (почему 50 скажете вы да потому что здесь по умолчанию применяются числа INT что в результате дает округление до целых)
50*100=5000
как написать чтоб получить верный ответ в таком порядке?
можно так (1.0+100.0)/2.0*100.0, тут мы сразу все числа приводим к формату DOUBLE
а можно привести только первое число к этому формату и все выражение будет считаться в этом формате(не проверял, но по идее должно работать.)
(1.0+100)/2*100
с уважением.
Вы глубокий аналитик. Желаю больших достижений