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

> Правила раздела!

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

 
 Ответить  Открыть новую тему 
> Записи с вариантной частью, приминение..
сообщение
Сообщение #1


?
***

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

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


Привет! Вот прочитал статью про запись и у меня возникла куча вопросов. Сообственно они все так или иначе связаны с моим курсачом...
курсовой проект был по мультисписковой структурой реализованой в файле
Прикрепленное изображение
для этого мс(мульти-списка) была реализованые такие типы даных


type
  TName      = string[30];
  Tinf       = string[254];

  TRecRayon       = record        {Запись данных о районе}
            name      : TName;
            inf       : Tinf;
            NextElem  : Integer;
            nextInf   : Integer;
            end;
  TFilerayon     = file of TRecrayon;

  
  TRecWec       = record        {Запись данных о жэке}
            name      : TName;
            inf       : Tinf;
            NextElem  : Integer;
            nextInf   : Integer;
            end;
  TFilewec     = file of trecwec;

  TReculica       = record        {Запись данных о Улицы}
            name      : TName;
            inf       : Tinf;
            NextElem  : Integer;
            nextInf   : Integer;
            end;
  TFileUlica     = file of treculica;

  TReckvart   = record         {Запись данных о квартире}
            home      : TInf;
            namber    : TInf;
            inf       : TInf;
            kolkom    : TInf;
            kolkvmetr : TInf;
            NextElem  : Integer;
            end;
  TFilekvart  = file of TReckvart;


Но неудобство составило при связивание уровней, что нужно писать для каждого типа свою процедуру

  procedure Init_FileRayon(var f:TFileRayon);
  procedure Init_Filewec(var f:TFileWec);
  procedure Init_Fileulica(var f:TFileulica);
  procedure Init_Filekvart(var f:TFilekvart);
.....



А теперь вопросы:
Если написать общий тип, для всех уровней ведь многие поля одинакоы,

Type
  Trec= Record
  ....{ общие поля }
  Case byte of 
    1: (...); { поля для 1 уровня }
    2: (...);  {поля для 2 уровня}
    ...
  end;


, то как это отобразится на запрашиваемой памити, будет расход больше или меньше?

При работе с переменной этого типа, если мы прочитаем что-та в "1", а потом во второе "сигнальное значение", то мы потеряем информацию которая хранилась в первом?

Зы: Volvo извини что создал тему на этом форуме, а не на том что указан на сайте

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


Гость






Ты еще и не в том разделе ее создал smile.gif Какая ж теория? Это уже чистой воды программирование...
Цитата
При работе с переменной этого типа, если мы прочитаем что-та в "1", а потом во второе "сигнальное значение", то мы потеряем информацию которая хранилась в первом?
Естественно. вариантная часть записи хранит все варианты в одном месте, за счет этого и экономится память. Но "бесплатных пирожных не бывает" (С), и за это приходится платить: как только записал что-то в один вариант, все остальные безнадежно испорчены...

На самом деле, не совсем понятно, чем тебе наличие этих 4-х процедур инициализации помешало? Можно подумать, если ты сделаешь вариантную запись, то тебе не надо будет такие же 4 процедуры...

На самом деле задачка достаточно просто решается через объекты...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


?
***

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

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


Цитата
Ты еще и не в том разделе ее создал Какая ж теория? Это уже чистой воды программирование...

извиняюсь. Если не там создал то перенесите ее.

Цитата
На самом деле, не совсем понятно, чем тебе наличие этих 4-х процедур инициализации помешало? Можно подумать, если ты сделаешь вариантную запись, то тебе не надо будет такие же 4 процедуры...

Дело в том что тело процедрур этих одинаковое, как и остальных 7(7х4=28) груп процедрур,
rewrite(f);
 rec.NextElem:=-1;
 write(f,rec,rec);
 CloseFile(f);

, лучшеш добавыть один памерт уровень, и иметь 7 вместо 28.

Цитата
На самом деле задачка достаточно просто решается через объекты...

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


Гость






Стоп... Приведи информацию о том, какие данные хранятся у тебя в каждом из этих элементов мультисписка. Что это за поля NextElem/NextInf? Почему целочисленные? Что хранят? Чем типы TRecRayon, TRecWec и TReculica отличаются друг от друга (кроме названий), и зачем надо вводить три разных типа (и три разных процедуры, работающих с этими типами), вместо того, чтобы работать одной процедурой и интерпретировать данные, как тебе нужно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


?
***

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

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


в моем варенте задание реализация мс просходит в файле, тоесть все даны хранянся не в динамической памите а в файле! Поле NextElem - это своеродный указатель на слудующий элемент списка, поскольку файл типизированый то можно через процедуру seek добратся к записи. Поле NextInf - это указатель на под уровень.
Физическое представление структуры:
Прикрепленное изображение

А вот остальные поля этоинформационные, но они могут быть разные, это просто у меня такой варант попался что 2 поля только, Имя и 1 поле информации.
Цитата

Чем типы TRecRayon, TRecWec и TReculica отличаются друг от друга

Это типы уровней, они отличаются предназначением. Они зделаны отддельно.

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


Гость






Цитата
Это типы уровней, они отличаются предназначением. Они зделаны отддельно.
Если они отличаются только предназначением - то делать их раздельными - ОШИБКА. По сути - это одна и та же запись, все эти типы способны читаться и записываться всего двумя процедурами (одна - чтение, другая - запись). А вот ОБРАБАТЫВАТЬ прочитанное значение надо по-разному, естественно. Но это уже не проблема чтения/записи, а проблема неправильного проектирования. Так что:
type
  TName = string[30];
  Tinf = string[254];
  TRec = record
    name      : TName;
    inf       : Tinf;
    NextElem  : Integer;
    nextInf   : Integer;
  end;

  TRecRayon = TRec; { Запись данных о районе }
  TFilerayon = file of TRecrayon;
  
  TRecWec = TRec; { Запись данных о жэке }
  TFilewec = file of trecwec;

  TRecUlica = TRec; { Запись данных о Улицы }
  TFileUlica = file of treculica;

  TReckvart = record         {Запись данных о квартире}
            home      : TInf;
            namber    : TInf;
            inf       : TInf;
            kolkom    : TInf;
            kolkvmetr : TInf;
            NextElem  : Integer;
            end;
  TFilekvart  = file of TReckvart;
...

Нужно более развернуто - присоединяй свою реализацию полностью, посмотрим, как можно исправить...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


?
***

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

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


Цитата
Нужно более развернуто - присоединяй свою реализацию полностью, посмотрим, как можно исправить...

остаточную финальную полностью рабочую версию я щас врятли предоставлю, она на флешки которой рядом нет, есть неполная(там неработает попам и остальные мелкие недочеты)

Насчет типов,вот например типы для соседнего варианта(это мне просто повезло что 2 поля ток и они одинаковы):

TLigaRec = record
naiminovanie:string[20];
comands:integer;
shtab: string[20];
nextLigaRec:longint;
startClubRec:longint;
end;

TClubRec= record
nazvanie: string[20];
city:string[15];
FIOpres: string[20];
sponsor: string[20];
capitan: string[25];
StartTrenerRec:longint;
StartIgrokRec:longint;
NextClubRec:longint;
end;

TTrenerRec= record
FIOtrener: string[20];
specialn: string[15];
stazh:string[7];
kvalif:string[10];
NextTrenerRec:longint;
end;

TIgrokRec= record
FIOigroka:string[20];
Amplua:string[15];
zarplata: string[12];
contract:string[20];
NextIgrocRec:longint;
end;



Проэкт
Прикрепленный файл  Копия.rar ( 265.91 килобайт ) Кол-во скачиваний: 596
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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