какие тут админы добрые... ладно, вот по теме теже самое... Задача! Тема: Работа с внешними файлами Условие: Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения): а) Выбрать самого младшего студента. б) Выбрать самого старшего. в) упорядочить по возрасту.
Вот мой ответ: НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ
Задача 1.1! Тема: Использование переменных динамического типа Условие:
1. Создать однонаправленный список, состоящий из элементов, в качестве дынных которых используются записи из задачи 1 2. Вывести на экран данные динамического списка на экран 3. Дополнить список в начале и в конце... 4. Удалить элемент: а) первый в списке б) последний в списке в) с заданным номером г) с заданным ключём 5. Поменять местами элементы: а) с заданными номерами; б) с заданными ключами. Вот мой ответ: ХЗ
volvo
28.11.2006 13:30
Цитата
НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ
Ты хочешь упорядочивать прямо в файле? Можно, конечно, по тому же принципу, как делается любая из сортировок массива, только вместо обращения к элементу массива обращаешься к записи файла... Для примера: если брать "Пузырек": Методы сортировок , то нечто подобное в файле будет выглядеть так:
For i := 1 To FileSize(f) Do For j := FileSize(f) DownTo i+1 Do Begin Seek(f, j - 1); Read(f, Xj); Seek(f, j - 2); Read(f, Xpred_j); If Xpred_j > Xj Then Begin Seek(f, j - 2); Write(Xj); { <--- на позицию pred_j пишем то, что было в j } Seek(f, j - 1); Write(Xpred_j); { <--- и наоборот... Результат - поменяли местами записи } End End;
Цитата
Использование переменных динамического типа
Все о динамических структурах данных. (Списки) или Динамические массивы и матрицы (но использование списков будет проще, потому что для преобразования программы по второй ссылке в то, что требуется тебе, нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
DCRM
29.11.2006 19:27
Хм.. после 2.5х бессонных ночей вот что навоял! 9я! Работает!!! Вот код:
Program Lab_9_v1; uses Crt; const fSpi='c:\Stud.dat'; fSort='c:\StudSort.dat'; kMax=100; lVozrDate=True; {‘®авЁа®ўЄ True-Ї® ў®§а бв Ёо ¤ вл,False-Ї® гЎлў Ёо} type ukinfo=^info; info=record fam,im,ot:string[15]; ddmmgggg:string[10]; uk:ukinfo; end; Spisok=file of info; var inf:info; spi,sort:spisok; i,k,iMlad,iStar,j:integer; ggggmmddMin,ggggmmddMax,ggggmmddSt:longint; obrabotano:array[1..kMax] of byte;
{Ќ ўе®¤Ґ бЁ¬ў®«м п ¤¤.¬¬.ЈЈЈЈ, ўл室Ґ зЁб«®ў п ЈЈЈЈ¬¬¬¤¤} function Date(dd_mm_gggg:string):longint; var code:integer; den,mes,god:longint; begin Val(Copy(dd_mm_gggg,1,2),den,code); Val(Copy(dd_mm_gggg,4,2),mes,code); Val(Copy(dd_mm_gggg,7,4),god,code); Date:=god*10000+mes*100+den; end;
Reset(spi); for i:=1 to k do begin Read(spi,inf); ggggmmddSt:=Date(inf.ddmmgggg); if ggggmmddSt>ggggmmddMax then begin ggggmmddMax:=ggggmmddSt; iMlad:=i; end; if ggggmmddSt<ggggmmddMin then begin ggggmmddMin:=ggggmmddSt; iStar:=i; end; end; Close(spi);
{lVozrDate=True - ‘®авЁа㥬 Ї® ў®§а бв Ёо ¤ вл ஦¤ҐЁп, в.Ґ. Ї® гЎлў Ёо ў®§а бв } {lVozrDate=False - ‘®авЁа㥬 Ї® гЎлў Ёо ¤ вл ஦¤ҐЁп, в.Ґ. Ї® ў®§а бв Ёо ў®§а бв } {€бЇ®«м§гҐ¬ ¬ ббЁў obrabotano: н«-в=1-§ ЇЁбм 㦥 ®Ўа Ў®в , ў Їа®вЁў®¬ б«гз Ґ =0} Assign(sort,fSort); Rewrite(sort); for i:=1 to k do begin if lVozrDate=True then ggggmmddMin:=30001231 {31.12.3000 ¤ в ஦¤ҐЁп б ¬®Ј® бв а襣®} else ggggmmddMax:=-1; Reset(spi); for j:=1 to k do begin Read(spi,inf); ggggmmddSt:=Date(inf.ddmmgggg); if (obrabotano[j]=0) and ( ((lVozrDate=True) and (ggggmmddSt<=ggggmmddMin)) or ((lVozrDate=False) and (ggggmmddSt>=ggggmmddMax)) ) then begin ggggmmddMin:=ggggmmddSt; ggggmmddMax:=ggggmmddSt; iStar:=j; end; end; Close(spi); Reset(spi); for j:=1 to k do begin Read(spi,inf); if j=iStar then begin obrabotano[j]:=1; Write(sort,inf); end; end; Close(spi); end; Close(sort);
Список создаёт и всё окей! Переходим к 10... но тут всё сложнее... Почему то нафиг вылетает(в прямом смысле этого слова! Винда ошибку какую то говорит... типа недопустимая операция по адресу... закрыть/пропустить, делал на 6ой версии паскаля... у нас в интсте 7я...) с ошибкой при перестановке по указателю и номеру... а так УСЁ работает!!! :wacko:
Program Lab_10_v1; uses Crt; const fSpi='c:\Stud.dat'; type ukinfo=^info; info=record fam,im,ot:string[15]; ddmmgggg:string[10]; uk:ukinfo; end; Spisok=file of info; var inf:info; spi:spisok; un,p,q,qq1,qq3,e:ukinfo; i,k,j:integer; famj,famk:string[15]; worked:boolean;
{ўлў®¤ ¤Ё.ЇҐаҐ¬Ґле} procedure Vyvod (msg:string); begin ClrScr; writeln(msg); p:=un; while p<>NIL do begin writeln(p^.fam,' ',p^.im,' ',p^.ot,' ',p^.ddmmgggg); p:=p^.uk; end; readln; end;
{Ї®ЁбЄ Ї®б«Ґ¤ҐЈ® н«-в ў бЇЁбЄҐ Ё ҐЈ® г¤ «ҐЁҐ} procedure DelLast; begin p:=un; while p^.uk<>NIL do begin q:=p; p:=p^.uk; end; q^.uk:=NIL; Dispose(p); end;
{г¤ «ҐЁҐ н«-в ў бЇЁбЄҐ Ї® ҐЈ® ®¬Ґаг} procedure DelOther(nomer:integer); var pred:integer; begin p:=un; pred:=1; while (pred<=nomer-2) and (p<>NIL) do begin Inc(pred); p:=p^.uk; end; q:=p^.uk; p^.uk:=q^.uk; Dispose(q); end;