Series26. Даны целые числа $$K$$, $$N$$ и набор из $$N$$ вещественных чисел: $$A_1, A_2, …, A_N$$. Вывести $$K$$-e степени чисел из данного набора: $$(A_1)^K, (A_2)^K, …, (A_N)^K$$.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
program Series26; var i,i2,N,K,Num,Pow :Integer; begin Writeln('N:'); Readln(N); Writeln('K:'); Readln(K); for i:=1 to N do begin write('Введите ',i,' элемент из набора :'); Readln(Num); Pow:=1; For i2:=1 to K do begin Pow:=Pow*Num; end; Writeln(Pow); end; end. |
Другие задачи из раздела Series можно посмотреть здесь.
По ходу, ты по ошибке вставил не то решение.
У меня как-то так получилось:
Было:
Стало:
В решении Кирилла не учтен вариант arr[i]<0 и K mod 20
k mod 2 <> 0
Извиняюсь за оффтоп, почему в pascalABC.net вот этот код выполняется? Результат N равно нулю. Должна же быть ошибка переполнения переменной? Есть какой-то способ чтоб выводило ошибку?
Из описания PascalABC.net
«Автоопределение типов
Тип переменной определяется по типу значения при описании
с инициализацией. Это компактно записывается и очевидно
для восприятия»
То есть ответ на ваш вопрос …походу ни как…тип переменной автоматически расшириться, когда вам это станет нужным. (Тьфу..)
То есть они превратили Pascal из строго типизированный языка в какой то байсик…
И если вы хотите понять что такое типы данных… вам наверно больше подойдёт «Старый Паскаль»(термин из описания к языку PascalABC.net там целый абзац почему «Стандартный Паскаль» равно «Старый Паскаль») . Примеры «старых Паскалей», которые не придумывают за вас что вы хотите это Free Pascal и Borland Pascal.
А не я ошибся не дочитал комент, не всё так плохо… у вас переполнение переменной 🙂
Эта штука не предсказуема ни в одном языке. 🙂 у вас всё пошло по кругу.
Для того что бы появилась ошибка, нужно писать исключения… ошибка могла бы возникнуть, если бы вы разделили число на N.
В смысле делить на ноль K := 1/N? В pabs-e нет ошибки при делении на ноль, там бесконечность, предел =).
А вот freepascal при переполнении переменной выдает ошибку (при включенном контроле диапазонов), правда на стадии запуска программы из среды freepascal. Т.е. первоначальная компиляция происходит успешно, exe создает.
ну в общем это везде индивидуально… кто как обработал эту ситуацию. Вообще при написании кода стараются не допускать выхода за пределы диапазона. Это может привести к неожиданным последствиям в зависимости от компилятора. Как в общем то вы и убедились. Вы молодец 🙂
я бы порекомендовал почитать про try except end; Но у вас ситуация другая… у вас в ошибку не уходит 🙂 не знаю как помочь 🙂 вы пытаетесь пользоваться инструментом, в котором в острых углах по напихали подушки… и вы такой вот здесь острый угол должен быть.. бац туда… а там мягко 🙂 ну здесь подушки оторвать трудно и бесполезно 🙂 легче взять штуку где хардкор 🙂
Ну и лично я предпочитаю языки где компилятор не пытается найти мне тип данных и пытается обработать корректно деление на ноль… именно так и можно понять что там происходит 🙂 а так потом будешь делить на ноль и не доумевать почему не делиться 🙂