
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.02.2008, 14:47
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Привет всем!!! Делаю лабу по Паскалю. Чтобы не взникало лишних вопросов, нупишу её задание: Лабораторная работа № 1 Тема: Модульное программирование на языке Паскаль. Задание: Разработать модуль на языке Паскаль в соответствии с вариантом задания. Написать программу, демонстрирующую использование функций данного модуля. Варианты заданий: Определить тип данных «Матрица» и разработать подпрограммы для ввода, вывода, вставки/удаления строки/столбца с заданным номером. Начал разрабатывать модуль и у меня возник вот такой вопрос. Вставка строки осуществляется командой Insert, а перед тем, как её вставить, надо процедурой GoToXY(X, Y), где X и Y - координаты курсора, указать координаты вставляемой строки матрицы... Вопрос: как запрограммировать эту процедуру, чтобы в любое время пользователь мог вставить строку в матрицу? Может быть стоит создать модуль только из этой процедуры (процедуры вставки/удаления строки/столбца)... ... ... Хотя, если, к примеру, матрица 3х2 превратится в 8х8, и пользователь ещё захочет над ней "издевнуться", и, есть вариант вставки (да и удаления) строки\столбца в середину матрицы, например, между 3-ей и 4-ой, между 5-ой и 6-ой, то как быть тогда?... По-моему, тут поможет оператор for... Будет вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. P.S. Подскажите, пожалуйста, процедуру добавление и вставки столбца. В книге у меня приводится пример вставки и удаления строки текста, поэтому вставка и удаление столбца там не описана... Заранее Благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2008, 14:52
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
parenyokВставка строки осуществляется командой InsertПрошу прощения... Не Insert, а InsLine... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2008, 14:55
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Блин... Сам в себе удивляюсь... Нигде не использовал nstr... Подскажите, пожалуйста, как её правильно использовать?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2008, 15:17
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Возможно более правильный вариант цикла вставки строки выглядет так: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2008, 15:24
|
|||
|---|---|---|---|
|
|||
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
parenyokБлин... Сам в себе удивляюсь... Нигде не использовал nstr... Подскажите, пожалуйста, как её правильно использовать?... Я вот тоже Вам удивляюсь... За столько времени ничего не научиться делать... Вроде уже и на С, и на FoxPro писали... А вопросы все те же.... Пора уже за ум браться... И только потом переходить к визуализации Итак, начнем с азов. Матрица = двумерный массив, т.е. массив с двумя измерениями (a[x][y]). Далее можно поступать так: 1. Определить заранее максимальный размер массива (например, 100х100 элементов) и выдавать ошибку при попытке пользователя добавить 101 строку или 101 столбец. Если номер строки или столбца меньше заданного лимита, то просто пробегаться по строке или столбцу массива и вносить туда данные... Где-то отдельно хранить реальный (сколько использовано строк/столбцов) размер матрицы 2. Работать с указателями (аналогично делается в С/С++). Т.е., например, хранить двумерный массив (матрицу) по строкам. При добавлении новой строки в матрицу создать указатель на строку матрицы, выделить память и ввести данные. В этом случае добавление столбца вызовет определенные трудности, так как надо будет переопределить размер всех ранее введенных строк матрицы, перекопировать существующие данные и освободить память, занятую "устаревшими" строками. 3. Для хранения матрицы использовать связанный список. Это опять работа с указателями. И в этом случае есть свои "подводные камни"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.02.2008, 15:29
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
А почему бы не сделать "в лоб"? Создать 2 энкземпляра array of array... и потом при нееобходимости менять размер одного из них и копироваь содержимое второго? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.02.2008, 09:40
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Станислав С...кий parenyokБлин... Сам в себе удивляюсь... Нигде не использовал nstr... Подскажите, пожалуйста, как её правильно использовать?... Я вот тоже Вам удивляюсь... За столько времени ничего не научиться делать... Вроде уже и на С, и на FoxPro писали... А вопросы все те же.... Пора уже за ум браться... И только потом переходить к визуализации Это потому, что изучаю это всё я сам!!! Нету у меня никакой практики, нету у меня возможности часто посещать консультации!!! Посещаю я их от случая к случаю, когда уж совсем застопорюсь или когда перед ней какой-нибудь зачёт или экзамен сдаю, понимаешь?... А так я делаю всё сам!!! Если в книге или в Инете не нахожу решение проблемы или нахожу и не понимаю, то обращаюсь в чат за помощью... Станислав С...кий Итак, начнем с азов. Матрица = двумерный массив, т.е. массив с двумя измерениями (a[x][y]). Далее можно поступать так: 1. Определить заранее максимальный размер массива (например, 100х100 элементов) и выдавать ошибку при попытке пользователя добавить 101 строку или 101 столбец. Если номер строки или столбца меньше заданного лимита, то просто пробегаться по строке или столбцу массива и вносить туда данные... Где-то отдельно хранить реальный (сколько использовано строк/столбцов) размер матрицы Да знаю я всё это... Это у меня будет в основной программе. Сейчас я привёл отрывок модуля (ОТРЫВОК!!!) - процедуру ввода строки!!! Станислав С...кий 2. Работать с указателями (аналогично делается в С/С++).Хи... А как ты узнал, что мне тоже самое надо будет в С++ сделать?... Станислав С...кийТ.е., например, хранить двумерный массив (матрицу) по строкам. При добавлении новой строки в матрицу создать указатель на строку матрицы, выделить память и ввести данные.Хм... Спасибо! Над этим надо будет задуматься... А через InsLine не получится?... Станислав С...кийВ этом случае добавление столбца вызовет определенные трудности, так как надо будет переопределить размер всех ранее введенных строк матрицы, перекопировать существующие данные и освободить память, занятую "устаревшими" строками.Ничего себе... Сложно... А в паскале нет процедуры, которая бы добавляла столбец?... Станислав С...кий3. Для хранения матрицы использовать связанный список. Это опять работа с указателями. И в этом случае есть свои "подводные камни"...А более простого решения задачи нет?... К примеру, какие-нибудь процедуры в модуле crt?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.02.2008, 09:42
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
zloy denА почему бы не сделать "в лоб"? Создать 2 энкземпляра array of array... и потом при нееобходимости менять размер одного из них и копироваь содержимое второго?Тоже мысль, которую надо думать...))) Называется, найди 10 решений задачи...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.02.2008, 05:43
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Помогите, пожалуйста, с процедурами вставки\удаления столбца... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.02.2008, 06:42
|
|||
|---|---|---|---|
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Главный вопрос состоит в следующем. Как добиться сдвига столбцов матрицы вправо и на освободившемся месте вписать новые значения (вставка столбца) и сдвига стобцов матрицы влево, что повлечёт удаление предшествующего столбца?... Пожалуйста, помогите... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.02.2008, 07:55
|
|||
|---|---|---|---|
|
|||
Проконсультируйте, пожалуйста, по Паскалю... |
|||
|
#18+
Твой вопрос (как я понял) касается того, как тебе симпатичнее организовать данные. Ну могу с радостью заметить, что этот воопрос вообще всегда надо крепко обдумывать перед тем как сесть писать. Правда зачастую окончательное решение созревает в процессе писания. Ну вот я смотрю тут уже полезные идеи высказаны надо выбирать и детализировать. Сам ты начал делать программу со статическими данными, с размещением матрицы в массиве. В этом случае после добавления строки/столбца нужно двойным циклом сдвинуть оставшуюся (правую или нижнюю) часть матрицы. При этом возникает вопрос, связанный с тем, что матрица должна быть заранее большого размера. Или можно матрицу выделять динамически каждый раз, когда у нее меняется размер и переписывать элементы в новую. Предложения создать для матрицы вообще красивую какую-нибудь динамическую структуру типа списка массивов или списка списков, конечно, хороши, только, как уже замечено, вставлять в них будет удобно или строку, или столбец, но не то и другое одновременно. За исключением варианта когда это будет настоящая сетка из узлов, имеющих каждый по два равноценных указателя. Выглядеть будет ужасно приятно, главное не глючить, пока пишешь. А вот насчет этой фразы: "Это потому, что изучаю это всё я сам!!! Нету у меня никакой практики, нету у меня возможности часто посещать консультации!!! Посещаю я их от случая к случаю, когда уж совсем застопорюсь или когда перед ней какой-нибудь зачёт или экзамен сдаю, понимаешь?... А так я делаю всё сам!!!" - я так скажу... Это похвально, конечно, что "все сам" - только будь уверен, здесь практически все "все сами", поскольку издавна известно что "программированию нельзя научить, а можно только научиться". И многие, гляди ж ты, совершенно самостоятельно и по 10, по 30, по 50 разных языков и систем разработки освоили... И не шумят... ;-) Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=16&mobile=1&tid=1345479]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 510ms |

| 0 / 0 |
