1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Работа с внешними файлами, Использование переменных динамического типа
какие тут админы добрые... ладно, вот по теме теже самое... Задача! Тема: Работа с внешними файлами Условие: Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения): а) Выбрать самого младшего студента. б) Выбрать самого старшего. в) упорядочить по возрасту.
Вот мой ответ: НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ
Задача 1.1! Тема: Использование переменных динамического типа Условие:
1. Создать однонаправленный список, состоящий из элементов, в качестве дынных которых используются записи из задачи 1 2. Вывести на экран данные динамического списка на экран 3. Дополнить список в начале и в конце... 4. Удалить элемент: а) первый в списке б) последний в списке в) с заданным номером г) с заданным ключём 5. Поменять местами элементы: а) с заданными номерами; б) с заданными ключами. Вот мой ответ: ХЗ
Сообщение отредактировано: DCRM -
--------------------
Сноп огня в кулаке эта жизнь нажила, Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани.
Ты хочешь упорядочивать прямо в файле? Можно, конечно, по тому же принципу, как делается любая из сортировок массива, только вместо обращения к элементу массива обращаешься к записи файла... Для примера: если брать "Пузырек": Методы сортировок , то нечто подобное в файле будет выглядеть так:
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;
Цитата
Использование переменных динамического типа
Все о динамических структурах данных. (Списки) или Динамические массивы и матрицы (но использование списков будет проще, потому что для преобразования программы по второй ссылке в то, что требуется тебе, нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
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;
ClrScr; writeln('„«п ®Ў¬Ґ н«Ґ¬Ґв®ў ўўҐ¤ЁвҐ Є«озЁ (д ¬Ё«Ёо):'); write('ЏҐаў п д ¬Ё«Ёп:'); readln(famj); write('‚в®а п д ¬Ё«Ёп:'); readln(famk); worked:=true; p:=un; while (worked) and (p<>NIL) do begin qq1:=p; if Pos(famj,p^.fam)>0 then worked:=false; p:=p^.uk; end; worked:=true; p:=un; while (worked) and (p<>NIL) do begin qq3:=p; if Pos(famk,p^.fam)>0 then worked:=false; p:=p^.uk; end; {®Ў¬Ґ} e^.fam:=qq1^.fam; e^.im:=qq1^.im; e^.ot:=qq1^.ot; e^.ddmmgggg:=qq1^.ddmmgggg; qq1^.fam:=qq3^.fam; qq1^.im:=qq3^.im; qq1^.ot:=qq3^.ot; qq1^.ddmmgggg:=qq3^.ddmmgggg; qq3^.fam:=e^.fam; qq3^.im:=e^.im; qq3^.ot:=e^.ot; qq3^.ddmmgggg:=e^.ddmmgggg; Vyvod('‘ЇЁб®Є (Ї®б«Ґ ®Ў¬Ґ н«-в®ў Ї® Ёе Є«оз ¬):');
ClrScr; write('„«п г¤ «ҐЁп н«Ґ¬Ґв ўўҐ¤ЁвҐ ҐЈ® ®¬Ґа:'); readln(j); k:=0; p:=un; while p<>NIL do begin p:=p^.uk; Inc(k); end; if j=1 then DelFirst else if j=k then DelLast else DelOther(j); Vyvod('‘ЇЁб®Є Ї®б«Ґ г¤ «ҐЁп н«-в Ї® ҐЈ® ®¬Ґаг:');
ClrScr; write('„«п г¤ «ҐЁп н«Ґ¬Ґв ўўҐ¤ЁвҐ ҐЈ® Є«оз (д ¬Ё«Ёо):'); readln(famj); worked:=true; {Ї® д ¬Ё«ЁЁ ®ЇаҐ¤Ґ«пҐ¬ ®¬Ґа н«-в } j:=0; p:=un; while (worked) and (p<>NIL) do begin Inc(j); if Pos(famj,p^.fam)>0 then worked:=false; p:=p^.uk; end; if j=1 then DelFirst else if j=k then DelLast else DelOther(j); Vyvod('‘ЇЁб®Є Ї®б«Ґ г¤ «ҐЁп н«-в Ї® ҐЈ® Є«озг:');
{гЁз⮦ҐЁҐ ¤Ё.ЇҐаҐ¬Ґле} p:=un; while p<>NIL do begin p:=p^.uk; Dispose(un); un:=p; end; END.
:wacko: :wacko: :wacko:
Цитата(volvo @ 28.11.2006 9:30)
нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
да уж... всего 3 сотни строчек...)))
Сообщение отредактировано: DCRM -
--------------------
Сноп огня в кулаке эта жизнь нажила, Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани.