М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
lixonilya
lixonilya
04.09.2022 02:58 •  Информатика

Как можно считать числа около 10^250 в pascal? именно считать, не просто хранить. все доступные типы данных не подходят, т.е. нужно использовать что-то другое.

👇
Ответ:
Мамиами
Мамиами
04.09.2022
Вот пример вычисления факториала числа 200

const
  n=1000; {максимальное количество цифр в числе}

type
  big=record
    v:array[1..n] of byte; {массив с цифрами числа}
    m:integer {количество цифр в числе}
  end;

function Str2Big(s:string):big;
{Переводит строковое представление в big}
var
  i,n,k,err: integer;
  r:big;
begin
  n:=Length(s);
  r.m:=n;
  for i:=1 to n do
  begin
    Val(s[i],k,err);
    r.v[i]:=k
  end;
  Str2big:=r
end;

function Big2Str(p:big):string;
{Переводит представление big в строковое}
var
  i,n:integer;
  c,s:string;
begin
  s:='';
  n:=p.m;
  for i:=1 to n do
  begin
    Str(p.v[i],c);
    s:=s+c
  end;
  Big2Str:=s
end;

function TruncBig(a:big):big;
{Усекает незначащие нули}
var
  i,p,n:integer;
  r:big;
begin
  n:=a.m;
  p:=0;
  while (p<n) and (a.v[p+1]=0) do p:=p+1;
  for i:=1 to n-p do r.v[i]:=a.v[i+p];
  r.m:=n-p;
  TruncBig:=r
end;

function MultBig(a,b:big):big;
{Возвращает произведение чисел типа big}
var
  i,j,k,m,n,s:integer;
  r:big;
begin
  m:=a.m; n:=b.m;
  for i:=m to m+n do r.v[i]:=0;
  r.m:=m+n;
  for j:=n downto 1 do
  begin
    if b.v[j]=0 then r.v[j+m+n-1]:=0
    else begin
      k:=0;
      for i:=m downto 1 do
      begin
        s :=a.v[i]*b.v[j]+r.v[i + j]+k;
        r.v[i+j]:=s mod 10;
        k:=s div 10
      end;   
      r.v[j] := k
    end
  end;
  MultBig:=TruncBig(r);
end;

var
  i:integer;
  s:string;
  bi,bs:big;
begin
  bs:=Str2Big('1');
  for i:=1 to 200 do begin
    Str(i,s);
    bi:=Str2Big(s);
    bs:=MultBig(bs,bi);
    end;
  s:=Big2Str(bs);
  Writeln(s)
end.

Результат
788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000
4,8(52 оценок)
Открыть все ответы
Ответ:
jumadillaeva
jumadillaeva
04.09.2022

Вычитаем первое число из второго.

Если результат отрицательный, то первое меньше второго.

Если нулевой, то они равны.

Если положительный, то первое больше второго.

Найдем разность между первым и вторым значением: c=a-b

Все что нам требуется сделать, это выяснить, является ли с положительным числом.

Например, используя функцию сигнум, можно получить вариант функции Хевисайда, которая будет принимать значение 1 только для положительных значений, а во всех остальных случаях обращаться в ноль. f(c)=[(sgn(c)+1/)2]

В нашем случае можно записать, что max(a,b)=a*f(c)+b*f(-c)

Так мы можем сравнить два числа, не прибегая к логическому сравнению.

Конечно, данный алгоритм реализуем при условии наличия встроенной функции сигнум (она присутствует даже в старом Бейсике ). Но даже если такой встроенной функции нет, ее написание не составит большого труда.

4,5(29 оценок)
Ответ:
kate832
kate832
04.09.2022

для задач необходимо подключить библиотеку cmath, задачи решены на с++, надеюсь решения тебе

Объяснение:

a)    int a, b, c, d; // a меньшее основание б большее . с д - боковые стороны

   cin >> a >> b >> c >> d;

   cout << a+b+c+d << endl;// периметр

   cout << sqrt(c*c-((b-a)/2)*((b-a)/2))*(a+b)/2; // площадь

   return 0;

b)   int x1,y1, x2,y2;

   cin >> x1 >> y1 >> x2 >> y2;

   cout << sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

   return 0;

c)int  x2,y2;

   cin >>  x2 >> y2;

if ( sqrt((x2-0)*(x2-0)+(y2-0)*(y2-0))>7)

cout << "YES";

else cout << "NO";

   return 0;

d)int  a[10],c=0;

   for(int i=0; i<10;i++)

      {cin >> a[i];

      c+=abs(a[i]);}

      cout << c/10;

return 0;

4,7(92 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ