Напишите программу которая из n случайных чисел находио и выводит четырехзначные числа и их произведения у которых квадрат первой цифры меньше квадрата последней цифры числа .числа из диапозона от 500 до 5000
178
211
Ответы на вопрос:
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.
Целочисленная арифметика хороша тем, что вычисления в ней точны. но взамен она требует для представления чисел достаточного большого количества байт и не случайно от переменных типа byte и integer, которые в памяти занимали 1 и 2 байта соответственно, создатели трансляторов с языка паскаль пришли к четырехбайтному longint, а впоследствии и к восьмибайтному int64. максимальное число, которое можно представить в longint, равно 2 147 483 647, а в int64 оно равно 9 223 372 036 854 775 807. много ли это в применении к нашей ? нам надо найти и вывести произведение четырехзначных чисел, значение которых не превышает 5000. допустим, что все они равны 5000 и тогда количество членов в таком произведении может быть оценено при несложного расчета. итак, мы можем получить произведение максимум пяти таких чисел. а если использовать longint - вообще всего два числа: но это по верхнему пределу. по нижнему, при значении, равном 1000, эти оценки увеличиваются до 6 и 3 чисел соответственно (достаточно количество разрядов в максимально представимом числе разделить на 3). что показывают эти расчеты? всего лишь непригодность стандартной целочисленной арифметики языка паскаль (а также других традиционных алгоритмических языков) для решения поставленной в общем случае. беда еще и в том, что большинство трансляторов строят программу так, что в ней переполнение разрядной сетки (т.е. выход числа за отведенный ему диапазон представления) по умолчанию не контролируется. другими словами, есть риск получить совершенно неверный результат и даже не подозревать об этом! на может прийти арифметика с плавающей точкой, пригодная для отображения действительно огромных чисел. но у неё есть свой недостаток - она неточна. в языке паскаль тип double может оперировать числами до приблизительно , а вот количество точных цифр при этом составит 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] к сожалению, отобранных чисел нет
//pascalabc.net 3.2 begin var x: =readinteger ('введите x: '); write ('y=', sqr(1-x*x+5*sqr(x*x)) ); end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
дагмгп26.04.2021 22:43
-
wanecow0119.01.2021 00:59
-
Казань56518.02.2023 09:19
-
ba15070403.02.2022 20:38
-
красава00514.12.2022 05:24
-
Руслан22812332129.09.2020 14:28
-
арана1910.05.2023 10:28
-
Семма010616.07.2021 21:44
-
NekitGame22506.05.2023 20:00
-
Alesha211230.12.2021 22:39
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.