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