Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Министерство образования и науки РФ.
Федеральное агентство по образованию.
Томский Государственный Университет Систем Управления и
Радиоэлектроники.
ТУСУР.
Кафедра компьютерных систем в управлении и проектировании.
КСУП.
Отчет по лабораторной работе №10
“Линейные списки”
Выполнил: студент группы №585-1
Отюцкий К.Ю.
Проверил: преподаватель кафедры КСУП
Потапова Е.А.
ТОМСК 2006г.
Содержание
1. Введение___________________________________________________________ стр.3
2.Основная часть:
а)условие задачи №6______________________________________________ стр.4
б)программа с комментариями____________________________________ стр.4
в) условие задачи №21_____________________________________________ стр.5
г) программа с комментариями____________________________________ стр.5
3.Вывод______________________________________________________________ стр.7
Введение.
Память для локальных переменных отводится при вызове подпрограммы, при выходе память освобождается. Память для глобальных переменных отводится в начале выполнения подпрограммы. Таким образом, память отводится под переменные с учетом статической структуры программы, поэтому такие переменные называются статическими.
Динамические переменные: образование новых переменных в любой момент работы программы, уничтожение созданных переменных в произвольный момент выполнения (произвольное отведение и освобождение памяти).
Средство доступа к статическим переменным - идентификатор. Динамические переменные, количество которых и место расположения в памяти неизвестно - невозможно обозначить идентификаторами. Средство доступа к динамическим переменным - указатель на место их текущего расположения в памяти.
Особое значение придается структурам простой формы; приемы работы с более сложными структурами можно получить из способов работы с основными видами структур: линейными списками и деревьями.
Самый простой способ соединить, или связать, множество элементов - это расположить их линейно в списке. В этом случае каждый элемент содержит только одну ссылку, связывающую его со следующим элементом списка.
Основная часть
Задача №6.
Используя представление последовательности чисел в виде линейного списка, напишите программу, сортировки этой последовательности при помощи алгоритма простого обмена.
Текст программы с коментариями
program lab10_6;
uses crt;
const n=10;
type spisok=^element;
element=record
info:integer;
next:spisok;
end;
var l,s,p:spisok;
i,j:integer;
procedure sort(p:spisok);
var
chg:integer;
b:boolean;
begin
for j:=1 to n-1 do begin
p:=l;
for i:=1 to n-j do begin
b:=false;
s:=p^.next;
if p^.info>s^.info then b:=true;
if b then
begin
chg:=p^.info;
p^.info:=s^.info;
s^.info:=chg;
end;
p:=p^.next;
end;
end;
end;
begin
clrscr;
{======zapolnenie spiska======}
for i:=1 to n-1 do begin
new(p);
readln(p^.info);
p^.next:=s;
s:=p;
end;
new(p);
readln(p^.info);
p^.next:=s;
l:=p;
{======sortirovka spiska======}
sort(p);
{======vyvod spiska======}
while p<>nil do begin
write(p^.info:5);
p:=p^.next;
end;
{========================}
readln;
end.
Задача №21
Напечатать в порядке возрастания все неправильные несократимые дроби со знаменателями, меньшими заданного натурального числа p. Массивов не заводить.
Текст программы с комментариями
uses crt;
type
pnt=^r;
r = record
chis:integer;
znam:integer;
next:pnt
end;
var
q,up:pnt;
i,j,p,x,y,z,vr,k,s:integer;
min:real;
f:boolean;
procedure add (var q:pnt; x,y:integer); {Процедура заполнения стека}
var
t,p:pnt;
begin
if q=nil then
begin
new(q);
q^.chis:=x;
q^.znam:=y;
q^.next:=nil
end
else
begin
t:=q;
while t^.next<>nil do t:=t^.next;
new(p);
t^.next:=p;
p^.chis:=x; { формируем дробь }
p^.znam:=y;
p^.next:=nil;
end;
end; { add }
{ проверяет условие сократимости }
function checking(m,n:integer):boolean;
var
bool : boolean;
i : integer;
begin
if n<>1 then
begin
bool:=false;
for i:=2 to n do
if (m mod i = 0) and (n mod i = 0) then
begin
bool:=true;
break
end;
end
else bool:=true;
checking:=bool
end; { checking }
begin
clrscr;
write('Введите p: ');
readln(p);
for i:=2 to p do
begin
for j:=i+1 to p do
if not checking(i,j) then add(q,j,i);
end;
up:=q;
{ вывод }
repeat
write(q^.chis,'/',q^.znam,' ');
q:=q^.next;
until q=nil;
writeln;
writeln('=============================');
{ сортировка }
q:=up;
repeat
vr:=0;
q:=up;
repeat
if (q^.chis/q^.znam) > ((q^.next)^.chis/(q^.next)^.znam) then
begin
vr:=(q^.next)^.chis;
(q^.next)^.chis:=q^.chis;
q^.chis:=vr;
vr:=(q^.next)^.znam;
(q^.next)^.znam:=q^.znam;
q^.znam:=vr;
end;
if q^.next<>nil then q:=q^.next;
until q^.next=nil;
until vr=0;
{ вывод }
writeln;
writeln('Отсортировали по возрастанию');
q:=up;
repeat
write(q^.chis,'/',q^.znam,' ');
q:=q^.next;
until q=nil;
readkey;
end.
Вывод
С помощью этой лабораторной работы мы ознакомились с динамическими переменными, изучили основные приемы работы с ними.