Одномерные массивы в Паскале - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Одномерные массивы 1 48.38kb.
Строки в Pascal Строковый тип данных в Паскале Строки в Паскале –... 1 59.74kb.
Конспект по теме: «Записи в Паскале» 1 122.88kb.
Справочник по программированию на Паскале. Описание языка не является... 1 104.36kb.
Лабораторная работа №7 двухмерные массивы (матрицы) 1 62.14kb.
Статистическая радиофизика Вопросы к экзамену 1 28.3kb.
Методическое пособие для преподавателей информационных технологий 3 334.71kb.
Практическая работа №1 «Решение задач с помощью языка программирования... 1 83.9kb.
Бриллиант в золотой оправе 1 13.81kb.
Лабораторная работа 3 Классы, содержащие массивы встроенных типов... 1 61.77kb.
Система генерации общих типов данных в фундаментальных 1 98.28kb.
«Степени и корни» 1 72.5kb.
Направления изучения представлений о справедливости 1 202.17kb.

Одномерные массивы в Паскале - страница №1/1

Одномерные массивы в Паскале.



Массивы – это переменные Паскаля, которые используются для хранения таблиц. Например таблицу




1

2

3

4

5

Число















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



var a:array[1..5] of integer;
Таблица пока пуста, но в любую ячейку можно записать некоторое целое число. Каждая ячейка массива имеет свой номер - индекс. Например, номера ячеек массива a 1, 2, 3, 4, 5. Число, которое содержится в ячейке с номером i часто будем также называть элементом с номером i. В теле программы содержимое любой ячейки массива можно использовать, как обычную переменную, при этом нужно указывать имя массива и далее в квадратных скобках индекс ячейки в массиве. Например после выполнения операторов
a[2]:=11;

a[3]:=9;


a[4]:=a[2]+a[3];

В таблице будут записаны следующие числа






1

2

3

4

5

Число




11

9

20





Общий формат описания массива следующий

Var


<имя массива>: array[<индекс1>..<индекс2>] of <тип переменной>
<имя массива> может быть любым допустимым именем

array – служебное слово, указывающее, что описывается массив

<индекс1>..<индекс2> - диапазон изменения индексов, <индекс1>, <индекс2> - целые числа или константы.

<тип переменной> - типы данных, которые могут содержаться в ячейках массива. Массив может содержать данные только одного типа, например, если описать массив

a:array[1..20] of integer;

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

Пример 1. Прочитать с клавиатуры 10 целых чисел. Вывести их на экран в обратном порядке.


Решение. Сначала в цикле прочитаем все числа и запишем их в массив, а потом выведем элементы массива в обратном порядке.

Var i:integer;

A:array[1..10] of integer;

Begin

For i:=1 to 10 do

Begin

Write(‘input a[‘,i,’] ’);

Readln(a[i]);

End;

For i:=10 downto 1 do

Writeln(a[i]);

End.

Пример 2. Заполнить массив в соответствии с закономерностью 1, 2, 1, 2, 1….


Решение. Как видно из представленной закономерности, в ячейки с нечетными номерами нужно записать число 1, а в ячейки с четными – 2. Значит нужен цикл с условием.

var

a:array[1..20] of integer;

i:integer;

begin

for i:=1 to 20 do

if i mod 2=1 then a[i]:=1

else a[i]:=2;

writeln;

for i:=1 to 20 do write(a[i]);

end.

Генератор случайных чисел


При решении задач на компьютере человек часто использует случайные числа. Для того, чтобы генерировать случайные числа, в паскале предусмотрена функция random. У нее один целочисленный аргумент. Функция возвращает неотрицательное целое случайное число, меньшее аргумента, пример использования

x:=random(y);

Если аргумент не указывать, то функция возвратит вещественное число от 0 до 1.



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

Пример 3. Заполнить массив случайными числами от 0 до 9 и вывести на экран его элементы через пробел.


Решение.

var a:array[1..20] of integer;

begin

randomize;

for i:=1 to 20 do a[i]:=random(10);

for i:=1 to 20 do write(a[i],’ ‘);

end.
Таким образом, заполнение массива числами производится в цикле, причем это можно сделать можно проделать следующими способами:

  1. Прочитать числа с клавиатуры, как в примере 1.

  2. Заполнить массив по заданным формулам, как в примере 2.

  3. Заполнить массив случайными числами, как в примере 3.

Для вывода элементов массива на экран также неоходимо использовать цикл и выводить элементы один за другим.

Задачи


  1. Прочитать с клавиатуры элементы массива. Вывести на экран те элементы, индексы которых нечетны.

  2. Записать в ячейки массива последовательность вида 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3…

  3. Заполнить массив случайными числами от 0 до 100 и вывести все элементы, которые лежат от 30 до 50.

  4. Заполнить массив случайными числами от 10 до 90 и вывести все элементы, которые лежат от 30 до 50.

  5. Ряд чисел образуется следующим образом. Сначала записывают числа 1 и 2. Каждое следующее число получается как сумма двух предыдущих. Вывести на экран первые 10 чисел ряда в порядке убывания.



Сумма, произведение и количество элементов массива.


В этом разделе ничего нового нет – сумму, произведение и количество вы считать умеете.

Пример 4. Заполнить массив случайными числами, и найти сумму его нечетных элементов.


Решение.

var

a:array[1..20] of integer;

i,s:integer;

begin

randomize;

for i:=1 to 20 do a[i]:=random(15);

s:=0;

for i:=1 to 20 do if a[i] mod 2<>0 then s:=s+a[i];

writeln(s);

end.



  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран сумму всех элементов массива.

  2. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран количество всех нечетных элементов массива.

  3. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран сумму всех элементов массива с нечетными индексами.

Задачи по вариантам

  1. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран сумму элементов массива, больших 5 и произведение элементов, меньших 5.

  2. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран сумму нечетных элементов массива и количество четных элементов.

  3. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран сумму элементов массива, равных 8, 2 или 4.

  4. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран произведение четных элементов массива.

  5. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран количество элементов массива, больших 5.

  6. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран количество элементов массива, меньших 5 и количество нечетных элементов.

  7. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Каких элементов в массиве больше – четных или нечетных.

  8. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран разность между суммой четных элементов массива и количеством элементов, больших 10.

  9. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран произведение элементов массива, равных 5 или 8.

  10. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран произведение элементов массива, меньших 8.

  11. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран разность между суммой четных элементов массива и суммой его нечетных элементов.



Константы.


В примере 4 число 20 встречается во многих местах программы. Если его вдруг придется изменить, то легко запутаться. По этой причине имеет смысл дать числу 20 некоторое имя, а затем использовать это имя в программе. Для таких задач в паскале предусмотрен еще один тип объектов – константы. Константы имеют имя и значение и в этом смысле очень напоминают переменные. Два важнейших отличия констант:

  • значения констант нельзя изменять в программе

  • константы можно использовать вместо чисел в квадратных скобках при описании массива, а переменные – нельзя.

Для описания констант предусмотрен специальный раздел, который начинается со слова const и располагается до тела программы.

const n=10; k=5;

Рассмотрим использование константы на примере.

Пример 5. Массив из 20 элементов заполнить случайными числами от 0 до 99 и найти количество двузначных чисел среди его элементов.


Решение.

const n=20;k=100;

var

a:array[1..n] of integer;

i,s:integer;

begin

randomize;

for i:=1 to n do a[i]:=random(k);

s:=0;

for i:=1 to n do if (a[i]>9) and (a[i]<100) then s:=s+1;

writeln(s);

end.
Далее в задачах о массивах количество ячеек следует описывать как константу .

Задачи.


  1. Заполнить массив случайными числами от 0 до 100. Вывести элементы массива на экран. Вывести на экран количество элементов массива, лежащих между 20 и 30 и между 50 и 60.

  2. Заполнить массив случайными числами от 0 до 100. Вывести элементы массива на экран. Вывести на экран сумму элементов массива, расположенных после первого четного элемента.



Максимальный и минимальный элементы массива


Эта тема вам также знакома из предыдущей темы, поэтому сразу рассмотрим пример.

Пример 6. Заполнить массив случайными числами и вывести на экран наибольший элемент массива и его индекс.


Решение.

Нам необходимо хранить только индекс максимального элемента массива, для этого будем использовать переменную imax.


const n=20;

var

a:array[1..n] of integer;

i,imax:integer;

begin

randomize;

for i:=1 to n do a[i]:=random(100);

imax:=i;

for i:=2 to n do if a[i]>a[imax] then imax:=i;

writeln(‘максимальный элемент ’,a[imax]);

writeln(‘индекс максимального элемента’,imax);

end.

Задачи.





  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран минимальный элемент массива.

  2. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран количество его элементов, расположенных после максимального. Если максимальных элементов несколько, то считать после первого из них.

  3. Заполнить массив случайными числами. Вывести элементы массива на экран. Найти второй по величине элемент массива.

  4. Заполнить массив случайными числами. Вывести элементы массива на экран. Найти максимальный из элементов массива, расположенный после первого четного элемента.

Задачи по вариантам


  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.

  2. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить его первый минимальный элемент нулем.

  3. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить его первый элемент на минимальный.

  4. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран разность между его максимальным и минимальным элементами.




  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Вычесть из каждого его элемента минимальный элемент.




  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить его минимальные элементы на максимальные.



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


массив

1

2

3

4

5

6

4

3

7

1

9

2

после удаления третьего элемента



1

2

3

4

5

6

4

3

1

9

2



Пример 7. Прочитать с клавиатуры число k. Удалить элемент массива с номером k

Решение. Нужно элемент с номером k+1 записать в ячейку с номером k, затем элемент с номером k+2 записать в ячейку с номером k+1 и так далее, пока не дойдем до конца массива. Пример показан на рисунке

Фрагмент программы для массива из n элементов приводится ниже:



readln(k);

for i:=k to n-1 do

a[i]:=a[i+1];

Пример 8. Прочитать с клавиатуры числа x и k. Вставить в массив число x после элемента с номером k.

Решение. Пусть в массив записано n-1 элементов. При этом массив состоит из n ячеек. Последняя ячейка пуста. Для вставки элемента нужно сначала сдвинуть все элементы массива, начиная с k+1-го элемента вправо. Затем в освободившуюся k+1 - ую ячейку можно записать число x.

Фрагмент программы, реализующий эти действия



readln(k,x);

for i:=n-1 downto k+1 do

a[i+1]:=a[i];

a[k+1]:=x;

Задачи.


  1. Удалить первый отрицательный элемент массива. Подсказка. Сначала определяем его номер. Затем применяем стандартный фрагмент программы.

  2. Вставить число 13 после первого четного элемента массива.

  3. (*) Удалить все отрицательные элементы массива. Подсказка здесь необходим вложенный цикл.

  4. (*)Вставить число 13 после каждого четного элемента массива.

  5. (**)Удалить все отрицательные элементы массива. Вложенный цикл и дополнительный массив не использовать

  6. (**)Вставить число 13 после каждого четного элемента массива. Вложенный цикл и дополнительный массив не использовать.

Задачи по вариантам.


  1. Удалить последний отрицательный элемент массива

  2. Удалить второй отрицательный элемент массива

  3. Удалить максимальный элемент массива.

  4. Прочитать с клавиатуры число k. Вставить в массив число 15 после k-1-го элемента

  5. Вставить число, равное первому элементу массива после его третьего элемента

  6. Вставить 0 после максимального элемента массива

  7. Вставить минимальный элемент массива после его третьего элемента.

  8. Удалить минимальный элемент массива

  9. Вставить в начало массива число, равное сумме его элементов

  10. Вставить в начало массива число, равное количеству его элементов

  11. Вставить после первого максимального элемента массива еще один такой же элемент

Задачи по вариантам на дом.


  1. Удалить все элементы массива, равные максимальному

  2. Повторить все четные элементы массива

  3. После каждого отрицательного элемента массива вставить его максимальный элемент

  4. Удалить все элементы массива, равные количеству его элементов

  5. Удалить все элементы массива, стоящие перед его нулевыми элементами.

  6. Удалить все элементы массива, стоящие после его нулевых элементов



Использование нескольких массивов.


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

Пример 9. Заполнить массив a случайными числами. Квадраты его четных элементов записать в массив b.

Решение

const n=10;

var

a,b:array[1..n] of integer;

I,k:integer;

begin

randomize;

for i:=1 to n do a[i]:=random(15);

for i:=1 to n do write(a[i]:4);

for i:=1 to n do b[i]:=sqr(a[i]);

for i:=1 to n do write(b[i]:4);

end.

Многие задачи решаются проще, если используются дополнительные массивы.

Пример 10. Заполнить массив случайными числами. После каждого отрицательного элемента массива вставить нулевой элемент.

Решение. Будем переписывать элементы массива a в массив b. При этом индексом элементов массива a будет счетчик цикла for. Индекс элемента массива b будем хранить в переменной k. Сначала k=1. На каждом шаге цикла записываем a[i] в b[k], увеличиваем k на 1. Если a[i]<0, то запишем в b[k] нуль и еще раз увеличим k



const n=10; n0=20;

var

a,b:array[1..n0] of integer;

I,k:integer;

begin

randomize;

for i:=1 to n do a[i]:=random(15)-5;

for i:=1 to n do write(a[i]:3);

k:=1;

for i:=1 to n do

begin

b[k]:=a[i];

inc(k);

if a[i]<0 then

begin

b[k]:=0;

inc(k);

end;

end;

for i:=1 to k-1 do a[i]:=b[i];

for i:=1 to k-1 do write(a[i]:3);

end.
Задачи.

  1. Заданы два массива a и b. Переписать их в массив c так, чтобы сначала были записаны элементы массива a, а затем элементы массива b.

  2. Из массива a удалить все элементы, равные 0.

  3. Из массивов a и b удалить совпадающие элементы.

  4. (*)Вывести на экран самую длинную последовательность подряд идущих элементов, присутствующих и в массиве a, и в массиве b.

Задачи по вариантам.

Решить задачи предыдущего параграфа с использованием дополнительных массивов.


Задача о сортировке массива.


Часто бывает необходимо поменять местами элементы массива таким образом, чтобы они были расположены в порядке возрастания или убывания. Например, последовательность чисел 2,13,5,1,8 привести к виду 1,2,5,8,13. Такая операция называется сортировкой массива. В отсортированном массиве проще найти нужный элемент (пример: классный журнал, в котором фамилии учеников расположены по алфавиту). Существует много алгоритмов сортировки массива. Самый простой реализуется многократным повторением следующего действия. Поочередно просматриваем слева направо элементы массива. Каждый из элементов сравниваем с соседом слева. Если сосед слева оказывается меньше, то нужно поменять эти элементы местами. Фрагмент программы, реализующий это действие, приводится ниже

for i:=2 to n do

if a[i]

begin

s:=a[i];

a[i]:=a[i-1]; {меняем местами a[i] и a[i-1]}

a[i-1]:=s;

end;

Каждое повторение цикла приближает массив к упорядоченному по возрастанию. Если повторять этот цикл много раз, то в конце концов массив станет упорядоченным. Таким образом, этот фрагмент программы нужно поместить во внешний цикл. При этом удобно использовать цикл repeat…until. Разберемся, как организовать выход из внешнего цикла. Если массив упрядочился по возрастанию, при проходе цикла по j ни один обмен произведен не будет. В этом случае следует выйти из цикла repeat…until и выводить на экран отсоротированный массив. Удобно завести логическую переменную (тип boolean), которая равна false, если в цикле for не произведено ни одного обмена и true в противном случае. Назовем эту переменную changed. Фрагмент программы, сортирующей массив, приведен ниже.



repeat

changed:=false;

for i:=2 to n do

if a[i]

begin

s:=a[i];

a[i]:=a[i-1];

a[i-1]:=s;

changed:=true;

end;

until not changed;

Задачи по теме «Сортировка массива»



  1. Запрограммировать задачу о сортировке по возрастанию

  2. Переделать программу так, чтобы она упорядочивала элементы по убыванию.

  3. Вывести на экран третий по величине элемент массива. Указание: предварительно массив удобно упорядочить.

  4. Заполнить массив случайными числами, прочитать с клавиатуры число k и вывести на экран сумму k самых больших элементов массива.

  5. Все четные элементы массива упорядочить по возрастанию. Нечетные элементы оставить на своих местах.



Задачи повышенной сложности.


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

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

  3. Заданы два массива с одинаовым число элементов. Элементы масивов упорядочены по возрастанию. Слить элементы в один массив, который также должен быть упорядочен.

Двумерные массивы.


Одномерный массив предназначен для хранения одномерной таблицы, показанной на рисунке (а). Рассмотрим теперь таблицу, показанную на рисунке (б). Каждая ее ячейка задается двумя параметрами – номером строки и номером столбца. Для хранения таких таблиц предназначен двумерный массив. Его элемент определяется двумя индексами. Первый – номер строки, второй – номер столбца. Например, если массив на рисунке (б) называется a, то в ячейке a[2,3] записано число 6. Двумерный массив описывается так

var a:array[1..5,1..6] of integer;

Описание отличается от описания одномерного массива наличием еще одного диапазона изменения индекса 1..6, так как элемент двумерного массива двухиндексный. При работе с двумерными массивами используются вложенные циклы. С элементом массива можно делать все действия, допустимые для переменных этого типа. При этом пишем имя массива, а затем в квадратных скобках через запятую следуют два индекса, например a[i,j].



Пример. Заполнить двумерный массив случайными числами от 20 до 40, вывести его на экран, вывести на экран сумму его элементов

const n=5,m=6;

var

a:array[1..n,1..m] of integer;

i,j,s:integer;

begin

randomize;

for i:=1 to n do

for j:=1 to m do

a[i,j]:=20+random(21);

for i:=1 to n do

begin

writeln;

for j:=1 to m do write(a[I,j]:3);

end;

s:=0;

for i:=1 to n do

for j:=1 to m do

s:=s+a[i,j];

writeln;

writeln(‘summa=’,s);

end.

Задачи


  1. Заполнить двумерный массив случайными числами. Найти сумму его элементов, больших 10.

  2. Заполнить двумерный массив случайными числами. Найти его максимальный элемент

  3. В каждую ячейку массива записать сумму номера ее строки и номера ее столбца

  4. Во все ячейки первого столбца двумерного массива записать единицы, второго столбца – нули, третьего – опять единицы, четвертого – нули и так далее.

  5. Заполнить двумерный массив нулями и единицами в шахматном порядке.

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

  7. Найти сумму элементов квадратного массива, расположенных выше главной диагонали.

  8. Найти сумму элементов квадратного массива, расположенных выше побочной диагонали.

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

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

  11. Найти сумму элементов квадратного массива, расположенных выше и главной, и побочной диагонали.

  12. Найти сумму элементов квадратного массива, расположенных выше главной и ниже побочной диагонали.

  13. Найти сумму элементов квадратного массива, расположенных ниже главной и выше побочной диагонали.

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

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

  16. * В двумерном массиве найти номер столбца с максимальной суммой элементов.





Окончательное решение женщины редко бывает последним.
ещё >>