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

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

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

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


Новичок
*

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

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


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


Профи
****

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

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


Если не заморачиваться с оптимизацией и не придумывать специальный аглоритм,то в лоб,сначала выписать вообще все цифры в каждом числе,затем удалить все повторяющиеся,затем отсортировать по возрастанию. Сортировка у тебяуже есть из предыдущей программы.

Либо, как вариант, сначала искать единицу во всех числах,потом двойку и тд.Если в одном числе встречается,то выписать и перейти к поиску следующего. Тут вариантов может быть уйма и какой наиболее оптимальный с ходу и не поймеш.


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


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Блин, да что с вами со всеми? Оцепенение всеобщее. Как будто обкурились все... Какие оптимизации? Какие выписывания всех цифр подряд и удаление повторяющихся? Какая нахрен сортировка? Речь о МНОЖЕСТВАХ, так заметнее? Они не сортируются, нет в этом смысла. Все элементарно:

var
i, x : Integer;
s : set of byte;
b : boolean;

{ ... }

s := [];
for i := 1 to n do
begin
X := a[ i ];
b := true; // Если ноль считать натуральным - то надо его тоже правильно обрабатывать
while b or (X <> 0) do
begin
s := s + [x mod 10];
b := false;
x := x div 10;
end;
end;
Всё, множество s содержит все цифры, которые есть хотя бы в одном числе. Пройтись циклом от 0 до 9 и вывести все цифры, которые есть во множестве - труда не составит? Это так, вместо сортировки.

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


Профи
****

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

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


О множествах я не подумал вообще))))Да ваш вариант наиболее оптимальный, по крайне мере еще лучше я придумать не могу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата(Krjuger @ 5.06.2012 16:55) *

О множествах я не подумал вообще))))Да ваш вариант наиболее оптимальный, по крайне мере еще лучше я придумать не могу.


а если самой вводить каждый раз числа разные,то это как выглядеть будет.так?или как?
[code]
program str155n10;

{$APPTYPE CONSOLE}

uses
SysUtils,
windows;
const n = 4;
var
a : array[1 .. n] of integer;
i, x : Integer;
s : set of byte;
b : boolean;
Procedure Vvod(var a:integer);
// i:integer;
begin
for i:=1 to n do
read(a[i])
end;
Function Print_mas (var a:integer):integer;
for i:=1 to n do
begin
write(a[i]);
end;
begin
Vvod(a);
Print_mas(a);
s := [];
for i := 1 to n do
begin
X := a[i];
b := true; // Èíîãäà íîëü âñå-òàêè ïðèçíàþò íàòóðàëüíûì ÷èñëîì, ïîòîìó áóäåì è íà íåãî ðàññ÷èòûâàòü.
while b or (X <> 0) do
begin
s := s + [x mod 10];
b := false;
x := x div 10;
end;
end;

for i := 0 to 9 do // Âûâîä ìîæåøü èçìåíèòü, åñëè ïðèëîæåíèå íå êîíñîëüíîå.
if i in s then write(i:2);
writeln;
readln;
end./code]
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Цитата(Krjuger @ 5.06.2012 17:55) *

О множествах я не подумал вообще))))Да ваш вариант наиболее оптимальный, по крайне мере еще лучше я придумать не могу.

Код

program str155n10;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;
const n = 4;
var
   a : array[1 .. n] of integer;
   i, x : Integer;
   s : set of byte;
   b : boolean;
   Procedure Vvod(var a:integer);
  // i:integer;
   begin
   for i:=1 to n do
   read(a[i])
   end;
   Function Print_mas (var a:integer):integer;
   for i:=1 to n do
   begin
   write(a[i]);
   end;
begin
Vvod(a);
Print_mas(a);
   s := [];
   for i := 1 to n do
   begin
      X := a[i];
      b := true;
      while b or (X <> 0) do
      begin
         s := s + [x mod 10];
         b := false;
         x := x div 10;
      end;
   end;

   for i := 0 to 9 do
      if i in s then write(i:2);
   writeln;
   readln;
end.

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


Профи
****

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

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


Наиглупейшие ошибки,не там begin поставили, в процедуры вы передаете не массив целых чисел, а целое число ,ваша функция печати ничего не возвращает,так почему же она является функцией, а не процедурой и подобные ошибки.

const n = 4;
type
mas=array[1..n] of integer;

procedure Vvod(var a:mas);
var
i:integer;
begin
for i:=1 to n do
read(a[i]);
end;


procedure Print_mas (var a:mas);
var
i:integer;
begin
for i:=1 to n do
write(a[i],' ');
end;

var
i, x : Integer;
s : set of byte;
b : boolean;
a:mas;
begin
Vvod(a);
Print_mas(a);
s := [];
for i := 1 to n do
begin
X := a[i];
b := true;
while b or (X <> 0) do
begin
s := s + [x mod 10];
b := false;
x := x div 10;
end;
end;

for i := 0 to 9 do
begin
if i in s then writeln(i);
end;
writeln;
readln;
end.



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


Новичок
*

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

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


Цитата(Krjuger @ 5.06.2012 18:53) *

Наиглупейшие ошибки,не там begin поставили, в процедуры вы передаете не массив целых чисел, а целое число ,ваша функция печати ничего не возвращает,так почему же она является функцией, а не процедурой и подобные ошибки.

const n = 4;
type
mas=array[1..n] of integer;

procedure Vvod(var a:mas);
var
i:integer;
begin
for i:=1 to n do
read(a[i]);
end;
procedure Print_mas (var a:mas);
var
i:integer;
begin
for i:=1 to n do
write(a[i],' ');
end;

var
i, x : Integer;
s : set of byte;
b : boolean;
a:mas;
begin
Vvod(a);
Print_mas(a);
s := [];
for i := 1 to n do
begin
X := a[i];
b := true;
while b or (X <> 0) do
begin
s := s + [x mod 10];
b := false;
x := x div 10;
end;
end;

for i := 0 to 9 do
begin
if i in s then writeln(i);
end;
writeln;
readln;
end.



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


Профи
****

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

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


Потому что вы используете и Wtire и Writeln, поэтому последний Readln не отрабатывает.Замените в выводе массива Write на Writeln и все увидете.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Цитата(Krjuger @ 5.06.2012 19:12) *

Потому что вы используете и Wtire и Writeln, поэтому последний Readln не отрабатывает.Замените в выводе массива Write на Writeln и все увидете.

оо..спасибо огромное за помощь..)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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