Продолжение, начало см. МК №3, 8, 16, 27, 29, 31 (226, 231, 239, 250, 252, 254). Настал черед очередного урока по программированию. Так что усаживайтесь удобнее и готовьтесь решить целый мешок задач :-)…

По традиции, начнем с домашнего задания. Ну как, сложные были задачи? Еще бы, я так старался, подобрал аж три штуки. Поехали.

Задача №25

Определить сумму четных строк и произведение нечетных столбцов массива размерностью 56. Вывести на экран таблицу и результаты.

Решить задачу нетрудно, но надо помнить, что произведение нечетных столбцов — огромное число. Максимальное значение, которое оно может принимать (если все числа равны 10) — 1015. Ни Integer, ни LongInt не поддерживают такие большие числа. Потому приходится использовать тип Real. Кстати, в условии не сказано, что числа в массиве должны быть из промежутка от 1 до 10. Поэтому, если вы не сделали домашнее задание, то по крайней мере переделайте мое решение так, чтобы массив заполнялся еще и отрицательными числами (как это сделать, я писал ранее), причем из большего диапазона. Но будьте осторожны, возможно, не хватит даже типа Real — в этом случае используйте тип Double.

Еще не забудьте переменной, содержащей произведение нечетных столбцов (в моем случае —proizv), в начале программы присвоить значение 1. Ведь каждая переменная имеет начальное значение 0, а при умножении на ноль мы получим ноль.

uses Crt; // Подключаем модуль Crt к программе var mas: array[1..5,1..6] of Integer; // Объявляем массив i, j, sum: Integer; // Объявляем переменные proizv: real; begin Clrscr; // Очищаем экран Randomize; // Инициализируем генератор случайных чисел proizv := 1; for i := 1 to 5 do begin for j := 1 to 6 do begin mas[i,j] := Random(10) + 1; // Заполняем массив случайными числами if i mod 2 = 0 then Inc(sum, mas[i,j]); // Определяем сумму четных строк if j mod 2 = 1 then proizv := proizv * mas[i,j]; // Определяем произведение нечетных столбцов write(mas[i,j]:5); // Выводим таблицу на экран end; writeln; end; writeln; writeln('Сумма четных строк = ', sum); writeln('Произведение нечетных столбцов = ', proizv); repeat until keypressed; end.

Задача №26

Составить программу решения ввода всех четырехзначных чисел, в которых сумма двух левых разрядов равна сумме двух правых.

Существует несколько способов решить эту задачу. Я покажу вам самый простой из них.

uses Crt; // Подключаем модуль Crt к программе var i, i1, j, j1: Integer; // Объявляем переменные begin clrscr; // Очищаем экран for i := 1 to 9 do // Тысячи begin for i1 := 0 to 9 do // Сотни begin for j := 0 to 9 do // Десятки begin for j1 := 0 to 9 do // Единицы begin if i+i1 = j+j1 then write(i*1000+i1*100+j*10+j1:5); end; end; end; end; repeat until keypressed; end.

Просто, да? Главное, не забывайте, что цифра, обозначающая тысячи, не может равняться нулю, иначе мы получим трехзначное число.

Задача №27

Принять с клавиатуры и запомнить в массиве пять чисел. Затем для каждого из них вычислить Y=3.14x^2 и Z=3.14(2x), где x — число из массива. Полученные результаты построчно вывести на экран.

С этой задачей у вас не должно было возникнуть трудностей. Давайте сравним ваши решения с моим:

uses Crt; // Подключаем модуль Crt к программе var i: integer; // Объявляем переменные y, z: Real; mas: array[1..5] of integer; // Объявляем массив begin clrscr; // Очищаем экран writeln('Введите 5 чисел:'); for i := 1 to 5 do read(mas[i]); // Считываем с клавиатуры пять чисел writeln('Y = 3.14x^2 & Z = 3.14(2x)'); for i := 1 to 5 do begin // Далее вычисляем Y и Z: y := 3.14*mas[i]*mas[i]; z := 6.28*mas[i]; writeln('Y = ', y, ' Z = ', z); end; repeat until keypressed; end.

Наконец-то мы разобрались с домашним заданием — теперь можно приступать к новым задачам…

Задача №28

Линейный массив размерностью K заполнить целыми случайными числами из промежутка от 30 до 90. Отпечатать элементы массива в строку. Составить программу нахождения максимального элемента, используя подпрограмму нахождения большего из двух чисел.

Я решил это задание двумя способами. В первом случае максимальный элемент определяется при заполнении массива, иначе говоря — не отходя от кассы :-). Во втором я следовал условию, то есть использовал подпрограмму. Какой способ лучше? Трудно сказать — хотя первый и проще, но иногда лучше использовать второй. В общем, ориентируйтесь по ситуации.

Первый способ:

uses Crt; // Подключаем модуль Crt к программе var mas: array[1..1000] of 30..90; // Объявляем массив k, i, max, n: Integer; // Объявляем переменные begin clrscr; // Очищаем экран Randomize; // Инициализируем генератор случайных чисел writeln('Введите размерность массива:'); Read(k); // Считываем с клавиатуры размерность массива for i := 1 to k do begin mas[i] := Random(61) + 30; // Заполняем массив write(mas[i]:3); if mas[i] > max then max := mas[i]; // Находим максимальный элемент end;

Второй:

n := 1; for i := 2 to k do begin if mas[n] < mas[i] then n := i; // Сравниваем два элемента массива end; writeln; Writeln('Max = ', max, ' (', mas[n], ')'); // Выводим результат на экран repeat until keypressed; end.

Приступим к следующей задаче:

Задача №29

Заполнить линейный массив размерностью N целыми случайными числами из интервала от -10 до 15. Отпечатать элементы массива в строку. Найти среднее значение элементов массива. Далее найти элемент массива, наиболее близкий к среднему значению, и вывести его номер.

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

uses Crt; // Подключаем модуль Crt к программе var mas: array[1..300] of Integer; // Объявляем массив n, i: Integer; // Объявляем переменные sred, razn, a: Real; begin clrscr; // Очищаем экран Randomize; // Инициализируем генератор случайных чисел writeln('Введите размерность массива:'); Read(n); // Считываем с клавиатуры размерность массива for i := 1 to n do begin mas[i] := Random(26) — 10; // Заполняем массив write(mas[i]:4); sred := sred + mas[i]; // Подсчитываем сумму всех элементов массива end; writeln; sred := sred/n; // Вычисляем среднее значение writeln('Среднее значение = ', sred, ' (', Round(sred), ').'); write('Номер элемента: '); razn := 30; // Далее находим наиболее близкий среднему значению элемент: for i := 1 to n do begin a := Round(abs(sred-mas[i])); if a < razn then razn := a; end; for i := 1 to n do if Round(abs(sred-mas[i])) = razn then write(i, ' '); // Печатаем номер этого элемента repeat until keypressed; end.

Как же я вычислил наиболее близкий к среднему значению номер элемента? Всего лишь нашел модуль разности среднего значения с каждым элементом массива. Чем меньше разность, тем ближе элемент к среднему значению.

Ладно, не буду вас больше терроризировать своими загадками :-). Вот только задам домашнее задание. Не пугайтесь, всего одна задачка:

Задача №30

Составить программу вывода на экран N-го символа заданного текста.

До следующей встречи на страницах МК!

(Продолжение следует)