![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый вечер, необходимо написать программу, задание слеудющее:
Создать объект «чтение строки» позволяющий считывать строку введенную с клавиатуры. От объекта чтение строки создать дочерний объект «анализ строки», подсчитывающий частоту, с какой символы встречаются во введенной строке и выводящий результат на экран. От объекта «анализ строки» создать дочерний объект «анализ текста», позволяющий считывать текст из файла и анализировать его. Код программы:
Трудность заключается в следующем: а именно в процедуре read_str.chtenie; в строчке for i:=1 to 255 do {read_s^.}mas^[i]:=' '; мне необходимо обнулить массив который находится в динамической памяти, т.е. я заменяю все символы пробелом. Если массив расположить в статической памяти, то все работает корректно. Задание именно на объекты и динамическую память. Также если обращаться к переменным или к объектам через переменные (закоментированнно), то так же все работает корректно, но преподователь сказал что нужно обращаться напрямую <имя объекта>.<имя переменной> Помогите разобраться с данной проблемой, заранее блаодарен. Сообщение отредактировано: ninja - 12.01.2010 22:23 |
TarasBer |
![]()
Сообщение
#2
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
В чём проявляется некорректность, что говорит отладка?
-------------------- |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата Трудность заключается в следующем: а именно в процедуре read_str.chtenie; в строчке for i:=1 to 255 do {read_s^.}mas^[i]:=' '; мне необходимо обнулить массив который находится в динамической памяти, т.е. я заменяю все символы пробелом. Трудность у тебя в том, что ты перед инициализацией объекта типа analiz_str не инициализируешь его предка:constructor analiz_str.init;, отсюда: под поля, описанные в предке, у тебя память НЕ выделена. Вот тебе и сбой в работе программы. То же самое касается и конструктора второго дочернего объекта, и обоих деструкторов (внутри дочернего деструктора надо вызывать деструктор предка) |
ninja |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
ммм.. Спасибо сейчас попробую исправить.
Отладка ничего не говорит, программа просто закрывается когда я ее компилирую. |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата программа просто закрывается когда я ее компилирую. Когда компилируешь - нет. А вот когда запускаешь - верю, может и закрыться... |
ninja |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
ну да)) не верно выразился.... Владимир, спасибо Вам огромное все работает, а я голову сломал никак не получалось....)))
Добавлено через 2 мин. Еще маленькая просьба, как специалист есть какие-нибудь замечания по организации объектов и работы с ними? Сообщение отредактировано: ninja - 12.01.2010 23:21 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Не совсем понятна логика, которой ты руководствовался при проектировании иерархии объектов. Что-то ты там все запутал. Можно было бы сделать чуть проще, если убрать Run из наследников, и оставить ее только в базовом классе... И из нее вызывать другие виртуальные функции, возможно - переопределенные в наследниках. Я бы, по крайней мере, делал именно так.
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
И еще: у тебя один и тот же код скопирован дважды в разных методах:
for s:='a' to 'z' do, и вот это тоже присутствует два раза: for s:='a' to 'z' do mas_char_1[s]:=0;Ты бы выделил эти 2 фрагмента в отдельные методы, и вызывал бы когда нужно. Глядишь, и общая картина прояснилась бы... |
ninja |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Большое спасибо, исправил
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 17:19 |