Улынись678
01.08.2020 13:28

Люди добрые с информатикой! От ​

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
kaaanrakun
04.06.2021 14:35
Проверка существования треугольников не выполняется.
1)
var 
x1,y1,x2,y2,x3,y3,x4,y4:real;
sq1,sq2,sq3,sq4,max:real;
procedure s(a1,b1,a2,b2,a3,b3:real;var sq:real);
var s1,s2,s3,p:real;
begin
s1:=sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1));
s2:=sqrt((a3-a1)*(a3-a1)+(b3-b1)*(b3-b1));
s3:=sqrt((a3-a2)*(a3-a2)+(b3-b2)*(b3-b2));
p:=(s1+s2+s3)/2;
sq:=sqrt(p*(p-s1)*(p-s2)*(p-s3));
end;
begin
write('x1,y1: '); readln(x1,y1);
write('x2,y2: '); readln(x2,y2);
write('x3,y3: '); readln(x3,y3);
write('x4,y4: '); readln(x4,y4);
s(x1,y1,x2,y2,x3,y3,sq1);
s(x1,y1,x3,y3,x4,y4,sq2);
s(x1,y1,x2,y2,x4,y4,sq3);
s(x2,y2,x3,y3,x4,y4,sq4);
writeln('sq1 = ',sq1:5:2,' sq2 = ',sq2:5:2,' sq3 = ',sq3:5:2,' sq4 = ',sq4:5:2);
if sq1>sq2 then max:=sq1 else max:=sq2;
if sq3>max then max:=sq3;
if sq4>max then max:=sq4;
writeln('max = ',max:5:2);
end.

2)
var 
x1,y1,x2,y2,x3,y3,x4,y4:real;
sq1,sq2,sq3,sq4,max:real;
function s(a1,b1,a2,b2,a3,b3:real):real;
var s1,s2,s3,p:real;
begin
s1:=sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1));
s2:=sqrt((a3-a1)*(a3-a1)+(b3-b1)*(b3-b1));
s3:=sqrt((a3-a2)*(a3-a2)+(b3-b2)*(b3-b2));
p:=(s1+s2+s3)/2;
s:=sqrt(p*(p-s1)*(p-s2)*(p-s3));
end;
begin
write('x1,y1: '); readln(x1,y1);
write('x2,y2: '); readln(x2,y2);
write('x3,y3: '); readln(x3,y3);
write('x4,y4: ');
readln(x4,y4);
sq1:=s(x1,y1,x2,y2,x3,y3);
sq2:=s(x1,y1,x3,y3,x4,y4);
sq3:=s(x1,y1,x2,y2,x4,y4);
sq4:=s(x2,y2,x3,y3,x4,y4);
writeln('sq1 = ',sq1:5:2,' sq2 = ',sq2:5:2,' sq3 = ',sq3:5:2,' sq4 = ',sq4:5:2);
if sq1>sq2 then max:=sq1 else max:=sq2;
if sq3>max then max:=sq3;
if sq4>max then max:=sq4;
writeln('max = ',max:5:2);
end.

Пример:
x1,y1: -5 1
x2,y2: -3 4
x3,y3: -1 2
x4,y4: -1 0
sq1 =  5.00 sq2 =  4.00 sq3 =  7.00 sq4 =  2.00
max = 7
0,0(0 оценок)
Ответ:
vasad2005
01.04.2022 20:34
Учитывая, что 50 - это очень немного (50-е простое число всего лишь 229), можно придумать всё что угодно (даже ужасающе неэффективное).
Можно просто перебирать все числа, начиная с двойки, и каждое делить на все меньшие его, начиная с двойки. Если хоть на одно разделится - не простое, иначе простое. Попутно подсчитывая число простых чисел, N-е найти не составит труда.

Псевдокод:
ввод N
i = 2
counter = 0
нц
   для j = 2..(i - 1)
      если i mod j = 0 тогда
         увеличить i на 1
         следующая итерация внешнего цикла
      увеличить counter на 1
      если counter = N тогда
         вывод i
         завершение работы программы
   увеличить i на 1
кц

Дальше можно изменять эту программу, оптимизировать. Например, известно, что меньший собственный делитель любого составного числа не превосходит корня из этого числа, следовательно, можно во внутреннем цикле делать перебор не до i - 1, а до [sqrt(i)].
Другое полезное наблюдение может заключаться в том, что все простые числа кроме 2 имеют вид 6m - 1 или 6m + 1 (остальные не подходят: очевидно, 6n делится на 6, 6n +-2 четные числа, а 6n + 3 делится на 3). Это наблюдение позволит примерно в три раза сократить число итераций внешнего цикла.
Наконец, можно сохранять все встретившиеся простые числа в массив, и затем проверять, делится ли текущее число на простые числа, меньшие себя: если не делится, то оно - тоже простое. Для хранения 50 маленьких натуральных чисел в памяти не нужно много места.
Можно воспользоваться каким-нибудь другим алгоритмом, например, решетом Эратосфена. Но в зависимости от того, на каком языке программирования будет потом реализовываться этот алгоритм, он может записываться нетривиально. Для выполнения "на бумажке" решето Эратосфена - один из самых удобных
В конце концов, можно использовать "читерский" метод - взять откуда-нибудь первые 50 простых чисел, записать их куда-нибудь, а потом просто за O(1) находить нужное число в памяти.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота