Урок 6 - Одномерные массивы
Представьте себе поезд, у которого есть определенное количество вагончиков.
У каждого вагона есть номер и внутри каждого, пронумерованного вагона можно хранить информацию.
Дак вот массив примерно так и выглядит, только он не поезд :)
Массив записывается туда же, куда мы записываем обычные переменные.
Синтаксис:
var имя массива: array[интервал] of тип;Теперь открываем Delphi и кидаем на форму компонент Button, Label и Memo. Компонент Memo находится на 6 месте на вкладке Standard.
Компонент Memo имеет свойство под названием Lines. Оно схоже со свойством Caption у компонента Label. Найдите это свойство в инспекторе объектов и нажмите на кнопочку с тремя точками:
После нажатия на кнопку с тремя точками появится редактор:
Сотрите всё, что написано в редакторе и создайте событие 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.