• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача об удалении элемента массива

Натуличка

Новые
Регистрация
6 Фев 2012
Сообщения
46
Реакции
0
Баллы
0
Задача об удалении элемента массива

задача: удалить элемент массива вещественных чисел, меньший заданного числа. Если таких элементов нет выдать сообщение "элементы для удаления не найдены", иначе удалить первый найденный элемент.
нужна консультация!
я правильно мыслю: я должна вводить i, n, k. причем k-число, которое задуманно мной, а значит любое. кроме того при удалении элемента у меня и штдекс будет изменятся, т.е было n[5]:=n[6]. значит в цикле писать нужно будет for i:=1 to n-1 do?
 
нужна консультация!
Запросто!
я правильно мыслю: я должна вводить i, n, k. причем k-число, которое задуманно мной, а значит любое.
Угу. Только i вводить не надо.
кроме того при удалении элемента у меня и штдекс будет изменятся, т.е было n[5]:=n[6]. значит в цикле писать нужно будет for i:=1 to n-1 do?
Не совсем так. Тут не очень просто: циклом for..to..do не обойтись, и нужен (желательно булевский) флажок. Сейчас покажу, как это делается. Только уж извините, но массив заполню через генератор случайных чисел, так что консольный ввод, если надо, организуйте сами.
 
буду весьма благодарна)
Да без проблем:
Код:
Const
 Nmax=100;
var
 a:array [1..Nmax] of Real;
 i,j,n,k: integer;
 b:boolean;
begin
 Randomize;
 Write('n = ');
 Readln(n);
 for i:=1 to n do
  begin
   a[i]:=Random*10;
   write(a[i]:8:2);
  end;
 writeln;
 writeln;
 Write('k (1..9) = ');
 Readln(k);
 writeln;
 b:=false;
 i:=0;
 Repeat
  i:=i+1;
  If a[i]<k then b:=true;
 Until (i=n) or b;
 If b then
  begin
   for j:=i to n-1 do a[j]:=a[j+1];
   n:=n-1;
   for i:=1 to n do write(a[i]:8:2);
  end
 else
  Writeln('No such elements!');
 Readln
End.
 
спасибо большое)
а вот если простым для меня языком могу я условия так написать:
if a <k (при условии, что kввожу сама)then
a:= a[i+1]или я уже не в ту степь пошла?
 
спасибо большое)
а вот если простым для меня языком могу я условия так написать:
if a <k (при условии, что kввожу сама)then
a:= a[i+1]или я уже не в ту степь пошла?

Да, не совсем в ту. Так будет передвинут только один элемент, следующий за найденным, точнее, его значение будет скопировано в позицию найденного элемента, все же остальные останутся на своих местах.
 
так-то по вашему примеру я поняла суть решения. но мне нужен самый простой алгоритм. объясните одну вещь j-это значение, которое приобретает i. т.е наши так называемые ячейки смещаются на 1. так?
 
и можно ли обойтись здесь циклом с постусловием?
 
так-то по вашему примеру я поняла суть решения. но мне нужен самый простой алгоритм. объясните одну вещь j-это значение, которое приобретает i. т.е наши так называемые ячейки смещаются на 1. так?
Во-первых, не старайтесь всюду найти путь попроще - это дорога в никуда, уверяю Вас. Осваивайте новые команды, операторы и т.п. - смелее. А стоять на позиции "вот я выучила три команды и больше ничего знать не хочу" неправильно в корне.
Теперь насчет i и j. Поясню на примере.
Пусть у нас есть массив из 20 элементов. Пусть требуемому условию отвечает элемент №5. В этом случае, когда цикл с постусловием (Repeat..Until) дойдет до значения i=5, флажок b примет значение true, перебор по i прекратится и цикл прервется. Далее запустится цикл по j от 5 до 19, в котором каждому a[j] будет присвоено значение следующего элемента массива. Таким образом, как и требуется, исходный 5-й элемент будет исключен.
и можно ли обойтись здесь циклом с постусловием?
Так он и применен...
 
Назад
Сверху