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

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

Форум «Всё о Паскале» _ Задачи _ сортировка массива по возрастанию с исключением сходных элементов

Автор: 18192123 23.10.2006 22:39

дан массив целых чисел размера n=10. получить упорядоченный по возрастанию массив, содержащий все различные числа данного массива

Автор: Reflex 23.10.2006 23:35

например:

Код

type arr : array [ 1..10] of integer;
var inarr, outarr : integer
function copy:integer;
var i,j,tmp: integer;
flag : boolean;

begin
tmp:=1;
outarr[1]:=inarr[1];
for i:= 2 to n do begin
  flag:=false;
  for j:=1 to tmp do
   if inarr[i]=outarr[j] then flag:=true;
  if not(flag) then begin
   inc(tmp);
   outarr[tmp]:=inarr[i];
  end;
  copy:=tmp;
end;


а дальше стадартный buble

Вот правильный код, для твоей программы
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;
const
nn=100;
type arr = array [ 1..nn] of integer;
var inarr, outarr : arr;
var n,i : integer;
function copy:integer;
var i,j,tmp: integer;
flag : boolean;

begin
tmp:=1;
outarr[1]:=inarr[1];
for i:= 2 to n do begin
flag:=false;
for j:=1 to tmp do
if inarr[i]=outarr[j] then flag:=true;
if not(flag) then begin
inc(tmp);
outarr[tmp]:=inarr[i];
end;
END;
copy:=tmp;
end;

procedure buble(n: integer);
var i, j, temp: Integer;
begin
for i := 1 to n do
for j := n downto i+1 do
if outarr[j-1] > outarr[j] then begin
temp:=outarr[j-1];
outarr[j-1]:=outarr[j];
outarr[j]:=temp;
end;
end;


begin
read(n);
for i:= 1 to n do
read(inarr[i]);
n:=copy;
for i:=1 to n do
write(outarr[i]);
buble(n);
for i:=1 to n do
write(outarr[i]);
READLN;
READLN;
END.

Автор: Reflex 24.10.2006 0:26

удовлетворило решение? или есть еще вопросы

Автор: 18192123 24.10.2006 0:50

Цитата(Reflex @ 23.10.2006 21:26) *

удовлетворило решение? или есть еще вопросы

ты молодец! спасибо большое!
а ты не могла бы на основе моей программы исключить совпадающие элементы из отсортированного массива?!
пожалуйста!!!!!!!
Прикрепленный файл  LAB_____.PAS ( 608 байт ) Кол-во скачиваний: 473

Автор: Reflex 24.10.2006 0:54

ну... добавь вставь код процедуру COPY

Автор: 18192123 24.10.2006 18:59

Цитата(Reflex @ 23.10.2006 21:54) *

ну... добавь вставь код процедуру COPY

а ты не знаешь более просто метода?

Автор: volvo 24.10.2006 19:57

Куда же проще? Тебе что, надо в том же массиве убрать дубликаты? Без второго массива? Тогда так (после сортировки):

  k := 0;
i := 1;
repeat

while (i <= n) and (a[i - 1] = a[i]) do inc(i);
if i <= n then begin
inc(k);
a[k] := a[i]; inc(i);
end;

until i > n;

(распечатывать первые K элементов...)

Автор: 18192123 24.10.2006 21:33

Цитата(volvo @ 24.10.2006 16:57) *
Тебе что, надо в том же массиве убрать дубликаты? Без второго массива? Тогда так (после сортировки):

большое спасибо!

Автор: 18192123 24.10.2006 22:28

еще один маленький вопрос: как задать условие для вывода первых К элементов?

Автор: volvo 24.10.2006 22:32

Ну, наверное, так:

  for i := 1 to k do write(a[i]:4);
?

Автор: 18192123 31.10.2006 0:35

Цитата(volvo @ 24.10.2006 15:57)

  k := 0;
i := 1;
repeat

{ ***** ***** }
while (i <= n) and (a[i - 1] = a[i]) do inc(i);
if i <= n then begin
inc(k);
a[k] := a[ i ]; inc(i);
end;
{ ***** ***** }

until i > n;

объясните пожалуйста смысл выделенной части как можно подробнее, я не очень поняла