Двумерные массивы паскаль
Двумерный массив в Паскале представляет собой таблицу, состоящую из нескольких одномерных массивов. Двумерные массивы Pascal называют матрицей. Положение элементов в матрице обозначается двумя индексами.
Рассмотрим матрицу 3*3, то есть она будет состоять из 3 строк и 3 столбцов:
Каждый элемент обладает 2-мя индексами. Первый — номер строки, в котором располагается элемент, а второй – номер столбца. Следовательно, индекс элемента определяется местом пересечением столбца и строки . Например, a13 – это элемент, стоящий в первой строке и в третьем столбце массива.
Описание двумерного массива Паскаля.
Имеется ряд методов объявления двумерного массива.
Рассмотри способ, в котором указывается тип элемента и переменные.
В данном варианте матрица mas состоит из 4 строк, в каждой из которых 9 столбцов. При этом мы можем обратиться к любой i -й строке через mas [ i ], а к j -му элементу внутри i строки – m [ i , j ].
Во втором и третьем способе матрицу можно задать в одну строку.
Как и в предыдущем варианте, матрица имеет 4 строки и 9 столбцов, обращение к какому-либо элементу массива имеет вид: mas [ i , j ]. Значит, что элемент, расположен в i -й строке и j -м столбце. Важно не перепутать строки со столбцами, иначе произойдет ошибка в ответе.
Основные действия с двумерными массивами Паскаля
Все основные действия над матрицами выполняются поэлементно, причем типы данных элементов должны быть одинаковыми. То есть, если матрица состоит из чисел, то действия можно выполнять только с числами. Однако для реализации операции присваивания массивам достаточно быть одного размера. Например, дан массив
в ходе выполнения такой программы матрице а можно присвоить значения матрицы b ( a := b ).
Ввод двумерного массива Паскаля.
Для поочередного ввода элементов в матрицу необходимо перебрать элементы с 1-го столбца 1-ой строки до последнего столбца последней строки. Для этого используется два оператора цикла for, причем один вложен в другой.
Проанализируем образец ввода двумерного массива Паскаля с клавиатуры:
Способ заполнения двумерного массива Паскаля зависит от поставленной задачи. Например, функцию random (N) позволяет заполнять матрицу случайными величинами a[i,j]:=random(25)-10. Некоторые задачи требуют содержание выражений в матрице. Не забывайте, что в любом случае должен быть определен каждый элемент в каждых строках и столбцах.
Вывод двумерного массива Паскаля на экран.
При выводе элементы должны печатать по порядку индексов, то есть в строках элементы стоят друг за другом, а в столбах один под другим. Для этого необходимо написать следующие элементы кода:
Примечание! Использовать операторы readln ( a [ i , j ]), writeln именно в таком виде, в противном случае компилятор не сможет считать и напечатать элемент. Ввод в программу операторов в таком виде readln (a), writeln (a) не допустим, так как а – это переменная типа массив.
Представление двумерного массива Паскаля в памяти
В памяти ЭВМ элементы двумерного массива располагаются последовательно и занимают несколько байт. Например, элементы массива типа integer, будут занимать по 2 байта. А весь массив займет S^2 байта, где S – количество элементов в массиве.
В матрице для каждого элемента типа integer потребуется 2 байта памяти. Рассмотрим пример.
В данном случае необходимо 24 байт памяти.
Модель размещения массива M типа matrix в памяти.
Для любого элемента предоставляется две ячейки памяти, размещение осуществляется от первой строки до нижней, в порядке изменения индекса.
Между переменной и адресом ячейки устанавливается соответствие, однако, при объявлении матрицы программе известно только адрес начала массива, к остальным элементам адрес вычисляется по формуле:
где Addres – местоположение первого элемента, выделенного для массива; I , J – индексы элемента в двумерном массиве; SizeElemt – размер элемента массива (например, 2 байта для элементов типа integer ); sum – количество элементов в строке.
SizeElemt * sum *( I -1)+ SizeElemt *( J -1) — смещение относительно начала массива.
Какой размер памяти выделяется для массива?
Чтобы программа работала нормально, компьютер выделят память сегментами по 64 Кбайт. Один из сегментов отводится для данных, которые обрабатываются программой. Для каждой переменной отводится свой сегмент. Например, если переменная состоит из массива, то он не сможет занимать места больше, чем 65536 байт. Естественно, кроме массива в сегменте могут находится и другие переменные, поэтому объем памяти вычисляется по формуле 65536- S , где S – размер памяти, ранее отведенные под другие переменные.
Рассмотрим пример, в котором:
С точки зрения синтаксиса запись верная, но компилятор выдаст ошибку об объявлении слишком длинного массива.
Можно без труда подсчитать количество элементов, которые допустимы по формуле: 65536/2 –1=32767. Однако, других переменных не должно быть. Матрицы обладают еще меньшими пределами индексов.
Решим задачу с двумерным массивом Паскаля.
Задача: Вычислить произведение ненулевых элементов матрицы.
Решение:
- Для начала нужно установить переменные: матрицу, состоящую из целочисленных элементов; P – произведение элементов, не равное 0; I , J – индексы массива; N , M – количество строк и столбцов в матрице.
- Входные данные N , M пусть вводятся с клавиатуры, а матрица зададим с помощью функции random ().
- Выходными параметром получим P (произведение).
- Выведем матрицу на экран, для проверки работы программы.
А теперь поговорим о процедурах.
Примечание! Тип массива должен быть определен заранее. Например:
Для того чтобы вводимая матрица была передана в программу как результат следует воспользоваться процедурой vvod , В таком случае матрица будет передаваться по ссылке. В таком случае процедура выглядит следующее:
Print – процедуры вывода на экран матрицы, которая передается по значению.
Для реализации вложенных циклов внутри процедуры нужно ввести счетчики – k и h . Алгоритм вывода матрицы на экран был описан выше, используем это описанием.
Итак, опишем ход выполнения программы.
- Ввод значений N и M ;
- Обращаемся к процедурам vvod ( a ) и print ( a ) для ввода и вывода матрицы соответственно, где а – матрица;
- Переменной, которая отвечает за произведение P, присвоим значение 1;
- Поочередно перебираем элементы матрицы с индексом 11 до элемента с индексом Каждый элемент матрицы должен удовлетворять условию: если a ij ? 0, то произведение P умножаем на элемент a ij ( P = P * a ij );
- Выводим на экран результат произведения ненулевых элементов матрицы – P
Строковый массив паскаль
Рассмотрим простейшие типовые задачи на строковые массивы.
1) Поиск максимального и минимального элементов массива.
Задача . Вводится с клавиатуры текст в виде массива слов. Определить слово максимальной длины.
INPUT «Сколько слов»; n
DIM mas(n) AS STRING
PRINT «Введите след. слово «;
IF LEN(mas(i)) > nm THEN
PRINT «Слово максимальной длины — «; max $, nm
mas: array[1..100] of string;
Write (‘Сколько слов?’);
FOR i := 1 TO n Do Begin
Write (‘Введите след. слово ‘);
FOR i := 1 TO n do
IF Length(mas) > nm THEN Begin
Writeln (‘Слово максимальной длины — ‘, max )
2) Определение некоторых слов в тексте по условиям.
Задача . Вводится с клавиатуры массив слов. Определить, сколько слов начинается на определенную букву.
INPUT «Сколько слов»; n
DIM mas(n) AS STRING
PRINT «Введите след. слово «;
IF LEFT$(mas(i), 1) = b$ THEN k = k + 1
PRINT «Слов на букву «; b $; k
mas:array[1..100] of string;
Write (‘Сколько слов’); Readln ( n );
FOR i := 1 TO n do begin
Write (‘ Введите след . слово ‘); Readln (mas)
Write (‘Введите букву ‘); Readln (b);
FOR i := 1 TO n do
IF mas[1] = b THEN k := k + 1;
Writeln (‘Слов на букву ‘, b ,’ — ‘, k );
Задача . Вводится с клавиатуры массив слов. Определить, есть ли слова-палиндромы в данном наборе слов, и, если есть, то вывести эти слова.
INPUT «Сколько слов»; n
DIM mas(n) AS STRING
PRINT «Введите след. слово «;
FOR j = 1 TO LEN(mas(i))
IF sl$ = mas(i) THEN k = k + 1: PRINT mas(i)
PRINT «Слов-палиндромов «; k
s:array[1..100] of String;
Write(‘Enter number: ‘); ReadLn(n);
For i:=1 To n Do begin
For j:=1 to m do begin
If s1<>s2 Then begin pr:=true;Break; End;
If not(pr) then begin inc(kp); Writeln(s); End;
Задача 2. Определить, является ли натуральное число палиндромом
ПрограммыПредлагается два подхода к решению задачи, в зависимости от типа входных данных:
- С клавиатуры задаётся значение переменной натурального типа N
- Вводится значение символической переменной S
Сообщение о результате выводится на экран
В качестве счётчиков цикла используются переменные i, j
Р — разряд очередной цифры числа, N1 — хранит исходное число
Цифры числа N заносятся в массив Mb , затем переставляются в обратном порядке.
Формируется новое число N2, которое используется для сравнения с исходным
Промежуточные данные: sw — буферная переменная
Символы строки размещаются в обратном порядке в строке s1 , которая сравнивается с исходной строкой s
лабы по информатике, егэ
лабораторные работы и задачи по программированию и информатике, егэ по информатике
Pascal: Занятие № 11. Строковый тип данных в Паскаль
Символьный тип char в Паскале
Символьной переменной соответствует тип char:
Инициализация символьной переменной:
Основные функции для работы с символами
Функция преобразует целое число, имеющее тип BYTE, в один символ ASCII-кода:
Функция возвращает порядковый номер символа параметра в таблице ASCII:
var i: integer; begin for i:=32 to 255 do write(chr(i):3); end.
Строковые переменные в Паскаль
Строковые переменные в Паскале имеют тип String
Объявление и инициализация строковой переменной:
var a:string; begin a:=’Привет всем!’; writeln(a); end.
Ввод значения строковой переменной с клавиатуры:
var a:string; begin writeln(‘Введите слово’); readln(a); writeln(‘Вы ввели слово ‘,a); end.
Строка «рассматривается» компилятором, как массив букв:
Функции работы со строками в Pascal
Исходные данные | Операция | Результат |
---|---|---|
s3=’Мотороллер’ | ||
s4= ‘трон’ | ||
s5=’Корочка’ | ||
s6=’Рубашка’ | ||
s8=’2.73′ | ||
var s:string[30]; n,i:integer; begin writeln(‘введите текст’); readln(s); n:=0; for i:=1 to length(s) do if s[i]=’f’ then n:=n+1; write(‘в тексте букв f = ‘,n) end. const m = [‘1’..’9′]; var s: string; i, k: byte; begin read(s); k := 0; for i := 1 to length(s) do if s[i] in m then inc(k); writeln(‘цифр = ‘, k); readln; end. var a,b,c:string; i:longint; begin write(‘введите слово:’); readln(a); b:=»; for i:=1 to length(a) do b:=a[i]+b; if a=b then write(‘перевертыш’) else write(‘не перевертыш’); end. String 6. Определить, встречается ли в тексте сочетание букв «ку». String 7. Заменить данную букву в слове другой буквой (буквы вводит пользователь). Примечание: Посимвольный ввод до пробелаПосимвольный ввод удобен для «мгновенной» обработки символов в строке. Для организации массива символьных строк:
Пример: Трудность низкая: Трудность высокая: И напоследок рассмотрим олимпиадное задание по Паскалю: * Решить ту же задачу, в которой сдвиг будет не на 3 позиции, а на k, причем отрицательное значение является признаком сдвига влево, положительное — вправо. var a:char; i,n:byte; s,s1:string; begin s1:=»; readln(s); for i:=1 to length(s) do begin n:=ord(. ); n:=n+3; if n=123 then n:=97; <в ASCII 120 — x, 97 — a>if . ; <в ASCII 121 — y, 98 — b>if . ; <в ASCII 122 — z, 99 — c>a:=chr(. ); s1:=. ; end; writeln(s1) end. var a:char; i,n:byte; s,s1:string; begin s1:=»; readln(s); for i:=1 to length(s) do begin n:=ord(s[i]); n:=n+3; if n=123 then n:=97; <в ASCII 120 — x, 97 — a>if n=124 then n:=98; <в ASCII 121 — y, 98 — b>if n=125 then n:=99; <в ASCII 122 — z, 99 — c>a:=chr(n); s1:=s1+a; end; writeln(s1) end. Потренируйтесь в решении задач по теме, щелкнув по пиктограмме: Pascal-ПаскальПрограммирование. Одномерные массивы Pascal-Паскаль
Программирование. Одномерные массивы Pascal-ПаскальПонятие структурыДо сих пор мы работали с простыми типами данных – логический ( boolean ), целый ( integer , word , byte , longint ), вещественный ( real ), символьный ( char ). Любой алгоритм можно запрограммировать с помощью этих четырех базовых типов. Но для обработки информации о многообразном реальном мире требуются данные, имеющие более сложное строение. Такие сложные конструкции, основанные на простейших скалярных типах, называются структурами. Структура – некоторый составной тип данных, составленный из базовых скалярных. Если структура не изменяет своего строения на протяжении всего выполнения программы, в которой она описана, то такую структуру называют статической. Массив – однородная совокупность элементовСамой распространенной структурой, реализованной практически во всех языках программирования, является массив. Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Из этого, правда, не следует делать вывод, что компоненты массива могут иметь только скалярный тип. Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Что это значит? Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу). Индекс массиваНомер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип ( integer , word или byte ), но может быть и логический и символьный. Описание массива в Паскале. В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом: где I – тип индекса массива, T – тип его элементов. Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных: Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа : I 1 .. I n . Например, индексы могут изменяться в диапазоне 1..20 или ‘ a ‘..’ n ‘. При этом длину массива Паскаля характеризует выражение: Вот, например, объявление двух типов: vector в виде массива Паскаля из 10 целых чисел и stroka в виде массива из 256 символов: С помощью индекса массива можно обращаться к отдельным элементам любого массива, как к обычной переменной: можно получать значение этого элемента, отдельно присваивать ему значение, использовать его в выражениях. Опишем переменные типа vector и stroka : далее в программе мы можем обращаться к отдельным элементам массива a или c . Например, a [5]:=23; c [1]:=’ w ‘; a [7]:= a [5]*2; writeln ( c [1], c [3]). Вычисление индекса массива ПаскаляИндекс массива в Паскале не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять. Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива». Пример программы с ошибкой массива Паскаля Хотя данная программа полностью соответствует синтаксису языка, и транслятор «пропустит» ее, на стадии выполнения произойдет ошибка выхода за пределы массива Паскаля. При n =45 выражение n *2=90, компьютер сделает попытку обратиться к элементу массива a [90], но такого элемента нет, поскольку описан массив размерностью 80. Будем считать, что хорошая программа должна выдавать предупреждающее сообщение в случае попытки обращения к несуществующим элементам массива. Не лишним будет проверять возможный выход как за правую, так и за левую границы массива, ведь не исключено, что в результате вычисления значения выражения получится число, находящееся левее границы массива Паскаля. Из всего этого следует сделать вывод: программисту надо быть очень аккуратным при работе с индексами массива. Основные действия с массивами ПаскаляКак известно, определение типа данных означает ограничение области допустимых значений, внутреннее представление в ЭВМ, а также набор допустимых операций над данными этого типа. Мы определили тип данных как массив Паскаля. Какие же операции определены над этим типом данных? Единственное действие, которое можно выполнять над массивами целиком, причем только при условии, что массивы однотипны, – это присваивание. Если в программе описаны две переменные одного типа, например, то можно переменной a присвоить значение переменной b ( a := b ). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b. Все остальные действия над массивами Паскаля производятся поэлементно (это важно!). Ввод массива ПаскаляДля того чтобы ввести значения элементов массива, необходимо последовательно изменять значение индекса, начиная с первого до последнего, и вводить соответствующий элемент. Для реализации этих действий удобно использовать цикл с заданным числом повторений, т.е. простой арифметический цикл, где параметром цикла будет выступать переменная – индекс массива Паскаля. Значения элементов могут быть введены с клавиатуры или определены с помощью оператора присваивания. Пример фрагмента программы ввода массива Паскаля Рассмотрим теперь случай, когда массив Паскаля заполняется автоматически случайными числами, для этого будем использовать функцию random ( N ). Пример фрагмента программы заполнения массива Паскаля случайными числами Вывод массива ПаскаляВывод массива в Паскале осуществляется также поэлементно, в цикле, где параметром выступает индекс массива, принимая последовательно все значения от первого до последнего. Пример фрагмента программы вывода массива Паскаля Вывод можно осуществить и в столбик с указанием соответствующего индекса. Но в таком случае нужно учитывать, что при большой размерности массива все элементы могут не поместиться на экране и будет происходить скроллинг, т.е. при заполнении всех строк экрана будет печататься очередной элемент, а верхний смещаться за пределы экрана. Пример программы вывода массива Паскаля в столбик На экране мы увидим, к примеру, следующие значения: Пример решения задачи с использованием массивов ПаскаляЗадача: даны два n -мерных вектора. Найти сумму этих векторов. Решение задачи:
Ход решения задачи:
Текст программы : Пример программы суммирования векторов ПрограммированиеИсходники Pascal (127)СправочникСправочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту Оценка статьи:
![]() ![]() ![]() ![]() ![]() ![]() Строковый массив паскаль Ссылка на основную публикацию ![]() ![]() Похожие публикации
|