1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Работа с внешними файлами, Использование переменных динамического типа
какие тут админы добрые... ладно, вот по теме теже самое... Задача! Тема: Работа с внешними файлами Условие: Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения): а) Выбрать самого младшего студента. б) Выбрать самого старшего. в) упорядочить по возрасту.
Вот мой ответ: НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ
Задача 1.1! Тема: Использование переменных динамического типа Условие:
1. Создать однонаправленный список, состоящий из элементов, в качестве дынных которых используются записи из задачи 1 2. Вывести на экран данные динамического списка на экран 3. Дополнить список в начале и в конце... 4. Удалить элемент: а) первый в списке б) последний в списке в) с заданным номером г) с заданным ключём 5. Поменять местами элементы: а) с заданными номерами; б) с заданными ключами. Вот мой ответ: ХЗ
Сообщение отредактировано: DCRM - 28.11.2006 2:43
--------------------
Сноп огня в кулаке эта жизнь нажила, Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани.
Ты хочешь упорядочивать прямо в файле? Можно, конечно, по тому же принципу, как делается любая из сортировок массива, только вместо обращения к элементу массива обращаешься к записи файла... Для примера: если брать "Пузырек": Методы сортировок , то нечто подобное в файле будет выглядеть так:
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 - 29.11.2006 15:21
--------------------
Сноп огня в кулаке эта жизнь нажила, Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани.