Другие языки программирования и технологии

Удалить все непростые элементы массива

Программирование на PscalABCNET. Тема: удаление нескольких элементов из массива.

Не врубилась как это сделать, пока выходит только так, но ни то что работает неправильно, он просто второй вариант массива мне не выдает:

const N = 10;
var a: array[1..N] of integer;
i, k, m, x: integer;
begin
for i:=1 to N do begin
a[i]:=random(100);
write(a[i]:4);
end;
writeln;
i:=1;
m:=N;
while i<=m do for x:=2 to a[i] do if a[i] mod x<>0 then begin
m:=m-1;
for k:=i to m do a[k]:=a[k+1];
end
else i:=i+1;
for i:=1 to m do write(a[i]:4);
end.
Решение на Pascal ABC

var i, b, j, n, max, min, c: integer;
e: boolean;
a: array [1..100] of integer;
const n1=50; {значение элемента массива наугад}
begin
n:=10; {количество чисел}
for i:=1 to n do
begin
a[i]:=random (n1);
write (a[i]:4);
if i=1 then
begin
max:= a[i];
min:= a[i];
end;
if a[i] > max then max:=a[i];
if a[i] < min then min:=a[i];
end;
writeln;
writeln ('оставляем только простые элементы массива, непростые элементы удаляем');
min:=min-1;
max:=max-1;
repeat
inc(min);
c:=0;
for i:=2 to trunc(min/2)+1 do
if min mod i = 0 then inc(c);
if c=0 then
for j:=1 to n do
if a[j]=min then write (a[j]:4);
until (min > max);
end.
Дима Смоляков
Дима Смоляков
24 309
Лучший ответ
Здесь задача о нахождении простых чисел, это раз, а два: поддерживает ли этот абв динамические массивы?
Дело в том, что после удаления элементов массив должен стать меньше.
Делаем так.

Для определения, является ли число простым, пишем отдельную функцию:

function simple(n:integer): boolean;
var x: integer;
begin
x:=1;
repeat x:=x+1 until n mod x = 0;
if n=x then simple:=true else simple:=false;
end;
которую вызываем для каждого элемента:

for i:=1 to n do
if simple(a[ i ]) then ./удаляем этот элемент/;

А вот как работать с динамическими массивами, разбирайтесь сами.
Второй вариант - создать второй массив, переписать в него все непростые числа (if NOT simple(a[ i ])), запомнить в отдельной переменной верхнюю границу и печатать до неё.
Третий вариант: после проверки на NOT simple просто выводить по одному на печать.
У вас же написана какая-то чушь.
Данил Ковалёв >if n=x then simple:=true else simple:=false;
simple := (n = x);
Кооператив Югра-Финанс Ой, у меня тоже! Надо ведь было наоборот, удалять непростые элементы, то есть
if not simple(a[ i ]) then ./удаляем этот элемент/;!!!
не обязательно крутить полный цикл для проверки на простоту
достаточно до половинки числа -- дальше всё равно на разделится
или вообще до первого делителя, чтоб зря проц не гонять
и лучше эту проверку вынести в отдельную функцию
VG
Viktor Golubenko
75 320

Похожие вопросы