IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> сортировка массива по возрастанию с исключением сходных элементов
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


дан массив целых чисел размера n=10. получить упорядоченный по возрастанию массив, содержащий все различные числа данного массива
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

Репутация: -  0  +


например:
Код

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.


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

Репутация: -  0  +


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


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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

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

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


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

Репутация: -  0  +


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


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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

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

а ты не знаешь более просто метода?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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

  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 элементов...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


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

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

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


еще один маленький вопрос: как задать условие для вывода первых К элементов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Ну, наверное, так:
  for i := 1 to k do write(a[i]:4);
?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(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;

объясните пожалуйста смысл выделенной части как можно подробнее, я не очень поняла
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.10.2024 14:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name