bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [157]
АВС [6]
КПиЯП [80]
ОАиП [305]
ОКТ [79]
СиСПО [8]
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ПОИТ » ОАиП

контрольная работа №2 часть 2
Подробности о скачивании 16.10.2013, 14:01
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий

Факультет ФНиДО
Специальность ПОИТ

Лабораторная работа № 2
по дисциплине «Основы алгоритмизации и программирования»
часть 2
Вариант № 1

Выполнил студент: Рябченко А.И.

Минск 2013
1). Задание
Разработать программу формирования стека, содержащего целые положительные числа и его преобразования путем удаления из него всех четных чисел.
Вывести на экран исходный и полученный стек.
2). Текст программы.
program lr2_2;
type
//Тип основных данных.
TData = Integer;

//Указатель на элемент стека.
TPElem = ^TElem;
//Элемент стека.
TElem = record
Data : TData;
PNext : TPElem;
end;

//Добавление элемента на вершину стека.
procedure StackPush(var aPStack, aPElem : TPElem);
begin
if aPElem = nil then Exit;
aPElem^.PNext := aPStack;
aPStack := aPElem
end;

//Изъятие элемента с вершины стека.
//Если стек не пуст, то с вершины стека изымается элемент и возвращается
//через параметр aPElem. В этом случае, функция возвращает значение True.
//Если стек пуст, то операция отменяется, а функция возвращает значение False.
function StackPop(var aPStack, aPElem : TPElem) : Boolean;
begin
Result := False;
if aPStack = nil then Exit;
aPElem := aPStack;
aPStack := aPElem^.PNext;
Result := True;
end;

//Удаление стека из памяти (очистка стека).
procedure StackFree(var aPStack : TPElem);
var
PElem : TPElem;
begin
while StackPop(aPStack, PElem) do Dispose(PElem);
end;

//Распечатка стека.
procedure StackPrint(var aPStack : TPElem);
var
PSt, PElem : TPElem;
i : Integer;
begin
if aPStack = nil then begin
Writeln('Стек пуст.');
Exit;
end;
//Начальная инициализация вспомогательного стека.
PSt := nil;
//Переливаем все элементы стека aPStack в стек PSt и выполняем распечатку.
i := 0;
while StackPop(aPStack, PElem) do begin
StackPush(PSt, PElem);
Inc(i);
if i > 1 then Write(', ');
Write(PElem^.Data);
end;
Writeln;
//Возвращаем элементы из стека PSt в стек aPStack. При этом, элементы
//в стеке aPStack окажутся в том же порядке, в каком они были до распечатки.
while StackPop(PSt, PElem) do StackPush(aPStack, PElem);
end;

const
//Количество элементов, с которым мы будем работать.
M = 10;
var
PSt1, PSt2,PStemp, PElem : TPElem;
i : Integer;
S : String;
begin

//Начальная инициализация стеков.
PSt1 := nil;
PSt2 := nil;

repeat
//Формируем содержимое стека.
Randomize;
for i := 1 to M do begin
New(PElem);
PElem^.Data := Random(10); //0..9.
StackPush(PSt1, PElem);
end;

//Распечатка стеков.
Writeln('Первый стек:');
StackPrint(PSt1);

//Переливаем все элементы стека PSt1 в стек PStemp.
while StackPop(PSt1, PElem) do begin if (PElem^.Data)mod 2=0
then StackPush(PStemp, PElem) else Dispose(PElem) ; end;
//Переливаем все элементы стека PStemp в стек PSt2.
while StackPop(PStemp, PElem) do StackPush(PSt2, PElem) ;

//Распечатка стеков.

Writeln('Второй стек:');
StackPrint(PSt2);

//Удаление стеков из памяти.
StackFree(PSt1);
StackFree(PSt2);
Writeln('Работа завершена. Стеки удалёны из памяти.');

Writeln('Повторить - Enter. Выход - любой символ + Enter.');
Readln(S);
until S <> '';
end. 3). Тестовый набор данных.
Первый стек:
6, 4, 7, 5, 2, 3, 3, 3, 0, 8
Второй стек:
6, 4, 2, 0, 8
Работа завершена. Стеки удалёны из памяти.
Повторить - Enter. Выход - любой символ + Enter.
Категория: ОАиП | Добавил: artemartem
Просмотров: 1503 | Загрузок: 11
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]