Динамические массивы / Описание языка PascalABC.NET / Библиотека (книги, учебники и журналы) / В помощь Веб-Мастеру

1)Ввести с клавиатуры массив из 5 элементов. Найти среднее арифметическое всех элементов массива.

program z1; const n=5; var a:array [1..n] of integer; i,s:integer;s1:real; begin for i:=1 to n do begin write('a[',i,']='); read(a[i]); end; s:=0;s1:=0; for i:=1 to n do s:=s+a[i]; s1:=s/n; writeln('среднее арифм =',s1); readln end.

2)Ввести с клавиатуры массив из 5 элементов. Найти наименьший из них.

3)Ввести с клавиатуры массив из 5 элементов. Найти произведение отрицательных элементов массива.

4)Ввести с клавиатуры массив из 5 элементов. Найти кол-во неотриц-х элементов.

5)Ввести с клавиатуры массив из 5 элементов. Найти сумму четных элементов.

6)Ввести с клавиатуры массив из 5 элементов. Найти сумму элементов стоящих на четных местах.

7) Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные.

end.

8) Удалить первый отрицательный элемент, если таковой имеется.

end.

9) Вставить элемент перед отрицательным последним элементом.

program z9; const n=10; var a:array [1..n] of integer; i,k,ki,x:integer; begin k:=0; writeln(‘исходный массив:’); randomize; for i:=1 to n do begin a[i]:=random(50)-30; write(‘a[‘,i,’]= ‘,a[i],’  ‘); end; for i:=1 to n do if a[i] begin k:=a[i]; ki:=i; end; writeln(‘последний отрицательный элемент: ‘, k); writeln(‘введите число, которое надо вставить перед отрицательным последним элементом: ‘); read(x); writeln(‘массив после вставки элемента :’ ); for i:=1 to ki-1 do write(‘a[‘,i,’]= ‘,a[i],’  ‘); write(‘a[‘,ki,’]= ‘,x,’  ‘); for i:=ki to n do write(‘a[‘,i+1,’]= ‘,a[i],’  ‘);end.

10) Даны два целочисленных массива одинаковой размерности. Получить третий массив той же размерности, каждый элемент которого равен большему из соответствующих элементов данного массива.

end.

11) В заданной последовательности все элементы, не равные нулю, расположить сохраняя их порядок следования, в начале последовательности, а нулевые элементы — в конце последовательности.

uses crt; const nmax=100; var a:array[1..nmax] of integer;     n,i,k,j,x:integer; begin clrscr; randomize; repeat write(‘Размер массива до ‘,nmax,’ n=’); readln(n); until n in [1..nmax]; writeln(‘Исходный массив:’); for i:=1 to n do  begin   a[i]:=-3+random(8);   write(a[i],’ ‘);  end; writeln; writeln; k:=0; for i:=n downto 1 do if a[i]=0 then   begin    k:=k+1;    x:=a[i];    for j:=i to n-k do    a[j]:=a[j+1];    a[n-k+1]:=x;  end; writeln(‘Перестановка:’); for i:=1 to n do write(a[i],’ ‘); readln end. 12) Дан одномерный массив чисел. Определите сумму его элементов. program z12; const n=10; var a:array [1..n] of integer;     i,s:integer; begin s:=0; writeln(‘дан массив:’); for i:=1 to n do   begin   a[i]:=random(100);   writeln(‘a[‘,i,’]= ‘,a[i]);   end; for i:=1 to n do   begin   s:=s+a[i];   end; writeln; writeln(‘s= ‘,s); end.

13) Дан одномерный массив целых чисел из 12 элементов. Поменять местами первый отрицательный с первым положительным, если гарантируется что такие присутствуют.

14. В одномерном массиве произвольных чисел А(10) положительные элементы уменьшить в двое, а отрицательные элементы заменить на значения их индексов.

const n=10; var a:array[1..n] of real; i,k:integer; begin for i:=1 to n do begin write(‘a[‘,i,’]= ‘);readln(a[i]) end; for i:=1 to n do begin if a[i]>0 then a[i]:=a[i]/2; if a[i] end; writeln; for i:=1 to n do writeln(‘a[‘,i,’]= ‘,a[i]);end.

16.Организовать в диалоге ввод элементов целочисленного массива А размерностью N. Вычислить среднее арифметическое из четных элементов массива А. Посчитать количество положительных нечетных элементов массива. Вывести на экран монитора массив и результаты вычислений.

image

Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.

Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.

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

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

Помним, все элементы определенного массива имеют один и тот же тип. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer, а другой – из чисел типа real.

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

Если индекс массива может приобретать все допустимые значения определенного перечислимого типа, то при описании массива возможно задание имени типа вместо границ изменения индекса. При этом границами индекса будут первое и последнее значения в описании типа индекса. Границы изменения индексов могут задаваться с помощью ранее объявленных констант. Рекомендуется предварительно объявлять тип массива в разделе описания типов.

Массив можно создать несколькими способами.

const n =200;type months =(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); years =1900..2100; people =array[years]oflongint;var growth:array[months]ofreal; hum: people; notes:array[1..n]ofstring;

Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента.

Простой массив является одномерным. Он представляет собой линейную структуру.

var ch:array[1..11]ofchar;     h:char;     i:integer;   beginfor i :=1to11doread(ch[i]);       for i :=1to11dowrite(ch[i]:3);   readlnend.

В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, ‘q’, ’w’, ’e’, ’2’, ’t’, ’9’, ’u’, ’I’, ’I’, ’o’, ’p’), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экран.

Функция sizeof, примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.

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

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

Виды массивов функций Excel

Массив – данные, объединенные в группу. В данном случае группой является массив функций в Excel. Любую таблицу, которую мы составим и заполним в Excel, можно назвать массивом. Пример:

В зависимости от расположения элементов различают массивы:

  • одномерные (данные находятся в ОДНОЙ строке или в ОДНОМ столбце);
  • двумерные (НЕСКОЛЬКО строк и столбцов, матрица).

Одномерные массивы бывают:

  • горизонтальными (данные – в строке);
  • вертикальными (данные – в столбце).

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

Формула массива – позволяет обработать данные из этого массива. Она может возвращать одно значение либо давать в результате массив (набор) значений.

С помощью формул массива реально:

  • подсчитать количество знаков в определенном диапазоне;
  • суммировать только те числа, которые соответствуют заданному условию;
  • суммировать все n-ные значения в определенном диапазоне.

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

Синтаксис формулы массива

Используем формулу массива с диапазоном ячеек и с отдельной ячейкой. В первом случае найдем промежуточные итоги для столбца «К оплате». Во втором – итоговую сумму коммунальных платежей.

  1. Выделяем диапазон Е3:Е8.
  2. В строку формул вводим следующую формулу: =C3:C8*D3:D8.
  3. Нажимаем одновременно клавиши: Ctrl + Shift + Enter. Промежуточные итоги посчитаны:

Формула после нажатия Ctrl + Shift + Enter оказалась в фигурных скобках. Она подставилась автоматически в каждую ячейку выделенного диапазона.

Если попытаться изменить данные в какой-либо ячейке столбца «К оплате» – ничего не выйдет. Формула в массиве защищает значения диапазона от изменений. На экране появляется соответствующая запись:

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

  1. Выделяем ячейку Е9 (напротив «Итого»).
  2. Вводим формулу вида: =СУММ(C3:C8*D3:D8).
  3. Нажимаем сочетание клавиш: Ctrl + Shift + Enter. Результат:

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

Аргументы для функции – одномерные массивы. Формула просматривает каждый из них по отдельности, совершает заданные пользователем операции и генерирует единый результат.

Рассмотрим ее синтаксис:

Функции работы с массивами Excel

Предположим, в следующем месяце планируется увеличение коммунальных платежей на 10%. Если мы введем обычную формулу для итога =СУММ((C3:C8*D3:D8)+10%), то вряд ли получим ожидаемый результат. Нам нужно, чтобы каждый аргумент увеличился на 10%. Чтобы программа поняла это, мы используем функцию как массив.

  1. Посмотрим, как работает оператор «И» в функции массива. Нам нужно узнать, сколько мы платим за воду, горячую и холодную. Функция: . Итого – 346 руб.
  2. Функция «Сортировки» в формуле массива. Отсортируем суммы к оплате в порядке возрастания. Для списка отсортированных данных создадим диапазон. Выделим его. В строке формул вводим . Жмем сочетание Ctrl + Shift + Enter.
  3. Транспонированная матрица. Специальная функция Excel для работы с двумерными массивами. Функция «ТРАНСП» возвращает сразу несколько значений. Преобразует горизонтальную матрицу в вертикальную и наоборот. Выделяем диапазон ячеек, где количество строк = числу столбцов в таблице с исходными данными. А количество столбцов = числу строк в исходном массиве. Вводим формулу: . Получается «перевернутый» массив данных.
  4. Поиск среднего значения без учета нулей. Если мы воспользуемся стандартной функцией «СРЗНАЧ», то получим в результате «0». И это будет правильно. Поэтому вставляем в формулу дополнительное условие: . Получаем:

Скачать примеры массива функций

Распространенная ошибка при работе с массивами функций – НЕ нажатие кодового сочетания «Ctrl + Shift + Enter» (никогда не забывайте эту комбинацию клавиш). Это самое главное, что нужно запомнить при обработке больших объемов информации. Правильно введенная функция выполняет сложнейшие задачи.

68. На блок-схеме представлен алгоритм ввода массива из 10 целых чисел с помощью цикла с предусловием. Запишите соответствующую программу на языке Паскаль. 69. На блок-схеме представлен алгоритм ввода массива из 10 целых чисел с помощью цикла с параметром. Запишите соответствующую программу на языке Паскаль. 70. На блок-схеме представлен алгоритм ввода массива из 10 целых чисел с помощью цикла с постусловием. Запишите соответствующую программу на языке Паскаль. 71. Запишите значения элементов массива, сформированного следующим образом: 72. Известны значения элементов целочисленного массива а.Запишите значения элементов массива b, сформированного следующим образом: 73. Чему равна сумма элементов массива а[1] и а[6], сформированного следующим образом: 74. Известны значения элементов одномерного целочисленного массива а, состоящего из 5 элементов: 75. Чему равно среднее арифметическое значений элементов массива а[3] и а[4], сформированного следующим образом? 76. Массив а из десяти элементов сформирован следующим образом: 77. Массив а из десяти элементов сформирован следующим образом. 78. Определите, что будет выведено в результате выполнения следующей программы?

79. Проанализируйте представленный в форме блок-схемы алгоритм и укажите результат его выполнения при заданном входном потоке данных:
80. Дан целочисленный массив из 12 элементов случайных целых чисел, принадлежащих интервалу [10;45]. Необходимо найти произведение элементов массива, кратных 5. 81. Установите соответствие между записанными на языке Паскаль фрагментами программ обработки одномерного числового массива и результатами их работы. 82. В таблице Dat хранятся данные измерений среднесуточной температуры за неделю в градусах. Определите, что будет выведено в результате работы следующей программы, записанной на алгоритмическом языке. Запишите эту же программу на языке Паскаль. 83. От острова Буяна до царства славного Салтана месяц (30 дней) пути. Капитан корабля записывает в вахтенный журнал количество миль, пройденных за день. Составьте блок-схему алгоритма для определения, в какую из трех десятидневок пройден большой путь. Напишите соответствующую программу на языке Паскаль.

Массивы — это формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое.

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

При создании массива Visual C# выделяет под него место в памяти. Элементы массива из десяти составляющих нумеруются числами от 0 до 9, а не от 1 до 10, поскольку для первого элемента массива используется индекс 0.

Синтаксис объявления одномерных массивов следующий:

Тип_данных [ ] Имя_массива = new Тип_данных [Общее_число_элементов_ массива] ;

Например, объявляется массив без указания его размерности:

int[] а;

Однако перед тем как использовать, необходимо определить размер массива и выделить для него память, используя ключевое слово new. Чтобы выделить

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

а = new int[10];

Границами нашего массива являются 0 и 9, т.е. для доступа к элементам этого массива не может использоваться индекс вне этих границ.

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

int[] а = new int[] { 1, 2, 3, 4, 5 };

Возможно объявление массива и другими способами:

int[] Ь = { 1, 2, 3, 4, 5 } ;

int[] а = new int[5] { 1, 2, 3, 4, 5 };

Доступ к каждому элементу массива в программе осуществляется с помощью индекса — целого числа, служащего своеобразным именем элемента в массиве. При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:

b [17] = 2010; а [9] = 5 ;

Все операции по обработке, вводу-выводу элементов массива осуществляются поэлементно в цикле с оператором цикла for.

Пример. В одномерном массиве заданных целых чисел найдите сумму элементов массива. Ввод элементов осуществите вручную.

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

В листинге 84 приведен код процедуры, отвечающий за решение задачи, а на рисунке 106 показан результат ее выполнения.

Листинг 84

namespace ConsoleApplicationl

class Program

{

static void Main(string[] args)

{

int[] a;

a = new int[10];

int sum = 0;

string[] con;

con = new string[10];

for (int i = 0; i <= 9; i++)</p>

{

Console.WriteLine(“Введите элемент массива”); con[i] = Console.ReadLine(); a[i] = Convert.ToIntl6(con[i]); sum += a[i];

}

Console.WriteLine(“Сумма элементов массива^ ” + sum); Console.ReadLine();

}

}

}

Рис. 105. Алгоритм решения задачи

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

Листинг 85

namespace ConsoleApplicationl

{

class Program

{

static void Main(string[] args)

{

int[] a = new int[10] (1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sum = 0;

Console.WriteLine(“Исходный массив”); for (int i = 0; i <= 9; i + + )</p>

Console.WriteLine(” ” + a[i]);

Console.WriteLine(); for (int i = 0; i <= 9; i++)</p>

sum += а [і];

+ sum);

и

Console.WriteLine(“Сумма элементов массива= Console.ReadLine();

}

}

}

Рис. 106. Результат выполненной программы Результат выполнения программы представлен на рисунке 107.

Рис. 107. Результат выполненной программы

В листинге 86 приведен код решения предыдущей задачи, написанной как Windows-приложение, а на рисунке 108 показан результат ее выполнения.

Листинг 86

namespace WindowsApplicationl {

public partial class Forml : Form {

public Forml()

{

InitializeComponent();

} private void Forml_Load(object sender, EventArgs e)

{

int[] a;

a = new int[10];

int sum = 0;

string[] b;

b = new string[10];

for (int і = 0; і <= 9; i++)</p>

{

b [ і ] –

Microsoft.VisualBasic.Interaction.InputBox(“Введите число”, “Окно ввода данных”, -1, -1);

а[і] = Convert.ToIntl6(b[і]); sum +- a[і];

}

MessageBox.Show(“Сумма элементов массива= ” + sum.ToString(“n”), “Заголовок окна”, MessageBoxButtons.OK, MessageBoxIcon.Information);

Application.Exit();

}

Рис. 108. Полученный результат совпадает с результатами консольных программ

}

Оператор ґогеасИ

С помощью оператора ґогеасЬ можно также организовать обработку элементов массива, при этом нет необходимости указывать в заголовке цикла начальную и верхнюю границы, в пределах которых изменяется параметр цикла. Синтаксис оператора ґогеасИ следующий: ґогеасй (тип параметр іп имя_массива)

{

>

Тело цикла

У

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

В листинге 87 приведен код решения задачи на нахождение суммы элементов одномерного массива с оператором ГогеасЬ.

Листинг 87

namespace ConsoleApplicationl {

class Program {

static void Main(string[] args)

{

int[] a = new int[10] (1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sum = 0;

Console.WriteLine(“Исходный массив”); foreach (int і in a)

Console.WriteLine(” ” + i);

Console.WriteLine(); foreach (int і in a) sum += і;

Console.WriteLine(“Сумма элементов массива= ” + sum);

Console.ReadLine();

}

}

}

Вывод элементов массива на элемент управления TextBox.

Использование класса Random

Рассмотрим предыдущую задачу, изменив способ ввода элементов одномерного массива. Класс Random, используемый в листинге 88, позволит сгенерировать случайные числа, что в свою очередь ускорит запуск и отладку программы. Оператором Random а = new RandomO; создаем экземпляр класса, причем если в конструкторе не указан параметр (как в нашем случае), то при запуске программы каждый раз будет генерироваться новая последовательность чисел. Если же указать параметр Random а = new Random(l);, то будем получать один и тот же массив данных. Основные методы класса Random приведены в табл. 22.

Таблица 22. Основные методы класса Random

Название метода

Описание

Next ()

Возвращает целое положительное число во всем положительном диапазоне типа int

Next (max)

Возвращает целое положительное число в диапазоне от 0 до max

Next (min,max)

Возвращает целое положительное число в диапазоне от min до max

NextBytes (массив)

Возвращает массив чисел в диапазоне byte

NextDouble ()

Возвращает вещественное положительное число в диапазоне от 0 до 1

После размещения объекта textBoxl на форме следует выставить свойство Multiline (textBoxl) в положение True.

Кроме того, в некоторых кодах программ будем применять числовые спецификаторы формата, которые можно использовать в функциях String.Format или в методе ToString(). В листинге 88 вывод одномерного массива происходит в два текстовых поля для того, чтобы показать разницу между применением числовых спецификаторов и их отсутствием. Наиболее распространенные из них приведены в табл. 23. В спецификаторе формата можно задать количество отображаемых знаков после точки, при этом допустимы значения от 0 до 99.

Таблица 23. Числовые спецификаторы формата

Спецификатор формата

Название

D(d)

Десятичное число

Е (е)

Число в экспоненциальной форме

F(f)

Число с фиксированной точкой

_N00_

Числовой формат

Листинг 88 namespace WindowsApplicationl

{

public partial class Forml : Form

{

public Forml()

{

InitializeComponent();

}

private void buttonl_Click(object sender, EventArgs e)

{

Random a = new Random();

byte[] b = new byte[10];

double sum = 0;

textBoxl.Clear();

textBox2.Clear();

for (int i — 0; i <— 9; i++)</p>

{

a.NextBytes(b);

textBoxl.Text = textBoxl.Text +

System.String.Format(“{0}”, b[i])+” “; //Применение формата без числовых спецификаторов

textBox2.Text = textBox2.Text +

System.String.Format(“{0:f2}”, b[i]) + ” “; //Применение числового спецификатора с фиксированной точкой и 2 знаками после точки

sum += b[i];

}

MessageBox.Show(“Сумма элементов массива= ” + sum.ToString(“n”), “Заголовок окна”, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

}

Результаты выполнения программы представлены на рис. 109, 110.

Рис. 109. Вывод одномерного массива на элементы управления 1ех1Вох

с разным типом форматирования

Рис. 110. Результат выполненной программы

Вывод элементов массива на элемент управления ListBox

В листинге 89 приведен код процедуры, отвечающий за решение задачи.

Листинг 89

namespace WindowsApplicationl {

public partial class Forml : Form {

public Forml()

{

InitializeComponent();

}

private void buttonl_Click(object sender, EventArgs e)

{

Random a = new Random(); byte[] b = new byte[10]; double sum = 0; listBoxl.Items.Clear(); for (int i — 0; i <— 9; i++)</p>

{

a.NextBytes(b); listBoxl.Items.Add(b[i]); sum += b[i];

}

label2.Text= “Сумма элементов массива^ ” + sum.ToString(“n”);

}

l

I

Результаты выполнения программы представлены на рис. 111.

Рис. 111. Вывод одномерного массива на элемент управления Н$(Вох

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий