Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2011, 18:44   #1
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию Обработка одномерных массивов

Напишите, пожалуйста, подпрограмму, которая находит числа, которые входят в данную последовательность по одному разу.
Pepsik вне форума Ответить с цитированием
Старый 13.07.2011, 20:37   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

а в чем проблема?
напишыте код, обесните в чем проблема и мы поможем... но не сделаем за вас.

Последний раз редактировалось Pein95; 13.07.2011 в 20:46.
Pein95 вне форума Ответить с цитированием
Старый 13.07.2011, 20:58   #3
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
Вопрос

Код:
for i:=1 to n-1 do  
 begin 
   k:=a[ i ]; 
   flagEquale:=false;  
   for j:=1 to n do  
     if (a[j]=k) and (j<>i) 
        then flag:=true; 
   if not flag 
     then write (a[ i ]) 
 end;
ну вот набросал что-то. это нужно оформить в подпрограмму.
и теперь, если вам не сложно, подскажите, как всё собрать в полноценную программу.
задание такое: Получить упорядоченную по возрастанию последовательность из чисел, которые входят в данную последовательность по одному разу.
Это то, что я писал, но это естественно не работает=(
Код:
const n=6;
type t_arr=array[1..n]of integer;

procedure read_arr(var a:t_arr);
var i:byte;
begin
 for i:=1 to n do
      read(a[i]);
  end;
  
procedure write_arr(var a:t_arr; n:integer);
var i:byte;
begin
for i:=1 to n do
write(a[i],' ');
end;

function is_sort(a:t_arr;n:integer):boolean;
var i:byte;
flag:boolean;
begin
i:=1;
while (i<n) and (a[i]<a[i+1]) do
i:=i+1;
is_sort:=i=n;
end;

var a:t_arr;i,k,j:byte; flag:boolean;
 begin
 read_arr(a);
begin
for i:=1 to n-1 do
 begin
   k:=a[ i ];
   flag:=false;
   for j:=1 to n do
     if (a[j]=k) and (j<>i)
        then flag:=true;
   if not flag then
   write (a[ i ])
 end;
 end;
 write_arr(a,n);
 readln
 end.
Pepsik вне форума Ответить с цитированием
Старый 13.07.2011, 21:05   #4
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

http://progaem.forum2x2.ru/t54-topic google вам в помощь вот сама простая сортировка масива
Pein95 вне форума Ответить с цитированием
Старый 13.07.2011, 21:13   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Чот не понял, что вы хотели сделать. Я бы так делал: отсортировал массив по возрастанию\убыванию (гугл сортировка пузырьком) и потом проверял есть ли рядом с числом равные ему.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.07.2011, 20:30   #6
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию

написал так. но программа выполняется немного не так.
нужно, чтобы из последовательности 9 3 5 6 3 2 5 8 --> 2 6 8 9, а у меня получается 2 3 5 6 8 9. Как это исправить???(

Код:
program gh; const n=8; type t_arr=array[1..n] of integer; procedure read_arr(var a:t_arr); var i:byte; begin for i:=1 to n do read(a[i]); end; procedure bubble(var a: t_arr; n: integer); var i, j, t: integer; begin for i := 1 to n do for j := n downto i+1 do if a[pred(j)] > a[j] then begin t := a[pred(j)]; a[pred(j)] := a[j]; a[j] := t; end; end; var a,b:array[1..n] of integer; i,j,m,k:integer; begin read_arr(a); writeln('ввод последовательности: '); bubble(a, n); for i:=1 to n do begin write(a[i]:3,' ') end; writeln; m:=0; for i:=1 to n do begin k:=0; for j:=1 to m do if a[i]=b[j] then inc(k); if k=0 then begin inc(m); b[m]:=a[i] end; end; writeln('результат: '); for i:=1 to m do write(b[i]:3,' '); end.
Pepsik вне форума Ответить с цитированием
Старый 14.07.2011, 21:57   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что все числа 1 раз будут занесены в массив b. И проверять каждый раз весь массив b во вложенным цикле нет смысла, вы же отсортировали массив а.
Кстати, вместо k лучше использовать тип boolean. И в задании вроде просили оформить это в виде подпрограммы (процедуры).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.07.2011, 22:15   #8
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Потому что все числа 1 раз будут занесены в массив b. И проверять каждый раз весь массив b во вложенным цикле нет смысла, вы же отсортировали массив а.
так как это исправить-то?
ну кроме того, что надо убрать вложенный цикл
Pepsik вне форума Ответить с цитированием
Старый 14.07.2011, 22:31   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Например, так:
Код:
m:=0;
for i:=1 to n-1 do
begin
   if a[i]=a[i+1] then
   begin
      inc(m);
      b[m]:=a[i];
   end;
end;

for i:=1 to n do
begin
   f:=true;
   for j:=1 to m do
      if a[i]=b[j] then f:=false;
   if (f) then вывод a[i] и т.д.
end;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.07.2011, 23:17   #10
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию

Alex11223, прости, что я так сильно туплю... но
в конце я вывожу b[i] и получается так:
2 4 1 2 3 5 3 7-> 2 3
т.е. получается, что задание выполняется наоборот... выводятся повторяющиеся
как исправить?((

Последний раз редактировалось Pepsik; 14.07.2011 в 23:32.
Pepsik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка одномерных массивов Volume Помощь студентам 3 18.05.2011 19:38
Обработка одномерных массивов ProstoMaks Общие вопросы C/C++ 5 10.05.2011 17:43
Обработка одномерных массивов на Си/Си++ aka_Kiss Помощь студентам 1 23.11.2009 21:51
обработка одномерных массивов felmor Помощь студентам 16 05.02.2009 19:22