0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
1 | |
Список слов распечатать в алфавитном порядке. В Turbo Pascal или Pascal ABC23.02.2013, 01:18. Показов 5301. Ответов 20
Метки нет Все метки)
(
Дана непустая последовательность слов, в каждом из которых содержится от 1 до 6 заглавных латинских букв; соседние слова разделены запятой, за последним словом следует точка. В качестве внутреннего представления последовательности слов использовать массив из 6 списков, в котором хранятся 5-буквенные слова, упорядоченные по алфавиту.
Требуется ввести эту последовательность слов в память ЭВМ, преобразовав ее во внутреннее представление, а затем распечатать в алфавитном порядке: сначала все однобуквенные слова, затем все двубуквенные и т.д. В программе должны быть определены процедура выделения очередного слова из исходной последовательности и процедура вставки слова в упорядоченный список. Вводить последовательность слов следует посимвольно. Следует упорядочивать списки одновременно с вводом слов: введенное слово следует сразу вставлять в "свое" место в ранее упорядоченный список. Для упрощения рекомендуется использовать списки с заглавными звеньями. В этом случае следует в начале выполнения программы построить список(списки) с одним заглавным звеном. В звеньях списков(вершинах) следует хранить не только слова, но и дополнительную информацию(порядковый номер слова в исходной последовательности или число его вхождений в эту последовательность). Для каждого слова лучше иметь только одно звено, фиксируя в нем число вхождений этого слова в последовательность; при печати же надо продублировать слово данное число раз. Я понимаю, что условий много))) но без всех этих условий у меня не примут работу. Лично от меня условие написать по возможности комментарии, чтобы мне самой понять ее))))
0
|
|
23.02.2013, 01:18 | |
Ответы с готовыми решениями:
20
Различия трансляторов Pascal ABC.Net и Turbo/Borland Pascal
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
23.02.2013, 22:02 | 2 | |||||
![]() Решение
Здесь заглавный элемент в списках я не стал использовать - в этом нет особого смысла.
3
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
23.02.2013, 22:25 [ТС] | 3 |
Mawrat, спасибооо большоее))) оперативно))) а остальные условия учтены?
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
23.02.2013, 23:02 | 4 |
Пожалуйста.
![]() Да, учтены. По порядку: Это сделано. Только формулировка здесь неверная. Правильно: "... в котором хранятся слова с длинами от 1 до 6, соответственно в списках: Arr[1]..Arr[6]. В каждом списке слова упорядочены по алфавиту." И ещё уточню - слова хранятся почти по алфавиту. ![]() Сделано. Сделано. Это тоже реализовано - применена функция Readkey(). Сделано. Заглавное звено я не стал делать. Сделано. И это тоже сделано. ![]() Добавлено через 6 минут Сейчас ещё проверю... Добавлено через 1 минуту Есть проблемы. ![]() Добавлено через 17 минут Исправил. Исправленный код в том же сообщении, выше.. Добавлено через 28 секунд Проверяй.
2
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
23.02.2013, 23:02 [ТС] | 5 |
Mawrat, *______* боже, что я бы делала без вас))) еще раз огромное спасибооо)))
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
23.02.2013, 23:07 | 6 |
Если в программе что-то непонятно - спрашивай. Расскажу. Вообще, что касается списков, желательно рисовать элементы и их связи на бумаге - так легче разобраться, что происходит при действиях со списком.
2
|
HighPredator
|
23.02.2013, 23:08
#7
|
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
23.02.2013, 23:14 | 8 |
На самом деле, может выпасть ещё одно испытание - если работодатель попросит дать разъяснения по действиям в программе.
![]()
0
|
23.02.2013, 23:15 | 9 |
2
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
23.02.2013, 23:23 [ТС] | 10 |
![]() он попросит)) разберусь, вроде все понятно)))
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||||||||||||
23.02.2013, 23:45 | 11 | ||||||||||||||||||||
ST2502, например, может быть такой вопрос: в функции GetWord() пояснить назначение строк:
Если введён символ с кодом #13 - то это перевод каретки. Т. е., переход на новую строку. Поэтому мы выполняем вызов Writeln. Если спросят - а почему бы в этом случае не написать так: Write(Ch) или так: Write(#13)? Ответ: потому что на самом деле перевод каретки состоит из двух знаков: #13#10 - переход на новую строку и конец строки. Поэтому вместо Writeln можно написать так: Write(#13#10). Теперь что касается знака #0. Если пользователь нажмёт какую-нибудь функциональную клавишу F1, F2 и т. д., то в этом случае Readkey() вернёт код #0. А при следующем вызове Readkey() вернёт скан-код нажатой клавиши. Поэтому в программе, если вызов Readkey() вернул #0, то значит произошло нажатие функциональной клавиши. В этом случае мы ещё раз вызываем Readkey(), чтобы прочитать скан-код клавиши. Далее этот скан код мы никак не используем, т. к., он нам не нужен. Знак #8 - это нажатие клавиши BackSpace. Добавлено через 19 минут И ещё немного подправил - чтобы символ #27 (ESC) не распечатывался на экране. Т. е., заменил:
Исправленный код в прежнем сообщении.
2
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
24.02.2013, 12:19 [ТС] | 12 |
Mawrat, а можно функцию GetWord без этих символов( #0, #8, #9, #10, #13, #27)? так как я не мастер в проге и препод догадается, что я не сама это сделала)))) + "прекратить ввод - esc" можно его заменить просто enter? "Память занятая под списки освобождена" для чего это было сделано? обязателен ли он? "повторить - enter" это тоже не понадобится думаю)) также он читает любые слова менее 6 букв, например, "f f f", "qw//", "а**", "wer**/", хотя он должен читать только слова с латинскими буквами без других символов. можете исправить?))
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
24.02.2013, 12:46 | 13 |
Ну в общем, если пользователь обязуется не нажимать функциональные клавиши (F1, F2, и др.), то можно убрать код #0. Код #8 - это клавиша BackSpace - пользователь может попытаться стереть какие-нибудь символы. Поэтому эту клавишу желательно перехватывать. Код #10 можно убрать. #13 - это Enter. А #27 - это ESC.
Да, можно и по Enter завершение ввода сделать. Раз мы память выделили, то её надо позже освободить. Т. е., раз мы у системы (или у менеджера памяти) взяли память, то потом её надо возвратить. Иначе будут утечки памяти. Т. е. память будет помечена, как используемая в программе, хотя программа к ней уже не будет иметь доступа. Таким образом эту память не сможет использовать менеджер памяти и соответственно, она не будет отдана системе. Ещё такие участки памяти называют "мёртвыми". Вообще, когда проверяется код программы, где идёт работа с динамической памятью, первое что делается, смотрят - ага есть вызов New(), теперь смотрим - есть ли вызов Dispose()? Нет Dispose() - всё, это уже серьёзный недочёт. Чаще всего, убедившись в отсутствии Dispose(), проверка сразу же и заканчивается. ![]() Да сейчас "буквами" считаются любые символы, отличные от разделителей. Можно изменить код таким образом, чтобы только буквы латиницы учитывались. --- В общем я сейчас подправлю. И выложу здесь код чуть позже.
1
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
24.02.2013, 13:06 [ТС] | 14 |
обязуюсь))
наоборот, мне легче было бы если при неправильном вводе смогла стереть ненужное)))
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
24.02.2013, 13:45 | 15 |
Тогда понадобится поменять алгоритм ввода.
![]() У нас сейчас есть функция GetWord(), которая извлекает слова из посимвольного ввода с консоли. И таким образом у нас выполняются оба условия - у нас есть процедура, которая обеспечивает посимвольный ввод и извлечение слов. Сейчас у пользователя нет возможности редактирования текста, который он вводит. Если мы такую возможность предоставим, то нам понадобится отслеживать изменения, сделанные пользователем. Это сделать можно - мы должны будем хранить всё введённые символы в буфере - в символьном массиве. Если пользователь нажмёт BackSpace (#8), то мы уменьшим значимую длину буфера на 1 - тем самым, удалим последний символ. В течение всего времени ввода текста мы не должны извлекать слова, потому что нам не известно окончательное состояние текста (ведь пользователь может часть слов стереть). Только когда пользователь завершит ввод (нажмёт Enter (#13), например) - вот тогда мы начнём извлекать слова из буфера. Устроит такой вариант? Добавлено через 2 минуты Клавиши стрелок запретим - потому что логика с их участием усложнится.
0
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
24.02.2013, 15:19 [ТС] | 16 |
Mawrat, окей) не будем тогда усложнять
![]()
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
24.02.2013, 16:03 | 17 |
Ну я сейчас тогда два варианта программы выложу. Без буфера и с буфером. И можно будет выбрать.
1
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
24.02.2013, 16:21 [ТС] | 18 |
ок
![]()
0
|
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||||||||||||
24.02.2013, 16:48 | 19 | ||||||||||||||||||||
В программе с буфером ввод всё-таки не очень красивым получился. При нажатии BackSpace предыдущие символы не стираются на экране, а только перемещается влево курсор. Но на самом деле они стираются - в буфере.
![]() Но тем не менее программу с буфером тоже выложил - под номером 2. ![]() --- 1. Без буфера, с завершением ввода по нажатию ENTER:
Обработку функциональных клавиш я всё-таки оставил. - Чтобы клавиши "стрелки" перехватывать. Если стрелки нажиматься гарантированно не будут, то надо просто в функции GetWord() убрать часть с условием:
1
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 12
|
|
24.02.2013, 17:26 [ТС] | 20 |
Mawrat, *_____* самое то для меня это 3 вариант)))) спасибо огромное-огромное)))
![]() Добавлено через 3 минуты Mawrat, можете посмотреть еще эту задачку? она похожая)) мб это через чур))) но все же)) Задача на списки
0
|
24.02.2013, 17:26 | |
24.02.2013, 17:26 | |
Помогаю со студенческими работами здесь
20
Можно как-то переделать код из Turbo Pascal чтобы он работал в pascal abc.net? Нужно перевести код из Turbo Pascal в Pascal ABC Перевод программы с Turbo Pascal на Pascal ABC.NET Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |