русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Теоретический материал


Дата добавления: 2015-06-12; просмотров: 1781; Нарушение авторских прав


Лабораторная работа № 2

Работа с массивами, формирование новых массивов по условию

Задание:Составить программу заданной обработки массива. В процессе обработки создавая новые массивы. Исходного массива запрашивать пользователем. Исходный и обработанный массив выводить на экран. Теоретический материал.

Теоретический материал

При выполнении лабораторных работ 2, 3 и 4 будет использоваться структурированный тип данных массив, который представляет собой фиксированное количество упорядоченных однотипных компонент, снабженных индексами. Он может быть однономерным и многомерным. В лабораторных работахбудут использоваться одномерные массивы.

Тип-массив описывается в разделе описания типов следующим образом:

type<имя типа> = аrrау[<тип индекса(индексов)>] of <тип компонент>;

Размерность массива может быть любой, компоненты массива могут быть любого (в том числе и структурированного) типа, индекс (индексы) может (могут) быть только интервального или перечисляемого типа. При употреблении в качестве типа индекса типа Integer или Word можно использовать только его диапазон.

При описании типа индекса (индексов) можно использовать константы, которые должны быть определены до определения типа.

Определенный в разделе описания типов тип-массив можно использовать для описания переменных и типизированных констант. Тип-массив можно вводить непосредственно и при определении соответствующих переменных или типизированных констант.

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



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

Для работы с массивом как с единым целым используется идентификатор массива без указания индексов в квадратных скобках. Массив может участвовать только в операциях отношения («=», «<>») и в операторе присваивания.

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

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

При написании программ необходимо следить за тем, чтобы значения индексов не превышали границ, указанных при объявлении массива, так как выход индекса за границы массива приводит к сбою в работе программы. Контроль значений индексов массивов можно организовать при помощи директивы компилятора {$R+}, которая приводит к проверке всех индексных выражений на соответствие их значений диапазону индекса.

 

Пример

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

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

В графическом виде этот алгоритм будет блок-схему, представленную на рис. 5.1.

Теперь пишем код программы.

Поскольку в программе требуется использование генератора случайных чисел, то необходимо подключить стандартный модуль CRT, в котором описана функция генерации случайных чисел.

Uses crt;

В разделе описания типов определим тип-массив:

type arr=array[1..15] of integer;

В разделе описания переменных описываем необходимые переменные:

var a:arr; {массив}

i,j,n: byte; {индексы, длина массива}

i_max: byte; {индекс максимального элемента массива} max:integer; {максимальный элемент}

 

Рис. 5.1. Блок-схема алгоритма удаления из массива отрицательных элементов, расположенных справа от максимального элемента массива

 

Далее описываем основное тело программы. Как отмечено на рисунке, алгоритм состоит из нескольких частей. Первая часть – генерация исходного массива:

begin

writeln;

writeln(’ Автор – Иванов И.П., студент гр. ИСЭд-11’);

writeln(’ Вариант № 100’);

writeln(’ Дан одномерный массив целых чисел.’);

writeln(’ Удалить все отрицательные элементы, расположенные справа от максимального ’);

writeln;

{$R+} {Включаем контроль значений индексов} clrscr;

n:=15;

randomize;

writeln('Исходный массив:');

for i:=1 to n do {генерация элементов массива} begin

a[i]:=-20+random(41); {в диапазоне [-20; 20]} write(a[i]:4);

end;

writeln;

Генератор случайных чисел активизируется командой randomize. Далее в цикле случайным образом задаются элементы массива. Функция random(41) возвращает случайное число в диапазоне от 0 до 40. Получается, что минимально возможное значение элементов массива будет равно -20 (к -20 прибавить 0, сгенерированный функцией random), максимально возможное – 20 (-20 плюс число 40, сгенерированное функцией random). Сразу же выводим значение элемента массива на экран. В цикле все элементы будут выводиться в строчку, т. к. используется команда вывода write. После генерации и вывода всех элементов массива осуществляется переход на новую строку.

Вторая часть алгоритма – поиск максимального элемента. Предположим, что первый элемент – максимальный, тогда запомним значение первого элемента в переменной max, а в переменную i_max, где будет запоминаться положение максимального элемента, запишем 1. Далее организуется цикл, в котором ищется элемент, больший чем max.

max:=a[1]; i_max:=1;

for i:=2 to n do

if a[i]>max then begin

max:=a[i]; i_max:=i;

end;

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

Внутренний цикл сдвига можно проиллюстрировать на примере удаления седьмого элемента из массива, содержащего 10 элементов (рис. 5.2).

Рис. 5.2. Схема удаления элемента из массива

 

В программе удаление элементов, находящихся справа от максимального, будет выглядеть следующим образом:

i:=i_max;

while i<=n do

begin

if a[i]<0 then

begin

for j:=i to n-1 do a[j]:=a[j+1]; n:=n-1;

end

else

i:=i+1;

end;

Еще одна тонкость данного фрагмента состоит в том, что переход к следующему элементу (i:=i+1) для проверки осуществляется только тогда, когда элемент не удовлетворяет условию. Если же i-й элемент окажется отрицательным, то после удаления на его месте окажется i+1-й элемент, который и нужно проверять на следующей итерации цикла.

Остается вывести результирующий массив на экран.

writeln('Результат обработки:'); for i:=1 to n do write(a[i]:4); readln;

{$R-} {Выключаем контроль значений индексов} end.

Ниже представлен полный текст программы.

program lab5_var100;

Uses crt;

type arr=array[1..15] of integer;

var a:arr; {массив}

i,j,n: byte; {индексы, длина массива}

i_max: byte; {индекс максимального элемента массива} max:integer; {максимальный элемент}

begin

writeln;

writeln(’ Автор – Иванов И.П., студент гр. ИСЭд-11’); writeln(’ Вариант № 100’);

writeln(’ Дан одномерный массив целых чисел.’);

writeln(’ Удалить все отрицательные элементы, расположенные справа от максимального ’);

writeln;

{$R+} {Включение контроля значений индексов}

clrscr; {Очистка экрана}

n:=15;

randomize;

writeln('Исходный массив:');

for i:=1 to n do {генерация элементов массива}

begin

a[i]:=-20+random(41); {в диапазоне [-20; 20]}

write(a[i]:4);

end;

writeln;

max:=a[1];

i_max:=1;

for i:=2 to n do {поиск максимального элемента массива} if a[i]>max then

begin

max:=a[i];

i_max:=i;

 

end;

i:=i_max+1;

while i<=n do {цикл для проверки элементов на знак } begin

if a[i]<0 then {если элемент отрицательный, то}

begin

for j:=i to n-1 do {цикл удаления i-го элемента} a[j]:=a[j+1];

n:=n-1; {уменьшение длины массива}

end else

i:=i+1; {иначе переход к следующему элементу}

end;

writeln('Результат обработки:');

for i:=1 to n do

write(a[i]:4);

readln;

{$R-} {Выключение контроля значений индексов} end.

Варианты заданий

1. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 3 и на 5

2. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 2 и на 3

3. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 2 и на 5

4. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 3 и на 4

5. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 3 и которые больше 5

6. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 2 и которые больше 3

7. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 3 и которые меньше 10

8. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 4 и которые меньше 0

9. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 5 и нечетных числе

10. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые делятся на 6 и нечетных числе

11. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые больше 3 и меньше 10

12. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые больше 20 и меньше 2

13. Пользователем вводиться массив целых чисел, сформировать и вывести два новых массива - из чисел, которые больше 13 и меньше 14

14. Пользователем вводиться массив рациональных чисел, сформировать и вывести два новых массива - из чисел, которые больше 3 и меньше 10

15. Пользователем вводиться массив рациональных чисел, сформировать и вывести два новых массива - из чисел, которые больше 15 и меньше 5

16. Пользователем вводиться массив рациональных чисел, сформировать и вывести два новых массива - из чисел, которые больше 3 и меньше 10

17. Пользователем вводиться массив рациональных чисел, сформировать и вывести два новых массива - из чисел, которые больше 7 и меньше 0

18. Пользователем вводиться массив целых чисел, сформировать и вывести три новых массива - из чисел, которые делятся на 3, на 5 и на 2

19. Пользователем вводиться массив целых чисел, сформировать и вывести три новых массива - из чисел, которые делятся на 2, на 4 и на 7

20. Пользователем вводиться массив целых чисел, сформировать и вывести три новых массива - из чисел, которые делятся на 3, на 5 и на 4

21. Пользователем вводиться массив целых чисел, сформировать и вывести три новых массива - из чисел, которые делятся на 3, на 6 и на 2

22. Пользователем вводиться массив целых чисел, сформировать и вывести три новых массива - из чисел, которые делятся на 2, на 3 и на 5

23. Пользователем вводиться массив целых чисел, сформировать и вывести три новых массива - из чисел, которые делятся на 3, на 7 и на 10

 



<== предыдущая лекция | следующая лекция ==>
Понятие и классификация функций управления | ЭЛЕМЕНТЫ ЯЗЫКА FreePascal


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 4.249 сек.