Помогите написать программу в Pascal!Дан одномерный целочисленный массив А, состоящий из...

0 голосов
68 просмотров
Помогите написать программу в Pascal!
Дан одномерный
целочисленный массив А, состоящий из N элементов, N- заданное натуральное число, пусть max- наибольшее, min- наименьшее
значения среди элементов массива. Составить одномерный массив В из простых
чисел и сегмента [min,max],которые не являются элементами массива А, записав его
элементы в порядке неубывания. Если таких элементов нет, то выдать соответствующее
текстовое сообщение.

Информатика (143 баллов) | 68 просмотров
0

Простые числа - вот с ними чуть не понимаю. Все простые из сегмента [min,max], или все простые из сегмента [min,max] и входящие в массив А, или все простые, которые в массиве лежат между минимальным (максимальным) и максимальным (минимальным) элементами?

0

Все простые из сегмента [min,max].

0

там скорее всего "из сегмента"

0

Там написано: из простыхчисел И сегмента [min,max],которые не являются элементами массива А, Вот на этой "И" я и вхожу в ступор))

0

DeSexAlex, посмотри, пожалуйста, если не трудно код внизу, мб поможешь условие написать нормально)

0

DeSexAlex, там, если я правильно понимаю, написано "которые не являются элементами массива А"

0

Просто все простые, которые больше мин. и меньше макс., независимо от того, есть они в массиве, или нет их там. Так?

0

Да блин! Я же говорю, я эту фразу могу тремя способами понять. Я их перечислил. Какой из них верный?

Дан 1 ответ
0 голосов

В целом программа рабочая, за исключением одного маленького блока, т.к. не могу прописать условие нормально:с Я указала комментарии к частям кода, в том числе и к тому самому блоку. Если кто знает, как его составить - отпишитесь:)

const n=5;
function prime(a:integer):boolean; //функция определяет, является ли число простым
var i,n:integer;
begin
prime:=false;
if (a<2) then exit;<br>if (not odd(a)) and (a<>2)
then exit;
for i:=3 to trunc(sqrt(a)) do
begin
if a mod i = 0 then exit;
inc(i,2);
end;
prime:=true;
end;

var a,b,c:array[1..n] of integer;
i,j,p,min,max:integer;

begin

for i:=1 to n do a[i]:=random(10); //заполняем массив
write('исходный массив: ');
for i:=1 to n do write(a[i]:5); //выводим массив на экран
writeln;
min:=a[1]; max:=a[1]; //ищем минимальное и максимальное значение
for i:=1 to n do
if (a[i]>max) then max:=a[i];
for i:=1 to n do
if (a[i]write('Минимальное: ',min,' Максимальное: ',max); //Выводим эти значения на экран
writeln;
for i:=1 to n do
if (prime(a[i])) or (a[i]=1) and (a[i]<>2) then //заполняем массив С простыми числами, которые (!) Входят в массив А
c[i]:=a[i];
write('Простые числа в массиве А: ');
for i:=1 to n do write(c[i]:5); //Выводим массив С на экран
writeln;

j:=min; //ВНИМАНИЕ!! Весь вопрос в этом небольшом блоке, заполнить массив В числами от min до max(которые уже найдены), не входящими в массив С
for i:=1 to n do begin
if (prime(j)) and (j<>c[i]) and (j<>2) then
b[i]:=j;
inc(j);
end;

for i:=n-1 downto 1 do begin //сортируем по возрастанию
for j:=1 to i do
if (b[j]>=b[j+1]) then begin
p:=b[i]; b[i]:=b[i+1]; b[i+1]:=p;
end;
end;
write('Искомый массив: ');
for i:=1 to n do write(b[i]:5); //Выводим массив В на экран
writeln;
end.

(672 баллов)
0

k:=1;//счетчик индеса для В. Надо описать его в var
for j:=min to max do
begin
if not(prime(j)) then break;//если не простое, то переходим к следующему
p:=0;//признак того, что этого числа в С нет
for i:=1 to n do
if j=c[i] then p:=1;//признак того, что число в С есть
if p=0 then b[k]:=j;//если в С его нет, заносим его в В
inc(k);
end;
end;

0

да я любитель помудрить)

0

function prime(a:integer):boolean; //функция определяет, является ли число простым
var i:integer;
begin
prime:=true;
for i:=2 to (a div 2) do
if a mod i=0 then prime:=false;
end;

0

И определение простоты числа какая-то сложная функция. Можно проще:

0

k:=1;//счетчик индеса для В. Надо описать его в var
for j:=min to max do
if(prime(j)) then
begin//если не простое, то переходим к следующему
p:=0;//признак того, что этого числа в С нет
for i:=1 to n do
if j=c[i] then p:=1;//признак того, что число в С есть
if p=0 then b[k]:=j;//если в С его нет, заносим его в В
inc(k);
end;
end;

0

Я же цикл прервал! Сейчас переделаю

0

Блин, наврал!

0

Всю прогу не просматривал. Смотрел только указанный блок. Не понял, зачем нужна проверка "and (j<>2)"? Поставленную задачу выполнит следующий блок:

0

Заполняем ПРОСТЫМИ числами от min до max(которые уже найдены), не входящими в массив С? Так?

0

вообще, логичное решение выше, сейчас, к сожалению, проверить не могу, но спасибо:)