Пятница, 01.11.2024, 03:30
Сайт в разработке!
Приветствую Вас Биологический материал | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Doomer  
ОПАМ
DoomerДата: Вторник, 06.03.2007, 17:59 | Сообщение # 1
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
Есть последовательность натуральных чисел в виде списка. Конец списка- число 0. Отобразить в порядке убывания числа между максимальным и минимальным элементом. Для наглядности:
2 8 5 3 1 0 Макс 8 мин 1 Результат 8 5 3 1. Ну в общем, такого плана
 
nCДата: Вторник, 06.03.2007, 19:15 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 26
Репутация: 3
Статус: Offline
Мутиш сравнивание элементов списка по примеру проги которую смелова давала в примере! Проще простого! smile
 
DoomerДата: Вторник, 06.03.2007, 19:22 | Сообщение # 3
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
Я делал автоматическу сортировку, как в примере. Да, оно сортировало от большего до меньшего.(введенное число ставило в начало, если оно было самое большое) Но Смелова сказала, что неправильно.
 
developerДата: Среда, 07.03.2007, 19:49 | Сообщение # 4
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
Doomer, как я понял прога должна работать так
type
ptr = ^zap;
zap = record
element: word;
next: ptr;
end;
var
first: ptr;
ch: char;
newptr, curr, prev: ptr;
reg: word;
done, zero: boolean;

procedure outlist;
begin
curr := first;
if curr = nil then
writeln('Make your choise')
else
begin
writeln;
writeln('Output list: ');
repeat
write(curr^.element, ' ');
curr := curr^.next;
until curr = nil;
end;
writeln;
end;

{vklu4enie elementa v spisok}
procedure insert(var zero: boolean);
begin
if zero = false then
begin
write('Input element: ');
readln(reg);
new(newptr);
newptr^.element := reg;
if first = nil then
begin
if reg = 0 then
begin
zero := true;
first := newptr;
first^.next := nil;
outlist;
end
else
begin
first := newptr;
first^.next := nil;
end;
end
else
begin
if reg <> 0 then
begin
curr := first;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr = nil;
prev^.next := newptr;
newptr^.next := curr;
end
else
begin
curr := first;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr = nil;
prev^.next := newptr;
newptr^.next := curr;
zero := true;
outlist;
end;
end;
end
else outlist;
end;

{vyvod spiska na ekran}

{procedura MinMax}
procedure MinMax;
var
min, max, i: integer;
begin
if first = nil then
begin
writeln('list is empty! Press ENTER...');
readln;
end
else
begin
curr := first;
min := curr^.element;
max := curr^.element;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}

if (curr^.element > max) and (curr^.element <> 0) then max := curr^.element
else if (curr^.element < min) and (curr^.element <> 0) then min := curr^.element;
until curr^.next = nil;
writeln('min =',min,' max =', max);
end;
curr := first;
i := 0;
write('Iskomuu ryad : ');
repeat
prev := curr;
curr := curr^.next;
if (curr^.element = min) or (curr^.element = max) then i := i + 1;
if (i = 1) and (curr^.element <> min) and (curr^.element <> max) then
write(' ',curr^.element);
until curr^.next = nil;
writeln;
end;

begin
zero := false;
first := nil;
repeat
writeln('I - input M - MinMax Q - quit');
writeln;
write('input command: ');
readln(ch);
ch := upcase(ch);
case ch of
'I': insert(zero);
'M': MinMax;
end;
until ch = 'Q';
readln;
end.

Добавлено (07.03.2007, 19:49)
---------------------------------------------
только вводи одно число, а потом опять input

 
nCДата: Среда, 07.03.2007, 20:29 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 26
Репутация: 3
Статус: Offline
так она работает?)
 
developerДата: Среда, 07.03.2007, 21:42 | Сообщение # 6
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
type
ptr = ^zap;
zap = record
element: word;
next: ptr;
end;
var
first: ptr;
ch: char;
newptr, curr, prev: ptr;
reg: word;
done, zero: boolean;
min, max: word;

procedure outlist;
begin
curr := first;
if curr = nil then
writeln('Make your choise')
else
begin
writeln;
writeln('Output list: ');
repeat
write(curr^.element, ' ');
curr := curr^.next;
until curr = nil;
end;
writeln;
end;

{procedura MinMax}
procedure MinMax(var min, max: word);
var
i: integer;
begin
if first = nil then
begin
writeln('list is empty! Press ENTER...');
readln;
end
else
begin
curr := first;
min := curr^.element;
max := curr^.element;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}

if (curr^.element > max) and (curr^.element <> 0) then max := curr^.element
else if (curr^.element < min) and (curr^.element <> 0) then min := curr^.element;
until curr^.next = nil;
end;
end;

{подпрога ищет строку между ми и макс эл-тами}
procedure ryadok(var min, max: word);
var
i: word;
begin
writeln('min =',min,' max =', max);
curr := first;
i := 0;
if (curr^.element = min) or (curr^.element = max) then i := i + 1;
if (i = 1) and (curr^.element <> min) and (curr^.element <> max) then
write(' ',curr^.element);
write('Iskomuu ryad : ');
repeat
prev := curr;
curr := curr^.next;
if (curr^.element = min) or (curr^.element = max) then i := i + 1;
if (i = 1) and (curr^.element <> min) and (curr^.element <> max) then
write(' ',curr^.element);
until curr^.next = nil;
writeln;
end;

{vklu4enie elementa v spisok}
procedure insert(var zero: boolean);
begin
if zero = false then
begin
write('Input element: ');
readln(reg);
new(newptr);
newptr^.element := reg;
if first = nil then
begin
if reg = 0 then
begin
zero := true;
first := newptr;
first^.next := nil;
outlist;
MinMax(min, max);
ryadok(min, max);
end
else
begin
first := newptr;
first^.next := nil;
end;
end
else
begin
if reg <> 0 then
begin
curr := first;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr = nil;
prev^.next := newptr;
newptr^.next := curr;
end
else
begin
curr := first;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr = nil;
prev^.next := newptr;
newptr^.next := curr;
zero := true;
outlist;
MinMax(min, max);
ryadok(min, max);
end;
end;
end
else outlist;
end;

{vyvod spiska na ekran}

begin
zero := false;
first := nil;
repeat
writeln('I - input Q - quit');
writeln;
write('input command: ');
readln(ch);
ch := upcase(ch);
if ch = 'I' then insert(zero);
until ch = 'Q';
end.

Добавлено (07.03.2007, 21:42)
---------------------------------------------
вот это работает

Добавлено (07.03.2007, 21:42)
---------------------------------------------
только нужно ещо защиту наваять)

защита-не главное. и на том спасибо

Сообщение отредактировал Doomer - Четверг, 08.03.2007, 18:39
 
DoomerДата: Воскресенье, 18.03.2007, 16:25 | Сообщение # 7
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
Лаба 2. Публикую тут условие, может, кто идею подкинет.
Прога вычисляет количество узлов исходного дерева и выводит его на экран. С последним, думаю, никаких проблем, это можно взять из примера. А вот над подсчетом прийдется подумать.
 
developerДата: Понедельник, 19.03.2007, 21:54 | Сообщение # 8
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
ptr = ^zap;
zap = record
element: string;
next: ptr;
end;
var
first: ptr;
ch, ch2: char;
newptr, curr, prev: ptr;
reg: string;

{vklu4enie elementa v spisok}
procedure insert;
begin
write('Input element: ');
readln(reg);
new(newptr);
newptr^.element := reg;
if first = nil then
begin
first := newptr;
first^.next := nil;
end
else
begin
curr := first;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr = nil;
prev^.next := newptr;
newptr^.next := curr;
end;
end;

{vyvod spiska na ekran}
procedure outlist;
begin
curr := first;
if curr = nil then
writeln('Make your choise')
else
begin
writeln;
writeln('Output list: ');
repeat
write(curr^.element, ' ');
curr := curr^.next;
until curr = nil;
end;
writeln;
writeln;
end;

{procedura podscheta kolichestva uslov}
procedure Assign;
var
i: integer;
begin
if first = nil then {если список пустой}
begin
writeln('List is empty. Press ENTER...');
readln;
end
else
begin {если список не пустой}
i := 1;
curr := first;
repeat {поиск необходимого элемента}
inc(i);
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr^.next = nil;
end;
writeln('THE number of knots is ',i,' Press ENTER...');
readln;
end;

{poisk nomera yzla}
procedure Search;
var
reg: string;
k: integer;
poisk: boolean;
begin
poisk := false;
if first = nil then {если список пустой}
begin
writeln('List is empty. Press ENTER...');
readln;
end
else begin {если список не пустой}
write('Input element:');
readln(reg); {ввод значения, которое будет извлекаться}
curr := first;
k := 1;
if curr^.element = reg then {если необходимый элемент найден}
begin
poisk := true;
writeln('THE KNOT''S NUMBER IS ',k);
end
else
repeat
inc(k); {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
if curr^.element = reg then {если элемент списка совпадает с заданным}
begin
poisk := true;
writeln('THE KNOT''S NUMBER IS ',k);
end;
until curr^.next = nil;

if poisk = false then
begin {если элемент не найден}
writeln(reg,' not found in list. Press ENTER...');
readln;
end;
end;
end; {конец процедуры delete}

Begin
first := nil;
repeat
outlist;
writeln('B -Build_list A -Assign_number_of_knots' +#10 + #13+
'S -Search_knot''s number Q -quit');
writeln;
write('input command: ');
readln(ch);
ch := upcase(ch);
case ch of
'B': begin
writeln('build list, please:');
repeat
insert;
writeln('continue ? (Y/N)');
readln(ch2);
ch2 := upcase(ch2);
until ch2 = 'N';
end;
'A': Assign;
'S': Search;
end;
until ch = 'Q';
End.

Добавлено (19.03.2007, 21:51)
---------------------------------------------
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
ptr = ^zap;
zap = record
element: string;
next: ptr;
end;
var
first: ptr;
ch, ch2: char;
newptr, curr, prev: ptr;
reg: string;

{vklu4enie elementa v spisok}
procedure insert;
begin
write('Input element: ');
readln(reg);
new(newptr);
newptr^.element := reg;
if first = nil then
begin
first := newptr;
first^.next := nil;
end
else
begin
curr := first;
repeat {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr = nil;
prev^.next := newptr;
newptr^.next := curr;
end;
end;

{vyvod spiska na ekran}
procedure outlist;
begin
curr := first;
if curr = nil then
writeln('Make your choise')
else
begin
writeln;
writeln('Output list: ');
repeat
write(curr^.element, ' ');
curr := curr^.next;
until curr = nil;
end;
writeln;
writeln;
end;

{procedura podscheta kolichestva uslov}
procedure Assign;
var
i: integer;
begin
if first = nil then {если список пустой}
begin
writeln('List is empty. Press ENTER...');
readln;
end
else
begin {если список не пустой}
i := 1;
curr := first;
repeat {поиск необходимого элемента}
inc(i);
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
until curr^.next = nil;
end;
writeln('THE number of knots is ',i,' Press ENTER...');
readln;
end;

{poisk nomera yzla}
procedure Search;
var
reg: string;
k: integer;
poisk: boolean;
begin
poisk := false;
if first = nil then {если список пустой}
begin
writeln('List is empty. Press ENTER...');
readln;
end
else begin {если список не пустой}
write('Input element:');
readln(reg); {ввод значения, которое будет извлекаться}
curr := first;
k := 1;
if curr^.element = reg then {если необходимый элемент найден}
begin
poisk := true;
writeln('THE KNOT''S NUMBER IS ',k);
end
else
repeat
inc(k); {поиск необходимого элемента}
prev := curr; {переназначение указателей}
curr := curr^.next; {указатель на предыдущий элемент
становится текущим указателем, указатель на текущий
элемент указывает на следующий}
if curr^.element = reg then {если элемент списка совпадает с заданным}
begin
poisk := true;
writeln('THE KNOT''S NUMBER IS ',k);
end;
until curr^.next = nil;

if poisk = false then
begin {если элемент не найден}
writeln(reg,' not found in list. Press ENTER...');
readln;
end;
end;
end; {конец процедуры delete}

Begin
first := nil;
repeat
outlist;
writeln('B -Build_list A -Assign_number_of_knots' +#10 + #13+
'S -Search_knot''s number Q -quit');
writeln;
write('input command: ');
readln(ch);
ch := upcase(ch);
case ch of
'B': begin
writeln('build list, please:');
repeat
insert;
writeln('continue ? (Y/N)');
readln(ch2);
ch2 := upcase(ch2);
until ch2 = 'N';
end;
'A': Assign;
'S': Search;
end;
until ch = 'Q';
End.

Добавлено (19.03.2007, 21:54)
---------------------------------------------
эта прога вычисляет количество узлов, но в очереди, думаю, что к дереву ты ее сможешь приставить

 
DoomerДата: Понедельник, 26.03.2007, 17:16 | Сообщение # 9
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
developer, посмотрим biggrin может, и получится
 
DoomerДата: Понедельник, 26.03.2007, 20:24 | Сообщение # 10
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
не выходит нифига....
 
developerДата: Воскресенье, 01.04.2007, 09:59 | Сообщение # 11
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
смотри, Doomer, подсчет количества узлов в дереве нужно делать процедурой!
Procedure podschet(koren: Ptr {тип дерева}; var i: integer {счетчик});
begin
if koren <> nil then
begin
i := i + 1;
podschet(koren^.left, i);
podschet(koren^.right, i);
end;
end;
только сначала в главной программе ты должен обьявить что i := 0

Добавлено (01.04.2007, 09:59)
---------------------------------------------
эта процедура самоповторяющаяся, цикл не делай

 
DoomerДата: Воскресенье, 08.04.2007, 18:00 | Сообщение # 12
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
developer, и все? Неужели все так просто? В принципе, я делал так же smile но я в теле процедуры присвоил счетчику 0, а потом увеличивал его на 1. Видимо, в этом ошибка
 
developerДата: Понедельник, 09.04.2007, 18:50 | Сообщение # 13
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
Конечно, процедура рекурсивная. А ты каждый раз обнулял счетчик, поетому и показывало в лучшем случае 1=)
 
DoomerДата: Четверг, 12.04.2007, 20:03 | Сообщение # 14
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
блин, не пашет все равно, теперь просто вылетает
 
DoomerДата: Четверг, 12.04.2007, 20:06 | Сообщение # 15
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
наверное, сама прога задана неправильно
 
developerДата: Воскресенье, 15.04.2007, 14:59 | Сообщение # 16
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
покажи код программы,я посмотрю
 
DoomerДата: Понедельник, 16.04.2007, 18:54 | Сообщение # 17
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
program laba2;

{$APPTYPE CONSOLE}

uses
SysUtils;
type
ptr = ^Node;
Node = record
key: integer;
left, right: ptr;
end;
var
n, j: integer;
root, t: ptr;
reg: integer;
eldepth, depth, i: integer;
ch: char;

function getTree(max, curr: integer): ptr;
var
newNode: ptr;
begin
if curr = max then
newNode := nil
else
begin
new(newNode);
with newNode^ do
begin
i := i + 1;
key := i;
left := getTree(max, curr + 1);
right := getTree(max, curr + 1);
end;
end;
result := newNode;
end;

procedure printTree(t: ptr; h, reg: integer; var depth, res: integer);
var
i: integer;
curr: integer;
begin
if t <> nil then
with t^ do
begin
curr := depth + 1;
printTree(right, h + 2, reg, curr, res);
for i := 1 to h do
write(' ');
if key = reg then
begin
res := curr - 1;
write('[', key, ']');
end
else write(key);
writeln;
printTree(left, h+2, reg, curr, res);
end;
end;

procedure preorder(var j: integer; t: ptr);
begin
if t <> nil then
begin
inc(j);
preorder(j, t^.left);
preorder(j, t^.right);
writeln('uzloff ' , j);
end;
readln;
end;

procedure menu;
begin
writeln('1-Count');
ch := upcase(ch);
case ch of
'1': preorder(j, t);
end;
end;
Begin
write('depth ');
readln(n);
i := 1;
root := getTree(n, 0);
eldepth := 0;
depth := 0;
printTree(root, 0, reg, depth, eldepth);
writeln('p-count');
j := 0;
menu;
readln;
End.

 
developerДата: Среда, 18.04.2007, 22:47 | Сообщение # 18
Ламер
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Offline
function getTree правильно работает? почему ты не передаешь корень как параметр значение? ты ж должен от него начинать
 
ShadeДата: Вторник, 24.04.2007, 17:05 | Сообщение # 19
Ламер
Группа: Проверенные
Сообщений: 17
Репутация: 0
Статус: Offline
Народ помогите с прогой!Сама она работает, но Смеловой не нравится интерфейс.Вообщем нада розбить процеду PrintTree на 2 части и по возможности подправте ошибки, коментарии smile

program Project3;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
Ptr = ^Node; {тип}
Node = record {запись}
key: integer; {ключ,а лучше записать как значение листка. Умнее смотрится)}
left, right: Ptr; {левое, правое поддерево}
end;

var
n: integer;
root: Ptr; {корень дерева}
elem_value: integer;
elem_depth,depth,i: integer; {параметры для вывода дерева}

{получение дерева}
function get_tree(max_depth: integer; cur_depth: integer): Ptr;
var
newNode: Ptr; {новый елемент}
begin
if cur_depth = max_depth then
newNode := nil
else
begin
new(newNode);
with newNode^ do begin
inc(i);
key := i;
left := get_tree(max_depth, cur_depth+1);
right := get_tree(max_depth, cur_depth+1);
end;
end;
result := newNode;
end;

{вывод дерева}
procedure PrintTree(t: Ptr; h, elem_value : integer; var depth, res : integer);
var i: integer;
cur_depth: integer;
begin
if t <> nil then
with t^ do
begin
cur_depth := depth+1;
PrintTree(right, h+5, elem_value, cur_depth, res);
for i := 1 to h do write(' ');
if key=elem_value then begin
res := cur_depth-1;
write('[',key,']');
end
else write(key);
writeln;
PrintTree(left, h+5, elem_value, cur_depth, res);
end;
end;

{основная программа}
Begin
Write('Enter a depth of the tree : ');
Readln(n);
i := 1;
root := get_tree(n, 0);
Write('Enter value of the element, which you want to find : ');
readln(elem_value);
elem_depth := 0; depth := 0;
PrintTree(root, 0, elem_value, depth, elem_depth);
Writeln('Your element is on the ',elem_depth,' level under the root.');
readln;
End.

Сообщение отредактировал Doomer - Вторник, 24.04.2007, 20:00
 
DoomerДата: Вторник, 24.04.2007, 19:56 | Сообщение # 20
Продвинутый чайник
Группа: Модераторы
Сообщений: 84
Репутация: 2
Статус: Offline
Интерфейс легко организовать с помощью меню.
Например
procedure menu;
var ch: char;
begin
writeln('тут, собсно сама строка меню');
ch:=upcase(ch);
readln(ch);
case ch of
begin
'1':{тут идет вызов необходимой процедуры}
'2':.. и т.д
end;
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright MyCorp © 2024Хостинг от uCoz