1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Работа с внешними файлами, Использование переменных динамического типа
какие тут админы добрые... ладно, вот по теме теже самое... Задача! Тема: Работа с внешними файлами Условие: Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения): а) Выбрать самого младшего студента. б) Выбрать самого старшего. в) упорядочить по возрасту.
Вот мой ответ: НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ
program Z1;
type
info=record
fam,im,ot:string[15];
dr,mr,gr:integer;
end;
Spisok=fileof info;
var
inf:info;
spi:spisok;
i,msd,msm,msg,ssd,ssm,ssg,k:integer;
begin
writeln('‚ўҐ¤ЁвҐ Є(r)«ЁзҐбвў(r) бв㤥в(r)ў:');
readln(k);
assign(spi,'g:\stud.dat');
rewrite(spi);
for i:=1to k dobeginwith inf dobegin
writeln('Ќ(r)¬Ґа бв㤥в : ',i,' ”(r)а¬ в § ЇЁбЁ: ” ¬Ё«Ёп, ?¬п, ЋвзҐбвў(r), „Ґм! ЊҐбпж! ѓ(r)¤! а(r)¦¤ҐЁп');
readln(fam);
readln(im);
readln(ot);
readln(dr);
readln(mr);
readln(gr);
end;
write(spi,inf);
end;
close(spi);
reset(spi);
{‘ ¬л(c) ¬« ¤иЁ(c)}
ssd:=0;
ssm:=0;
ssg:=0;
for i:=1to k dobegin
read(spi,inf);
if (inf.gr>ssg) thenbegin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
if (inf.gr=ssg) thenbeginif (inf.mr>ssm) thenbegin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
if (inf.mr=ssm) thenbeginif (inf.dr>ssd) thenbegin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
end;
end;
end;
close(spi);
reset(spi);
{‘ ¬л(c) бв аиЁ(c)}
msd:=ssd;
msm:=ssm;
msg:=ssg;
for i:=1to k dobegin
read(spi,inf);
if (inf.gr<msg) thenbegin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
end;
if (inf.gr=msg) thenbeginif (inf.mr<msm) thenbegin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
end;
if (inf.mr=msm) thenbeginif (inf.dr<msd) thenbegin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
writeln('=! ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
end;
end;
end;
close(spi);
reset(spi);
{Џ(r)бва(r)ҐЁҐ бЇЁбЄ }for i:=1to k dobegin
read(spi,inf);
if (inf.gr<ssg) thenbegin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
if (inf.gr=ssg) thenbeginif (inf.mr<ssm) thenbegin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
if (inf.mr=ssm) thenbeginif (inf.dr<ssd) thenbegin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
end;
end;
end;
close(spi);
reset(spi);
{+1}for i:=1to k dobegin
read(spi,inf);
if (ssd=inf.dr) and (ssm=inf.mr) and (ssg=inf.gr) then writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
close(spi);
reset(spi);
{‘ЇЁб(r)Є Ё +1 ўлў(r)¤Ёв в(r)«мЄ(r) ўҐбм ўўҐ¤сл(c) бЇЁб(r)Є... ЉЂЉ ”ЏЋђџ„Ћ—?’њ ЏЋ ‚Ћ‡ђЂ‘’”???}{‚лў(r)¤ १г«мв в }for i:=1to k dobegin
read(spi,inf);
if (ssd=inf.dr) and (ssm=inf.mr) and (ssg=inf.gr) then writeln('Њ« ¤иЁ(c) бв㤥в= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
if (msd=inf.dr) and (msm=inf.mr) and (msg=inf.gr) then writeln('‘в аиЁ(c) бв㤥в= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
close(spi);
readln;
end.
Задача 1.1! Тема: Использование переменных динамического типа Условие:
1. Создать однонаправленный список, состоящий из элементов, в качестве дынных которых используются записи из задачи 1 2. Вывести на экран данные динамического списка на экран 3. Дополнить список в начале и в конце... 4. Удалить элемент: а) первый в списке б) последний в списке в) с заданным номером г) с заданным ключём 5. Поменять местами элементы: а) с заданными номерами; б) с заданными ключами. Вот мой ответ: ХЗ
Сообщение отредактировано: DCRM -
--------------------
Сноп огня в кулаке эта жизнь нажила, Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани.
Ты хочешь упорядочивать прямо в файле? Можно, конечно, по тому же принципу, как делается любая из сортировок массива, только вместо обращения к элементу массива обращаешься к записи файла... Для примера: если брать "Пузырек": Методы сортировок , то нечто подобное в файле будет выглядеть так:
For i := 1To FileSize(f) DoFor j := FileSize(f) DownTo i+1DoBegin
Seek(f, j - 1); Read(f, Xj);
Seek(f, j - 2); Read(f, Xpred_j);
If Xpred_j > Xj ThenBegin
Seek(f, j - 2); Write(Xj); { <--- на позицию pred_j пишем то, что было в j }
Seek(f, j - 1); Write(Xpred_j); { <--- и наоборот... Результат - поменяли местами записи }EndEnd;
Цитата
Использование переменных динамического типа
Все о динамических структурах данных. (Списки) или Динамические массивы и матрицы (но использование списков будет проще, потому что для преобразования программы по второй ссылке в то, что требуется тебе, нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
Хм.. после 2.5х бессонных ночей вот что навоял! 9я! Работает!!! Вот код:
Program Lab_9_v1;
uses
Crt;
const
fSpi='c:\Stud.dat';
fSort='c:\StudSort.dat';
kMax=100;
lVozrDate=True; {‘(r)авЁа(r)ўЄ True-Ї(r) ў(r)§а бв Ёо ¤ вл,False-Ї(r) гЎлў Ёо}type
ukinfo=^info;
info=record
fam,im,ot:string[15];
ddmmgggg:string[10];
uk:ukinfo;
end;
Spisok=fileof info;
var
inf:info;
spi,sort:spisok;
i,k,iMlad,iStar,j:integer;
ggggmmddMin,ggggmmddMax,ggggmmddSt:longint;
obrabotano:array[1..kMax] of byte;
{Ќ ўе(r)¤Ґ бЁ¬ў(r)«м п ¤¤.¬¬.ЈЈЈЈ, ўле(r)¤Ґ зЁб«(r)ў п ЈЈЈЈ¬¬¬¤¤}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;
BEGIN
ClrScr;
write('‚ўҐ¤ЁвҐ Є(r)«ЁзҐбвў(r) бв㤥в(r)ў (Є(r)«-ў(r) § ЇЁбҐ(c)):'); readln(k);
Assign(spi,fSpi);
Rewrite(spi);
for i:=1to k dobeginwith inf dobegin
writeln('‘в㤥в (§ ЇЁбм) (r)¬Ґа: ',i);
write(' ” ¬Ё«Ёп:'); readln(fam);
write(' €¬п:'); readln(im);
write(' ЋвзҐбвў(r):'); readln(ot);
write(' „ в а(r)¦¤ҐЁп ў д(r)ଠ⥠¤¤.¬¬.ЈЈЈЈ (¤¤-¤Ґм, ¬¬-¬Ґбпж, ЈЈЈЈ-Ј(r)¤):'); readln(ddmmgggg);
uk:=NIL;
end;
obrabotano[i]:=0;
Write(spi,inf);
end;
Close(spi);
{‘ ¬л(c) ¬« ¤иЁ(c)}
iMlad:=1;
ggggmmddMax:=-1;
{‘ ¬л(c) бв аиЁ(c)}
iStar:=1;
ggggmmddMin:=30001231; {31.12.3000}
Reset(spi);
for i:=1to k dobegin
Read(spi,inf);
ggggmmddSt:=Date(inf.ddmmgggg);
if ggggmmddSt>ggggmmddMax thenbegin
ggggmmddMax:=ggggmmddSt;
iMlad:=i;
end;
if ggggmmddSt<ggggmmddMin thenbegin
ggggmmddMin:=ggggmmddSt;
iStar:=i;
end;
end;
Close(spi);
{‚лў(r)¤ ¬« ¤иҐЈ(r) Ё бв а襣(r)}
writeln;
writeln('‚ д (c)«Ґ ',fSpi,':');
Reset(spi);
for i:=1to k dobegin
Read(spi,inf);
if i=iMlad then
writeln('Њ« ¤иЁ(c) N ',i,': ',inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
if i=iStar then
writeln('‘в аиЁ(c) N ',i,': ',inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
end;
Close(spi);
{lVozrDate=True - ‘(r)авЁа㥬 Ї(r) ў(r)§а бв Ёо ¤ вл а(r)¦¤ҐЁп, в.Ґ. Ї(r) гЎлў Ёо ў(r)§а бв }{lVozrDate=False - ‘(r)авЁа㥬 Ї(r) гЎлў Ёо ¤ вл а(r)¦¤ҐЁп, в.Ґ. Ї(r) ў(r)§а бв Ёо ў(r)§а бв }{€бЇ(r)«м§гҐ¬ ¬ ббЁў obrabotano: н«-в=1-§ ЇЁбм 㦥 (r)Ўа Ў(r)в , ў Їа(r)вЁў(r)¬ б«гз Ґ =0}
Assign(sort,fSort);
Rewrite(sort);
for i:=1to k dobeginif lVozrDate=True then
ggggmmddMin:=30001231{31.12.3000 ¤ в а(r)¦¤ҐЁп б ¬(r)Ј(r) бв а襣(r)}else
ggggmmddMax:=-1;
Reset(spi);
for j:=1to k dobegin
Read(spi,inf);
ggggmmddSt:=Date(inf.ddmmgggg);
if (obrabotano[j]=0) and
( ((lVozrDate=True) and (ggggmmddSt<=ggggmmddMin)) or
((lVozrDate=False) and (ggggmmddSt>=ggggmmddMax)) ) thenbegin
ggggmmddMin:=ggggmmddSt;
ggggmmddMax:=ggggmmddSt;
iStar:=j;
end;
end;
Close(spi);
Reset(spi);
for j:=1to k dobegin
Read(spi,inf);
if j=iStar thenbegin
obrabotano[j]:=1;
Write(sort,inf);
end;
end;
Close(spi);
end;
Close(sort);
writeln;
if lVozrDate=True then
writeln('‘(r)авЁа(r)ўЄ Ї(r) гЎлў Ёо ў(r)§а бв (д (c)« ',fSort,'):')
else
writeln('‘(r)авЁа(r)ўЄ Ї(r) ў(r)§а бв Ёо ў(r)§а бв (д (c)« ',fSort,'):');
Reset(sort);
for i:=1to k dobegin
Read(sort,inf);
writeln(inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
end;
Close(sort);
readln;
END.
Список создаёт и всё окей! Переходим к 10... но тут всё сложнее... Почему то нафиг вылетает(в прямом смысле этого слова! Винда ошибку какую то говорит... типа недопустимая операция по адресу... закрыть/пропустить, делал на 6ой версии паскаля... у нас в интсте 7я...) с ошибкой при перестановке по указателю и номеру... а так УСЁ работает!!! :wacko:
нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
да уж... всего 3 сотни строчек...)))
Сообщение отредактировано: DCRM -
--------------------
Сноп огня в кулаке эта жизнь нажила, Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани.