Урок 6 - Одномерные массивы

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

Синтаксис:

var имя массива: array[интервал] of тип;
Теперь открываем Delphi и кидаем на форму компонент Button, Label и Memo. Компонент Memo находится на 6 месте на вкладке Standard.

Form


Компонент Memo имеет свойство под названием Lines. Оно схоже со свойством Caption у компонента Label. Найдите это свойство в инспекторе объектов и нажмите на кнопочку с тремя точками:

Lines


После нажатия на кнопку с тремя точками появится редактор:

Окно редактора


Сотрите всё, что написано в редакторе и создайте событие OnClick на кнопке. Объявим массив с именем mas, интервалом от 1 до 3 и типом string. Да, и еще нам нужно объявить переменную i типа integer, она нам пригодиться позже.
procedure TForm1.Button1Click(Sender: TObject);
var mas: array[1..3] of string;
i:integer;
begin
...
Сейчас запишем в наши воображаемые вагоны массива значения:
mas[1]:='Первая строка';
mas[2]:='Вторая строка';
mas[3]:='Третья строка';
А сейчас выводим второй элемент массива в Label и все 3 элемента в Memo.

В лабел:
Label1.Caption:=mas[2]; //Лабел отобразит содержимое второго элемента массива
Теперь, для того чтобы вывести все 3 значения в Memo, нужно воспользоваться циклом For:
for i:=1 to 3 do
Memo1.Lines.Add(mas[i]);
Так как в теле цикла выполняется всего одна строка, то можно опустить ключевые слова begin и end.
Строка Memo1.Lines.Add(mas[i]); при первом круге цикла добавит в memo первый элемент массива, так как переменная i равна 1. При втором круге переменная i равна 2 и строка Memo1.Lines.Add(mas[i]); добавит второй элемент массива. Точно так же и с третьим.

Общий вид программы:
procedure TForm1.Button1Click(Sender: TObject);
var mas: array[1..3] of string;
i:integer;
begin
mas[1]:='Первая строка';
mas[2]:='Вторая строка';
mas[3]:='Третья строка';

Label1.Caption:=mas[2]; //Лабел отобразит содержимое второго элемента массива

for i:=1 to 3 do
Memo1.Lines.Add(mas[i]);
end;
Без цикла For вывод элементов массива осуществлялся бы таким образом:
Memo1.Lines.Add(mas[1]);
Memo1.Lines.Add(mas[2]);
Memo1.Lines.Add(mas[3]);
Нам придется долго копировать и изменять номер элемента, если их будет сто, а бывает и больше тысячи! Цикл же помогает справиться с этим, всего ценой двух строчек.

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

Задание на закрепление: заполните массив из 100 чисел при помощи цикла for, выведите в memo числа 20, 50, 70 из массива при помощи цикла for и условия в нём.

Ну вот и всё! Удачи!
Встретимся в следующем уроке!




Добавил(а): delfiSkin Дата: 2013-05-18
почему я уже 2 раза пытаюсь отправить большой комментарий и у меня не получается?



Добавил(а): delfiSkin Дата: 2013-05-18
Что значит строка Memo1.Lines.Add(mas[i])?верней что значит lines и add? Допустим когда я пишу if then else я понимаю что пишу если то иначе а вот что значит та строка? я написал программу на закрепление но у меня выскачила ошибка,думаю из-за не знания перевода. вот код программы: procedure TForm1.Button1Click(Sender: TObject); var mas: array [1..100] of integer; i: integer; begin mas[1]:=20; mas[2]:=50; mas[3]:=70; for i:=1 to 3 do Memo1.Lines.Add(mas[i]); end; end.



Добавил(а): delfiSkin Дата: 2013-05-18
выскакивает вот такая ошибка :*********************** пишу звездочками потому что она не отправляется!! Я думаю что она намекает на то,что в Memo1.Lines.Add(mas[i]); в этой строке нужен тип стринг но мне же ведь надо вывести числа,мне кажется что дело в том что lines.add выводит только текст в мемо,а что надо писать для числа?Хотя возможно мне только кажется,вообще прошу помочь,указать на ошибку.



Добавил(а): Klesh Дата: 2013-05-18
Да параметром Memo1.Lines.Add() является строка, а тот массив который ты объявил (mas) имеет тип integer. Есть такая функция, IntToStr(a: integer), она переводит число в строку, также есть и обратная StrToInt(a: String), она в свою очередь переводит строку с число. Дак вот тебе нужно сделать так: Memo1.Lines.Add(IntToStr(mas[i]));



Добавил(а): delfiSkin Дата: 2013-05-19
Когда я писал 1 комментарий,я писал что возможно надо использовать функцию inttostr ,но я не стал этого делать так.как подумал что мне в мемо оно будет выводить двадцать пятьдесят и тд. а не 20 50.. Напутал я) .Спасибо за помощь) и отдельное спасибо за strtoint )об этом в уроках не упоминалось как я помню.



Добавил(а): delfiSkin Дата: 2013-05-19
Когда я писал 1 комментарий,я писал что возможно надо использовать функцию inttostr ,но я не стал этого делать так.как подумал что мне в мемо оно будет выводить двадцать пятьдесят и тд. а не 20 50.. Напутал я) .Спасибо за помощь) и отдельное спасибо за strtoint )об этом в уроках не упоминалось как я помню.



Добавил(а): Asyanya Дата: 2013-06-06
Так и не поняла, как выполнить задание с помощью цикла for...



Добавил(а): Tuxuman Дата: 2013-09-29
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btn1: TButton; mmo1: TMemo; lbl1: TLabel; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var mas: array[1..100] of string; i:Integer; begin mas[1]:=IntToStr(20); mas[2]:=IntToStr(50); mas[3]:=IntToStr(70); for i:=1 to 1 do mmo1.Lines.add(mas[1]); mmo1.Lines.add(mas[2]); mmo1.Lines.add(mas[3]); end; end. мб так?



Добавил(а): adex348 Дата: 2013-10-22
Ты походу не правильно понял функцию цикла for, он запускает код внутри цикла с начальным значением которое ты задал и прибавляя по 1 каждый раз запускает его заново, до тех пор пока не достигнется конечное значение(которое тоже нужно задать). Цикл по заданию должен выглядеть примерно так: for i:=1 to 100 do begin mas[i]:=i;if (mas[i]=20) or (mas[i]=50) or (mas[i]=70) then Memo1.Lines.add(InttoStr(mas[i]); else continue; end;



Добавил(а): Shik007 Дата: 2013-10-29
Cделал вторую кнопку к этой программе с кодом для очистки содержимого компонента Memo после завершения работы цикла. Выглядит это так: procedure TForm1.Button2Click(Sender: TObject); begin memo1.Lines.Clear; end;



Добавил(а): sema- 2014 Дата: 2013-12-05
А я, что то вообще ничего не понял... зачем нужно было открыть редактор? ,чтоб стереть надпись Memo1? Всё перемешалось в голове и вошёл в ступор, еле, еле с циклами разобрался, а тут массив... в общем наступление остановлено, отброшен снова к началу, в голове каша, запутался окончательно.... может как то по подробней, без спешки?



Добавил(а): hess2222 Дата: 2015-05-14
Я не понял этого задания, хоть убейте(((



Добавил(а): hess2222 Дата: 2015-05-14
Разберите пожалуйста!!!!



Добавил(а): Aleksandr-Slah Дата: 2015-07-06
http://s019.radikal.ru/i634/1507/fd/3b5376d7dcac.png Вот сделал!



Добавил(а): Nester_Novopolotsk Дата: 2016-03-11
задачка на закрепление хорошая. не очень и сложная. немножко мозгами нужно пошевелить



Добавил(а): Lawren Дата: 2016-04-04
Очень хорошие уроки, большое спасибо автору. Давно искал что то подобное. Задания сначала стараюсь сделать сам, потом смотрю как делали другие. В этом создал два цикла for..do, в первом заполняю массив из 100 элементов через IntToStr, во втором произвожу выборку элементов по условию. for i := 1 to 100 do mas[i] := IntToStr(i); for i := 1 to 100 do if (i = 20) or (i = 50) or (i = 75) then Memo1.Lines.Add(mas[i]);


    No results found.
Отменить.