Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






If <условие верно> and (a[i] < min) then






Объявляем массив A из 20 элементов.

Объявляем целочисленные переменные I, J, MIN.

В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й.

Паскаль:

const N=20;

var a: array [1..N] of integer;

i, j, min: integer;

Begin

for i: =1 to N do

readln(a[i]);

End.

Решение:

1) даже если вы хорошо владеете программированием, сначала лучше (прежде всего, для себя) написать алгоритм на русском языке

2) здесь требуется найти минимальный элемент из всех, которые имеют чётное значение и не делятся на 3

3) делимость одного целого числа на другое проверяется с помощью операции взятия остатка (в Паскале – операция mod): первое число делится на второе, если остаток от деления равен 0

4) тогда условие, определяющее отбор нужных элементов, запишется в виде

(a[i] mod 2 = 0) and (a[i] mod 3 < > 0)

5) стандартный цикл поиска минимального элемента, удовлетворяющего условию, выглядит так:

for i: =1 to N do

if < условие верно> and (a[i] < min) then

min: = a[i];

6) остается один вопрос: каким должно быть начальное значение переменной min? его нужно выбрать таким, чтобы для первого же «подходящего» элемента выполнилось условие a[i] < min, и это «временное» начальное значение было бы заменено на реальное

7) к счастью, диапазон входных чисел ограничен (от 0 до 1000), поэтому можно выбрать любое значение, больше 1000, например, 1001 или 9999[2]

8) таким образом, решение задачи на естественном языке выглядит так:

Записываем в переменную min значение 1001.
Затем в цикле просматриваем все элементы массива, с первого до последнего. Если остаток от деления очередного элемента на 2 равен 0 и остаток от его деления на 3 не равен нулю и значение элемента меньше, чем значение переменной
min, записать в переменную min значение рассматриваемого элемента массива. Затем переходим к следующему элементу.
После окончания работы цикла выводим значение переменной
min.

9) аналогичное решение на Паскале:

min: =1001;

for i: =1 to N do

if (a[i] mod 2=0) and (a[i] mod 3 < > 0) and (a[i]< min) then

min: =a[i];

writeln(min);

Возможные проблемы: · не забудьте сказать, что нужно вывести после окончания работы программы · если вы достаточно хорошо владеете русским языком для того, чтобы понятно излагать свои мысли, с точки зрения тактики рекомендуется писать алгоритм на русском языке – по крайней мере, тут не снизят за пропущенную точку с запятой · просмотрите внимательно диапазон, в котором находятся исходные числа; дело в том, что во многих языках, например, в Паскале и в Си, остаток от деления отрицательного числа на положительное – число отрицательное, например (-7) mod 3 = -1, поэтому определять, например, «неделимость» элемента массива на 3 с помощью условия a[i] mod 3 = 1 нельзя (не будет работать для отрицательных чисел), нужно использовать условие a[i] mod 3 < > 0.

Ещё пример задания:

Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа).

Решение:

1) даже если вы хорошо владеете программированием, сначала лучше (прежде всего, для себя) написать алгоритм на русском языке (или на псевдокоде – это нечто среднее между словесным алгоритмом и готовой программой)

2) по условию нужно выделить в памяти два массива одинакового размера, назовем их A и B; обозначим размер массивов через N, индексы элементов изменяются от 1 до N;

3) в цикле в каждый элемент B[i] массива B нужно записать модуль соответствующего элемента A[i] массива A, это нужно сделать для всех i от 1 до N

4) есть небольшая сложность: запрещено использовать стандартную функцию вычисления модуля; согласно определению модуля решение может быть такое: если элемент A[i] больше или равен нулю, записываем в B[i] его значение без изменений, а если меньше нуля – меняем знак, то есть, в B[i] записываем (-A[i])

5) решение в виде алгоритма на русском языке может выглядеть так:
«Выделяем в памяти второй массив того же размера. В цикле рассматриваем все элементы первого массива с первого до последнего. Если текущий элемент больше нуля или равен нулю, в соответствующий элемент второго массива записываем его значение без изменений; если текущий элемент меньше нуля, во второй массив записываем значение элемента с обратным знаком. Выводим второй массив на экран».

6) осталось написать программу, практически дословно реализующую это решение:

const N = 30;

var a, b: array[1..N] of integer;

i: integer;

Begin

for i: =1 to N do { ввод всех элементов массива с клавиатуры }

read(a[i]);

for i: =1 to N do { формирование массива B }






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.