Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 18.01.2015, 15:14   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
Вот задача эта, а то может у меня непонятно написано.
Стоп! Но это же совсем другая задача! Так что же Вам нужно: умножение на 3 или прибавление/вычитание единицы?
А, нет, виноват - увидел! Всё надо. Разделительная линия сбила.
Vladimir_S вне форума   Ответить с цитированием

Старый 18.01.2015, 15:14
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посмотрите внимательно тут, может разгадка совсем рядом

Pascal: Числа, не входящие в одномерный массив
Числа Фибоначчи в Паскале

Старый 18.01.2015, 15:19   #12 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нужно под буквой "с" - то есть 3p
Asya_inter вне форума   Ответить с цитированием
Старый 18.01.2015, 15:28   #13 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Хорошо, посмотрю. Где-то через час.
Спасибо! Буду очень благодарна, если поможете!
Asya_inter вне форума   Ответить с цитированием
Старый 18.01.2015, 16:19   #14 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
Спасибо! Буду очень благодарна, если поможете!
Постараюсь.
Два вопроса.
1. Я вижу, что Вы используете формат Longint. Но, насколько я знаю, в этом... ну, в общем, в АВС такого формата нет. Следует ли из этого, что Вы можете пользоваться и нормальным Паскалем? Это было бы здорово.
2. Вероятно, чтобы ублажить Ваших преподов, нужно вовсе отказаться от каких-либо десятичных операций, а работать только со строками. Так?
Vladimir_S вне форума   Ответить с цитированием
Старый 18.01.2015, 16:26   #15 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S,
1) У меня pascalABC.NET и там всё работает;
2) Да, сказали всё в двоичной, но число 3 не переводить.
Asya_inter вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 18.01.2015, 16:39   #16 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
1) У меня pascalABC.NET и там всё работает;
О, Боже - этого только не хватало! В общем, у меня Dos Free Pascal, в нем и работаю, других нет.
Цитата:
Сообщение от Asya_inter Посмотреть сообщение
2) Да, сказали всё в двоичной, но число 3 не переводить.
Ну, этого я совсем не понимаю.
А вообще - посмотрел я Ваш код, и засомневался - зачем Вам помощь? Уж если Вы так виртуозно владеете рекурсивными функциями... Нет, правда - в чем проблема?
Могу посоветовать решать задачу так: написать функцию двоичного сложения любых двоичных чисел, представляемых, как строки. И результат тоже в виде строки.
С помощью этой функции сложить два числа: исходное и полученное путём сдвига всех разрядов влево и приписывания в крайнюю правую позицию нуля.
Сможете?
Vladimir_S вне форума   Ответить с цитированием
Старый 18.01.2015, 16:48   #17 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, что вы? Я бы не смогла это сама сделать( я только учусь)! Просто на сайте нашла функцию умножения и немного переделала ( но она ведь верно работает??) ... А Dos Free Pascal я пыталась установить через сайт, но не вышло и поэтому так и работаю с этим. А просто в ту программу нельзя разве ту вычислительную формулу для P подставить? ... А функцию сложения так быстро мне не написать... так как уже завтра всё нужно.
Asya_inter вне форума   Ответить с цитированием
Старый 18.01.2015, 16:53   #18 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
... А функцию сложения так быстро мне не написать... так как уже завтра всё нужно.
Ох... ну ладно, попробую.
Vladimir_S вне форума   Ответить с цитированием
Старый 18.01.2015, 17:39   #19 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 18.01.2015, 18:17   #20 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Огромное вам спасибо!! Сейчас буду разбираться для полного понимания решения!
Asya_inter вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:25.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.