|
Главная -> Справочник по алгоритмам 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 тировании и отладке программ следует использовать заложенный в основу бейсика начальный диалог. Так, при неточностях в записи операторов и в их синтаксисе ПЭВМ подсказывает пользователю характер и место ошибок, что позволяет легче найти и устранить их. Иногда причиной грубых расхождений результатов вычислений при правильном переводе программ являются особенности округления чисел при исполнении операторов циклов вида FOR а = р ТО у STEP б. Малые погрешности в вычислении у, например, когда Y есть целое число в целой степени, *!огут приводить к тому, что число циклов окажется на 1 меньше или больше, чем предполагаемое. Например, число циклов, заданных оператором FOR 1 = 1 ТО N13, при Л/= 2 может быть не 8, а 7 или 9 в зави- симости от того, как округляется N". У некоторых ПЭВМ округление при возведении в целую степень целых чисел специально предусмотрено. Однако у других, в частности у Электроники-ДЗ-28, этого нет (хотя при вычислении Л/ с помощью оператора PRINT N 13 будет получен точный результат - ошибка содержится в скрытых разрядах). В подобных ситуациях округление можно проводить с помощью оператора INT. Например, выполнение точно циклов гарантировано, если оператор цикла записать в виде FOR 1= 1 ТО INT (N 13+1). Небольшая добавка 0,1 к Л/ создает определенность в операции округления. Подобные ситуации возможны и при использовании операторов косвенной адресации вида ON а, GOTO а, GOSUB а, когда а задает номер строки, т. е. целое число. г л А в А 3 АЛГОРИТМЫ ВЫЧИСЛЕНИЙ И ПРОГРАММЫ ЭЛЕМЕНТАРНЫХ § 3.1. Операции с действительными числами Перевод чисел из одной системы счисления в другую выполняется по правилам, описанным в [36]. Для перевода целого числа Хд, с основанием М в число Ад, с основанием N число Xj делится на N (/ = 1, 2, 3,...), а последовательность остатков от деления умножает.ся на М (/ = 0,1,2,...) и складывается. Числа Х/ в виде правильных дробей последовательно умножаются ца N (г = = 1,2,3,...), целые части результата делятся на М (/=1,2,3,...). В приведенных ниже программах операции иад целыми и дробными частями Х/ проводятся одновременно. Количество цифр Хм Ц должно превышать разрядности ЭВМ. Программа 3.1. Пример. Для Л/ = 23345, М = 9135 получим (Л/, М) = 1015, а для Л/=238 и М = 347 (Л/, М)=34. Разложение целого чиса М на простые множители производится последовательным делением УИ на 2 и ряд простых чисел d (d = 3, 5, 7, 9, 11, 13, ...) по формуле M-=M,-,/rf до тех пор, пока соблюдается условие Программа 3.3. Пример. Число 1234567890 раскладывается на множители 2ХЗХЗХ5Х3607Х Х3803. Преобразование десятичного числа X в цепную, или непрерывную, дробь производится выделением целой части X, а затем 16 PRINTПРЕОБРйЗОВАНИЕ ЧИСЛА ХМ В ЧИСЛО XN 20 INPUTВВЕДИТЕ ХМ=Х!INPUTВВЕДИТЕ М=Й 25 1НриТВВЕДИТЕ N=N:LETU=0 30 LErS=10!LETK=10!LETM=6!6OSUB 50 35 LETS=L!LETK=NELETX=U:LETM=10 40 6CSUB 50;PRINT!8.4!XN=U!6OTO 20 50 LETL=4:;! LETIi=l: LETE=1: LETU=0 60 LETC=INTCX>!LETbJ=X-C 70 FOR I=S TO 0 STEP -1 80 LETB=U*L!EETA=INT<B> 90 LETD=Iiii!M:LETU=A/Ii+U 100 LETT=C:LETbJ=B-AslF Ы=0 THEN 120 110 tEXT I 120 LETA=INTCT/L> 130 ЬЕТи=<:Т-Ажи>жЕ+и:1ЕТЕ=ЕжМ 140 LETT=A!IF A<>0 THEN 120 150 RETURN; END Контрольные примеры. Xf,= =27-*X5=43 (M = 8, Л/ = 5), X5 = 43-> ->X8 = 27 (M = 5, Л/ = 8), Xin= 100-X2 = = 1100100 (M=10, Л/ = 2), время счета /с»5 с. Нахождение наибольшего общего делителя двух чисел N к М проводится с помощью рекуррентного соотношения Afb = A/* 2-Int(A/* 2/W* ,) fe = 2,.3,..., где A/„ = max(A/, \М\), W, = min(Л/, \М\). Если Nk станет нулевым, то наибольший обший делитель C(N, M) = Nk~\. Числа целых частей Х,= 1/(Х, i -int Х,-,), где int,Ki.i - целая часть Программа 3.4. Пример. Число Х = л = 3,14159264-»-[3, 7, 15, 1, 2.S2, 1, 1, 1, 4]. т. е. n = 3-f 15-f N. к М должны быть с разрядностью 10. Программа 3.2. меньше 10 для ЭВМ Преобразование тичное число X цепной производится 252+... дроби в деся- непосред- Программа 3.3. 05 PR I NTPA.3 ЛОЩЕНИЕ ЧИСЛА К HA ПРОСТЫЕ ИНОМИТЕЛИ 10 INPUTВВЕДИТЕ Х=Й 15 PRINT!Э.в!МНОЖИТЕЛИ X!GOTO 4в 20 PRINT 2!LETA=A/2 30 IF Й-1=0 THEN 50 40 IF A/2-INT<A.2>=0 THEN 20 50 LETB=3 60 LETC=SGR<A)+1 70 IF B>=C THEN 140 80 IF ft/B-IHTvA/B)=0 THEN 100 Эе LETB=B+2!G0T0 70 100 IF Й/ВжВ-А=0 THEN 126 110 GOTO Э0 120 PRINT В 130 LETA=A.B!GOTO 60 140 PRINT Й!PRINTКОНЕЦ:GOTO 10!ЕНГ1 Программа 3.4. 05 PRINTntEOEPASOBAHHE ДЕСЯТИЧНОГО ЧИСЛА В ЦЕПНУ» ДРОБЬ 10INPUTВВЕДИТЕ ДЕСЯТИЧНОЕ ЧИСЛО Х=Х 15 FCIR 1=1 ТО 10 20 LETF=IHT<:X>!PRINT!9.0!F 30 LETX=l-vX-F>!NEXT I 40 GOTO 10:END Программа 3.5. 0Fi FPINTOPEOEPASOBAHHE ЦЕПНОЙ ДРОБИ В ДЕСЯТИЧНОЕ ЧИСЛО 10 INPUT C!LETD=1:LETA=0!LETF=C:LETB=1 20 PRINT FB!INPUT E!LETG=C 30 LETC=C*E+D!LETD=G!LETG=B 4Й LETB=E*E+A3 LETA=C!! LETF=C 50 GOTO 20!END Программа 3.6. 10 PRINTДЕЛЕНИЕ ЧИСЛА A HA ЧИСЛО Б 20 PRINTС ПРОИЗВОЛЬНОЙ ТОЧНОСТЬ» 30 INPUTВВЕДИТЕ Й/В Й/В 40 LET 1=1НТ<Й/В>!PRINT!9.0«ЦЕЛАЯ ЧйСТЬ РЕЗУЛЬТАТА 50 PRINTПОСЛЕДОВАТЕЛЬНОСТЬ ЦИФР РЕЗУЛЬТАТА 6й LETF=INT<AB>!FRINT!1.0! F; 70 LETA=<:A-F*B>*ie!GOTO eOsEHD 10 PRIИТНАХОЖДЕНИЕ НАИБОЛЬШЕГО ОБЩЕГО ДЕЛИТЕЛЯ 15 INPUTВВЕДИТЕ ПЕРВОЕ ЧИСЛО N=N 20 INPUTВВЕДИТЕ ВТОРОЕ ЧИСЛО М=М 30 LETI=INT<N/M>!LETL=M 40 LETM=N-M*l!LETH=L 50 IF М<>0 THEN 30 60 PRINT 19.0«НАИБОЛЬШИЙ ОБЩИЙ ДЕЛИТЕЛЬ=Н 70 GOTO 15!END 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 0.0925 |
|