Домашняя работа:
Единственная задача, которую я напечатаю - №2, все остальные делайте сами, а если не получится -
пишите.
Моего внимания заслужила задача by Agel Nash
uses Crt;
Var
t,b: byte;
BEGIN
clrScr;
b:=1;
for t:=0 to 255 do
begin
Write(t,' - "',chr(t),'"');
WriteLn;
if t=23*b then
begin
readkey;
b:=b+1;
clrScr;
end;
end;
END.
Ustas[CPM] >>>
Далее следует диалог между MedL[CPM]ом(М:)
& v()v@#[CPM]ом(V:)
М: Сегодня речь пойдет о такой замечательной
вещи, как массив, или, синоним, матрица. Вообще, не понятно в честь чего назван
фильм "Матрица", ведь, как ни крути, почти ничего общего он с массивом не имеет.
V: Ведь НЕО был программером, а он уж точно
знал, что такое матрица. Из курса математики или информатики?
s М: 8). Впрочем, это не так уж важно. Давайте
попробуем представить, что ЭТО такое(никаких параллелей с Морфеусом!!).
V: Да, действительно, мы тут рассылку делать
собираемся или просто посидеть про Матрицу побазарить собрались????
М: Вообще, запоминаем 8) : массив - это
сборище значений, каждому из которых присвоено своё имя. Имя обычно означает
номер с начала массива.
V: Врёт... Массив - это, во-первых, место
в памяти. Представим себе ситуацию: нам надо сохранить кучу значений одного
типа. Для этого мы можем сделать кучу переменных, но это неудобно. Например,
нам надо посчитать средний бал по информатике в классе. Мы для этого просим
ввести кол-во учеников и рассчитываем среднее арифметическое. Но, допустим,
что у нас стоит задача не только посчитать среднее значение, но ещё и сохранить
оценку каждого школьника в памяти. Сложность: мы заранее не можем узнать, сколько
переменных надо определить.
М: Чтобы проще понять понятие "массив" -
представьте себе паровоз (электричку и пр.), и в каждом вагоне сидит разное
количество людей. Каждый вагон - одна переменная массива, а количество людей
в нем - значение этой переменной.
V: Да, вот вы представили себе паровоз (електричку
и пр.(обязательно с вагонами)). Но как мы узнаем, сколько людей сидит в каждом
из вагонов? Всё.. запутался я со всеми этими вагонами, поездами, людьми. Буду
переходить непосредственно к массивам. Массив должен быть определён в разделе
объявления переменных, содержать переменные одного типа. Объявление массива:
var
[имя массива]: array[x..y] of [тип переменных];
........
Тут х - номер первого элемента массива, у - номер последнего.
Примеры пусть пишет MedL, сам напросился. Кричит тут: "Примеры им давай, они тебя не понимают!!!"
М: *******-приколист... Примеры:
var
A: array[1..5] of byte;
matrix: array[1..1000] of integer;
nichegonepoluchaitsya: array[7..7] of extended;
Первый массив - массив из 5 членов, причем все они одного типа byte. Аналогично второй. А третий...
V: Третий просто врядли будет работать, хоть это не проверялось. И вообще человек - это такое ленивое существо, которое делает всё только если очень захочется, или знает волшебное слово НАДО. Насчёт памяти, которую занимает каждый из массива. Я тут прикинул: под первый пойдёт 5 байт, под второй - 2000, под третий - не проверял.
Также можно определять "безразмерный" массив. Просто не пишите квадратных скобок.
Допустим, что вы создали массив, но как его юзать (использовать)? Первое действие - присвоить значение какому-то элементу. Присвоение значения:
[имя массива]:=[значение];
Я вам ещё и попробую это проиллюстрировать.
a:array of integer;
1
2
3
4
5
6
7
8
9
...
52
32
-58
111
234
432
555
-999
6543
...
Если мы напишем Write(a[3]);, на экран выведется -58.
Если напишем a[4]:=1;, массив будет изменён:
1
2
3
4
5
6
7
8
9
...
52
32
-58
1
234
432
555
-999
6543
...
М: действительно ленивое 8). Даже больше чем существо. Теперь представьте себе, что у Вас 100 элементов в массиве, и каждый элемент нужно заполнить. Неприятное занятие, но в этом деле есть маленькая хитрость.
V: Имя этой хитрости - цикл. И не простой цикл, а цикл с заданным кол-ом повторений. Мы любители поиздеваться и напишем так:
uses crt;
const n=100;
var
a:array[1..n] of word;
i:byte;
begin
clrscr;
for i:=1 to n do
begin
write('Введите ',i,' элемент массива: ');
readln(a[i]);
end;
WriteLn('Вы первый, кто ввёл столько элементов вручную.');
readkey;
end.
М: как видите, осталось только ввести 100 элементов, и золотой ключик у нас в кармане. Кстати, если вы введете число, которое не удовлетворяет тип word - вылетите. Не проверялось 8).
Работает это так:
1) определяем константу n, которая отвечает за количество элементов в массиве, что нужно в нашей проге чисто для удобства. Например, нам казали: "А сделайте, ребята, массив поменьше". Без этой константы мы лазили бы по проге в поисках мест, где упоминается кол-во элементов, а так мы просто изменяем значение константы.
2) определяем массив с n кол-ом элементов и переменную-счётчик.
3) начинаем выводить на экран n раз слова "Введите № элемента массива: " и полностью вводим массив
4) появляется веселая надпись "Вы первый, кто ввёл столько элементов вручную."
А как же все-таки сделать так, чтоб комп сам вводил эти значения??
V: Все, что нам надо переделать код, используя такую связку, как randomize; - random(x);, о которой говорилось в прошлых выпусках. Переделаем же код:
uses crt;
const n=100;
var
a:array[1..n] of word;
i:byte;
begin
clrscr;
randomize;
for i:=1 to n do
a[i]:=random(65000);
WriteLn('Массив создан и заполнен случайными числами.');
readkey;
end.
Как вывести этот массив на экран? После заполнения вставить строку:
for i:=1 to n do write(a[i],' ');
Для разминки сейчас напишем прогу.
М:
uses crt;
const n=10;
var
a:array[1..n] of integer;
i:integer;
s:integer;
begin
clrscr;
randomize;
for i:=1 to n do
a[i]:=random(2000)-1000;
for i:=1 to n do
write(A[i]:6);
s:=0;
for i:=1 to n do
s:=s+a[i];
write('Сумма всех елементов в массиве равна ', s);
readkey;
end.
V: Здесь всё аналогично. Отличия от предыдущих примероV: генерируются числа от -1000 до 1000,
другой вывод на экран, всего 10 элементов массива (жалеем машину). Очень распространённые задачи на уроках программирования:
1) заполнить массив случайными переменными, все элементы, которые содержат чётное число, заменить на меньшие (большие) в 2 (х) раза, а которые - нечётные заменить на сумму членов массива.
Если подумать, всё это достигается очень просто. У нас уже большая часть задания есть.
uses crt;
const n=10;
var
a:array[1..n] of integer;
i:integer;
s:integer;
begin
clrscr;
randomize;
for i:=1 to n do
a[i]:=random(2000)-1000;
writeln('Do:');
for i:=1 to n do
write(A[i]:6);
s:=0;
for i:=1 to n do
s:=s+a[i];
for i:=1 to n do
if a[i] mod 2 = 0 then a[i]:=a[i] div 2 else a[i]:=s;
writeln;
Writeln('Posle:');
for i:=1 to n do
write(A[i]:6);
writeln;
readkey;
end.
2)
Поиск минимального и максимального элемента массива, вывод на экран номера этого элемента.
uses crt;
const n=10;
var
i:byte;
a:array[1..n] of byte;
max,min:byte;
begin
clrscr;
randomize;
for i:=1 to n do a[i]:=random(255);
for i:=1 to n do write(a[i], ' ');
max:=1;
min:=1;
for i:=1 to n do begin
if a[i]>a[max] then max:=i;
if a[i]<a[min] then min:=i;
end;
a[min]:=a[min]+a[max];
a[max]:=a[min]-a[max];
a[min]:=a[min]-a[max];
writeln;
for i:=1 to n do write(a[i], ' ');
writeln;
writeln('min-',min,', max-',max);
readln;
end.
Заполняем масив, выводим его. Ищем номер самого маленького и самого большого элемента массива. Меняем их местами. Выводим изменённый массив, номер минимального и максимального элемента. Как работает перестановка - спросите у учителя математики, информатики.
М:
3) поиск числа в массиве
uses crt;
const N=10;
var
A:array [1..N] of integer;
i:integer;
b:integer;
flag : integer;
begin
clrscr;
randomize;
flag :=0;
for i:=1 to N do
begin
A[i]:=Random(10)
end;
for i:=1 to n do write(a[i], ' ');
textcolor(3);
writeln;
Writeln('input number');
readln(b);
for i:=1 to N do
begin
textcolor(6);
if A[i]=b then
begin
flag:=1;
textcolor(4);
write(a[i]:4);
end
else
write(A[i]:4);
end;
if flag=0
then begin
writeln;
write('There is no element in array');
end;
readkey;
end.
Задание:
Написать прогу, которая создаёт массив (10 эл-ов). Спрашивает у пользователя
о том, каким образом он хочет заполнить массив: вручную или средствами
комп. Если средствами компа, то спросить максимальное и минимальное генерируемое
число и сгенерировать в соответствии с введёнными числами. Если элемент отрицательный,
то мы заменяем его на то же самое, только со знаком +, если положительное, то
проверяем его на четность. Если оно чётное, то уменьшаем в 2 раза, если нечётное
- делаем со знаком -. Считаем кол-во чётных и нечетных, отрицательных и положительных
значений до изменения. Выводим их на экран. Выводим на экран массив: положительные
эл-ты - одним цветом, отрицательные - другим. Не забыть вывести массив до и
после изменений.
Как видите, мы не стоим на месте во всех отношениях. Особенно радует рост числа
подписчиков.
Но теперь о плохом. Мной и нашими читателями была замечена очень неприятная
особенность некоторых почтовых серверов(точнее их web-интерфейсов для работы
с почтой)- номера нашей рассылки не корректно отображаются(точнее все "черное
на черном"). Скорее всего, это связано с проблемеми с CSS - главным инструментом,
использующимся мной для оформления. В связи с этим призываю всех пользоваться
почтовыми клиентами типа The Bat и др.