какие тут админы добрые... ладно, вот по теме теже самое... Задача! Тема: Работа с внешними файлами Условие: Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения): а) Выбрать самого младшего студента. б) Выбрать самого старшего. в) упорядочить по возрасту.
Вот мой ответ: НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 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. Поменять местами элементы: а) с заданными номерами; б) с заданными ключами. Вот мой ответ: ХЗ
volvo
28.11.2006 13:30
Цитата
НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ
Ты хочешь упорядочивать прямо в файле? Можно, конечно, по тому же принципу, как делается любая из сортировок массива, только вместо обращения к элементу массива обращаешься к записи файла... Для примера: если брать "Пузырек": Методы сортировок , то нечто подобное в файле будет выглядеть так:
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;
Цитата
Использование переменных динамического типа
Все о динамических структурах данных. (Списки) или Динамические массивы и матрицы (но использование списков будет проще, потому что для преобразования программы по второй ссылке в то, что требуется тебе, нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
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; {‘(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: