IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с внешними файлами, Использование переменных динамического типа
сообщение
Сообщение #1


Интерпретатор


Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


какие тут админы добрые... nea.gif ладно, вот по теме теже самое...
Задача!
Тема:
Работа с внешними файлами

Условие:
Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения):
а) Выбрать самого младшего студента.
б) Выбрать самого старшего.
в) упорядочить по возрасту.


Вот мой ответ:
НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 3 СДЕЛАТЬ



program Z1;
type
info=record
fam,im,ot:string[15];
dr,mr,gr:integer;
end;
Spisok=file of info;
var
inf:info;
spi:spisok;
i,msd,msm,msg,ssd,ssm,ssg,k:integer;
begin
writeln('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв㤥⮢:');
readln(k);
assign(spi,'g:\stud.dat');
rewrite(spi);
for i:=1 to k do
begin
with inf do
begin
writeln('Ќ®¬Ґа бв㤥в : ',i,' ”®а¬ в § ЇЁбЁ: ” ¬Ё«Ёп, ?¬п, ЋвзҐбвў®, „Ґм! ЊҐбпж! ѓ®¤! ஦¤ҐЁп');
readln(fam);
readln(im);
readln(ot);
readln(dr);
readln(mr);
readln(gr);
end;
write(spi,inf);
end;
close(spi);
reset(spi);
{‘ ¬л© ¬« ¤иЁ©}
ssd:=0;
ssm:=0;
ssg:=0;
for i:=1 to k do
begin
read(spi,inf);
if (inf.gr>ssg) then
begin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
if (inf.gr=ssg) then
begin
if (inf.mr>ssm) then
begin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
if (inf.mr=ssm) then
begin
if (inf.dr>ssd) then
begin
ssg:=inf.gr;
ssm:=inf.mr;
ssd:=inf.dr;
end;
end;
end;
end;
close(spi);
reset(spi);

{‘ ¬л© бв аиЁ©}
msd:=ssd;
msm:=ssm;
msg:=ssg;
for i:=1 to k do
begin
read(spi,inf);
if (inf.gr<msg) then
begin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
end;
if (inf.gr=msg) then
begin
if (inf.mr<msm) then
begin
msg:=inf.gr;
msm:=inf.mr;
msd:=inf.dr;
end;
if (inf.mr=msm) then
begin
if (inf.dr<msd) then
begin
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);
{Џ®бв஥ЁҐ бЇЁбЄ }
for i:=1 to k do
begin
read(spi,inf);
if (inf.gr<ssg) then
begin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
if (inf.gr=ssg) then
begin
if (inf.mr<ssm) then
begin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
if (inf.mr=ssm) then
begin
if (inf.dr<ssd) then
begin
writeln('= ',inf.fam,inf.im,inf.ot,inf.dr,inf.mr,inf.gr);
end;
end;
end;
end;
close(spi);
reset(spi);
{+1}
for i:=1 to k do
begin
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);
{‘ЇЁб®Є Ё +1 ўлў®¤Ёв в®«мЄ® ўҐбм ўўҐ¤сл© бЇЁб®Є... ЉЂЉ ”ЏЋђџ„Ћ—?’њ ЏЋ ‚Ћ‡ђЂ‘’”???}
{‚лў®¤ १г«мв в }
for i:=1 to k do
begin
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);
if (msd=inf.dr) and (msm=inf.mr) and (msg=inf.gr) then writeln('‘в аиЁ© бв㤥в= ',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 -


--------------------
Сноп огня в кулаке эта жизнь нажила,
Возжелавшая боли и брани,
Много жизней Орды,
Поле брани берёт,
Гневь и кровь льются реками,
И горят вдалеке полевые костры,
И остры адамантовы грани.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 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;


Цитата
Использование переменных динамического типа

Все о динамических структурах данных. (Списки)
или
Динамические массивы и матрицы
(но использование списков будет проще, потому что для преобразования программы по второй ссылке в то, что требуется тебе, нужно еще довольно много добавить, по крайней мере - не одну строчку кода)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Интерпретатор


Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Хм.. после 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;

BEGIN
ClrScr;

write('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв㤥­в®ў (Є®«-ў® § ЇЁбҐ©):'); readln(k);
Assign(spi,fSpi);
Rewrite(spi);
for i:=1 to k do
begin
with inf do
begin
writeln('‘в㤥­в (§ ЇЁбм) ­®¬Ґа: ',i);
write(' ” ¬Ё«Ёп:'); readln(fam);
write(' €¬п:'); readln(im);
write(' ЋвзҐбвў®:'); readln(ot);
write(' „ в  ஦¤Ґ­Ёп ў д®а¬ вҐ ¤¤.¬¬.ЈЈЈЈ (¤¤-¤Ґ­м, ¬¬-¬Ґбпж, ЈЈЈЈ-Ј®¤):'); readln(ddmmgggg);
uk:=NIL;
end;
obrabotano[i]:=0;
Write(spi,inf);
end;
Close(spi);

{‘ ¬л© ¬« ¤иЁ©}
iMlad:=1;
ggggmmddMax:=-1;

{‘ ¬л© бв аиЁ©}
iStar:=1;
ggggmmddMin:=30001231; {31.12.3000}

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);

{‚лў®¤ ¬« ¤иҐЈ® Ё бв а襣®}
writeln;
writeln('‚ д ©«Ґ ',fSpi,':');
Reset(spi);
for i:=1 to k do
begin
Read(spi,inf);
if i=iMlad then
writeln('Њ« ¤иЁ© N ',i,': ',inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
if i=iStar then
writeln('‘в аиЁ© N ',i,': ',inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
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);

writeln;
if lVozrDate=True then
writeln('‘®авЁа®ўЄ  Ї® гЎлў ­Ёо ў®§а бв  (д ©« ',fSort,'):')
else
writeln('‘®авЁа®ўЄ  Ї® ў®§а бв ­Ёо ў®§а бв  (д ©« ',fSort,'):');
Reset(sort);
for i:=1 to k do
begin
Read(sort,inf);
writeln(inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
end;
Close(sort);

readln;
END.


Список создаёт и всё окей! Переходим к 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 DelFirst;
begin
p:=un;
un:=un^.uk;
Dispose(p);
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;


BEGIN
ClrScr;

New(un);
p:=un;

Assign(spi,fSpi);
Reset(spi);
k:=0;
writeln('‘®¤Ґа¦Ё¬®Ґ д ©«  '+fSpi+':');
while not Eof(spi) do
begin
Inc(k);
Read(spi,inf);
writeln(inf.fam,' ',inf.im,' ',inf.ot,' ',inf.ddmmgggg);
if k=1 then
begin
p^.fam:=inf.fam;
p^.im:=inf.im;
p^.ot:=inf.ot;
p^.ddmmgggg:=inf.ddmmgggg;
p^.uk:=NIL;
end
else
begin
New(q);
q^.fam:=inf.fam;
q^.im:=inf.im;
q^.ot:=inf.ot;
q^.ddmmgggg:=inf.ddmmgggg;
q^.uk:=NIL;
p^.uk:=q;
p:=q;
end;
end;
Close(spi);
readln;
Vyvod('„ ­­лҐ ¤Ё­ ¬ЁзҐбЄ®Ј® бЇЁбЄ :');

{¤®Ї®«­Ґ­ЁҐ бЇЁбЄ  ў ­ з «Ґ}
New(q);
q^.fam:='000';
q^.im:='00';
q^.ot:='0';
q^.ddmmgggg:='01.01.2000';
q^.uk:=un;
un:=q;
Vyvod('„ ­­лҐ ¤Ё­ ¬ЁзҐбЄ®Ј® бЇЁбЄ  (Ї®б«Ґ ¤®Ў ў«Ґ­Ёп ў ­ з «® бЇЁбЄ ):');

{Ї®ЁбЄ Ї®б«Ґ¤­ҐЈ® н«-в  ў бЇЁбЄҐ}
p:=un;
while p^.uk<>NIL do
p:=p^.uk;
{¤®Ї®«­Ґ­ЁҐ бЇЁбЄ  ў Є®­жҐ}
New(q);
q^.fam:='666';
q^.im:='66';
q^.ot:='6';
q^.ddmmgggg:='01.01.1940';
q^.uk:=p^.uk;
p^.uk:=q;
Vyvod('„ ­­лҐ ¤Ё­ ¬ЁзҐбЄ®Ј® бЇЁбЄ  (Ї®б«Ґ ¤®Ў ў«Ґ­Ёп ў Є®­Ґж бЇЁбЄ ):');

{г¤ «Ґ­ЁҐ ЇҐаў®Ј® н«-в }
DelFirst;
Vyvod('„ ­­лҐ ¤Ё­ ¬ЁзҐбЄ®Ј® бЇЁбЄ  (Ї®б«Ґ г¤ «Ґ­Ёп ЇҐаў®Ј® н«-в  бЇЁбЄ ):');

{Ї®ЁбЄ Ї®б«Ґ¤­ҐЈ® н«-в  ў бЇЁбЄҐ Ё ҐЈ® г¤ «Ґ­ЁҐ}
DelLast;
Vyvod('„ ­­лҐ ¤Ё­ ¬ЁзҐбЄ®Ј® бЇЁбЄ  (Ї®б«Ґ г¤ «Ґ­Ёп Ї®б«Ґ¤­ҐЈ® н«-в  бЇЁбЄ ):');

ClrScr;
writeln('„«п ®Ў¬Ґ­  н«Ґ¬Ґ­в®ў ўўҐ¤ЁвҐ Ёе ­®¬Ґа :');
write('ЏҐаўл© н«Ґ¬Ґ­в:'); readln(j);
write('‚в®а®© н«Ґ¬Ґ­в:'); readln(k);
i:=1;
p:=un;
while (i<=j) and (p<>NIL) do
begin
qq1:=p;
p:=p^.uk;
Inc(i);
end;
i:=1;
p:=un;
while (i<=k) and (p<>NIL) do
begin
qq3:=p;
p:=p^.uk;
Inc(i);
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;
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 -


--------------------
Сноп огня в кулаке эта жизнь нажила,
Возжелавшая боли и брани,
Много жизней Орды,
Поле брани берёт,
Гневь и кровь льются реками,
И горят вдалеке полевые костры,
И остры адамантовы грани.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 22:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name