Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 12.06.2012, 19:09   #1 (permalink)
Натуличка
Member
 
Регистрация: 06.02.2012
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Задача об удалении элемента массива

задача: удалить элемент массива вещественных чисел, меньший заданного числа. Если таких элементов нет выдать сообщение "элементы для удаления не найдены", иначе удалить первый найденный элемент.
нужна консультация!
я правильно мыслю: я должна вводить i, n, k. причем k-число, которое задуманно мной, а значит любое. кроме того при удалении элемента у меня и штдекс будет изменятся, т.е было n[5]:=n[6]. значит в цикле писать нужно будет for i:=1 to n-1 do?
Натуличка вне форума   Ответить с цитированием

Старый 12.06.2012, 19:09
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Рекомендую вам внимательно пролистать эти топики, они очень похожи на вашу тему

Паскаль. Помогите написать программу поиска элемента, пожалуйста
Неправильно считает сумму после минимального элемента
Задача об особых элементах массива
Программа определения номера первого отрицательного элемента. Паскаль
Нужна помощь в удалении порно-баннера...
перезагрузка при "безопасном удалении оборудования"

Старый 12.06.2012, 19:25   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,357
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Натуличка Посмотреть сообщение
нужна консультация!
Запросто!
Цитата:
Сообщение от Натуличка Посмотреть сообщение
я правильно мыслю: я должна вводить i, n, k. причем k-число, которое задуманно мной, а значит любое.
Угу. Только i вводить не надо.
Цитата:
Сообщение от Натуличка Посмотреть сообщение
кроме того при удалении элемента у меня и штдекс будет изменятся, т.е было n[5]:=n[6]. значит в цикле писать нужно будет for i:=1 to n-1 do?
Не совсем так. Тут не очень просто: циклом for..to..do не обойтись, и нужен (желательно булевский) флажок. Сейчас покажу, как это делается. Только уж извините, но массив заполню через генератор случайных чисел, так что консольный ввод, если надо, организуйте сами.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 12.06.2012, 19:32   #3 (permalink)
Натуличка
Member
 
Регистрация: 06.02.2012
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

буду весьма благодарна)
Натуличка вне форума   Ответить с цитированием
Старый 12.06.2012, 19:39   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,357
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Натуличка Посмотреть сообщение
буду весьма благодарна)
Да без проблем:
Код:
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.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 12.06.2012, 19:42   #5 (permalink)
Натуличка
Member
 
Регистрация: 06.02.2012
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо большое)
а вот если простым для меня языком могу я условия так написать:
if a[i] <k (при условии, что kввожу сама)then
a[i]:= a[i+1]или я уже не в ту степь пошла?
Натуличка вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 12.06.2012, 20:18   #6 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,357
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Натуличка Посмотреть сообщение
спасибо большое)
а вот если простым для меня языком могу я условия так написать:
if a[i] <k (при условии, что kввожу сама)then
a[i]:= a[i+1]или я уже не в ту степь пошла?
Да, не совсем в ту. Так будет передвинут только один элемент, следующий за найденным, точнее, его значение будет скопировано в позицию найденного элемента, все же остальные останутся на своих местах.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 12.06.2012, 20:56   #7 (permalink)
Натуличка
Member
 
Регистрация: 06.02.2012
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

так-то по вашему примеру я поняла суть решения. но мне нужен самый простой алгоритм. объясните одну вещь j-это значение, которое приобретает i. т.е наши так называемые ячейки смещаются на 1. так?
Натуличка вне форума   Ответить с цитированием
Старый 12.06.2012, 20:58   #8 (permalink)
Натуличка
Member
 
Регистрация: 06.02.2012
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

и можно ли обойтись здесь циклом с постусловием?
Натуличка вне форума   Ответить с цитированием
Старый 13.06.2012, 10:11   #9 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,357
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:53.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.