18.01.2015, 15:14 | #11 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
18.01.2015, 15:14 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите внимательно тут, может разгадка совсем рядом Pascal: Числа, не входящие в одномерный массив Числа Фибоначчи в Паскале |
18.01.2015, 16:19 | #14 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Постараюсь.
Два вопроса. 1. Я вижу, что Вы используете формат Longint. Но, насколько я знаю, в этом... ну, в общем, в АВС такого формата нет. Следует ли из этого, что Вы можете пользоваться и нормальным Паскалем? Это было бы здорово. 2. Вероятно, чтобы ублажить Ваших преподов, нужно вовсе отказаться от каких-либо десятичных операций, а работать только со строками. Так? |
18.01.2015, 16:26 | #15 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Vladimir_S,
1) У меня pascalABC.NET и там всё работает; 2) Да, сказали всё в двоичной, но число 3 не переводить. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
18.01.2015, 16:39 | #16 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
О, Боже - этого только не хватало! В общем, у меня Dos Free Pascal, в нем и работаю, других нет.Ну, этого я совсем не понимаю.
А вообще - посмотрел я Ваш код, и засомневался - зачем Вам помощь? Уж если Вы так виртуозно владеете рекурсивными функциями... Нет, правда - в чем проблема? Могу посоветовать решать задачу так: написать функцию двоичного сложения любых двоичных чисел, представляемых, как строки. И результат тоже в виде строки. С помощью этой функции сложить два числа: исходное и полученное путём сдвига всех разрядов влево и приписывания в крайнюю правую позицию нуля. Сможете? |
18.01.2015, 16:48 | #17 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Vladimir_S, что вы? Я бы не смогла это сама сделать( я только учусь)! Просто на сайте нашла функцию умножения и немного переделала ( но она ведь верно работает??) ... А Dos Free Pascal я пыталась установить через сайт, но не вышло и поэтому так и работаю с этим. А просто в ту программу нельзя разве ту вычислительную формулу для P подставить? ... А функцию сложения так быстро мне не написать... так как уже завтра всё нужно.
|
18.01.2015, 17:39 | #19 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну вот Вам такой вариант.
Пояснения: 1. Поскольку в задании не требуется показывать десятичные эквиваленты чисел, это и не делается: идет работа только с двоичными числами. 2. Функция Sum дает (в строковой форме) сумму любых положительных двоичных чисел, заданных опять же в виде строк. Код:
Var p:String; Function Sum(D1,D2:String):String; Var D1a,D2a,D3a,D3,Q:String; L,i,d,c1,c2,c3:Byte; Code:Integer; Begin If Length(D1)>Length(D2) then begin L:=Length(D1); D1a:=D1; D2a:=''; for i:=1 to (Length(D1)-Length(D2)) do D2a:=D2a+'0'; for i:=(Length(D1)-Length(D2))+1 to Length(D1) do D2a:=D2a+D2[i-(Length(D1)-Length(D2))]; end else begin L:=Length(D2); D2a:=D2; D1a:=''; for i:=1 to (Length(D2)-Length(D1)) do D1a:=D1a+'0'; for i:=(Length(D2)-Length(D1))+1 to Length(D2) do D1a:=D1a+D1[i-(Length(D2)-Length(D1))]; end; D3a:=''; d:=0; for i:=L downto 1 do begin Val(D1a[i],c1,Code); Val(D2a[i],c2,Code); if (c1+c2+d)<=1 then begin c3:=c1+c2+d; d:=0; end else if (c1+c2+d)=2 then begin c3:=0; d:=1; end else if c1+c2+d=3 then begin c3:=1; d:=1; end; Str(c3,Q); D3a:=D3a+Q; end; if d=1 then D3a:=D3a+'1'; D3:=''; for i:=1 to Length(D3a) do D3:=D3+D3a[Length(D3a)-i+1]; Sum:=D3; end; Begin Write(' p: '); Readln(p); Writeln('3p: ',Sum(p,p+'0')); Readln End. |
18.01.2015, 18:17 | #20 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Огромное вам спасибо!! Сейчас буду разбираться для полного понимания решения!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|