![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.11.2011
Сообщений: 13
|
![]()
В общем начал только-только разбираться со стеками, очередями и т.п.
Смысл, то понятен, но вот реализация (т.к. я только начинаю) хромает, да что уж говорить - ползает на четвереньках ![]() Вот нужно выполнить такую вот довольно-таки легкую (увы пока не для меня) задачу: "Реализовать операции работы со стеком, построенным на основе динамических структур. Распечатать символы введенной пользовательской строки в обратном порядке." Начал я пытаться реализовать все это дело (только начало, можно сказать, что практически ничего и не сделал-то я ![]() Код:
Прошу помощи ![]() |
![]() |
![]() |
![]() |
#2 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
1) "read(l2[i]);" зачем? как-то не логично
2) на всякое выделение должно быть освобождение)) вы выделили память через new - изволь вернуть её через dispose (если верно помню имя) 3) "stack^.nextnode:=nil;" куда тут мы лезим? stack же указатель и указывает на три весёлых буквы... в смысле, надо вначале написать new(stack) и выделить память под данные 4) общий стиль хромает, но, увы, на это плюют даже преподы.... лишние переменные, именование паршивое, неумение верно прописывать типы аргументов (var/const/none) 5) так-то вроде верно всё, если исправить п1-3 Последний раз редактировалось GreenWizard; 30.03.2012 в 00:31. |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 07.11.2011
Сообщений: 13
|
![]() Цитата:
2) согласен, сморозил. 3)с этим немного неясно ![]() 4)преподы-шмеподы... в данный момент "я плюю на них", т.к. хочу для себя разобраться, но тот "препод", что у меня довольно-таки строго следит за так называемым стилем(но это так, отступление). лишние переменные возникли из-за того, что вначале я совсем не так хотел строить это программу, а убрать их и забыл, именование такое, из-за того, что я так понял принцип работы стека, как-то так... 5)с 3-им пунктом траблы ![]() |
|
![]() |
![]() |
![]() |
#4 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
у вас переменная stack имеет тип nodeptr т.е. указатель на nodetype т.е. самой структуры нет пока и это ошибка! компилятор выделил память под stack, но не под stack^ и нужно самостоятельно её выделять
----- именование чем плохо напишу позже, бегу в спорт зал |
![]() |
![]() |
![]() |
#5 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
и так, замечания по именованию:
1) не отделяете слова.. ПрощеПрочестьТакоеВот, чемвоттакуюкашу ![]() 2) именование типов и переменных одинаковое... это +1 к нагрузке и -2 зрение через пару лет ![]() 3) имена функций/процедур... т.к. это тестовый проект, лишь для обучения, то это допустимо, но лучше и тут дать имена толковые, например, Stack_Push или PushToStack 4) одинаковые имена параметров и глобальных переменных... как я обычно говорю: это работает, но огребёшь однажды ![]() 5) разберитесь с типами параметров... всегда вначале ставим const т. е. предполагаем, что параметр не будет меняться сам по себе (указатель на стек не изменится, но при этом сам стек можем менять).. если внутри функции нужно менять параметр "лишь раз" (сложно пояснить... это когда в функции решается одна подзадач, например, проход по стеку, но не проход и какая-то иная операция, которой нужен исходное значение параметра), то опускаем модификаторы (просто "xxx(param: type)" ) таким образом мы получаем локальную копию параметра... в самых крайних случаях, когда уверенны в подходе, можно использовать var-параметры, но по минимуму! т. е. не 3+ таких параметра, а одна структура с 3+ полями... не рационально, громоздко, но намного прозрачнее! увы, пример не приведу т.к. громоздкий весьма и спорный... на вкус и цвет фломастеры разные, НО жрать их одинаково вредно ![]() уфф, что-то я разфилософствовался ![]() Последний раз редактировалось GreenWizard; 30.03.2012 в 15:01. |
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 07.11.2011
Сообщений: 13
|
![]() Цитата:
![]() Вы меня недопоняли и я не понимал, что от меня хотят, я и сейчас если честно, толком объяснить не могу чего я хотел, но это должно было быть примерно так: стек, динамич. структура, я ввожу строку и мне должно (по моей задумке) выводить её задом-наперед+ещё раз задом-наперед, т.е. я ввожу например слово "код" мне посредством "структуры"(LIFO) стека выводит его как "док", ну а я же добивался того, чтобы я получил обратно слово "код", т.е. (т.к. я уже немного разобрался во всем этом) мне следовало просто "запихнуть" полученное "док" в стек и оно бы вывело, то чего я добивался. Ещё раз огромное спасибо. И про наставления тоже огромное спасибо (они даже чем-то мотивируют). Теперь-то и я вижу, что код отвратный, но это из-за не правильно усвоенной теор. части, когда я разобрался что к чему, то такие вещи как стек (которые казались мне очень скучными и сложноватыми) оказались весьма простыми |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Pascal] Создать очередь и скопировать в стек | go.d_bq | Помощь студентам | 4 | 17.05.2011 23:23 |
Turbo Pascal Стек | Dower | Помощь студентам | 11 | 26.04.2011 12:35 |
Двумерный массив с динамической переменной Pascal | AxisNet | Помощь студентам | 1 | 17.11.2009 14:33 |
Pascal Множества, стек, списки, очередь. | RrR5 | Помощь студентам | 4 | 26.01.2009 15:00 |
Проблемы с динамической структурой данных | Mailz | Общие вопросы C/C++ | 1 | 21.05.2008 00:18 |