![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
DCRM |
![]() ![]()
Сообщение
#1
|
Интерпретатор Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
какие тут админы добрые...
![]() Задача! Тема: Работа с внешними файлами Условие: Создать файл, содержащий сведения о студентах вашей группы (ФИО, дата рождения): а) Выбрать самого младшего студента. б) Выбрать самого старшего. в) упорядочить по возрасту. Вот мой ответ: НЕ МОГУ ДОЕХАТЬ КАК ПУНКТ 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('‚ўҐ¤ЁвҐ Є(r)«ЁзҐбвў(r) бв㤥(r)ў:');
readln(k);
assign(spi,'g:\stud.dat');
rewrite(spi);
for i:=1 to k do
begin
with inf do
begin
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:=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);
{‘ ¬л(c) бв аиЁ(c)}
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);
{Џ(r)бва(r)ҐЁҐ бЇЁбЄ }
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);
{‘ЇЁб(r)Є Ё +1 ўлў(r)¤Ёв (r)«мЄ(r) ўҐбм ўўҐ¤сл(c) бЇЁб(r)Є... ЉЂЉ ”ЏЋђџ„Ћ—?’њ ЏЋ ‚Ћ‡ђЂ‘’”???}
{‚лў(r)¤ १г«мв в }
for i:=1 to k do
begin
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 - 28.11.2006 2:43 -------------------- Сноп огня в кулаке эта жизнь нажила,
Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани. |
![]() ![]() |
volvo |
![]()
Сообщение
#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;
Цитата Использование переменных динамического типа Все о динамических структурах данных. (Списки) или Динамические массивы и матрицы (но использование списков будет проще, потому что для преобразования программы по второй ссылке в то, что требуется тебе, нужно еще довольно много добавить, по крайней мере - не одну строчку кода) |
DCRM |
![]() ![]()
Сообщение
#3
|
Интерпретатор Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хм.. после 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=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;
{Ќ ўе(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:=1 to k do
begin
with inf do
begin
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:=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);
{‚лў(r)¤ ¬« ¤иҐЈ(r) Ё бв а襣(r)}
writeln;
writeln('‚ д (c)«Ґ ',fSpi,':');
Reset(spi);
for i:=1 to k do
begin
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:=1 to k do
begin
if lVozrDate=True then
ggggmmddMin:=30001231 {31.12.3000 ¤ в а(r)¦¤ҐЁп б ¬(r)Ј(r) бв а襣(r)}
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('‘(r)авЁа(r)ўЄ Ї(r) гЎлў Ёо ў(r)§а бв (д (c)« ',fSort,'):')
else
writeln('‘(r)авЁа(r)ўЄ Ї(r) ў(r)§а бв Ёо ў(r)§а бв (д (c)« ',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;
{ўлў(r)¤ ¤Ё.ЇҐаҐ¬Ґле}
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;
{г¤ «ҐЁҐ ЇҐаў(r)Ј(r) н«-в }
procedure DelFirst;
begin
p:=un;
un:=un^.uk;
Dispose(p);
end;
{Ї(r)ЁбЄ Ї(r)б«Ґ¤ҐЈ(r) н«-в ў бЇЁбЄҐ Ё ҐЈ(r) г¤ «ҐЁҐ}
procedure DelLast;
begin
p:=un;
while p^.uk<>NIL do
begin
q:=p;
p:=p^.uk;
end;
q^.uk:=NIL;
Dispose(p);
end;
{г¤ «ҐЁҐ н«-в ў бЇЁбЄҐ Ї(r) ҐЈ(r) (r)¬Ґаг}
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('‘(r)¤Ґа¦Ё¬(r)Ґ д (c)« '+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('„ лҐ ¤Ё ¬ЁзҐбЄ(r)Ј(r) бЇЁбЄ :');
{¤(r)Ї(r)«ҐЁҐ бЇЁбЄ ў з «Ґ}
New(q);
q^.fam:='000';
q^.im:='00';
q^.ot:='0';
q^.ddmmgggg:='01.01.2000';
q^.uk:=un;
un:=q;
Vyvod('„ лҐ ¤Ё ¬ЁзҐбЄ(r)Ј(r) бЇЁбЄ (Ї(r)б«Ґ ¤(r)Ў ў«ҐЁп ў з «(r) бЇЁбЄ ):');
{Ї(r)ЁбЄ Ї(r)б«Ґ¤ҐЈ(r) н«-в ў бЇЁбЄҐ}
p:=un;
while p^.uk<>NIL do
p:=p^.uk;
{¤(r)Ї(r)«ҐЁҐ бЇЁбЄ ў Є(r)жҐ}
New(q);
q^.fam:='666';
q^.im:='66';
q^.ot:='6';
q^.ddmmgggg:='01.01.1940';
q^.uk:=p^.uk;
p^.uk:=q;
Vyvod('„ лҐ ¤Ё ¬ЁзҐбЄ(r)Ј(r) бЇЁбЄ (Ї(r)б«Ґ ¤(r)Ў ў«ҐЁп ў Є(r)Ґж бЇЁбЄ ):');
{г¤ «ҐЁҐ ЇҐаў(r)Ј(r) н«-в }
DelFirst;
Vyvod('„ лҐ ¤Ё ¬ЁзҐбЄ(r)Ј(r) бЇЁбЄ (Ї(r)б«Ґ г¤ «ҐЁп ЇҐаў(r)Ј(r) н«-в бЇЁбЄ ):');
{Ї(r)ЁбЄ Ї(r)б«Ґ¤ҐЈ(r) н«-в ў бЇЁбЄҐ Ё ҐЈ(r) г¤ «ҐЁҐ}
DelLast;
Vyvod('„ лҐ ¤Ё ¬ЁзҐбЄ(r)Ј(r) бЇЁбЄ (Ї(r)б«Ґ г¤ «ҐЁп Ї(r)б«Ґ¤ҐЈ(r) н«-в бЇЁбЄ ):');
ClrScr;
writeln('„«п (r)Ў¬Ґ н«Ґ¬Ґ(r)ў ўўҐ¤ЁвҐ Ёе (r)¬Ґа :');
write('ЏҐаўл(c) н«Ґ¬Ґв:'); readln(j);
write('‚(r)а(r)(c) н«Ґ¬Ґв:'); 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;
{(r)Ў¬Ґ}
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('‘ЇЁб(r)Є (Ї(r)б«Ґ (r)Ў¬Ґ н«-(r)ў Ї(r) Ёе (r)¬Ґа ¬):');
ClrScr;
writeln('„«п (r)Ў¬Ґ н«Ґ¬Ґ(r)ў ўўҐ¤ЁвҐ Є«озЁ (д ¬Ё«Ёо):');
write('ЏҐаў п д ¬Ё«Ёп:'); readln(famj);
write('‚(r)а п д ¬Ё«Ёп:'); 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;
{(r)Ў¬Ґ}
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('‘ЇЁб(r)Є (Ї(r)б«Ґ (r)Ў¬Ґ н«-(r)ў Ї(r) Ёе Є«оз ¬):');
ClrScr;
write('„«п г¤ «ҐЁп н«Ґ¬Ґв ўўҐ¤ЁвҐ ҐЈ(r) (r)¬Ґа:'); 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('‘ЇЁб(r)Є Ї(r)б«Ґ г¤ «ҐЁп н«-в Ї(r) ҐЈ(r) (r)¬Ґаг:');
ClrScr;
write('„«п г¤ «ҐЁп н«Ґ¬Ґв ўўҐ¤ЁвҐ ҐЈ(r) Є«оз (д ¬Ё«Ёо):'); readln(famj);
worked:=true;
{Ї(r) д ¬Ё«ЁЁ (r)ЇаҐ¤Ґ«пҐ¬ (r)¬Ґа н«-в }
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('‘ЇЁб(r)Є Ї(r)б«Ґ г¤ «ҐЁп н«-в Ї(r) ҐЈ(r) Є«озг:');
{гЁз(r)¦ҐЁҐ ¤Ё.ЇҐаҐ¬Ґле}
p:=un;
while p<>NIL do
begin
p:=p^.uk;
Dispose(un);
un:=p;
end;
END.
:wacko: :wacko: :wacko: нужно еще довольно много добавить, по крайней мере - не одну строчку кода) да уж... всего 3 сотни строчек...))) Сообщение отредактировано: DCRM - 29.11.2006 15:21 -------------------- Сноп огня в кулаке эта жизнь нажила,
Возжелавшая боли и брани, Много жизней Орды, Поле брани берёт, Гневь и кровь льются реками, И горят вдалеке полевые костры, И остры адамантовы грани. |
![]() ![]() |
![]() |
Текстовая версия | 25.07.2025 22:11 |