Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на тему "Сортировки"
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Garis
Ребята, всем доброго времени суток!
Прошу вашей помощи, т.к. сам с Паскалём можно сказать не работал (переписывал задачки с доски и всё). В общем мне дали задание, написать программу со всеми пояснениями и составить к ней схему алгоритма… Для меня это вообще что-то не реальное…(( Помогите, пожалуйста, кто чем может..)) Книжки читать времени совсем нету, а задание уже скоро сдавать.
Вот собственно само задание (оно по теме «Сортировки»):
Дана последовательность из «N» целых чисел, содержащая положительные, отрицательные числа и нули.
Получить три последовательности содержащие только отрицательные числа, только нули и только положительные числа в порядке их следования в исходной.
Ранжировать полученные последовательности по возрастанию и напечатать друг под другом с пояснениями.
Задокументировать исходную последовательность.

Вот такое заданьеце….((
теперь о том что я понимаю: т.е. задан массив, из него нужно сделать выборку, а затем эту выборку(три последовательности) разместить по возрастанию.

Заранее вам огромное спасибо!
volvo
Ну, значит, так:
1. Проходишь по всему первоначальному массиву и делаешь следующее:
Var
  arr: array[1 .. N] of integer; { сам исходный массив }

  { буферы для хранения полож. (positive) и отриц. (negative) чисел }
  positive, negative: Array[1 .. N] of integer;

  { счетчики полож., отриц., и нулевых чисел }
  i_pos, i_neg, i_zero: integer;
begin
  ...
  {
    устанавливаем счетчики всех последовательностей,
    которые будем искать, в 0
  }
  i_pos := 0; i_neg := 0; i_zero := 0;

  for i := 1 to N do { идем по всему исходному массиву }

    if arr[i] < 0 then begin { число отрицательное ? }
      { увеличиваем счетчик отр. чисел и записываем само число в буфер }
      inc(i_neg); negative[i_neg] := arr[i];
    end
    else
      { число = 0 ? }
      if arr[i] = 0 then inc(i_zero) { просто увеличиваем число нулей }
      else begin { число положительное ? }
        { увеличиваем счетчик полож. чисел и записываем само число в буфер }
        inc(i_pos); positive[i_pos] := arr[i];
      end;
  ...
end.

2. А потом полученные массивы positive и negative сортируешь любым способом, который есть здесь: FAQ: Методы сортировки
(нули сортировать не надо, для того, чтобы их вывести на печать достаточно просто знать их количество)
Garis
Пасиба за столь скорый ответ...... но хотел чтоб мне дали не просто голую программу, а с пояснениями и объяснениями, не сочтите за наглость...)) Но я хочу сам что-то понимать, что и где происходит....))) Из того что написано выше понял только то, что задаётся массив и всё, больше ничего...((((
А ещё нужно задокументировать исходную последовательность, это как я понимаю должен создаться txt файл....
volvo
Я добавил комментарии, попробуй прочесть и понять, что именно происходит ...

Насчет файла - ты сначала сделай, чтобы программа правильно работала с выводом на экран, а добавить вывод в файл можно всегда ;)
Garis
Спасибо огромное.... На выходных буду разбираться... надеюсь тема никуда не денется..)) Или кто-нить ещё чё-нить напишет..))
Garis
Вот что у меня получилось..... но здесь мнеого недороботок, к сожалению....
program p1;

const
	INPUT_FILE_NAME = 'с:\p1.in';

type
	TCondition = function(x : integer) : boolean;

var
	f : text;
	i, n, t : integer;
	flag : boolean;
	a : array [1..100] of integer;

function less0(x : integer) : boolean; far;
begin
	if x < 0 then
		less0 := true
	else
		less0 := false;
end;

function equal0(x : integer) : boolean; far;
begin
	if x = 0 then
		equal0 := true
	else
		equal0 := false;
end;

function above0(x : integer) : boolean; far;
begin
	if x > 0 then
		above0 := true
	else
		above0 := false;
end;

procedure print(cond : TCondition);
begin
	for i := 1 to n do
		if cond(a[i]) then
			write(a[i] , ' ');
	writeln;
end;

begin
	assign(f, INPUT_FILE_NAME);
	reset(f);

	readln(f, n);

	for i := 1 to n do
		read(f, a[i]);

	repeat
		flag := true;
		for i := 1 to n-1 do
			if a[i] > a[i+1] then begin
				t := a[i];
				a[i] := a[i+1];
				a[i+1] := t;
				flag := false;
			end;
	until flag;

	print(less0);
	print(equal0);
	print(above0);

	close(f);
end.



'с:\p1.in' - это файл с массивом smile.gif

Помогите её доработать..... В частности нужны подробные комментарии и срочно нужна блок-схема(алгоритм)..... А также, она чуть-чуть не соответствует самому тексту.... текст задачи выше....
Заранее спасибо!
volvo
Цитата
В частности нужны подробные комментарии и срочно нужна блок-схема(алгоритм)
Garis, а сдать за тебя программу не надо? А то ты только скажи, мы приедем, сдадим... И на работу вместо тебя устроимся, ты только деньги получать будешь... <_<
Garis
unsure.gif Злые вы какие-то..... Я понимаю, если бы это было для вас очень сложно....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.