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

Паскаль, прислать скриншот работы программы. Заполнить массив состоящий из 25 элементов целыми случайными числами от 49 до 99, вывести его на экран, отсортировать его по убыванию и экран.

👇
Ответ:
Kstg
Kstg
12.06.2020

картинки

Объяснение:

program Chernovik;

var a:array[1..25] of integer;

i,j,v,m: integer;

begin

writeln('Массив: ');

randomize;

for i:=1 to 25 do

begin

a[i]:=random(51)+49;

write (a[i]:5)

end;

writeln;

writeln('Массив: ');

for i:=1 to 25 do

begin

m:=i;

for j:=i to 25 do

if a[j]>a[m] then m:=j;

v:=a[i];

a[i]:=a[m];

a[m]:=v

end;

for i:=1 to 25 do write (a[i]:5)

end.


Паскаль, прислать скриншот работы программы. Заполнить массив состоящий из 25 элементов целыми случа
Паскаль, прислать скриншот работы программы. Заполнить массив состоящий из 25 элементов целыми случа
4,7(83 оценок)
Открыть все ответы
Ответ:
NadushaLove12
NadushaLove12
12.06.2020
Целочисленная арифметика хороша тем, что вычисления в ней точны. Но взамен она требует для представления чисел достаточного большого количества байт и не случайно от переменных типа byte и integer, которые в памяти занимали 1 и 2 байта соответственно, создатели трансляторов с языка Паскаль пришли к четырехбайтному longint, а впоследствии и к восьмибайтному int64. Максимальное число, которое можно представить в longint, равно 2 147 483 647, а в int64 оно равно 9 223 372 036 854 775 807.
Много ли это в применении к нашей задаче?
Нам надо найти и вывести произведение четырехзначных чисел, значение которых не превышает 5000. Допустим, что все они равны 5000 и тогда количество членов в таком произведении может быть оценено при несложного расчета.
\displaystyle 5000^n=9223372036854775807 \to n= \frac{ln(9223372036854775807)}{ln(5000)} ; \\ n\approx 5.127; \ n\in \mathbb N \to n=5
Итак, мы можем получить произведение максимум ПЯТИ таких чисел.
А если использовать longint - вообще всего ДВА числа:
\displaystyle 5000^n=2147483647 \to n= \frac{ln(2147483647)}{ln(5000)} ; \ n\approx 2.523; \\ n\in \mathbb N \to n=2
Но это по верхнему пределу. По нижнему, при значении, равном 1000, эти оценки увеличиваются до 6 и 3 чисел соответственно (достаточно количество разрядов в максимально представимом числе разделить на 3).

Что показывают эти расчеты? Всего лишь НЕПРИГОДНОСТЬ стандартной целочисленной арифметики языка Паскаль (а также других традиционных алгоритмических языков) для решения поставленной задачи в общем случае. Беда еще и в том, что большинство трансляторов строят программу так, что в ней переполнение разрядной сетки (т.е. выход числа за отведенный ему диапазон представления) по умолчанию НЕ КОНТРОЛИРУЕТСЯ. Другими словами, есть риск получить совершенно неверный результат и даже не подозревать об этом!

На может прийти арифметика с плавающей точкой, пригодная для отображения действительно огромных чисел. Но у неё есть свой недостаток - она неточна. В языке Паскаль тип double может оперировать числами до приблизительно 1.8\cdot10^{308}, а вот количество точных цифр при этом составит 15-16. Но даже такая точность выше, чем дает стандартный тип longint.

На основании всего вышеизложенного и с учетом того, что тип int64 реализован далеко не во всех версиях языка Паскаль,  можно принять следующий алгоритм:
1. Получаем искомые числа, генерируя не более, скажем, 50 элементов. Я считаю, что для любого разумного решения задачи такого количества чисел будет достаточно (мы просто не будем допускать, чтобы К превышало 50).
2. Нелепый критерий отбора чисел (квадрат первой цифры меньше квадрата последней цифры числа) заменим разумным. Ведь цифра - суть однозначное число, а если квадрат одного числа меньше квадрата второго, то и сами числа находятся в таком же соотношении, поэтому зачем возводить в квадрат?. Итак, критерием отбора будет "первая цифра меньше последней цифры числа".
3. Находим произведение элементов массива в представлении double.

var
  i,n,k:integer;
  p:double;
begin
  Randomize;
  Write('Введите количество чисел К (1..50): '); Readln(k);
  if (k<1) or (k>50) then Write('Неверное К')
  else begin
    p:=1;
    Writeln('Отобранные случайные числа на интервале [1000;5000]');
    for i:=1 to k do
    begin
      n:=Random(4501)+500; { диапазон [500;5000] }
      if n>=1000 then
        if (n div 1000)<(n mod 10) then
        begin Write(n:5); p:=p*n end;
    end;
    Writeln;
    if p>1 then Writeln('Произведение отобранных чисел равно ',p)
    else Writeln('К сожалению, отобранных чисел нет')
  end 
end.

Тестовые решения:
Введите количество чисел К (1..50): 15
Отобранные случайные числа на интервале [500;5000]
 3208 4925 1279 2528 1637 4979 3536 4416 2116 3655
Произведение отобранных чисел равно 5.02832546192399E+34

Введите количество чисел К (1..50): 3
Отобранные случайные числа на интервале [500;5000]
 3385 1177
Произведение отобранных чисел равно 3984145

Введите количество чисел К (1..50): 1
Отобранные случайные числа на интервале [500;5000]
 3838
Произведение отобранных чисел равно 3838

Введите количество чисел К (1..50): 1
Отобранные случайные числа на интервале [500;5000]

К сожалению, отобранных чисел нет
4,4(63 оценок)
Ответ:
tania130
tania130
12.06.2020
Program long;
 uses Crt;
 const n=5;
 type Vec=array [1..n] of integer;
 var A, B, C: Vec;
     i,j,k, Col: integer;
     Pro: longint;
     a1, a2: integer;
begin
 ClrScr;
 Randomize;
 Col:=1;  Pro:=1;
 WriteLn ('Massiv A:');
 for i:=1 to n do
   begin
     A[i]:=500+random(2000);
     Write(A[i]:6);
     if A[i] >1000 then
        begin
          B[Col]:=A[i]; Col:=Col+1;
        end;
   end;  WriteLn;
 Col:=Col-1;  WriteLn;
 WriteLn ('Massiv B:');
 for i:=1 to Col do
   WriteLn(B[i]);
 WriteLn;
 k:=1;
 for i:=1 to n do
   begin
       a2:=B[i] mod 10;
       a1:=B[i] div 1000;
       if sqr(a1)<sqr(a2) then
           begin
              C[k]:=B[i];
              k:=k+1;
           end;
   end;
 for i:=1 to k-1 do
     Pro:=Pro*C[i];
  WriteLn ('Pro=',Pro);
ReadLn;
end.
4,7(27 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ