NetNado
  Найти на сайте:

Учащимся

Учителям



Обработка массива (написать программу из 10-15 строк на языке программирования или алгоритм на естественном языке)


Тема: Обработка массива (написать программу из 10-15 строк на языке программирования или алгоритм на естественном языке).

Что нужно знать:

  • массив – это набор однотипных элементов, имеющих общее имя и расположенных в памяти рядом

  • для обращения к элементу массива используют квадратные скобки, запись A[i] обозначает элемент массива A с номером (индексом) i

  • для обработки всех элементов массива используется цикл вида

for i:=1 to N do begin

{ что-то делаем с элементом A[i] }

end;

переменная i обозначает номер текущего элемента массива, она меняется от 1 до N с шагом 1, то есть мы «проходим» последовательно все элементы

  • матрица (двухмерный массив) – это прямоугольная таблица однотипных элементов

  • если матрица имеет имя A, то обращение A[i,k] обозначает элемент, расположенный на пересечении строки i и столбца k







k




























i




A[i,k]



















  • каждая строка матрицы – это обычный (одномерный, линейный) массив; для того, чтобы обработать строку i в матрице из M столбцов, нужно использовать цикл, в котором меняется номер столбца k:

for k:=1 to M do begin

{ что-то делаем с элементом A[i,k] }

end;

  • каждый столбец матрицы – это обычный (одномерный, линейный) массив; для того, чтобы обработать столбец k в матрице из N строк, нужно использовать цикл, в котором изменяется номер строки i:

for i:=1 to N do begin

{ что-то делаем с элементом A[i,k] }

end;

Пример 1:


Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.

Паскаль:

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)

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

for i:=1 to N do

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

min := a[i];

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

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

  3. решение на Паскале:

min:=1001;

for i:=1 to N do

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

min:=a[i];

writeln(min);

Пример 2:


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

Решение:

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

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

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

  4. решение:

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 }

if a[i] < 0 then

b[i]:= -a[i]

else b[i]:= a[i];

writeln('Результат:');

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

write(b[i], ' ');

end.

  1. размер массива грамотно задавать через константу (const N = 30;), а не вписывать число в каждый цикл; тогда, если нужно будет переделать программу для массива другого размера, достаточно будет изменить всего одно число в начале программы

Пример 3:


Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30.

Решение:

  1. сначала нужно понять задачу; предположим, что в массиве есть одинаковые элементы, стоящие рядом:

    1

    1

    2

    2

    1

    1

    1

    1

    3

    3

    2

    2

  2. самая длинная цепочка стоящих рядом элементов в данном случае состоит из 4-х единиц (она выделена желтым фоном)

  3. нам нужно по крайней мере две переменных: для хранения номера текущего элемента (при обработке массива в цикле) и для хранения максимального количества идущих подряд элементов (обозначим ее kMax)

  4. в целом (пока неточный) алгоритм может выглядеть так: «пройти весь массив, подсчитывая для каждого элемента длину цепочки подряд идущих одинаковых чисел, если эта длина больше kMax, то записать ее в kMax»

  5. отсюда сразу следует, что необходима еще одна переменная (обозначим ее через k), показывающая для каждого элемента массива длину цепочки одинаковых чисел, которая заканчивается на этом элементе:




    1

    1

    2

    2

    1

    1

    1

    1

    3

    3

    2

    2

    k

    1

    2

    1

    2

    1

    2

    3

    4

    1

    2

    1

    2

    kMax

    1

    2

    2

    2

    2

    2

    3

    4

    4

    4

    4

    4

  6. следующий шаг к решению: нужно понять, как изменять переменную k при проходе по массиву; можно сделать так: если очередной элемент равен предыдущему, счетчик k увеличиваем на единицу, а если не равен – записываем в него 1 (цепочка одинаковых чисел кончилась, началась новая, в ней пока один элемент)

  7. при таком подходе проблема может возникнуть при просмотре первого элемента, потому что для него нет предыдущего; поэтому описанную выше процедуру будем в цикле применять ко всем элементам массива, начиная со второго (а не с первого); в самом начале программы запишем в k и kMax по единице – таким образом, мы «вручную» (без цикла) рассмотрели первый элемент массива

  8. программа:

const N =30;

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

i, k, kMax: integer;

begin

for i:=1 to N do readln(A[i]); { ввод массива }

k := 1; { обрабатываем A[1] }

kMax := 1;

for i:=2 to N do begin { а теперь в цикле A[2]...A[N} }

if A[i] = A[i-1] then { цепочка продолжается }

k := k + 1

else k := 1; { цепочка закончилась }

if k > kMax then kMax := k;

end;

writeln(kMax);

end.

Пример 4:


Дан целочисленный квадратный массив 10 х 10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы максимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке такой элемент единственный.

Решение:

const N=10;

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

i, k, max, Sum: integer;

begin

{ ввод матрицы N на N }

Sum := 0;

for i:=1 to N do begin

max := A[i,1];

for k:=2 to N do

if A[i,k] > max then max := A[i,k];

Sum := Sum + max;

end;

writeln(Sum);

end.

Задачи для тренировки:


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

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

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

  4. Дан прямоугольный массив целых положительных чисел 10 х 20. Опишите на русском языке или на одном из языков программирования алгоритм поиска строки с наименьшей суммой элементов. Вывести на печать номер строки и сумму ее элементов. Предполагается, что такая строка единственна.

  5. Дан квадратный массив целых положительных чисел 10 х 10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы элементов строки, в которой расположен элемент с максимальным значением. Вывести значение суммы на печать. Предполагается, что такой элемент единственный.



  1. Дан целочисленный прямоугольный массив 6x10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы минимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке минимальный элемент единственный.

  2. Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 ­– баллы, полученные на ЕГЭ. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.

    Паскаль

    Естественный язык

    const N = 30;

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

    i, x, y: integer;

    s: real;

    begin

    for i:=1 to N do readln(A[i]);

    ...

    end.

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

    Объявляются целочисленные переменные i, x и y, а также вещественная переменная s.

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

    ...

  3. Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 160 до 200 ­– рост учащихся выпускного класса. В баскетбольную команду берут тех, чей рост не менее 180 см. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит минимальный рост игрока баскетбольной команды. Гарантируется, что хотя бы один ученик играет в баскетбольной команде. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.

    Паскаль

    Естественный язык

    const N = 30;

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

    i, x, y: integer;

    s: real;

    begin

    for i:=1 to N do readln(A[i]);

    ...

    end.

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

    Объявляются целочисленные переменные i, x и y, а также вещественная переменная s.

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

    ...

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

    Паскаль

    Естественный язык

    const N=30;

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

    i, k, max, max2: integer;

    begin

    for i:=1 to N do readln(a[i]);

    ...

    end.

    Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, k, max, max2. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

    ...

  5. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер третьего положительного элемента массива (если из массива вычеркнуть все неположительные элементы, этот элемент стоял бы в получившемся массиве на третьем месте). Если в массиве меньше, чем три положительных элемента, вывести сообщение об этом. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

    Паскаль

    Естественный язык

    const N=30;

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

    i, j, k: integer;

    begin

    for i:=1 to N do readln(a[i]);

    ...

    end.

    Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, k. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

    ...

  6. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива, наименее отличающихся друг от друга. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

    Паскаль

    Естественный язык

    const N=30;

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

    i, j, min, min2, s: integer;

    begin

    for i:=1 to N do readln(a[i]);

    ...

    end.

    Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, min, min2, s. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

    ...

  7. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от
    –1000 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит среднее арифметическое всех элементов массива, оканчивающихся цифрой 5. Гарантируется, что хотя бы один такое элемент в массиве есть.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

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

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, x, y и вещественную переменную s. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

  1. Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих отрицательных элементов в целочисленном массиве длины 30.

  2. Опишите на русском языке или одном из языков программирования алгоритм вычисления среднего арифметического элементов квадратной матрицы размером 5 на 5, стоящих на главной диагонали.

  3. Дан целочисленный массив из 30 элементов, все элементы которого – положительные числа, не превосходящие 100. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер элемента, имеющего максимальное количество целочисленных делителей (если таких элементов несколько, то номер любого из них). Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них

    Паскаль

    Естественный язык

    const N=30;

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

    i,j,k,imax,kmax: integer;

    begin

    for i:=l to N do readln(a[i]);

    ...

    end.

    Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, k, imax, kmax. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

    ...

  4. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести сумму элементов массива, кратных тринадцати. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого делится на тринадцать. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

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

i,j,s: integer;

begin

for i:=l to N do readln(a[i]);

...

end.

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

Объявляем целочисленные переменные I, J, S. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

страница 1


скачать

Другие похожие работы: