Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

До розд. 2.1 і 2.3) Введення даних у динамічний масив



Заповнення масиву конкретними значеннями — це самостійна задача. Вона може бути простою, як у випадку, що описаний у вправі 1 до розд. 2.1. А може бути і складною, якщо дані, які потрібно помістити в масив, варто автоматично витягти з будь-якого файлу. Або ввести їх вручну за допомогою текстового поля на екранній формі чи за допомогою системного вікна введення (Нагадаємо, що використовувати системне вікно введення можна за допомогою вбудованої функції InputBox).

Автоматичне (запрограмоване) читання даних з файлу і запис їх у масив будуть розглянуті в главі, присвяченій роботі з файлами.

А зараз розглянемо спосіб ручного введення, що робиться користувачем після початку роботи додатка. Це введення зручно організувати за допомогою циклу з умовою. Такий цикл забезпечує багаторазову появу системного вікна введення, поки користувач не клацне кнопку відмови.

Приклад 2.9. Допустимо, що нам необхідно заповнити масив рядками, що являють собою імена чи прізвища (чи імена з прізвищами) деякої групи людей. При цьому заздалегідь невідомо, скільки людей у цій групі. На кожен рядок накладене обмеження: у ньому не повинно бути більше 30 символів. Рядки повинні вводитися користувачем після натиснення мишею командної кнопки на екранній формі додатка. Це натиснення кнопки повинне викликати появу вікна введення, що зображено на мал. 2.4.

Мал. 2.4. Системне вікно вводу для заповнення масиву рядками

Після натиснення кнопки OK в цьому вікні, рядок з його текстового поля повинен бути поміщеним у масив, після чого вікно вводу повинне з'явитися знову. Після відмовлення від введення чергового значення (кліка кнопки Cancel) останнім елементом масиву повинен стати порожній рядок. А на екранній формі повинні бути надруковані значення індексу масиву і рядка з цими значеннями індексу (мал. 2.5).

Мал. 2.5. Екранна форма з результатом вводу рядків у масив

Представлена задача цікава тим, що розмір масиву, у який поміщаються рядки, заздалегідь не відомий. Можна, звичайно, задати його «з надлишком», встановивши його рівним, наприклад, 1000. Але якщо число рядків буде на один чи на два порядки меншим, таке рішення буде здаватися марнотратним — велика частина відведеної масиву пам'яті буде пустувати. І буде зовсім недобре, якщо число рядків, що вводяться, перевищить встановлене значення.

У мові Visual Basic є засіб, що дозволяє вирішити цю проблему. Це так званий динамічний масив. Верхня границя діапазону значень його індексу при початковому оголошенні цього масиву не вказується. (Нижню границю зручно теж не вказувати — за замовчуванням вона буде дорівнювати 0.)

Початкове оголошення робиться за допомогою слова Dim, при цьому після імені масиву в дужках нічого не вказується. Наприклад, так:
Dim Maccue() As Double.

У процесі роботи програми можна багаторазово заново повідомляти цей масив і щоразу встановлювати для нього нову верхню границю значень індексу (Нижню границю змінювати не можна. А якщо перевизначити багатомірний масив, то змінювати можна тільки верхню границю і тільки останній індекс.). Робиться це за допомогою ключового слова ReDim (замість слова Dim). Наприклад, так:
ReDim Macuв(N).

При повторному оголошенні масиву старі значення в ньому затираються, а система виділяє для масиву новий обсяг пам'яті. Щоб старі значення не затиралися, після слова ReDim варто поставити ключове слово Preserve.

Для розв'язання нашої задачі можна скористатися ще однією хитрістю мови Visual Basic — вбудованою функцією UBound, аргументом якої є ім'я масиву, а значенням — верхня границя значень індексу (розмір масиву). Ця функція допоможе нам циклічно збільшувати розмір масиву на одиницю і привласнювати новому елементу, що утворився, введене значення.

Наступний програмний код демонструє введення даних у вигляді рядків фіксованої довжини за допомогою системного вікна введення в одномірний динамічний масив (код 2.15).

Код 2.15.

На кожнім кроці циклу користувач вводить непустий ланцюжок символів. Умовою закінчення циклу служить введення порожнього ланцюжка.

Hові поняття:





Дата публикования: 2014-12-28; Прочитано: 162 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...