Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Простенькая задача с массивами

Автор: Витёк 27.11.2006 19:09

Люди помогите пожалуйста в решении задачи. Условие такое: дан массив, нужно найти минимальный элемент и удалить его. Я смог найти минимальный элемент вот так:

 
const n =5;
type
list=1..n;
var i:list;
min:integer;
a:array[list] of integer;
begin
for i:=1 to n do
begin
writeln('введите',i);
readln(a[i]);end;
min=a[i];
for i:=2 to n do
begin
if a[i]<min then min:=a[i];end;
writeln(min);
end.

но не смог удалить его и вывести все остальные элементы. Подскажите как это сделать

Автор: мисс_граффити 27.11.2006 19:25

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

Автор: Витёк 27.11.2006 19:31

Цитата(мисс_граффити @ 27.11.2006 15:25) *

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

Что-то не соображу, как это в программе сделать

Автор: Витёк 27.11.2006 20:02

но не смог удалить его и вывести все остальные элементы. Подскажите как это сделать
Ну помогите же. Я лично пытался, но не выходило. Препод говорит что это просто.

Автор: мисс_граффити 27.11.2006 20:48

как запоминать индекс минимального - можешь сообразить?

Автор: Витёк 27.11.2006 22:54

Цитата(мисс_граффити @ 27.11.2006 16:48) *

как запоминать индекс минимального - можешь сообразить?

Что-то не получается. Да и незнаю как это делается. wacko.gif

Автор: мисс_граффити 28.11.2006 1:24

давай рассуждать логически.
если у тебя есть строка

min:=a[i];

значит, индекс минимального равен i в данный момент, правильно?
но i после этого не раз изменяется, значит, надо ввести какую-то другую переменную - например, назовем ее mini.
понимаешь, куда надо вставить
mini:=i
?

Автор: Витёк 28.11.2006 17:43

Ну как я понял эту строчку

mini:=i

надо вставить после этого выражения
min:=a[i];

так да?
Теперь я запомнил его индекс и мне нужно сместить весь массив вперёд так, что бы этот минимум удалить.
А через какую функцию он сдвигается? Нам что-то подобное показывали, но я не совсем понял как это сделать

Автор: мисс_граффити 28.11.2006 18:36

да, вставить именно туда.
только не забудь про begin и end
функцию? стандартной я такой не знаю...
обычно делают следующим образом:

a[i]:=a[i+1];

для всех i>=mini
что делать с последним элементом - решай сам...

Автор: volvo 28.11.2006 18:42

Цитата
стандартной я такой не знаю...
Move в помощь smile.gif