Как сделать массив из строки паскаль

Обновлено: 04.07.2024

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

Объявление массивов производится в блоке описания следующим образом:

x:array[1..100] of integer; – массив на 100 элементов для целых чисел с индексами от 1 до 100.

a,b:array[10..29] of string; – два массива по 20 элементов для символьных переменных с индексами от 10 до 29.

Двумерный массив объявляется так:

y:array[1..10,1..5] of real; – массив размером 10 на 5 для вещественных чисел с индексами от 1 до 10 и от 1 до 5.

Конкретный элемент массива обозначается с помощью ссылки на переменную (имя) массива, за которой в квадратных скобках указывается индекс данного элемента, например: a[7]

Строковая переменная типа string также может рассматриваться как массив переменных типа char, например: b:string[20] Это дает доступ к каждому символу в строковой переменной, если значение символа имеет тип Char.

Конкретный символ в строковой переменной обозначается с помощью ссылки на строковую переменную, за которой указывается индекс, определяющий позицию символа в строке, например:b[15].

В программах можно использовать присваивание элементам массива: а[5] := 8; числовому, b[3] := 'Виктор' строковому

и выборочную печать элементов:

С массивами удобно работать с помощью циклов:

for t := 1 to 20 do

write('Введите ',t,'-й элемент');

- вывод на печать

for t := 1 to 20 do

writeln(t,'-й элемент равен',a[t]);

- выбор по условию

for t := 1 to 20 do

if a[t]>=3 then writeln('У студента ',b[t],' оценка по экзамену ',a[t]);

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

x:array[1..10,1..5] of string;

for m:=1 to 10 do

write('Введите фамилию жильца ',m,'-го подъезда и ',k,'-го этажа');

write('Полный список жильцов:');

for m:=1 to 10 do

write(m,'-й подъезд, ',k,'-й этаж',x[m,k])

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

1. Программа "исчезающие звезды".

В цикле for массивы заполняются случайными числами: x – до 640 (координата х), y – до 400 (координата y), c – до 1000000 (цвет). В цикле repeat последовательно проходятся все элементы массива и по указанным координатам сначала окружность (круг) рисуется черным цветом (звезды гаснут), а затем по новым случайным координатам и цвету вспыхивают звезды. Процесс продолжается до нажатия любой клавиши.

HemulGM

По циклу прогоняешь строку, если пробел, то от начала до пробела помещаешь в массив.
Рекомендую сначала посчитать пробелы одним циклом. Установить размер массива = кол-во пробелов + 1.
Далее уже заполнять массив.
Тебе нужна переменная, которая запомнит последнюю позицию
LastPos
И переменная последнего элемента
LastIndex
Ну и вот:


Это если для чистого Pascal, а если для Delphi, то лучше TStringList использовать и его метод DelemitedText

HemulGM

Hemul GM, Если речь про FP или современный Delphi, то задача решается очень просто, без всего этого вот, что вы написали.

HemulGM

Hemul GM, И там вы написали устаревшую информацию. Для Delphi есть функция SplitString и никаких стринг-листов не надо.

HemulGM

Массивом называют упорядоченный набор однотипных переменных (элементов). Каждый элемент имеет целочисленный порядковый номер, называемый индексом. Число элементов в массиве называют его размерностью. Массивы используются там, где нужно обработать сразу несколько переменных одного типа -- например, оценки всех 20 студентов группы или координаты 10 точек на плоскости. Строку текста можно рассматривать как массив символов, а текст на странице -- как массив строк.

Массив описывается в разделе var оператором следующего вида:

var ИмяМассива: array [НИ .. ВИ] of Тип;

НИ (нижний индекс) -- целочисленный номер 1-го элемента массива;

.. -- оператор диапазона Паскаля (см. п. 7.8);

ВИ (верхний индекс) -- целочисленный номер последнего элемента;

Тип -- любой из известных типов данных Паскаля. Каждый элемент массива будет рассматриваться как переменная соответствующего типа.

Опишем несколько массивов разного назначения.

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

Здесь мы описали массив с именем A , состоящий из 20 целочисленных элементов;

var x,y : array [1..10] of real;

Описаны 2 массива с именами x и y , содержащие по 10 вещественных элементов;

var t : array [0..9] of string;

Массив t состоит из 10 строк, которые занумерованы с нуля.

Легко увидеть, что размерность (число элементов) массива вычисляется как ВИ - НИ + 1 .

Для обращения к отдельному элементу массива используется оператор вида ИмяМассива [Индекс] .

Здесь Индекс -- целочисленный номер элемента (может быть целочисленным выражением или константой). Индекс не должен быть меньше значения нижнего или больше верхнего индекса массива, иначе возникнет ошибка " Constant out of range ". Отдельный элемент массива можно использовать так же, как переменную соответствующего типа, например:

В этой главе мы изучаем одномерные массивы, в которых каждый элемент имеет один номер (индекс), характеризующий его положение в массиве. В математике понятию одномерного массива из n элементов соответствует понятие вектора из n компонент: A = < Ai >, i =1, 2 . n .

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

Простейший способ ввода -- ввод массива с клавиатуры:

var a: array [1..n] of real;

writeln (' Введите элементы массива ');

for i :=1 to n do read ( A [ i ]);

Размерность массива определена константой n , элементы вводятся по одному в цикле for -- при запуске этой программы пользователю придется ввести 10 числовых значений. При решении учебных задач вводить массивы "вручную", особенно если их размерность велика, не всегда удобно. Существуют, как минимум, два альтернативных решения.

Описание массива констант удобно, если элементы массива не должны изменяться в процессе выполнения программы. Как и другие константы, массивы констант описываются в разделе const . Приведем пример такого описания:

const a : array [1..5] of real =(

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

Формирование массива из случайных значений уместно, если при решении задачи массив служит лишь для иллюстрации того или иного алгоритма, а конкретные значения элементов несущественны. Для того чтобы получить очередное случайное значение, используется стандартная функция random ( N ) , где параметром N передается значение порядкового типа. Она вернет случайное число того же типа, что тип аргумента и лежащее в диапазоне от 0 до N -1 включительно. Например, оператор вида a [1]:= random (100); запишет в a [1] случайное число из диапазона [0,99].

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

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

for i:=1 to 20 do begin

Еще более удобный путь -- чтение элементов массива из текстового или двоичного файла. Об этом рассказывается в гл. 21 и 22.

К массивам применимы все типовые алгоритмы, изученные в теме "Циклы". Приведем один пример, в котором вычисляется сумма s положительных элементов массива.

var b:array [1..5] of real;

writeln (' Введите 5 элементов массива ');

for i:=1 to 5 do read (b[i]);

for i:=1 to 5 do if b[i]>0 then s:=s+b[i];

Вывод массива на экран также делается с помощью цикла for .

for i :=1 to 5 do write ( b [ i ]:6:2);

Здесь 5 элементов массива b напечатаны в одну строку. Для вывода одного элемента на одной строке можно было бы использовать оператор writeln вместо write .

Существенно то, что если обработка массива осуществляется последовательно, по 1 элементу, циклы ввода и обработки зачастую можно объединить, как в следующем примере.

Найти арифметическое среднее элементов вещественного массива t размерностью 6 и значение его минимального элемента.

var b : array [1..6] of real ;

writeln (' Ввод B[6]');

for i:=1 to 6 do begin

writeln ('min=',min,' s=', s/6);

Теоретически в этой программе можно было бы обойтись и без массива -- ведь элементы b [ i ] используются только для накопления суммы и поиска максимума, так что описание массива вполне можно было заменить описанием вещественной переменной b . Однако, в реальных задачах данные, как правило, обрабатываются неоднократно и без массивов обойтись трудно. Приведем пример учебной задачи, где использование массива дает выигрыш за счет уменьшения объема вычислений, выполняемых программой.

Задана последовательность Ti = max < sin i , cos i >, i = -5 , -4 , . 5 . Найти элемент последовательности, имеющий минимальное отклонение от арифметического среднего положительных элементов.

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

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

  • Скачено бесплатно: 19551
  • Куплено: 414

Понятие структуры

До сих пор мы работали с простыми типами данных – логический ( 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]).

Вычисление индекса массива Паскаля

Индекс массива в Паскале не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять.

Пример программы с ошибкой массива Паскаля

Program primer _ error ;
Type
vector=array [1..80] of word;
var
n: integer;
a: vector;
begin
n:=45;
a[n*2]:=25;
end .

Из всего этого следует сделать вывод: программисту надо быть очень аккуратным при работе с индексами массива.

Основные действия с массивами Паскаля

Как известно, определение типа данных означает ограничение области допустимых значений, внутреннее представление в ЭВМ, а также набор допустимых операций над данными этого типа. Мы определили тип данных как массив Паскаля. Какие же операции определены над этим типом данных? Единственное действие, которое можно выполнять над массивами целиком, причем только при условии, что массивы однотипны, – это присваивание. Если в программе описаны две переменные одного типа, например,

то можно переменной a присвоить значение переменной b ( a := b ). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b. Все остальные действия над массивами Паскаля производятся поэлементно (это важно!).

Ввод массива Паскаля

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

Пример фрагмента программы ввода массива Паскаля

Рассмотрим теперь случай, когда массив Паскаля заполняется автоматически случайными числами, для этого будем использовать функцию random ( N ).

Пример фрагмента программы заполнения массива Паскаля случайными числами

Вывод массива Паскаля

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

Пример фрагмента программы вывода массива Паскаля

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

Пример программы вывода массива Паскаля в столбик

На экране мы увидим, к примеру, следующие значения:

Пример решения задачи с использованием массивов Паскаля

Задача: даны два n -мерных вектора. Найти сумму этих векторов.

Решение задачи:

Ход решения задачи:

  • определим количество элементов (размерность) массивов, введем значение n ;
  • введем массив a ;
  • введем массив b ;
  • в цикле, перебирая значения индекса i от 1 до n , вычислим последовательно значения элементов массива c по формуле:

Текст программы :

Пример программы суммирования векторов

Program summa;
Var
a, b, c: array [1..100] of integer;
I, n: byte;
Begin
Write ('введите размерность массивов:');
Readln(n);
For i:=1 to n do
Readln (a[i]); < ввод массива a>
For i:=1 to n do
Readln (b[i]); < ввод массива b>
For i:=1 to n do
C[i]:=a[i]+b[i]; < вычисление суммы массивов >
For i:=1 to n do
write (c[i],' '); < вывод массива с >
end.

Программирование

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Читайте также: