IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Сложно.Трудно.Помогите., Множества и записи...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Руслан

Репутация: -  0  +


13.22 type слово=packed array[1..9] of char;
номер телефона=100000...999999;
знакомый=record фамилия:слово;
номер:номертелефона;
end;
страница=array[1..20] of знакомый;
запясная книжка=array['A'..'Z'] of страница;
Считая, что на каждой странице записной книжки указаны фамилии, начинающиеся с одной и той же буквы - индекса этой страницы, описать логическую функцию:
а) номера (ЗК,НТ,Ф), определяющую, есть ли в записной книжке ЗК сведения о знакомом с фамилией Ф, и, если есть, присваивающую параметру Ф фамилию этого знакомого.
14.33 Описать логическю функцию Path (G,N,K,D), которая определяет, есть ли в ориентированном графе G путь из вершины N в вершину K, и, если есть, присваивает параметру D длину (число дуг) кратчайшего пути из N в K.
Использовать следующее представление графа:
type вершина = (b1,b2,b3,b4,b5,b6,b7,b8);
соседи = set of вершина;
граф = array[вершина] of соседи;
(G[x] - множество вершин, которые ведут дуги из вершины x)

Помогите пожалуйста...в субботу сдавать эту лабораторную, а сделать не получсется...жду ответов.

Сообщение отредактировано: Archie -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Archie @ 13.12.2007 21:22) *

сделать не получсется...жду ответов.

Покажи, что сделал.

Желательно, по одной задаче на тему.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Руслан

Репутация: -  0  +


program _13_22;

type
slovo = array[1..9] of char;
nomer_telefona = 100000..999999;
znakomiy = record
fam: slovo;
nomer: nomer_telefona;
end;
stranica = array[1..20] of znakomiy;
zapisnay_knigka = array['A'..'Z'] of stranica;

var
zk: zapisnay_knigka;
nt: nomer_telefona;
fam: slovo;
i: byte;
s: string;

procedure dobavit(fam: string; nt: nomer_telefona; var zk: zapisnay_knigka);
var
i, j: byte;
begin
for i := 1 to 20 do
if zk[fam[1], i].fam[1] = #0 then
begin
for j := 1 to length(fam) do
zk[fam[1], i].fam[j] := fam[j];
zk[fam[1], i].nomer := nt;
break;
end;
end;

function familia(zk: zapisnay_knigka; fam: slovo; var nt: nomer_telefona): boolean;
var
i: byte;
j: char;
begin
for j := 'A' to 'Z' do
for i := 1 to 20 do
if zk[j, i].fam = fam then
begin
nt := zk[j, i].nomer;
familia := true;
break;
end;
end;

begin
dobavit('Alena', 111111, zk);
dobavit('Vika', 222222, zk);
dobavit('Genia', 333333, zk);
dobavit('Nadia', 444444, zk);
dobavit('Masha', 555555, zk);
s := 'Masha';
for i := 1 to length(s) do
fam[i] := s[i];
if familia(zk, fam, nt) = true then writeln('Masha ', nt)
else writeln('Takogo znakomogo net');
readln;
end.


Хз - верно или нет...по суи да, но как то коряво. а вторую даж не понял. помогите плиз.

Сообщение отредактировано: Archie -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Archie @ 14.12.2007 7:41) *

но как то коряво. а вторую даж не понял. помогите плиз.

Коряво, да.. но бывает намнооооого корявее! smile.gif

Что касается второй - интересная задача. Думаю, тут можно использовать рекурсивный перебор.
1. Заводишь array[все вершины]of вершина - это путь P.
2. Такой же массив для хранения минимального пути, Pmin.
3. Заводишь глобальную переменную типа вершина для длины пути L.
4. Такую же переменную для хранения длины минимального пути Lmin.
5. Для удобства можно завести еще и множество S из вершин для обозначения пройденных (хотя они уже есть в пути, но проверка множества будет происходить быстрее).
6. Заводишь булевскую переменную Found.
7. Делаешь процедуру, в которую передаешь как параметр исходную вершину (а). В этой процедуре увеличиваешь длину пути L на 1, добавляешь вершину а к пути P[L]:=a. Потом проверяешь:
- если а=х (х = это конечная вершина), то Found:=true и проверяешь - если L<Lmin, то кладешь Pmin:=P и Lmin:=L, затем выходишь. Если а не равно х, то добавляешь вершину в множество S пройденных вершин и проходишь по всем соседям этой вершины (то есть вызываешь эту же процедуру с соседом качестве параметра), исключая уже пройденные. Потом выходишь, удаляя эту вершину из P и из S, а также уменьшая L на единицу.

Эту процедуру вызываешь из главной программы, предварительно присвоив L:= и Lmin:=High(вершины)

Коряво, конечно, описал.. smile.gif Но примерно так. Отладка - после кодиррования алгоритма smile.gif

Если хочешь затравку: вот начало той процедуры (не исключено, что его нужно будет корректировать).
procedure Search(a:tVertex);
begin
Inc(L);
P[L]:=a;
if a=x then begin
Found:=true;
if L<Lmin then begin
Lmin:=L;
Pmin:=P
end
end
else for v:=Low(tVertex) to High(tVertex) do begin
if v in Neighbors-S then Search(v)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Руслан

Репутация: -  0  +


У меня не получается...а завтра лабу сдавать. напиши пожалуйста всё решение второй задачи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 4:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name