Семинар 4

Задание 1. Сформировать новый массив, содержащий элементы исходного массива, значения которых удовлетворяют определенному условию.

1. Постановка задачи

Дано. Одномерный массив чисел.

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

При:

· Число элементов N<=20.

· Значения элементов – целые числа.

2. Связь

Присвоить начальные значения переменным:

· I - (текущий номер элемента массива) – 1;

· Nb – ( число элементов в новом массиве) – 0.

Рассмотрим элемент исходного массива A. Присвоим переменной FlagFound значение “ложь” и переменной J значение 1. Сравним элемент A[I] с элементами массива A. Если найден элемент A[J] такой, что A[I] = A[J] и I <> J, то присвоим переменной FlagFound значение “истина” и закончим сравнение, в противном случае проверим условие, если J<= N ,то перейдем к следующем элементу массива J := J+1. Если J> N, то занесем значение A[I] в новый массив (Nb:=Nb+1, B[Nb]:= A[I]).

Если I< N, то перейти к следующему элементу массива A ( I:=I+1). Если I>N, то проверить условие, если Nb > 0 - вывести новый массив B , в противном случае вывести сообщение “В массиве A нет неповторяющихся значений”.

3. Внешняя спецификация.

Назначение:

Сформировать новый массив, содержащий те элементы исходного массива, значения которых встречаются в нем один раз.

Входн. данные:

N – число элементов в массиве.

A1, A2… AN – значения элементов массива.

Вых. данные.

НЕ нашли? Не то? Что вы ищете?

1. В массиве A есть неповторяющиеся значения.

Сформировать новый массив, содержащий те элементы исходного массива, значения которых встречаются в нем один раз.

Число элементов массива A <=20 <N>

Значения элементов массива A – целые числа

<A1>

.

.

<AN>

В массиве A <N> элементов

<A1> <A2> … <AN>

В массиве B <Nb> элементов

<B1> <B2> … <BNb>

2. В массиве A нет неповторяющихся значений.

Сформировать новый массив, содержащий те элементы исходного массива, значения которых встречаются в нем один раз.

Число элементов массива A<=20 <N>

Значения элементов массива A– целые числа

<A1>

.

.

<AN>

В массиве A <N> элементов

<A1> <A2> … <AN>

В массиве A нет неповторяющихся значений.

Запись алгоритма на РАЯ

Алгоритм " Сформировать новый массив, содержащий те элементы исходного массива, значения которых встречаются в нем один раз".

Внутренние переменные :
N: цел. {количество элементов массива A}
A[1 .. 20] : цел. {Исходный массив }
Nb : цел. { количество элементов массива B }

B[1 .. 20] : цел. {Новый массив }

I, J : цел. {текущие номера элементов массива}

FlagFound : Лог.{Эта переменная логического типа!}
Начало

Вывод (‘Сформировать новый массив, содержащий те элементы исходного массива, значения которых встречаются в нем один раз’)
Вывод ('Число элементов массива А <=20')
Ввод (N)
Вывод ('Значения элементов массива A – целые числа')
Цикл - для  I  от 1 до N
Ввод (A[I])
Кцикл

Вывод (‘В массиве A ’, N, ‘ элементов’)

Цикл - для  I  от 1 до N
Вывод (A[I])
Кцикл

Цикл - для  I от 1 до N

{Переменная FlagFound может принимать одно из двух значений “истина” или “ложь”. Переменная FlagFound принимает значение “истина” , если в массиве найден элемент равный элементу A[I]. }

FlagFound:= “ложь”

{Сравниваем элемент A[I] с каждым элементом массива A, пока не найдем значение, равное A[I]. Условие I<>J нужно для того, чтобы исключить сравнение элемента A[I] с самим собой. }

J:=1

Цикл-пока (J<=N) и ( не FlagFound)

Если (A[I]= A[J]) и (I<>J) то

FlagFound:= “истина”

Иначе J:=J+1

Кесли

Кцикл

Если не FlagFound то

{Значение A[I] входит в массив один раз.}

Nb:=Nb+1

B[Nb]:= A[I]

Кесли

Кцикл

Если Nb >0 то

Вывод (‘В массиве B ’, Nb, ‘ элементов’)

Цикл - для  I  от 1 до Nb
Вывод (B[I])
Кцикл

Иначе

Вывод (‘В массиве A нет неповторяющихся значений’)

Кесли

Конец

Тест для проверки алгоритма

Тест 1

Число элементов массива ANa =10

Массив A

Число элементов массива BNb =4

Массив B

Задание 2. Удалить из массива все элементы с заданным значением.

1. Постановка задачи

Дано. Одномерный массив чисел и значение Value.

Требуется. Удалить из массива все элементы, значение которых равно Value.

При:

· Число элементов N<=20.

· Значения элементов – целые числа.

· Значение Value – целое число.

2. Связь

Присвоить начальные значения переменным:

· I - (текущий номер элемента массива) - N.

· Kol – (количество удаленных элементов) – 0.

Для каждого элемента массива проверить условие. Если A[I]= Value , то сдвинуть влево все элементы массива, начиная с элемента с номером I+1 и заканчивая элементом с номером N-1. Увеличить значение переменной Kol на 1(Kol:=Kol+1).

Если I>1 , то перейти к следующему элементу массива - I:=I-1, в противном случае определить новое число элементов в массиве (N:=N-Kol) и вывести значения элементов массива.

3. Внешняя спецификация.

Назначение:

Удалить из массива все элементы с заданным значением.

Входн. данные:

N – число элементов в массиве.

A1, A2… AN – значения элементов массива.

Value – значение, которое удаляется из массива.

Вых. данные.

Удалить из массива все элементы с заданным значением.

Число элементов массива <=20 <N>

Значения элементов массива – целые числа

<A1>

.

.

<AN>

Значение переменной Value = <Value>

В исходном массиве <N> элементов

<A1> <A2> … <AN>

В преобразованном массиве <N> элементов

<A1> <A2> … <AN>

4. Запись алгоритма на РАЯ

Алгоритм " Удалить из массива все элементы с заданным значением".

Внутренние переменные :
N: цел. {количество элементов массива}
A[1 .. 20] : цел. {одномерный массив, в котором можно разместить от 1 до 20 элементов - целых чисел}
Value : цел. {значение, которое удаляется из массива}

Kol: цел. {количество элементов, удаленных из массива}

I, J : цел. {текущие номера элементов массива}
Начало

Вывод (‘Удалить из массива все элементы с заданным значением’)
Вывод ('Число элементов массива <=20')
Ввод (N)
Вывод ('Значения элементов массива – целые числа')
Цикл - для  I  от 1 до N
Ввод (A[I])
Кцикл

Вывод (‘Значение переменной Value равно ’)

Ввод (Value)

Вывод (‘В исходном массиве ’, N, ‘ элементов’)

Цикл - для  I  от 1 до N
Вывод (A[I])
Кцикл

Kol:=0

{Внимание!! Массив рассматривается, начиная с последнего элемента.}

Цикл - для  I от N до 1

Если A[I]=Value то

{Сдвиг элементов массива влево}
Цикл - для  J от I до N-1

A[J]:=A[J+1]

Кцикл

{Определение количества элементов, удаленных из массива}

Kol:=Kol+1

Кесли
Кцикл

{Количество элементов в массиве после удаления}

N:=N-Kol

Вывод (‘В преобразованном массиве ’, N, ‘ элементов’)

Цикл - для  I  от 1 до N
Вывод (A[I])
Кцикл

Конец

5. Тест для проверки алгоритма

Тест 1

Число элементов массива - N=5

Исходный массив 3 -3 2 3 7 3

Значение Value - 3

Преобразованный массив

Задача для самостоятельной работы

1. Сформировать новый массив, включив в него элементы, имеющие нечетные значения в исходном массиве.

2. Сформировать новый массив, включив в него элементы, встречающиеся в исходном массиве не более 2-х раз.

3. Разработать программу для вставки в массив элементов с заданным значением перед каждым положительным элементом массива.

4. Разработать программу для удаления из массива элементов с отрицательными значениями.

5. Найти номер первого положительного элемента массива.

6. Найти номер последнего отрицательного элемента массива.

7. Определить сумму значений элементов массива, расположенных перед первым элементом массива с нулевым значением.

8. Определить сумму значений элементов массива, расположенных после первого элементом массива с нулевым значением.