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

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

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

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


Профи
****

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

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


дан массив целых чисел размера n=10. получить упорядоченный по возрастанию массив, содержащий все различные числа данного массива
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 23.10.2006 19:35
Сообщение #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 
 К началу страницы 
+ Ответить 
Reflex
сообщение 23.10.2006 20:26
Сообщение #3


Пионер
**

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

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


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


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


Профи
****

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

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


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

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

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


Пионер
**

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

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


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


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


Профи
****

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

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


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

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

а ты не знаешь более просто метода?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.10.2006 15:57
Сообщение #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 элементов...)
 К началу страницы 
+ Ответить 
18192123
сообщение 24.10.2006 17:33
Сообщение #8


Профи
****

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

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


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

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

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


Профи
****

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

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


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


Гость






Ну, наверное, так:
  for i := 1 to k do write(a[i]:4);
?
 К началу страницы 
+ Ответить 
18192123
сообщение 30.10.2006 20:35
Сообщение #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

 



- Текстовая версия 21.07.2025 11:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"