Использование динамических списков 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование динамических списков



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

Сохранение проекта

Для нового проекта создайте новую папку, например, X: \ 35эи \ LAB11_S.

Сохраните проект File | Save Project As… Сначала сохраните модуль под именем UnStek, затем файл проекта под именем Pr_Stek.

Размещение компонентов на Форме

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рисунке 11.2.

Разместим на форме компоненты Label, Edit, Button, BitBtn, Memo .

Label
Memo
Edit
BitBtn
Button

Рис.11.2. Размещение компонентов на форме

Создание процедуры обработки событий FormCreate и BitBtn1Click

Двойным нажатием клавиши «мыши» на Форме и кнопке Button создайте соответствующие процедуры обработки событий. Пользуясь текстом модуля UnStek, наберите операторы этих процедур.

Текст модуля UnStek

unit UnStek;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;

Type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Button1: TButton;

BitBtn1: TBitBtn;

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

 

Var

Form1: TForm1;

 

Implementation

 

{$R *.dfm}

Type

pSt=^zap;

zap= record

inf: integer;

adr: pSt

end;

var // объявление глобальных переменных

pVer, // указатель вершины стека

pTek: pSt; // текуший указатель

elSt: integer; // элемент стека

procedure TForm1.FormCreate(Sender: TObject);

Begin

Memo1.Clear;

Edit1.Text:='';

pVer:=nil; // инициализировать указатель вершины

elSt:=0; // инициализировать элемент стека

end;

 

procedure TForm1.Button1Click(Sender: TObject);

Begin

New (pTek); // выделить память

elSt:=StrToInt(Edit1.Text);

pTek^.inf:=elSt; // в информационную часть стека занести elSt

pTek^.adr:=pVer; // в адресную часть занести указатель на вершину

pVer:=pTek; // указатель вершины должен указывать на

// последний элемент

if elSt>=0 then // если элемент стека неотрицательный, тогда …

Begin

Edit1.Text:=''; // очистить окно редактора Edit1

Edit1.SetFocus; // передать фокус ввода редактору Edit1

End

Else

Begin

Memo1.Lines.Add('Элементы стека:'); // вывод заголовка

Repeat

Memo1.Lines.Add(#9+IntToStr(pTek^.inf)); // вывод элементов

pVer:=pTek^.adr;

Dispose (pTek); // освободить память

pTek:=pVer;

until pTek= nil;

end;

end;

 

end.

11.5. Выполнение индивидуального задания

По указанию преподавателя выберите два варианта индивидуальных заданий. В заданиях №1 15 необходимо использовать динамические массивы, в заданиях №16 30 – динамические списки. Во всех заданиях необходимо предусмотреть контрольный вывод исходных данных.

Индивидуальные задания

1. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива с клавиатуры, меняет местами элементы с наибольшим и наименьшим значениями среди четных элементов и выводит полученный массив.

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

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

4. Создать приложение, которое осуществляет ввод значений элементов двумерного массива n -го порядка с клавиатуры, меняет местами строку с максимальным элементом на главной диагонали со строкой с заданным номером, выводит полученный массив.

5. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива А с клавиатуры, формирует новый двумерный массив В (m, n), расположив элементы каждой строки массива А в порядке убывания их абсолютных величин, выводит полученный массив В.

6. Создать приложение, которое осуществляет ввод значений элементов двумерного массива А n -го порядка с клавиатуры, формирует два одномерных массива В и С (в массив В переслать по строкам верхний треугольник матрицы, включая элементы главной диагонали, в массив С нижний треугольник матрицы).

7. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива А с клавиатуры, формирует новый двумерный массив В(m, n), расположив элементы каждого столбца массива А в порядке убывания их абсолютных величин.

8. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива А с клавиатуры, формирует новый двумерный массив В(m, n), умножая элементы каждой строки массива А на наибольший элемент строки.

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

10. Создать приложение, которое осуществляет ввод значений элементов двумерного массива А n -го порядка с клавиатуры, определяет максимальные элементы в каждой строке исходного массива и записывает их в массив В(n), упорядочивает одномерный массив В по возрастанию.

11. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива А с клавиатуры, формирует новый двумерный массив В(m, n), путем деления всех элементов массива А на ее наибольший по модулю элемент.

12. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива А с клавиатуры, формирует новый двумерный массив В(m, n), путем поэлементного вычитания последней строки массива А из всех строк, кроме последней.

13. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива с клавиатуры, находит наименьшее из значений элементов столбца, который обладает наибольшей суммой модулей элементов (если таких столбцов несколько, то взять первый из них).

14. Создать приложение, которое осуществляет ввод m строк и n столбцов двумерного массива А с клавиатуры, формирует новый двумерный массив В(m, n), в котором переставлены строка, содержащая элемент с наибольшим значением, и строка, содержащая элемент с наименьшим значением (предполагается, что эти элементы единственны).

15. Создать приложение, которое осуществляет ввод значений элементов двумерного массива А n -го порядка с клавиатуры, формирует новый двумерный массив В(n, n), в котором элементы К -ой строки массива А разделить на диагональный элемент, расположенный в этой строке.

16. Создать приложение, которое заносит в стек целые положительные числа с клавиатуры, выводит содержимое стека и среднее арифметическое значение его элементов.

17. Создать приложение, которое заносит в стек символы с клавиатуры, выводит содержимое стека и сообщение о том, содержится или нет в стеке заданный символ.

18. Создать приложение, которое заносит в каждый элемент стека английское слово с клавиатуры и как только будет введено слово «end», выводит содержимое стека.

19. Создать приложение, которое заносит в стек произвольные целые числа с клавиатуры, выводит содержимое стека и сообщение о том, содержится или нет в стеке заданное число.

20. Создать приложение, которое заносит в стек символы с клавиатуры, выводит содержимое стека и сообщение о том, упорядочены или нет элементы стека по алфавиту.

21. Создать приложение, которое заносит в стек целые положительные числа с клавиатуры и, как только будет введено число, равное сумме введенных чисел, выводит содержимое стека.

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

23. Создать приложение, которое заносит в каждый элемент стека русское слово с клавиатуры и, как только будет введено слово «конец», выводит содержимое стека и сообщение о том, содержится или нет в стеке заданное слово.

24. Создать приложение, которое заносит в стек произвольные числа с клавиатуры, выводит содержимое стека и удаляет из стека наибольший элемент.

25. Создать приложение, которое заносит в стек произвольные целые числа с клавиатуры. Как только сумма введенных чисел станет равна нулю, приложение должно вывести содержимое стека.

26. Создать приложение, которое заносит в каждый элемент стека русское слово с клавиатуры и, как только будет введено слово «конец», выводит содержимое стека и затем удаляет из него любое слово, содержащееся в стеке (ввести с клавиатуры).

27. Создать приложение, которое заносит в стек произвольные целые числа с клавиатуры. Как только будет введено число 0 (ноль), приложение должно вывести содержимое стека, а затем сформировать из него два новых стека: в первом должны находиться положительные, а во втором – отрицательные числа.

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

29. Создать приложение, которое заносит в стек буквы русского и латинского алфавита в произвольном порядке с клавиатуры. Как только будет введен символ «.» (точка), приложение должно вывести содержимое стека, а затем сформировать из него два новых стека: в первом должны находиться буквы русского алфавита, а во втором – буквы латинского алфавита.

30. Создать приложение, которое заносит в стек произвольные целые числа с клавиатуры. Как только будет введено число 9 999, приложение выводит содержимое стека и реверсирует стек (направление ссылок в стеке изменяется так, что вершина и дно стека меняются местами).



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 281; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.79.70 (0.025 с.)