Даны действительные числа s и t.Используя подпрограмму-функцию получить:z=h (S,T)+h4(4-это степень) (S-T,S+T)+h (2,7) h(a,b)=первая дробь: a(делить на)1+b квадрат+вторая дробь: b(делить на)1+a квадрат
Даны действительные числа s и t.Используя подпрограмму-функцию получить:z=h (S,T)+h4(4-это степень) (S-T,S+T)+h (2,7) h(a,b)=первая дробь: a(делить на)1+b квадрат+вторая дробь: b(делить на)1+a квадрат
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
31 марта 2008 в 19:05
дана целочисленная матрица А размером MxN, где M,N – заданные натуральные числа. Сформировать одномерный массив В, где В(j) равно сумме элементов кратных пяти и расположенных в j столбце матрицы, j=1,2…N. если таких элемнтов в j столбце нет, то элементу В(j) присвоить номер столбца. помогите мне пожалуйста!
29 февраля 2008 в 7:03
Антон cppmm Кропачев предложил лучший вариант!
Его варинт возводит еще и в дробную степень. А цикл нет. К тому же его вариант действительно быстрее выполняется на ПК. Неважно, что на таком пк как у Дмитрия цикл быстро выполняется. С точки зрения программирования – это не красиво и не подходит для написания сложных программ)))
29 февраля 2008 в 6:02
Уж не знал, что сейчас уже в школе трудно с логарифмами.. я о них узнал именно в школе. а фраза: "такие операции уже умеет делать FPU" означает, что устройство процессора для выполнения операций над числами с плавающей точкой тратит на вычисление логарифма с основанием 2 один свой такт. ну или до 4-х по-моему в CISC-процессорах. А для быстрых вычислений, кстати, тоже часто используется Си, т.к. он позволяет использовать ассемблерный код (не знаю насчет паскаля). А производительность мощных вычислительных систем уже давно измеряется в TeraFLOPS.
PS. Не хотел здесь разжигать религиозных войн на тему того, какой язык программирования лучше и удобнее.. Но на Си вы зря так Дмитрий. И криптографические алгоритмы и нейросетевые тоже пишутся на Си.
PPS. А школьников гораздо лучше было бы научить писать простые программы на бумаге (чтобы алгоритмы составлять умели), а язык пусть сами выбирают.. Но это так, мое мнение.. Я работаю не в школе, и замечаю, что у многих людей серьезные проблемы с составлением алгоритмов, хоты языков знают милион.
29 февраля 2008 в 0:05
Дмитрий ТИГРА Бородин
Касательно красивостей языка – сам Вирт призывает отказываться от паскаля. А первоначальный бейсик(на которм я изучал программирование когда-то уже морально устарел).
По поводу того, что языки разные – это да. Но ни в одном из них не приветствуется вычисление степени через цикл.
По поводу диплома… Если вы сдали диплом по поводу того, что цикл лучше математической формулы, я хотел бы посмотреть на вашу работу. Честно. Это не сарказм.
Десятичный логарифм есть не во всех языках. В паскале он есть. Почему бы его не использовать, если он улучшает работу программы?
Если давать школьникам ваши способы решения данной задачи, лучше им вообще не давать программировать…
По поводу 2+2 в Си – это одна строчка. )
29 февраля 2008 в 0:03
увы. знаю.но он мне не нравится.он некрасив. могу сказать про вас же – вы значит не знаете паскаля и бэйсика,раз не видите что си уродливее их, а скорее не знаете ни одного, по вашей логике. и причем тут ОС? язык для моделирования одно, для расчетов другое, для вирусов и кряков третье,для инета четвертое, для Ос и приложений пятое, неужель вы будете один считать круче другого в данной ситуации, только потому что он рулит в другой? это бред. и на будущее – не спешите бросаться выводами – я и диплом писал по программированию, и работаю преподавателем программирования, а программы на си , написанные моими товарищами, всегда справлялись с гигантскими расчетами хуже чем паскаль, и в разы хуже чем фортран
29 февраля 2008 в 0:03
Андрейко
Не во всех языках есть десятичный логарифм.Кроме экспоненты поэтому надежных решений не будет.Но мне этот метод не нравится-и изза того что нельзя давать логарифмы школьникам,если они их не проходили,и изза некоторой его лоховости – потому что процедура выглядит красивее. Хотя согласен, в физике дробные степени нужны, в молекулярной уж точно
Си не отстой? сравните , программа в бэйсике чтоб вывести на экран 2+2.и посмотрите ее же в СИ. что отстой просто паскаль для расчетов лучше,и это факт, фортран еще лучше – чем ниже язык, тем он примитивнее,но лучше считает. по крайней мере, так считают те кто занимаются обработкой огромных массивов данных для расчетов физических процессов
29 февраля 2008 в 0:02
Дмитрий ТИГРА Бородин
Неправда. Условие для проверки чётности выполняется один раз. При получении возводимого в степень числа.
А что касательно точности, опять же, обратитесь к математике… Способ с экспонентой взят не с потолка…
P.S. Ваше заявление по поводу Си указывает на то, что вы не знаете, как минимум, языка Си. А скорее всего и многих других. Не сочтите за оскорбление. Просто смутно верится, что знающий человек обзовёт отстоем язык, на основе которого написаны большинство используемых языков программирования и операционных систем…
28 февраля 2008 в 20:00
что касается численных методов, то точность легко нагнать прибавлением нескольких слагаемых ряда. а вообще лучше было бы заменить эту формулу на: x**y=2**(y*log2(x)), т.к. такие операции уже умеет делать FPU, чего не знаю насчет экспоненты (в любом случае суть не меняется). проверок все равно не избежать, но не так их уж и много (в любом случае это будет быстрее чем в цикле умножать, да и посмотрел бы я, если честно, каким бы образом вы возвели бы скажем в степень 1.5, используя цикл)
ЗЫ. да и Си не отстой)
28 февраля 2008 в 19:00
а Си -вообще отстой.на нем все медленно.Ваше условие для проверки четности точно так же будет тормозить комп.Способ же с экспонентой вызывает сомнения – при дробных числах,думаю,он может давать и погрешность изза численных методов.
оптимизировать работу иногда все ж приходится – когда обрабатываются массивы из 100 и более частиц, участвующих в физическом движении.тут уже думаешь и пытаешься все сам улучшить как можно
28 февраля 2008 в 18:04
P.S. Из принципа проверил сейчас ваш способ(правда на Си). Проц Cereron 2.7MHz
Взял сепень 123456789 от 2-ойки…
После 15-ти секунд ожидания прервал выполнение программы. Загрузка проца колебалась от 80-ти до 90 процентов.
Мой способ отработал меньше, чем за одну секунду.
И не говорите, что у меня проц устарел.
28 февраля 2008 в 18:03
Андрейко 2blondinko| Бландинко
+1
Дмитрий ТИГРА Бородин
Я уже говорил выше, это был пример для возведения в чётную степень(и для отрицательных чисел в данном случае оно работает). Для возведения в нечётную степень надо добавить буквально одно условие, проверку на чётность/нечётность и присваивание отрицательности, если верно второе. Так что не стоит кричать про неработоспособность данного(к слову, взятого из математики) способа.
А с вашим старым компом таки попробуйте посчитать предложенное Андрейко.
> конечно,раньше надо было и о типах данных задумываться,чтоб память беречь,и о том чтоб программа поэкономнее была, это да
Как я уже говорил, плохо, что сейчас никто не задумывается и людей в универах не учат оптимизации. И выходит, что современные программы тормозят на современных компах так же, как и 10 лет назад софт тормозил на 286-ых(в большинстве своём)… По вашему выходит, мощьность комповувеличивают для того, чтобы программисты меньше думали и выдавали халтуру, а не для того, чтобы пользователи получали от своего компа больше пользы…
28 февраля 2008 в 17:05
Антон cppmm Кропачев:
зачем ты вообще с ними споришь?? пускай возведут любое число в эту степень: 9527933; и сразу все станет ясно. число это простое, так что придется умножать в цикле 9527933 раз. а вообще все эти функции уже давно написаны, как раз чтобы некоторые меньше думали и херни не городили.
28 февраля 2008 в 17:05
уже сказал. если отрицательное число в степень возводите – не катит.
и у меня лично комп с оперативкой 64мб и процем 333,и ничего. а на более старых редко работают. конечно,раньше надо было и о типах данных задумываться,чтоб память беречь,и о том чтоб программа поэкономнее была, это да
28 февраля 2008 в 17:01
Дмитрий ТИГРА Бородин
Согласен, функцией удобно, когда формула вызывается в программе несколько раз. Что мешает y := Exp(4*Ln(Abs(x)) описать функцией?
Вопрос-то был в другом. Что писать в теле этой функции.
И как правильно вы заметили, на современных компах проблем нет… Вот так и рассуждают современные программеры… И выходит, что с увеличением функционала программы, увеличивается обьъём и падает производительность в геометрической прогрессии. А если сделать по уму, программа с аналогичными возможностями сможет идити и на моём древнем ноуте с 32-умя оперативы и 200MHz процом и на современно стационарном современном компе… А освободившиеся ресурсы железа можно потратить на что-нибудь ещё…
Так и получаются операционные системы, которым для полного функционала нужно 4 гига оперативы… И это для работы какого-нибудь кассира… Обидно…
Серж Андреев
Опять же, для больших степеней нерационально.
28 февраля 2008 в 14:01
Есть вариант проще: x*x*x*x – всех меньше символов!
28 февраля 2008 в 12:04
Дмитрий ТИГРА Бородин
Для возведения в чётную степень не обязательно делать проверку на знак числа, всё равно в итоге положительное выйдет. Поэтому, имхо, лучше использовать эту формулу, к прим еру для 8-ой степени… Или 10-ой… Или 100-ой… А теперь представьте себе время выполнения цикла для вычисления 100-ой степени?
P.S. Возможно я несколько устарел и один из немногих, кто заботится о производительности программ…
Egor Salutan Zvigunov,вданном примере – это и есть такая универсальная функция. Если нужно использовать её постоянно, никто не мешает написать свой unit, включив её туда, и подключать его к своим программам.
28 февраля 2008 в 12:04
Цикл и для 100степени справляется прекрасно,проверял,по крайней мере на современных компах нет проблем.В программах,где степень произвольная,надо писать именно функцию,как сказал Егор,или процедуру, по крайней мере мне как физику именно так надо было бы,ведь степени самые разные могут быть, а когда функция раз прописана, в чем проблема то. Хотя бэйсик круче – там эта функция просто есть:)
28 февраля 2008 в 9:04
А не проще написать фуекцию, котораю возводит что угодно во что угодно, без всяких Abs
28 февраля 2008 в 2:00
Антон
А я вообще с этой хренью про логарифм не согласен, я своих приучил еще в теме циклов составлять процедуру для возведения в степень, а данная хрень только положительные числа выдает, это ламеризм чистый
28 февраля 2008 в 0:04
Сергей Герниченко, точно. Очепятался.
Евгений Толмачев, не согласен. Программа учебная. Надо учиться. А если учиться sqr(sqr()), то в будущем так и будут появляться "индусские программеры", которые и 16-ую и ещё больше степени будут через sqr(sqr(sqr(…))) делать.
28 февраля 2008 в 0:00
Лично я встану на защиту sqr(sqr(x)). Возведение в квадрат может быть реализовано эффективнее, чем возведение в произвольную степень. Особенно, если возведение в степень писать прямо на паскале!
27 февраля 2008 в 21:02
только не y := Exp(4*Abs(Ln(x))., а
y := Exp(4*Ln(Abs(x)).
27 февраля 2008 в 20:00
Спасибо большое=)
27 февраля 2008 в 19:00
Примечание 3.
y := sqr(sqr(x)) – некрасивая конструкция.
Лучше для возведения в степени использовать.
y := Exp(4*Abs(Ln(x)).
Прмечание 3.1.
Хотя в данном примере топикстартеру, возможно проще воспользоваться некрасивым вариантом.
27 февраля 2008 в 18:04
Примечание 2. Слово "function" означает начало определения функции!
27 февраля 2008 в 18:00
function h(a, b: Real): Real;
begin
h := a / (1 + sqr(b)) + b / (1 + sqr(a));
end;
var
S, T, z: Real;
begin
Readln(S);
Readln(T);
z := h(S, T) + Sqr(Sqr(h(S – T, S + T))) + h(2, 7);
Writeln(z);
end.
Примечание: функция sqr(a) возвращает квадрат числа a
27 февраля 2008 в 17:05
ужис… на этом ещё пишут?
27 февраля 2008 в 17:05
у нас в вузе да=)
27 февраля 2008 в 17:03
//vkontakte.ru/photos.php?act=show&id=44658...
27 февраля 2008 в 17:02
девушка пишите понятнее))