Одномерные массивы целых чисел
До сих пор мы работали с простыми типами данных. Для решения многих практических задач из простых типов образуют составные типы данных, так называемые структуры данных. Примером такой структуры является одномерный массив.
Массив — это совокупность фиксированного количества однотипных элементов, которым присвоено общее имя. Доступ к отдельному элементу массива осуществляется по его номеру (индексу).
С подобными объектами — числовыми последовательностями — вы уже встречались на уроках математики. Например, члены арифметической прогрессии обозначались так: а1, а2, а3, . аn.
Размерность массива — это количество индексов, необходимое для однозначного доступа к элементу массива. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д.
Решение разнообразных задач, связанных с обработкой массивов, базируется на использовании таких типовых алгоритмов, как:
• суммирование значений элементов массива;
ЧТО ТАКОЕ МАССИВЫ | ОДНОМЕРНЫЙ МАССИВ C# ПРИМЕРЫ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 24
• поиск элемента с заданными свойствами;
Описание массива
Перед использованием в программе массив должен быть описан, т. е. должно быть указано имя массива, количество элементов массива и их тип. Это необходимо для того, чтобы выделить участок памяти нужного размера для хранения массива. Общий вид описания одномерного массива:
Здесь описан массив а из 10 целочисленных значений. При выполнении этого оператора в памяти компьютера будет выделено место для хранения десяти целочисленных переменных.
Массив, элементы которого имеют заданные начальные значения, может быть описан в разделе описания констант:
В этом случае не просто выделяются последовательные ячейки памяти — в них сразу же заносятся соответствующие значения.
Заполнение массива
Заполнять массив можно, либо вводя значение каждого элемента с клавиатуры, либо присваивая элементам некоторые значения в программе. При этом может использоваться цикл с параметром.
Например, для ввода с клавиатуры значений элементов описанного выше массива а используется следующий цикл с параметром:
Задавать значения элементов массива можно с помощью оператора присваивания. Например:
Создание и заполение массива на Си
В следующем фрагменте программы организовано заполнение целочисленного массива а, состоящего из 10 элементов, случайными числами, значения которых изменяются в диапазоне от 0 до 99:
Вывод массива
Во многих случаях бывает полезно вывести значения элементов массива на экран. Так, если значения массива генерировались случайным образом, то необходимо знать, каков исходный массив. Также нужно знать, каким стал массив после обработки.
Значения элементов массива можно вывести в строку, разделив их пробелом:
Более наглядным является следующий вариант вывода элементов массива с пояснениями в столбик:
На основании рассмотренных примеров запишем программу, в которой осуществляется: заполнение целочисленного массива а, состоящего из 10 элементов, случайными числами, значения которых изменяются в диапазоне от 0 до 99; вывод массива а на экран.
Вычисление суммы элементов массива
Пример . В некотором населённом пункте я домов. Известно, сколько людей проживает в каждом из домов. Составим алгоритм подсчёта количества жителей населённого пункта.
Исходные данные (количество жильцов) здесь представлены с помощью одномерного массива а, содержащего n элементов: a[1] — количество жильцов дома 1, а[2] — количество жильцов дома 2, . а[n] — количество жильцов дома n. В общем случае a[i] — количество жильцов дома n, где i принимает целочисленные значения от 1 до n (кратко обозначим это в блок-схеме как
Результат работы алгоритма обозначен через s.
Суммирование элементов массива осуществляется по тому же принципу, что и суммирование значений простых переменных: за счёт поочерёдного добавления слагаемых:
1) определяется ячейка памяти (переменная s), в которой будет последовательно накапливаться результат суммирования;
2) переменной s присваивается начальное значение 0 — число, не влияющее на результат сложения;
3) для каждого элемента массива из переменной s считывается её текущее значение и складывается со значением элемента массива; полученный результат присваивается переменной s.
Источник: skobelevserg.jimdofree.com
Урок 4 — Одномерные массивы
В каком-то смысле с массивами можно работать, как и с обычными переменными, но представьте, например ситуацию, когда необходимо заполнить массив, состоящий из десятков или тысяч элементов. Это будет удобней сделать посредством цикла. Следующая конструкция заполняет массив числами и выводит их на экран.
for i:=1 to n do begin mas[i]:=i; write(mas[i]:3); end;
Если необходимо, чтобы массив состоял из значений, введенных с клавиатуры, то просто замените присвоение на оператор read . Также бывают ситуации, когда требуется заполнить массив случайными числами. Программа ниже поочередно присваивает каждому элементу случайную величину.
program array_random; uses crt; var i: integer; mas: array[1..100] of integer; begin clrscr; randomize; for i:=1 to 100 do begin mas[i]:=random(10); write(mas[i]:2); end; readkey; end.
Широко распространены задачи связанные с разного рода алгоритмами применимыми к массивам. Среди них особенно популярны методы поиска и сортировки элементов. К числу менее сложных и в тоже время востребованных относятся методы определения количества положительных и отрицательных, минимального и максимального элементов. Рассмотрим их. Поиск максимального элемента в массиве:
program array_max; uses crt; type massiv=array[1..10] of word; var i, max: integer; A: massiv; begin clrscr; for i:=1 to 10 do begin write(‘Элемент №’,i:2,’=’); read(A[i]); end; max:=A[1]; for i:=1 to 10 do if max
Для того чтобы сделать программу для поиска минимального элемента нужно всего лишь поменять знак . Определение количества положительных элементов:
program array_pol; uses crt; var i, k: integer; mas: array[1..10] of integer; begin clrscr; randomize; for i:=1 to 10 do begin mas[i]:=random(40)-20; writeln(‘Элемент №’,i:2,’=’, mas[i]:3); end; k:=0; for i:=1 to 10 do if mas[i]>=0 then k:=k+1; writeln; write(k:3, ‘ положительных элементов’); readkey; end.
Также как и в предыдущей программе, для нахождения отрицательных чисел необходимо просто поменять знак.
Предыдущий урок | Список уроков | Следующий урок |
Источник: pro-prof.com
Урок 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 и условия в нём.
Ну вот и всё! Удачи!
Встретимся в следующем уроке!
почему я уже 2 раза пытаюсь отправить большой комментарий и у меня не получается?
Что значит строка 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.
выскакивает вот такая ошибка :*********************** пишу звездочками потому что она не отправляется!! Я думаю что она намекает на то,что в Memo1.Lines.Add(mas[i]); в этой строке нужен тип стринг но мне же ведь надо вывести числа,мне кажется что дело в том что lines.add выводит только текст в мемо,а что надо писать для числа?Хотя возможно мне только кажется,вообще прошу помочь,указать на ошибку.
Да параметром Memo1.Lines.Add() является строка, а тот массив который ты объявил (mas) имеет тип integer. Есть такая функция, IntToStr(a: integer), она переводит число в строку, также есть и обратная StrToInt(a: String), она в свою очередь переводит строку с число. Дак вот тебе нужно сделать так: Memo1.Lines.Add(IntToStr(mas[i]));
Когда я писал 1 комментарий,я писал что возможно надо использовать функцию inttostr ,но я не стал этого делать так.как подумал что мне в мемо оно будет выводить двадцать пятьдесят и тд. а не 20 50.. Напутал я) .Спасибо за помощь) и отдельное спасибо за strtoint )об этом в уроках не упоминалось как я помню.
Когда я писал 1 комментарий,я писал что возможно надо использовать функцию inttostr ,но я не стал этого делать так.как подумал что мне в мемо оно будет выводить двадцать пятьдесят и тд. а не 20 50.. Напутал я) .Спасибо за помощь) и отдельное спасибо за strtoint )об этом в уроках не упоминалось как я помню.
Так и не поняла, как выполнить задание с помощью цикла for.
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 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. мб так?
Ты походу не правильно понял функцию цикла 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;
Cделал вторую кнопку к этой программе с кодом для очистки содержимого компонента Memo после завершения работы цикла. Выглядит это так: procedure TForm1.Button2Click(Sender: TObject); begin memo1.Lines.Clear; end;
А я, что то вообще ничего не понял. зачем нужно было открыть редактор? ,чтоб стереть надпись Memo1? Всё перемешалось в голове и вошёл в ступор, еле, еле с циклами разобрался, а тут массив. в общем наступление остановлено, отброшен снова к началу, в голове каша, запутался окончательно. может как то по подробней, без спешки?
Источник: thedelphi.ru