|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Несколько затруднений про массивы (Pascal) |
|
Разное - Несколько затруднений про массивы (Pascal)
|
Старожил Сообщения: 329 |
Профиль | Отправить PM | Цитировать Вопрос номер один:
Пишу функцию, она должна принимать двумерный текстовый массив. Как это описать в скобочках? Вопрос номер 2 Как определить размеры двумерного массива? Один параметр знаю: Length(mass),а как второй? Вопрос номер 3: Как создать двумерный массив на основе уже имеющегося? Типа дублера, либо как вариант одинаковый по второму параметру. Прошу прощения за нубские вопросы, но паскаль был в школе. Сейчас пишу в Lazarus. ___ |
|
------- Отправлено: 15:32, 10-10-2017 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать
|
Отправлено: 19:30, 10-10-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Busla,
1. Так? 2. Определить == узнать, причем и кол-во строк и кол-во столбцов Так? 3. Странно, в других языках есть, а тут нет. Сомнительно. Может не так выразился. Создать новый массив имеющий такую же размерность как у другого массива? Тогда это будет так? |
------- Последний раз редактировалось blackeangel, 10-10-2017 в 20:10. Отправлено: 19:37, 10-10-2017 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:08, 12-10-2017 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Busla, ему любое подойдёт, лишь бы работало. Суть в том, что определение размера массива должно происходить динамически, в процессе исполнения приложения.
P.S. Я уже несколько раз предлагал коллеге blackeangel перейти к словарям/коллекциям, но он не видит в этом нужды. |
|
Отправлено: 17:24, 12-10-2017 | #5 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, как оказалось на паскале невозможно динамически создавать массивы по ходу кода.
И я рад Вас видеть На счёт словарей/коллекций/эрей листов. Если вы мне обьясните как это работает простым деревенским языком, то пойму и буду их использовать. Если массивы окружают нас в жизни, то словарь только толковый или орфографический. Массивы это тетрадь в клетку, таблица экселя, 9 стаканов на столе(3х3), графический ключ на телефоне(3х3) и т.д. |
------- Отправлено: 18:38, 12-10-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Dynamic arrays Dynamic array - Free Pascal wiki |
|
Отправлено: 21:43, 12-10-2017 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Простейший вариант реализован в WSH, в VB и в VBA. Пример демонстрации свойств и методов словаря на WSH, исполнять под консольным cscript.exe: Скрытый текст
Option Explicit Dim objDictionary Dim strKey, strValue Dim arrKeys, arrValues Dim i Set objDictionary = WScript.CreateObject("Scripting.Dictionary") ' Сравнение ключей будем производить в текстовом виде ' (тогда будет игнорироваться различие строчных и заглавных букв) objDictionary.CompareMode = vbTextCompare ' Заполняем словарь парами Ключ/Значение objDictionary.Add "Ключ1", "Значение1" objDictionary.Add "Ключ2", "Значение2" objDictionary.Add "Ключ3", "Значение3" objDictionary.Add "Ключ4", "Значение4" objDictionary.Add "Ключ5", "Значение5" objDictionary.Add "Ключ6", "Значение6" ' Добавим ещё три пары Ключ/Значение objDictionary.Add "Ключ7", "Значение7" objDictionary.Add "Ключ8", "Значение8" objDictionary.Add "Ключ9", "Значение9" ' Заменим значение ключей Ключ3 и Ключ4 objDictionary.Item("Ключ3") = "Мама мыла раму" objDictionary.Item("Ключ4") = "Рабы не мы, мы не рабы" ' Удалим две пары Ключ/Значение objDictionary.Remove "Ключ4" objDictionary.Remove "Ключ5" ' Попытка добавления уже существующего ключа или удаления несуществующего ' вызовет ошибку времени исполнения. ' Чтобы этого избежать, мы можем проверять существование ключа перед данными операциями If Not objDictionary.Exists("Ключ10") Then objDictionary.Add "Ключ10", "Значение10" End If If objDictionary.Exists("Ключ6") Then objDictionary.Remove "Ключ6" End If ' Тип значения словаря WScript.Echo TypeName(objDictionary) WScript.Echo ' Количество элементов словаря WScript.Echo objDictionary.Count WScript.Echo ' Выводим содержимое словаря в виде пары Ключ/Значение, перебирая ключи For Each strKey In objDictionary.Keys WScript.Echo strKey, objDictionary.Item(strKey) Next WScript.Echo ' К предыдущему: тип значения objDictionary.Keys — массив типа Variant WScript.Echo TypeName(objDictionary.Keys) WScript.Echo ' Поэтому можно задействовать не только цикл вида For Each, но и обычный For…To…Next, ' несмотря на то, что обратиться напрямую по индексу к паре Ключ/Значение нельзя ' (только через промежуточную переменную, иначе лексический анализатор WSH спотыкается) arrKeys = objDictionary.Keys For i = LBound(arrKeys) To UBound(arrKeys) WScript.Echo i, arrKeys(i), objDictionary.Item(arrKeys(i)) Next WScript.Echo ' Выводим только значения: For Each strValue In objDictionary.Items WScript.Echo strValue Next WScript.Echo ' И аналогично — через For…To…Next arrValues = objDictionary.Items For i = LBound(arrValues) To UBound(arrValues) WScript.Echo i, arrValues(i) Next WScript.Echo ' Выводим пары Ключ/Значение словаря Ключ2 и Ключ10 WScript.Echo objDictionary.Item("Ключ2") WScript.Echo objDictionary.Item("Ключ10") WScript.Echo ' Хотя обычно с индексами в словарях не работают, но можно сделать и так ' Выводим третью и четвёртую пары словаря (памятуя, что нумерация массивов идёт с нуля) WScript.Echo arrKeys(2), objDictionary.Item(arrKeys(2)) WScript.Echo arrKeys(3), objDictionary.Item(arrKeys(3)) WScript.Echo ' Удалим все пары Ключ/Значение objDictionary.RemoveAll Set objDictionary = Nothing WScript.Quit 0 Пример практической реализации — подсчёт количества одинаковых символов в произвольном тексте (дабы не усложнять кодировками, чтением из файла — используем банальную строковую переменную): Скрытый текст
Option Explicit Dim strText, strSymbol Dim objDictionary Dim strKey Dim i strText = _ "И я рад Вас видеть" & _ "На счёт словарей/коллекций/эрей листов." & _ "Если вы мне обьясните как это работает простым деревенским языком, то пойму и буду их использовать." & _ "Если массивы окружают нас в жизни, то словарь только толковый или орфографический." & _ "Массивы это тетрадь в клетку, таблица экселя, 9 стаканов на столе(3х3), графический ключ на телефоне(3х3) и т.д." Set objDictionary = WScript.CreateObject("Scripting.Dictionary") For i = 1 To Len(strText) ' Извлекаем из строки очередной символ strSymbol = Mid(strText, i, 1) ' Если его ещё нет в словаре… If Not objDictionary.Exists(strSymbol) Then ' …то добавляем его и задаём ему значение количества равным 1 objDictionary.Add strSymbol, 1 Else ' …иначе увеличиваем его значение количества на единицу objDictionary.Item(strSymbol) = objDictionary.Item(strSymbol) + 1 End If Next WScript.Echo "Symbol", vbTab, "Count" WScript.Echo "======", vbTab, "=====" For Each strKey In objDictionary.Keys WScript.Echo strKey, vbTab, objDictionary.Item(strKey) Next objDictionary.RemoveAll Set objDictionary = Nothing WScript.Quit 0 В более серьёзных языках, особенно в .Net, добавлены классы, которые не только полностью покрывают такой тип данных как Словарь, но и заметным образом расширяют его возможности, например прямое обращение к паре по индексу (поскольку класс сделан перечислимым), проверка существования значения, сортировка пар и прочее. Что-то похожее есть и во Free Pascal. |
|
Отправлено: 02:22, 13-10-2017 | #8 |
Новый участник Сообщения: 21
|
|
Отправлено: 12:14, 05-12-2017 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Pascal. Массивы. Вывод матрицы на экран | MAKS-I | Программирование и базы данных | 2 | 09-01-2013 01:20 | |
несколько вопросов про RIS и один про Pxelinux ) | vevs | Автоматическая установка Windows 2000/XP/2003 | 1 | 22-06-2007 00:28 | |
задача С++ про массивы | lrad | Программирование и базы данных | 3 | 24-01-2007 23:35 | |
*Теория* | Определите несколько формул для Pascal | MaxxSoftware | Программирование и базы данных | 2 | 23-02-2005 19:56 | |
Сайт про PASCAL | Wisp | Программирование и базы данных | 1 | 28-02-2004 17:56 |
|