При закрытии подписчики были переданы в рассылку "RFpro.ru: Программирование на языке Pascal" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Информационный Канал Subscribe.Ru |
Так вот, наш выпуск мы начинаем с радостной вести - в команде пополнение.
История: в очередной раз поехав пить пиво, мы начали думать о будущем нашей
рассылки. И тут к нам пришла идея: с нами сидит вполне умный человек, который
даже знает, что такое Паскаль. Это был наш друг, Light. После этого мы пошли
делать этот выпуск рассылки, открывая Light’у нормальный почтовый адрес на
любимом почтовике www.bigmir.net, который тут же зарегил новый ящик –
LightCPM@bigmir.net. Этот выпуск станет для него проходным в мир Паскаля.
Сегодняшний выпуск опять будет посвящён массивам, но на этот раз нас будут
интересовать не простые, а золотые. Ой, куда меня несёт…
В общем, массивы бывают ещё 2-хмерные, 3-х- и многомерные, если так можно
выразиться.
Представим, что нам надо хранить в массиве не только рост ученика,
а ещё и его вес, возраст и пр. Для этого мы можем использовать и одномерный
массив и хранить там вес, рост, возраст первого ученика, а потом вес… второго
ученика. Но ведь это не удобно, ведь нам пришлось бы тогда считывать каждый
третий элемент. А представьте, что вам надо ввести ещё какие-либо параметры.
И тут нас выручает двухмерный массив. Чтобы «понять» его, достаточно представить
себе обычную таблицу.
С трехмерным массивом всё немного сложнее. Допустим, нам надо не только
предоставить вышеописанные данные, но и расписать их по годам: какой был вес,
рост, и т.д. ученика в 2000, 2001.. году.
Тогда нам уже нужен трёхмерный массив. Чтобы его «понять» надо представить себе
куб. С многомерными массивами всё намного сложнее, их даже представить трудно.
Попробуем привести пример многомерного массива (в данном случае трехмерного, четырехмерного и двухмерного).
Const
N=4;
Y=7;
var
A: array[1..6, 1..5, 1..7] of integer;
K: array[1..N, 1..Y, 1..4, 1..6] of real;
L: array[1..2, 1..5] of longint;
…
Как видите, многомерные массивы задаются точно так же, как и одномерные. Отличие
только между скобок 8)
Подсчитано, что первый массив займёт в памяти 6*5*7*2 байт, второй – 4*7*4*6*6
байт, а третий 2*5*4 байт.
Также можно сделать так:
Type
TMyArr = array [0..9,0..99] of word;
Var
MyArr: TMyArr;
…
Тут мы сначала объявляем тип, а потом делаем переменную данного типа, которая,
как ни странно, оказывается массивом. Теперь рассмотрим общий вид описания массива.
[Имя_массива]: [х..у, х1..у1,…, Xn..Yn] of [тип переменных массива];
Обращаться к элементу массива следует тогда так Имя_массива[2,5], если массив
двухмерный Имя_массива[2,5,8], если трёхмерный. Количество памяти, занимаемой
массивом можно посчитать по формуле, общий вид которой –
(y-x+1)*(y1-x1+1)*…*(Yn-Xn+1)*[память, занимаемая одной переменной данного типа].
Для прикола: Массив можно ещё объявить так
a:array[1..10] of array[1..10] of integer;
Тогда обращаться надо будет примерно так: a[5][4].
Для примера напишем программу , которая создаёт двухмерный массив. Пользователь
вводит в него три параметра (для примера: «Вес» ; «Рост» ; «Возраст»).
{--CUT HERE-----------------------------------------------------}
uses crt;
const
x=3;
y=5;
var
a:array [1..x,1..y] of word;
{Вводим двухмерный массив, то есть создаём таблицу X на Y,
где X и Y у нас константы}
i,j:byte;{Создаём две переменные, с помощью которых
мы будем "плавать" по массиву}
{У нас i-Параметр(1-Вес;2-Рост;3-Возраст),
j-номер девушки (хотя и не этично давать девушке номер)}
BEGIN
clrscr;
textcolor(14);{Для красоты :)}
for j:=1 to y do
{Проcьба округлять до целых, не хотелось ставить тип массива real}
begin
writeln('Вводим параметры девушки №',j);
writeln;
write('Вес(в килограммах) девушки равен ');
read(a[1,j]);{присваивает данному элементу массива значение, которое ввел User}
clrscr;
writeln('Вводим параметры девушки №',j);
writeln;
write('Рост девушки равен ');
read(a[2,j]);
clrscr;
writeln('Вводим параметры девушки №',j);
writeln;
write('Возраст девушки равен ');
read(a[3,j]);
clrscr;
end;
{Строки со звёздочками(*) можно и не вводить. }
write('Девушки ');{*}
for j:=1 to y do write('№':7,j);{*}
writeln;
for i:=1 to x do {Вывод массива на экран}
begin
if i=1 then write('Вес ');{*}
if i=2 then write('Рост ');{*}
if i=3 then write('Возраст ');{*}
for j:=1 to y do write(a[i,j]:8);
writeln;
end;
gotoXY(73,25);{Перевести курсор}
Textcolor(15);
Write('By Light');{Подпись(понты)}
gotoXY(28,12);
write('Press ANY key');
readkey;{Программа ждёт нажатия клавиши}
END.
{--CUT HERE-----------------------------------------------------}
Это первая программа Light'а в рассылке.
Теперь ещё пара программ для ясности. Но сначала предложение. Оно поступило от нашего
читателя Александра. Звучит так: устроить мини олимпиаду по Паскалю, среди подписчиков, (просто для интереса).
Жду вашего мнения. Пишите и ваши вопросы и предложения будут рассмотрены мной или кем-то
из команды.
А теперь задача: Заполнить случайным образом линейную таблицу числами в интервале от
150 до 250, имеющую 7 строк, в каждой из которых 7 чисел.
На первый взгляд прога кажется сложной, но если посмотреть внимательней, то
начинаешь понимать, что "случайным образом" - заполнить, используя генератор случайных чисел,
линейная таблица - двухмерный массив.
{--CUT HERE-----------------------------------------------------}
uses crt; {подключаем любимый модуль}
var
a:array[0..6,0..6] of 150..250; {создаём двухмерный массив,
состоящий из чисел, которые лежат в интервале от 150 до 250}
i,j:byte;
begin clrscr;
Randomize;
for i:=0 to 6 do
begin
for j:=0 to 6 do begin
a[i,j]:=random(101)+150;
{заполняем случайными числами заданного интервала}
write(a[i,j],' ');
{и сразу выводим на экран (чтоб потом не мучаться)}
end;
writeln;{каждую строку - с новой строки (:}
end;
readkey;
{задержка}
end.
{--CUT HERE-----------------------------------------------------}
Теперь понятна главная задача в программировании: не написать прогу, а понять,
что от вас требуется!!
А теперь ещё одна задача. Заполнить двухмерный массив случайными числами в интервале
от 100 до 900 размером 5х5. Посчитать сумму элементов четных столбцов, сумму элементов
нечётных строк, вывести на экран таблицу и результаты.
{--CUT HERE-----------------------------------------------------}
uses crt;
var
a:array[1..5,1..5] of 100..900;
i,j:byte;
s,s1:word;
begin
clrscr;
randomize;
s:=0;
s1:=0;
for i:=1 to 5 do begin
for j:=1 to 5 do begin
a[i,j]:=random(801)+100;
write(a[i,j], ' ');
if i mod 2 =1 then inc(s1,a[i,j]);
{если строка нечётная, то увеличиваем значение s1 на значение текущего
элемента массива}
if j mod 2 =0 then inc(s,a[i,j]);
{ если столбец чётный, то увеличиваем значение s на значение текущего
элемента массива
}
{таким образом мы находим всё, что нам надо, заодно выводя таблицу на экран}
end;
writeln;
end;
writeln('s1 = ',s1);
writeln('s = ',s);
repeat until keypressed;
end.
{--CUT HERE-----------------------------------------------------}
Я считаю, что для полного понимания темы не достаточно почитать то, что пишут
другие, содрать пару задач и сказать, что знаешь эту тему, как свои пять пальцев,
а сесть и самому написать несколько программ по теме. Для этого выкладываю
домашнее задание. Кто хочет, может - делать, кто не хочет - ему хуже, пусть тогда спросит
себя: "Зачем я читаю эту рассылку, если не хочу программировать?". Многие не могут его делать
из-за учёбы, работы, некоторые его делают, не смотря ни на что, но я почти на 100%
уверен, что 5% читателей - те, кто читает рассылку просто от скуки. Вот такая речь получилась (;
Домашнее задание:
1) Заполнить двухмерный массив 5х6 (5 строк, 6 столбцов) случайными числами (интервал
выберите сами). Посчитать сумму элементов всех столбцов, всех строк и вывести результат и таблицу на экран.
2) Заполнить двухмерный массив 7х7 случайными числами (интервал
выберите сами). Посчитать сумму элементов каждого столбца, каждой строки и вывести результат (формат строка№1 - 4662 столбец№1 - 2424) и таблицу на экран.
3) Заполнить двухмерный массив 7х7 случайными числами (интервал
выберите сами). Отсортировать каждую строку по возрастанию.
4) То же, что и 3, только отсортировать каждый столбец по убыванию
5*) Создать двухмерный массив 5х5, заполнить случайным образом, вывести на экран,
перевернуть на 90 градусов, опять вывести
6(предложена читателем)) На курсах иностранных языков имеются четыре отделения: английского, французского,
немецкого и восточных языков. Известно количество слушателей, подавших заявления
на каждое из отделений. Определить минимальное количество групп на каждом отделении,
учитывая, что в одной группе должно быть не более 20 и не менее 10 человек. Напечатать
порядковые номера групп на каждом отделении с указанием количества слушателей в каждой
из них.
На этом всё. Ответы шлите на ящик. Вопросы тоже туда.
Или на форум http://studcity.ru/forum/viewforum.php?f=10 .
Если вы уже понимаете в программировании и хотите узнать больше то
подпишитесь на рассылку "Все о Паскале". В этой рассылке вы узнаете
много нового по программированию на паскале, и некоторые аспекты
программирования в целом.
Подписаться по почте: comp.soft.prog.psc-sub@subscribe.ru
по вебу: http://subscribe.ru/catalog/comp.soft.prog.pascall
Приветствую Вас!
Я доработал дизайн. Поэтому глюков должно прибавится. Будем стараться сделать так, чтобы было и удобно и красиво.
Дизайн,верстка
и юзабилити >>>
Ustas[CPM]
Пишет >>>
v()v@#[CPM] ICQ:88880172
Тоже Пишет >>> MedL[CPM]ICQ:88883515
Пишет(новенький) >>> Light[CPM]
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||