Что определяет фрагмент программы
Перейти к содержимому

Что определяет фрагмент программы

  • автор:

Технология фрагментированного программирования Текст научной статьи по специальности «Компьютерные и информационные науки»

ФРАГМЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ / ЧИСЛЕННЫЕ АЛГОРИТМЫ / БОЛЬШИЕ ЧИСЛЕННЫЕ МОДЕЛИ / ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ / FRAGMENTED PROGRAMMING / NUMERICAL ALGORITHMS / LARGE SCALE NUMERICAL MODELS / PARALLEL PROGRAMMING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Малышкин Виктор Эммануилович

Кратко представлена технология фрагментированного программирования и реализующие ее язык и система фрагментированного программирования LuNA, разрабатываемые в ИВМиМГ СО РАН. Технология ориентирована на поддержку разработки параллельных программ, реализующих большие численные модели, и их исполнения на суперкомпьютерах. Система LuNA автоматически обеспечивает такие динамические свойства параллельных программ как динамическая настройка на все доступные ресурсы, динамическая балансировка нагрузки, учет динамики поведения моделируемого явления и т.п.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Малышкин Виктор Эммануилович

Распределенный алгоритм управления данными в системе фрагментированного программирования LuNA

Проблемы параллельной реализации крупномасштабных численных моделей на вычислительных системах экзафлопсной производительности

Распределенный алгоритм отображения распределенных многомерных данных на многомерный мультикомпьютер в системе фрагментированного программирования LuNA

Автоматизация конструирования численных параллельных программ с заданными нефункциональными свойствами на базе вычислительных моделей

Распределенный алгоритм распределения многомерных сеток данных на многомерном мультикомпьютере в системе фрагментированного программирования LuNA

i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

FRAGMENTED PROGRAMMING TECHNOLOGY

Shortly the technology of fragmented programming is presented. This technology is now under development in the Institute of Computational Mathematics and Mathematical Geophysics. Also the LuNA language and system of fragmented programming are presented. The technology is oriented to support the parallel implementation of the large scale numerical models in physics. The LuNA system provides automatically such dynamic properties of parallel programs as dynamic tuning of the program to all the available resources of a supercomputer, dynamic balancing of a workload, the computation organization to the new details of the model behavior.

Текст научной работы на тему «Технология фрагментированного программирования»

ТЕХНОЛОГИЯ ФРАГМЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ1

Кратко представлена технология фрагментированного программирования и реализующие ее язык и система фрагментированного программирования LuNA, разрабатываемые в ИВМиМГ СО РАН. Технология ориентирована на поддержку разработки параллельных программ, реализующих большие численные модели, и их исполнения на суперкомпьютерах. Система LuNA автоматически обеспечивает такие динамические свойства параллельных программ как динамическая настройка на все доступные ресурсы, динамическая балансировка нагрузки, учет динамики поведения моделируемого явления и т.п.

Ключевые слова: фрагментированное программирование, численные алгоритмы, большие численные модели, параллельное программирование

В течение последних 15 лет в ИВМиМГ СО РАН велись работы по созданию методов и средств параллельной реализации больших численных моделей на суперкомпьютерах, а также параллельной реализации таких моделей. Накопленный опыт позволил сформировать идеи технологии фрагментированного программирования. Основная проблема параллельной реализации больших численных моделей состоит в том, что необходимая сложность программирования заметно превосходит квалификацию программистов, работающих обычно в численном моделировании, так как в программе моделирования понадобилось реализовывать динамические системные функции.

Чтобы преодолеть эту проблему, нужна поддержка процесса параллельного программирования таких моделей. Необходимая технология — технология фрагментированного программирования и реализующие ее язык и система программирования LuNA — разработаны в ИВМиМГ СО РАН.

Поддерживая технику разработки программ численного моделирования также хотелось бы обеспечивать:

• должную степень непроцедурности [1] представления алгоритма в параллельной программе (не знать MPI, свойства вычислителя и его коммуникационной сети, методы и средства параллельного программирования и т.д.),

• неизменность алгоритма, его независимость от оборудования (раздельное описание алгоритма и реализующей его программы), автоматическая генерация фрагментированной программы, что требуется для обеспечения ее переносимости,

• автоматическое включение реализации динамических свойств в прикладные параллельные программы, такие как динамическая балансировка нагрузки, на-страиваемость на все доступные ресурсы вычислителя, динамическое распределение ресурсов, выполнение коммуникаций на фоне счета, учет поведения моделируемого явления.

1 Статья рекомендована к публикации программным комитетом международной научной конференции «Параллельные вычислительные технологии 2012»

Теоретическую базу проекта ЬиКЛ составляет теория синтеза параллельных программ на вычислительных моделях [2]. В проекте системы LuNA учтен опыт разработки как больших численных моделей [3, 4, 13, 14], так и различных систем сборочного программирования в мире [5-8]. Текущие технологические результаты представлены в настоящей статье. Теоретические аспекты проекта не рассматриваются. Более ранние результаты опубликованы в [9-11].

1. Идеология системы фрагментированного программирования LuNA

Перечисленные мотивы, и ряд других, после общего анализа трансформировались в следующие исходные проектные решения в системе фрагментированного программирования LuNA.

1.1. Основные проектные решения

1. Технология фрагментированного программирования поддерживает процесс сборки целой программы из фрагментов вычислений (модулей, процедур, их входных/выходных фрагментов данных и т.п.) и ее исполнение.

2. Каждый фрагмент вычислений — независимая единица программы (рис. 1), содержит описание входных/выходных переменных и кода (модуля, процедуры) фрагмента.

3. Фрагментированная программа — это рекурсивно перечислимое множество фрагментов вычислений и их входных/выходных переменных. Таким образом, фрагментированная программа определяется как множества переменных (фрагментов данных) и фрагментов вычислений. К фрагменту вычислений можно обращаться по-разному, например, как к обычной процедуре в последовательном языке программирования.

4. В отличие от технологии модульного программирования, в ходе исполнения фрагментированная структура программы сохраняется. Каждый фрагмент вычислений определит в ходе исполнения независимо исполняющийся процесс программы, взаимодействующий с другими процессами.

5. Следуя С. Клини [12], в качестве базового представления алгоритма взято рекурсивно перечислимое множество функциональных термов. Фрагментированный алгоритм при необходимости извлекается алгоритмом вывода из множества фрагментов вычислений.

Рис. 1. Фрагмент вычислений

1.2. Исполнение фрагментированной программы

• Фрагмент вычислений исполняется, если все его входные переменные получили значения.

• После выполнения фрагмента вычислений получают значения его выходные переменные.

• Алгоритм может реализоваться либо управлением в сгенерированной программе, либо run-time системой. В системе LuNA для обеспечения необходимой степени асинхронности выбрано исполнение фрагментированной программы run-time системой.

Эти правила определяют асинхронное исполнение фрагментированной программы, в которой порядок исполнения фрагментов вычислений определяется лишь информационными зависимостями между ними. При исполнении фрагментированной программы run-time система ищет лучшие способы исполнения фрагментированного алгоритма.

2. Шаги разработки ФП

Фрагментированная программа разрабатывается в несколько последовательных этапов.

• Разработка исходного алгоритма решения задачи.

• Фрагментация исходного алгоритма. Фрагментация рассматривается здесь как универсальный способ распараллеливания алгоритмов, что позволяет поддержать его реализацию системой программирования (примеры фрагментации приведены в разделе 3). Фрагментация нередко является очень сложной работой. Например, фрагментация алгоритма прогонки [15] заняла 2 года и завершилась защитой кандидатской диссертации. На тестах получено ускорение исполнения алгоритма прогонки в 6000 раз на 8000 процессоров [15].

• Описание фрагментированной программы на языке LuNA. Входной язык системы LuNA устроен просто, в него в основном включены средства для определения множеств фрагментов данных и вычислений, синтаксис языка не очень интересен. Пример фрагментированной программы на языке LuNA можно видеть в разделе 3.1.

• Компиляция и анализ фрагментированного алгоритма. Генерация платформоориентированной фрагментированной программы.

• Исполнение фрагментированной программы.

3. Примеры фрагментированных алгоритмов

Несколько примеров поясняют технологию фрагментированного программирования и проблемы разработки системы LuNA.

3.1. Исходный алгоритм умножения квадратных матриц

На рис. 2 представлен исходный алгоритм умножения квадратных матриц. Вычисления проводятся по формулам:

Так как множество функциональных термов хранить нехорошо, то в языке Ь^Л вместо множества функциональных термов определяются множества фрагментов вычислений и фрагментов данных, а нужные термы конструируются из них по мере необходимости алгоритмом вывода.

Рис. 2. Множество функциональных термов, представляющих исходный алгоритм

3.2. Фрагментированный алгоритм умножения квадратных матриц

В системе LuNA исходный алгоритм может быть запрограммирован как фрагмен-

тированный, т.е. каждая операция Qj = d\j объявлена фрагментом вычислений

(и будет реализоваться как независимый процесс программы), переменные ai, i, bij, ci j, dli j объявлены фрагментами данных. Но такая фрагментированная программа будет исполняться с большим замедлением, примерно с 1000 кратным, по сравнению с программой с использованием MPI из-за больших расходов на реализацию управления. Поэтому для численных алгоритмов, отличающихся высоко регулярностью, в процессе фрагментации проводится агрегация и переменных и операций. На рис. 3 представлена схема фрагментации алгоритма умножения матриц, которая показывает способ агрегации данных и вычислений, а на рис. 4 — фрагментированный алгоритм. Здесь:

Cu = Y, Ai,l х BL j , I,J = 1,2

Даже в таком простом примере, как алгоритм умножения матриц, информационные зависимости не определяют хорошего исполнения фрагментированной программы. Например, если для всех I и J выполнить сначала все, кроме K-го, фрагменты вычислений DL J = Ail Bl. j , а потом исполнить все K-ые фрагменты, то память вычислителя должна будет хранить все выработанные, но своевременно не потребленные,

Рис. 3. Агрегация данных и фрагментов вычислений исходного алгоритма

Рис. 4. Фрагментированный алгоритм

промежуточные данные. Объем хранимых промежуточных данных в K раз большие, чем может понадобиться при хорошей организации вычислений. В результате будет ограничен размер решаемой задачи и замедлится исполнение программы. Поэтому основными задачами, решаемыми run-time системой, являются распределение ресурсов и выбор наиболее подходящего очередного фрагмента вычислений на исполнение.

В качестве переменных фрагментированной программы используются агрегаты переменных исходного алгоритма, составляющих подматрицы исходной матрицы. Аналогично, код фрагмента вычислений является агрегатом кодов операций исходного алгоритма. В системе LuNA конструируются программы, в которых размер фрагментов данных является входным параметром. Ниже в качестве примера приведена часть фрагментированной программы умножения матриц, записанная в языке LuNA: Множество фрагментов данных:

df a[i,k] := block(4*M*M) | i=0..K-1, k=0..K-1;

df b[k,j] := block(4*M*M) | k=0..K-1, j=0..K-1;

df c[i,j] := block(4*M*M) | i=0..K-1, j=0..K-1;

df d[i,j,k] := block(4*M*M) | i=0..K-1, j=0..K-1, k=0..K-1;

Множество фрагментов вычислений:

cf initc[i,j] := proc_zero (out: c[i,j]) | i=0..K-1, j=0..K-1; cf mul[i,j,k] := proc_mmul (in: a[i,k],b[k,j]; out: d[i,j,k]) | i=0..K-1, j=0..K-1, k=0..K-1; cf sum[i,j,k] := proc_add (in: d[i,j,k],c[i,j]; out: c[i,j])

Рис. 5. Фрагментация вычислений алгоритма ЬИ-разложения (а) и информационные зависимости между фрагментами вычислений (Ь)

ЬИ-разложение преобразует квадратную матрицу А по формулам ¡^

^-i,kuk,j, ui,j = -j— I ai,j — E -i,kUkj] к виду A = LU, где:

Матрица делится на фрагменты данных (рис. 5а), каждый фрагмент данных — подматрица матрицы А, для обработки каждого фрагмента данных формируется фрагмент вычислений. Фрагменты вычислений должны выполняться в следующем порядке (таковы информационные зависимости): вначале исполняется фрагмент (1,1), затем могут выполняться все фрагменты первого столбца и первой строки, затем может исполняться фрагмент (2, 2) и т.д. Информационные зависимости между фрагментами вычислений показаны на рис. 5Ь.

Этот порядок нехорош тем, что создает неравномерную нагрузку на вычислитель: есть моменты времени, когда только один фрагмент вычислений готов к исполнению, и есть моменты времени, когда много более одного фрагмента готовы исполняться. Лучше было бы организовать исполнение фрагментов вычислений по гиперплоскостями (рис. 6), при котором формируется более равномерная нагрузка процессоров вычислителя.

3.4. Неравномерность загрузки процессоров в модели эволюции облака пыли

i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Параллельная реализация модели эволюции протопланетного диска описана в [13, 14]. На рис. 7 показана неравномерность распределения нагрузки на узлы мультикомпьютера в процессе моделирования. Каждый прямоугольник изображает фрагмент вычислений и потребляемые им ресурсы. Динамическая балансировка нагрузки узлов вычислителя планируется run-time системой и реализуется миграцией фраг-

Рис. 6. Исполнение фрагментов вычислений гиперплоскостями

ментов вычислений с перегруженного узла на соседние, менее загруженные. На этом основана автоматическая реализация динамических свойств фрагментированной программы.

Рис. 7. Неравномерная нагрузка узлов вычислителя

Планирование, точный расчет балансировки нагрузки не делается, а моделируется физический процесс диффузии в жидких и/или газообразных средах. Средой здесь является множество фрагментов вычислений. Точный расчет балансировки нагрузки в условиях динамически меняющегося состояния системы взаимодействующих процессов фрагментированной программы не имеет смысла, и, как минимум, не технологичен.

Завершая обсуждение фрагментации численных алгоритмов, необходимо указать на одну важную качественную характеристику исполнения фрагментированной программы (рис. 8).

Рис. 8. Качественный график времени исполнения фрагментированной программы

Фрагментированная программа исполнялась в одном узле, сравнение производилось с последовательной программой. На рисунке Т8ед — это время исполнения фрагментированной программы, состоящей из одного фрагмента, т.е. это время исполнения последовательной программы. Затем число фрагментов данных увеличивалось (соответственно, размер фрагментов данных уменьшался), при этом наблюдалось уменьшение времени исполнения программы. Минимальное время исполнения программы получалось, когда фрагмент вычислений со всеми обрабатывае-мыми им фрагментами данных попадал целиком в кэш-память. Увеличение времени исполнения программы начиналось с ростом числа фрагментов данных и вычислений, что приводило к увеличению накладных расходов на реализацию управления и динамического распределения ресурсов.

4. Язык и система фрагментированного программирования LuNA

Входной язык LuNA — теоретико-множественный, единственного присваивания и единственного исполнения фрагментов вычислений. Фрагменты данных и вычислений задаются рекурсивно перечислимыми множествами с использованием индексных выражений. Управление в LuNA-программе задается отношением частичного порядка на множестве фрагментов вычислений.

Отношение соседства на множестве фрагментов данных определяет, какие фрагменты данных должны размещаться в одном либо в соседних узлах. Дополнительно имеются операторы-рекомендации по распределению ресурсов вычислителя, по определению требуемого порядка исполнения фрагментов вычислений. Средства задания приоритетов исполнения фрагментов вычислений используются run-time системой для выбора наиболее подходящего фрагмента на исполнение.

Рис. 9. Компоненты системы LuNA

Функциональная структура системы фрагментированного программирования LuNA представлена на рис. 9. Язык, некоторые теоретические и технологические аспекты системы программирования LuNA описаны в ряде публикаций [10, 11].

LuNA имеет три уровня преобразования фрагментированного алгоритма в программу: Компиляция, Генерация и Исполнение:

• Компилятор принимает решения (и вносит их в формируемую программу), которые можно принять, используя только информацию о свойствах алгоритма.

• Генератор принимает решения, которые зависят от свойств конкретного вычислителя (количество и типы доступных ресурсов, производительность ресурсов, нумерация узлов и т.п.), на котором программа должна исполняться.

• Run-time система принимает те решения, которые могут быть сделаны только динамически, в ходе вычислений. В их числе выбор фрагмента вычислений на исполнение, динамическая балансировка нагрузки узлов вычислителя, динамическое распределение ресурсов, включая назначение процессора для исполнения фрагмента вычислений и многое другое.

В системе LuNA есть еще один компонент — профилировщик, который собирает реальную информацию о ходе исполнения фрагментированной программы. Эта информация используется затем для улучшения последующих исполнений программы.

5. Родственные работы

Общее представление о работах, посвященных сборке программ из готовых фрагментов, дают проекты [5-8]. Проект Charm [5] за долгое время развития стал хорошо известной системой программирования. Ее основным недостатком является отсутствие глобальной оптимизации исполнения и не соответствующие входной язык и технология программирования, не позволяющие использовать в полной мере достоинства системы программирования, что свойственно и другим проектам.

Работа выполнена при частичной поддержке РФФИ, грант 10-07-00454-а. Литература

1. Вальковский, В.А. К уточнению понятия непроцедурности языков программирования / В.А. Вальковский, В.Э. Малышкин. // Кибернетика. — 1981. — №3. —

2. Вальковский, В.А. Синтез параллельных программ и систем на вычислительных моделях / В.А. Вальковский, В.Э. Малышкин. — Новосибирск: Наука. Сиб. отд-ние, 1988.

3. Kraeva, M.A. Assembly Technology for Parallel Realization of Numerical Models on MIMD-Multicomputers / M.A. Kraeva, V.E. Malyshkin. // International Journal on Future Generation Computer Systems. — 2001. — V. 17, № 6. — P. 755-765.

4. Malyshkin, V.E. Assembling of Parallel Programs for Large Scale Numerical Modeling. In Handbook of Research on Scalable Computing Technologies, ed. Kuan-Ching Li, Ching-Hsien Hsu, Laurence Tianruo Yang, Jack Dongarra and Hans Zima / V.E. Malyshkin. — IGI Global, 2010. — P. 295-311.

5. Charm++. URL: http://charm.cs.uiuc.edu/papers

6. ProActive Parallel Suite. URL: http://proactive.inria.fr

7. S-Net home page. URL: http://www.snet-home.org

8. Berzins, M. DAG-Based Software Frameworks for PDEs / M. Berzins, Q. Meng, J. Schmidt, J.C. Sutherland // Lecture Notes in Computer Science. — 2012. — V. 7155.

9. Kireev, S. Fragmentation of numerical algorithms for parallel subroutines library / S. Kireev, V. Malyshkin // The Journal of Supercomputing. — 2011. — V. 57, № 2. -P. 161-171.

10. Kireev, S. The LuNA Library of Parallel Numerical Fragmented Subroutines /

S. Kireev, V. Malyshkin, H. Fujita // Lecture Notes in Computer Science. — 2011.

— V. 6873. — P. 290-301.

11. Malyshkin, V. Optimization Methods of Parallel Execution of Numerical Programs in the LuNA Fragmented Programming System / V. Malyshkin, V. Perepelkin // The Journal of Supercomputing. DOI: 10.1007/s11227-011-0649-6. — P. 1-14.

12. Клини, С. Введение в математику / С. Клини. — М.: Иностранная литература, 1957.

13. Киреев, С.Е. Параллельная реализация метода частиц в ячейках для моделирования задач гравитационной космодинамики / С.Е. Киреев // Автометрия. — 2006.

14. Kireev, S.E. A Parallel 3D Code for Simulation of Self-gravitating Gas-Dust Systems / S.E. Kireev // Lecture Notes in Computer Science. — 2009. — V. 5698. — P. 406-413.

15. Terekhov, A.V. Parallel Dichotomy Algorithm for solving tridiagonal system of linear equations with multiple right-hand sides / A.V. Terekhov // Parallel Computing. -2010. — V. 36, № 8. — P. 423-438.

Виктор Эммануилович Малышкин, доктор технических наук, профессор, кафедра параллельных вычислений, Новосибирский национальный исследовательский государственный университет, кафедра параллельных вычислительных технологий, Новосибирский государственный технический университет, зав. лаб. синтеза параллельных программ, Институт вычислительной математики и математической геофизики СО РАН, malysh@ssd.sscc.ru.

FRAGMENTED PROGRAMMING TECHNOLOGY

V.E. Malyshkin, Novosibirsk State University (Novosibirsk, Russian Federation)

Shortly the technology of fragmented programming is presented. This technology is now under development in the Institute of Computational Mathematics and Mathematical Geophysics. Also the LuNA language and system of fragmented programming are presented. The technology is oriented to support the parallel implementation of the large scale numerical models in physics. The LuNA system provides automatically such dynamic properties of parallel programs as dynamic tuning of the program to all the available resources of a supercomputer, dynamic balancing of a workload, the computation organization to the new details of the model behavior.

Keywords: fragmented programming, numerical algorithms, large scale numerical models, parallel programming.

1. Valkovsky V.A., Malyshkin V.E. K utochneniju ponjatija neprocedurnosti jazykov programmirovanija [Clarifying the Term of Non-Procedural Languages]. Kibernetika [Cybernetics], 1981. No 3. P. 55.

2. Valkovsky V.A., Malyshkin V.E. Sintez parallel’nyh programm i sistem na vychislitel’nyh modeljah [Synthesis of Parallel Programs and Systems on the Basis of Computational Models]. Nauka, Novosibirsk, 1988.

3. Kraeva M.A., Malyshkin V.E. Assembly Technology for Parallel Realization of Numerical Models on MIMD-Multicomputers. International Journal on Future Generation Computer Systems. 2001. V. 17, No 6. P. 755-765.

4. Malyshkin V.E. Assembling of Parallel Programs for Large Scale Numerical Modeling. In Handbook of Research on Scalable Computing Technologies, ed. Kuan-Ching Li, Ching-Hsien Hsu, Laurence Tianruo Yang, Jack Dongarra and Hans Zima. IGI Global, 2010. P. 295-311.

5. Charm++. URL: http://charm.cs.uiuc.edu/papers

6. ProActive Parallel Suite. URL: http://proactive.inria.fr

7. S-Net home page. URL: http://www.snet-home.org

8. Berzins M., Meng Q., Schmidt J., Sutherland J.C. DAG-Based Software Frameworks for PDEs. Lecture Notes in Computer Science. 2012. V. 7155. P. 324-333.

9. Kireev S., Malyshkin V. Fragmentation of Numerical Algorithms for parallel subroutines library. The Journal of Supercomputing. 2011. V. 57, No 2. P. 161-171.

10. Kireev S., Malyshkin V., Fujita H. The LuNA Library of Parallel Numerical Fragmented Subroutines. Lecture Notes in Computer Science. 2011. V. 6873. P. 290301.

11. Malyshkin V., Perepelkin V. Optimization Methods of Parallel Execution of Numerical Programs in the LuNA Fragmented Programming System. The Journal of Supercomputing. DOI: 10.1007/s11227-011-0649-6. P. 1-14.

12. Kleene S.C. Introduction to Mathematics New York, D. Van Nostrand Company, Inc., 1952.

13. Kireev S.E. Parallel Implementation of the Particle-in-Cell Method for Gravitational Cosmodynamics Problem Modeling. Avtometriya, 2006. No 3. P. 32-39.

14. Kireev S.E. A Parallel 3D Code for Simulation of Self-gravitating Gas-Dust Systems. Lecture Notes in Computer Science. 2009. V. 5698. P. 406-413.

15. Terekhov A.V. Parallel Dichotomy Algorithm for solving tridiagonal system of linear equations with multiple right-hand sides. Parallel Computing. 2010. V. 36, № 8. P. 423438.

Поступила в редакцию 26 марта 2012 г.

Тест №2 по теме «Программирование»
тест по информатике и икт на тему

1) Под массивом понимается совокупность конечного числа данных различных типов.

2) Под массивом понимается совокупность конечного числа данных одного типа.

3) Под массивом понимается совокупность бесконечного числа данных одного типа.

Правильный ответ – 2.

2. Что определяет индекс массива?

1) Индекс определяет положение элемента массива данных относительно друг друга.

2) Индекс определяет положение элемента массива данных относительно его конца.

3) Индекс определяет положение элемента массива данных относительно его начала.

Правильный ответ –3.

3. Укажите правильное описание массива.

А . DIM A(1 TO 1000) AS INTEGER

Var a:array[1..1000] of integer ;

Б . DIM A(50), B(50), C(50) AS SINGLE

Var А, В, С: ARRAY [1..50] OF REAL;

В . DIM A(50 AS SINGLE)

Var А: ARRAY [1..50 OF REAL];

Правильный ответ – 1.

4. Что производит следующий фрагмент программы?

FOR I=1 TO N for i:=1 to n do begin

INPUT A(I) write(‘a[‘,i,’] ‘); readln(a[i]);

1) Ввод элементов массива с клавиатуры.

2) Вывод элементов массива на экран монитора.

3) Ввод элементов массива из файла.

Правильный ответ – 1.

5. Что производит следующий фрагмент программы?

FOR I=1 TO N for i:=1 to n do

1) Ввод элементов массива с клавиатуры.

2) Вывод элементов массива на экран монитора.

3) Ввод элементов массива из файла.

Правильный ответ – 2.

6. Как запустить генератор случайных чисел?

1) RND [(x)] Random [(x)]

2) RANDOMIZE TIMER. Rаndomize

Правильный ответ – 2.

7. Для получения случайных чисел используют следующую функцию:

1) RND [(x)] Random [(x)]

2) RANDOMIZE TIMER. Rаndomize

Правильный ответ – 1.

8. Что производит следующий фрагмент программы?

RANDOMIZE TIMER randomize;

INPUT” число элементов N=”;N write(‘число элементов’);readln(n);

FOR I=1 TO N for i:=1 to n do begin

1) Заполняет массив случайными числами и не выводит их на печать.

2) Заполняет массив случайными числами и выводит их на печать.

3) Заполняет массив одинаковыми числами и выводит их на печать.

Правильный ответ – 2.

9. Что производит следующий фрагмент программы?

MIN=A(1):MAX=A(1) min:=a[1]; max:=a[1];

FOR I=1 TO N for i:=1 to n do

IF A(I)>=MAX THEN if a[i]>= max then

MAX=A(I):IMAX=I begin max:=a[i]; imax:=i; end;

PRINT MIN; ” номер “; IMIN writeln(min,’ номер ‘,imin);

1) Находит максимальный элемент и печатает на экране.

2) Находит максимальный элемент, его индекс и печатает их на экране.

3) Находит индекс максимального элемента и печатает на экране.

Правильный ответ – 2.

10. Что производит следующий фрагмент программы?

FOR I=1 TO N for i:=1 to n do

IF A(I) MOD 2=0 THEN K=K+1 if a[i] mod 2=0 then k:=k+1;;

PRINT ” K= “; K writeln(k=’,k);

1) Находит максимальный элемент и печатает на экране.

2) Находит четный элемент и печатает его на экране.

3) Находит число четных элементов и печатает их число на экране.

Правильный ответ – 3.

11 Что производит следующий фрагмент программы?

FOR I= 1 TO N for i:=1 to n do

FOR J=1 TO N for j:=1 to n do

IF J MOD 2=0 THEN A(I,J)=A(I,J)+A(I,1) if j mod 2=0 then

1) В массиве размером п* п к элементам четных строк прибавляются элементы первой строки соответствующего столбца.

2) В массиве размером п* п к элементам четных столбцов прибавляются элементы первого столбца соответствующей строки.

3) В массиве размером п* п к элементам четных столбцов прибавляются элементы первой строки соответствующего столбца.

Правильный ответ – 2.

12. Каковы свойства восходящих диагоналей в двумерном массиве (например, шахматная доска)?

1) Д ля любой восходящей диагонали сумма номера строки и номера столбца постоянна и для разных диагоналей – разная, то есть i + j = constl.

2) Для любой восходящей диагонали сумма номера строки и номера столбца постоянна и для разных диагоналей – разная, то есть i – j = constl.

3) Для любой восходящей диагонали сумма номера строки и номера столбца различна и для разных диагоналей – одинакова.

Правильный ответ – 1.

13. Каковы свойства нисходящих диагоналей в двумерном массиве (например, шахматная доска)?

1) Для любой нисходящей диагонали сумма номера строки и номера столбца постоянна и для разных диагоналей – разная, то есть i + j = constl.

2) Для любой нисходящей диагонали сумма номера строки и номера столбца различна и для разных диагоналей – одинакова.

3) Для любой нисходящей диагонали сумма номера строки и номера столбца постоянна и для разных диагоналей – разная, то есть i – j = constl.

Правильный ответ – 3.

14. Что производит следующий фрагмент программы?

FOR I=1 TO N for i:=1 to n do

FOR J=1 TO N for j:=1 to n do begin

PRINT” S =”;S:S=0 writeln(‘s =’,s);s:=0;

PRINT ” S1=”;S1 writeln(‘ s1=’,s1);

1) Находит сумму всех элементов двумерного массива и выводит их на экран.

2) Находит сумму элементов каждой строки и выводит их на экран.

3) Находит сумму всех элементов двумерного массива и сумму элементов каждой строки и выводит их на экран..

Правильный ответ – 3.

15. Что производит следующий фрагмент программы?

FOR I=1 TO N for i:=1 to n do begin

FOR J=1 TO N for j:=1 to n do begin

IF I=J THEN S=S+A(I.J) if i=j then s:=s+a[i,j];

PRINT” S =”;S writeln(‘s =’,s);

1) Находит сумму элементов каждой строки с нарастанием итога (без обнуления).

2) Находит сумму элементов каждой строки двумерного массива.

3) Находит сумму элементов главной диагонали двумерного массива.

Правильный ответ – 3.

По теме: методические разработки, презентации и конспекты

Тесты по русскому языку, итоговый тест для 5 класса, тест «Выразительные средства», уроки по произведениям Воронковой и Чивилихина

Тренировочные тесты для подготовки к ЕГЭ. Можно использовать в качестве контрольной работыТест для отработки знаний задания В8Итоговый тест для 5 классаМетодические разработки уроков по произведениям .

Мастер класс «Создание тестов с помощью конструктора тестов RomeXoftMultiTesterSystem 3.3»

Мастер класс «Создание тестов с помощью конструктора тестов RomeXoftMultiTesterSystem 3.3» Ознакомиться педагогов с программой «RomeXoftMultiTesterSystem 3.3” и дать им первоначальные.

Тест по физике_Итоговый тест. Законы электрического тока

Тест по физике для учащихся 8 класса, обучающихся по учебнику А. В. Перышкина. Тема: итоговый — Законы электрического тока. Работа выполнена в программе MyTest.

Тесты. Виды тестов

Важнейший элемент рейтиноговой системы — тестирование. Тесты позволяют в кротчайший срок проверить знания больших групп учащихся, выявить пробелы при изложении учебного материала, применить методы мет.

ЕГЭ английский Тест toefl Тест ielts CAE tests Тесты по аудированию Тесты по чтению Словарный запас Что нужно знать для успешной сдачи ЕГЭ

Тест toeflТест ieltsCAE testsТесты по аудированиюТесты по чтениюСловарный запас Что нужно знать для успешной сдачи ЕГЭЧему бы ни учился человек на протяжении всей своей жизни, его всегда бу.

Тест по повести А.С.Пушкина «Капитанская дочка»,тест по лирике поэтов ХХ века о Великой Отечественной войне и итоговый тест по курсу литературы 8 класса.

Тесты рекомендуются как итоговый контроль.

Урок по технологии. «Блюда из теста. Понятие о разных видах теста. Песочное тесто»

Разработка урока по теме «Блюда из теста. Понятие о разных видах теста. Песочное тесто».

определить одной фразой что выполняет следующий фрагмент программы

При прохождении цикла номер позиции элемента массива увеличивается на 1 у i и j. Это значит, что при первой итерации выбирается элемент а [1,1], при второй a[2,2], при n — a[n,n]. Соответственно, получается диагональ массива. При прохождении строки s = s + a[ i ][ j ], в s будет накапливаться сумма элементов с заданными номерами. Соответственно, ответ на задачу:
Цикл рассчитывает сумму элементов главной диагонали двумерного массива.

Может, одним словом? Тогда — идиотизм!

Почему не один цикл (например, по i) и
s = s + a(i,i)

Зачем перебирать ВСЕ элементы, если нужна только главная диагональ?

Контрольная работа по теме «Одномерные и двумерные массивы в Pascal»

Пискунова Наталья Вячеславовна

Россошанский химико-механический техникум

ВАРИАНТ 1

I. Что такое одномерный массив? Приведите пример описания одномерного массива.

II. Выполните тест – выберите один правильный ответ.

  1. Укажите правильное описание массива:

А) a:array[1..n,1..m] of real;

Б) a:array of integer;

В) a:array [1. n, 1…m] of real;

Г) a: aray [1..n, 1..m] of integer.

  1. Что определяет для массива X[1..n] следующий алгоритм

For i:= 1 to n do

If X[i] >0 then S:=S+X[i];

А) минимальный элемент массива;

Б) сумму положительных элементов массива;

В) максимальный элемент массива;

Г) количество отрицательных элементов массива;

Д) индекс последнего отрицательного элемента массива;

Е) Ни один из ответов 1-5 не верен.

  1. Что определяет для массива X[1..n, 1..m] следующий алгоритм

For i:= 1 to n do

For j:= 1 to m do

If j mod 2 = 0 then X[i, j] = A;

А) минимальный элемент массива;

Б) четные столбцы матрицы заменить на А;

В) четные строки матрицы заменить на А;

Г) количество четных элементов массива;

Д) нечетные строки матрицы заменить на А.

  1. Что определяет для массива X[1..n, 1..n] следующий алгоритм

For i:= 1 to n do

For j:= 1 to n do

If i =j then S: = S+X[i, j];

А) сумма элементов главной диагонали матрицы;

Б) четные столбцы матрицы заменить на А;

В) четные строки матрицы заменить на А;

Г) сумма элементов побочной диагонали матрицы;

Д) нечетные строки матрицы заменить на А;

Е) ни один из ответов 1-5 не верен.

  1. Что определяет для массива X[1..n] следующий алгоритм

For i:= 1 to n do

If X[i] >T then R:=R+1;

А) номер первого элемента массива, большего T;

Б) количество элементов массива, больших T;

В) номер первого элемента массива, меньшего T;

Г) номер последнего элемента массива, большего T;

Д) количество элементов массива, меньших T;

Е) ни один из ответов 1-5 не верен.

III. Решите задачу:

Двумерный массив, состоящий из 3 строк и 4 столбцов, формируется с помощью случайных чисел. Напишите программу для нахождения суммы положительных элементов массива.

ВАРИАНТ 2

I. Что такое двумерный массив? Приведите пример описания двумерного массива.

II. Выполните тест – выберите один правильный ответ.

  1. Укажите правильное описание массива:

А) a: array of real;

Б) a: array of integer;

В) a: array [1..n] of real;

Г) a: aray [1..n] of integer.

  1. Что определяет для массива X[1..n, 1..m] следующий алгоритм

For i:= 1 to n do

For j:= 1 to m do

А) максимальный элемент массива;

Б) сумму отрицательных элементов массива;

В) минимальный элемент массива;

Г) количество отрицательных элементов массива;

Д) индекс последнего отрицательного элемента массива;

Е) Ни один из ответов 1-5 не верен.

  1. Что определяет для массива X[1..m, 1..m] следующий алгоритм

For i:= 1 to m do

For j:= 1 to m do

If i mod 2 < >0 then X[i, j] = A;

А) нечетные столбцы матрицы заменить на А;

Б) четные столбцы матрицы заменить на А;

В) четные строки матрицы заменить на А;

Г) количество четных элементов массива;

Д) нечетные строки матрицы заменить на А;

Е) ни один из ответов 1-5 не верен.

  1. Что определяет для массивов X[1..n, 1..m] и Y[1..n, 1..m] следующий алгоритм

X[i, j]: = X[i, j] + Y[i, j];

А) сумма элементов главной диагонали матрицы;

Б) сумма элементов каждой строки матриц X и Y;

В) четные строки матрицы заменить на А;

Г) количество равных соответствующих элементов матрицы X и матрицы Y;

Д) сумма матриц X и Y.

  1. Что определяет для массива X[1..n] следующий алгоритм

For k:= 1 to n do

If X[k] >V then V:=X[k];

А) минимальный элемент массива;

Б) сумму отрицательных элементов массива;

В) максимальный элемент массива;

Г) количество положительных элементов массива;

Д) индекс последнего положительного элемента массива;

Е) Ни один из ответов 1-5 не верен.

III. Решите задачу:

Двумерный массив, состоящий из 3 строк и 4 столбцов, вводится с клавиатуры. Напишите программу для нахождения наибольшего элемента массива.

Ответы:

ВАРИАНТ 1

I. Одномерный массив – это именованная последовательность, состоящая из пронумерованных элементов одного типа.

Элементы могут быть любого имеющегося в Pascal (за исключение файлового) типа данных. Номер, также называемый индексом, имеет каждый элемент массива. Индекс должен быть порядкового типа.

Одномерный массив можно объявить как в качестве переменной:

Здесь m – номер первого элемента, а n – последнего. Например, если диапазон задан так: [1..10], то это означает, что определен одномерный массив размерностью в 10 элементов, с индексами от 1 до 10.

Program Z1;

var a:array[1..3,1..4] of integer;

i,j,s:integer;

begin

for i:=1 to 3 do

begin

for j:=1 to 4 do

begin

end;

end;

for i:=1 to 3 do

for j:=1 to 4 do

if a[i,j]>0 then s:=s+a[i,j];

writeln(‘сумма положительных элементов массива равна’, s);

end.

ВАРИАНТ 2

I. Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.

Рассмотрим матрицу А размерностью 2*3, то есть в ней будет две строки, а в каждой строке по три элемента:

Каждый элемент имеет свой номер, который состоит из двух чисел — номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 — это элемент, стоящий в первой строке и во втором столбце.

Существуют несколько способов объявления двумерного массива.

Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведённой выше:

Const n = 2; m = 3;

Type omyarray = Array[1..m] Of ;

dmyarray = Array[1..n] Of omyarray;

Var v: omyarray;

В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.

Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:

Const n = 2; m = 3;

Type dmyarray = Array[1..n, 1..m] Of ;

Var a: dmyarray.

Способ 3. Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:

Const n = 2; m = 3;

Type dmyarray = Array[1..n, 1..m] Of ;

Var a: dmyarray.

Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:

Var a: Array [1..n, 1..m] Of < тип элементов >.

Program Z2;

var a:array[1..3,1..4] of integer;

i,j,max:integer;

begin

for i:=1 to 3 do

begin

for j:=1 to 4 do

begin

writeln (‘введите элемент массива’);

end;

end;

for i:=1 to 3 do

for j:=1 to 4 do

if a[i,j]>max then max:=a[i,j];

writeln(‘наибольший элемент массива равен’, max);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *