![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
natik3 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Дана последовательность из n натуральных чисел.Написать программу,которая выводит в возрастающем порядке все цифры,которые входят хотя бы в одно число.
|
![]() ![]() |
Krjuger |
![]()
Сообщение
#2
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Если не заморачиваться с оптимизацией и не придумывать специальный аглоритм,то в лоб,сначала выписать вообще все цифры в каждом числе,затем удалить все повторяющиеся,затем отсортировать по возрастанию. Сортировка у тебяуже есть из предыдущей программы.
Либо, как вариант, сначала искать единицу во всех числах,потом двойку и тд.Если в одном числе встречается,то выписать и перейти к поиску следующего. Тут вариантов может быть уйма и какой наиболее оптимальный с ходу и не поймеш. Сообщение отредактировано: Krjuger - |
IUnknown |
![]()
Сообщение
#3
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: ![]() ![]() ![]() |
Блин, да что с вами со всеми? Оцепенение всеобщее. Как будто обкурились все... Какие оптимизации? Какие выписывания всех цифр подряд и удаление повторяющихся? Какая нахрен сортировка? Речь о МНОЖЕСТВАХ, так заметнее? Они не сортируются, нет в этом смысла. Все элементарно:
varВсё, множество s содержит все цифры, которые есть хотя бы в одном числе. Пройтись циклом от 0 до 9 и вывести все цифры, которые есть во множестве - труда не составит? Это так, вместо сортировки. Сообщение отредактировано: IUnknown - |
Krjuger |
![]()
Сообщение
#4
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
О множествах я не подумал вообще))))Да ваш вариант наиболее оптимальный, по крайне мере еще лучше я придумать не могу.
|
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
О множествах я не подумал вообще))))Да ваш вариант наиболее оптимальный, по крайне мере еще лучше я придумать не могу. а если самой вводить каждый раз числа разные,то это как выглядеть будет.так?или как? [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] |
natik3 |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
О множествах я не подумал вообще))))Да ваш вариант наиболее оптимальный, по крайне мере еще лучше я придумать не могу. Код 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. с Вводом помогите разобраться |
Krjuger |
![]()
Сообщение
#7
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Наиглупейшие ошибки,не там begin поставили, в процедуры вы передаете не массив целых чисел, а целое число ,ваша функция печати ничего не возвращает,так почему же она является функцией, а не процедурой и подобные ошибки.
Сообщение отредактировано: Krjuger - |
natik3 |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
Наиглупейшие ошибки,не там begin поставили, в процедуры вы передаете не массив целых чисел, а целое число ,ваша функция печати ничего не возвращает,так почему же она является функцией, а не процедурой и подобные ошибки.
оно вылетает почему то,после ввода цифр..хотя вроде все так..не пойму почему... |
Krjuger |
![]()
Сообщение
#9
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Потому что вы используете и Wtire и Writeln, поэтому последний Readln не отрабатывает.Замените в выводе массива Write на Writeln и все увидете.
|
natik3 |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 14.09.2025 16:49 |