МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ
Понедельник, 23.12.2024, 20:46
ГлавнаяРегистрацияВход Приветствую Вас Гость | RSS

Меню сайта

Категории раздела
Массив [2]
Одинаковые элементы в массиве [3]

Наш опрос
Какой язык программирования Вы изучаете
Всего ответов: 1029

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа


Главная » Файлы » ЗАНЯТИЕ 5 » Одинаковые элементы в массиве

Исключение одинаковых элементов массива
22.10.2012, 22:29

Исключение одинаковых элементов массива

Задача: 

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

Для упрощения задачи будем копировать значения из одного массива в другой. Если значение повторяется, то оно не копируется. Обычно массивы до заполнения не пусты, а могут быть заполнены, например, нулями. Если исходный (сжимаемый массив) содержит нули, то с учетом нижеследующего алгоритма второй массив их содержать не должен.

Алгоритм решения задачи: 

Рассмотрим непосредственно алгоритм копирования выбранных элементов.

  1. Массив под уникальные элементы заполняется значениями, которые точно не встречаются в сжимаемом массиве.
  2. Нам требуется просмотреть все элементы исходного массива (for i := 1 to n do).
  3. Будем копировать элемент и увеличивать индекс массива (s[k] := a[i]; k := k+1) только в том случае, если такого элемента нет во втором массиве.
  4. Чтобы определить, был уже такой элемент или нет, нужно просмотреть второй массив (for l := 1 to k do).
  5. И если элемент присутствует, то надо исключить его копирование.
  6. Для этого используется переменная логического типа (flag), играющая роль так называемого флага. Ей присваивается значение false.
  7. Копирование возможно лишь в том случае, если значение flag остается true. Оно таким и остается, если элемент уникален.
Программа на языке Паскаль: 
const
 n = 20;
 
var
 a: array[1..n] of integer; //сжимаемый массив
 s: array[1..n] of integer; //сжатый массив
 i,k,l: integer;
 flag: boolean;
 
begin
 randomize;
 
 for i := 1 to n do begin
 a[i] := random(10);
 write (a[i]:3)
 end;
 writeln;
 
 for i := 1 to n do
 s[i]:=-1;
 
 k := 1;
 for i := 1 to n do begin
 flag := true;
 for l := 1 to k do
 if s[l] = a[i] then
 flag := false;
 if flag = true then begin
 s[k] := a[i];
 k := k+1
 end;
 end;
 
 for i := 1 to k-1 do
 write (s[i]:3);
 
readln
end.
Категория: Одинаковые элементы в массиве | Добавил: i_elf
Просмотров: 2837 | Загрузок: 0 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Творческий учитель
  • Сайт ООАКМР
  • Школьный сайт
  • Информатика учебник
  • МОИ

  • Copyright MyCorp © 2024 Сделать бесплатный сайт с uCoz