Продолжение, начало см. МК №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-го символа заданного текста.
До следующей встречи на страницах МК!
(Продолжение следует)
