Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Ссылочный тип данных

Автор: MyNameIs 18.12.2006 20:54

Очень нужна во вторник задача, точнее лаба. Без неё на экзамен не допустят mega_chok.gif

Задача на ссылки.

Составить список группы, содержащей 15 человек. Указать для каждого студента оценки, полученные на последних экзаменах. Разработать программу, позволяющую вводить данные о студентах, заносить эту инфу в файл dan.dat.
Включить в список инфу, относящуюся к студентам, у которых больше одной 2. Добавить в конец списка студентов, имеющих хотябы 1 двойку. Удалить из начала списка 2 студентов.

Вот сдесь я пытался чтото делать, но ничего не выходить good.gif Выручайте...

program ddddddddd;
uses crt;
type point=^stud;
stud=record
fam:string[25];
mat:integer;
rus:integer;
istor:integer;
him:integer;
fiz:integer;
next:point;
end;
point1=^stud1;
stud1=record
fam:string[25];
mat:integer;
rus:integer;
istor:integer;
him:integer;
fiz:integer;
next:point;
end;
point2=^stud2;
stud2=record
fam:string[25];
mat:integer;
rus:integer;
istor:integer;
him:integer;
fiz:integer;
next:point;
end;
point3=^stud3;
stud3=record
fam:string[25];
mat:integer;
rus:integer;
istor:integer;
him:integer;
fiz:integer;
next:point;
end;
var
f: text;
n,n1,n3,i:integer;
d,tmp,p,t:point;
d1,tmp1,p1,t1:point;
d2,tmp2,p2,t2:point;
d3,tmp3,p3,t3:point;
k:integer;
begin
clrscr;
t:=nil;
t1:=nil;
assign(f,'den.dat'); rewrite(f);
writeln('Vvedite kolichestvo studentov[15..]');readln (n);
for i:=1 to n do begin
new(tmp);
write ('Fam=> ');readln(tmp^.fam); writeln(f,tmp^.fam);
write ('Mat=> ');readln(tmp^.mat);writeln(f,tmp^.mat) ;
write ('Rus=> ');readln(tmp^.rus);writeln(f,tmp^.rus) ;
write ('Istor=> ');readln(tmp^.istor);writeln(f,tmp^.istor) ;
write ('Him=> ');readln(tmp^.him); writeln(f,tmp^.him) ;
write ('Fiz=> ');readln(tmp^.fiz);writeln(f,tmp^.fiz) ;
tmp^.next:=t;
t:=tmp;
end;
close(f);
clrscr;
while (t<>nil) do begin
writeln(t^.fam,' ', t^.mat,' ', t^.rus,' ', t^.istor,' ', t^.him ,' ',t^.fiz);
t:=t^.next;
end;
{Formirovanie new}
t:=tmp;
n1:=1;
for i:=1 to n do begin
k:=0;
if (t^.mat=2) then k:=k+1;
if (t^.rus=2) then k:=k+1;
if (t^.istor=2) then k:=k+1;
if (t^.him=2) then k:=k+1;
if (t^.fiz=2) then k:=k+1;
if (k>1) then begin
new (tmp1);
tmp1^.fam:=tmp^.fam;
tmp1^.mat:=tmp^.mat;
tmp1^.rus:=tmp^.rus;
tmp1^.istor:=tmp^.istor;
tmp1^.him:=tmp^.him;
tmp1^.fiz:=tmp^.fiz;
tmp1^.next:=t1;
t1:=tmp1;
n1:=n1+1;
end;
end;

{Dobavlenie}
for i:=1 to n do begin
k:=0;
if (t^.mat=2) then k:=k+1;
if (t^.rus=2) then k:=k+1;
if (t^.istor=2) then k:=k+1;
if (t^.him=2) then k:=k+1;
if (t^.fiz=2) then k:=k+1;
if (k>0) then begin

new (tmp1);
tmp1^.fam:=tmp^.fam;
tmp1^.mat:=tmp^.mat;
tmp1^.rus:=tmp^.rus;
tmp1^.istor:=tmp^.istor;
tmp1^.him:=tmp^.him;
tmp1^.fiz:=tmp^.fiz;
tmp1^.next:=Nil;
t1:=tmp1;
n1:=n1+1;
end;
end;

{ud-e zad-go el-ta}
t1:=tmp1;
n3:=1;
for i:=1 to n1 do begin
if (i<=2) then begin
new (tmp2);
tmp2^.fam:=tmp1^.fam;
tmp2^.mat:=tmp1^.mat;
tmp2^.rus:=tmp1^.rus;
tmp2^.istor:=tmp1^.istor;
tmp2^.him:=tmp1^.him;
tmp2^.fiz:=tmp1^.fiz;
tmp2^.next:=t2;
t2:=tmp2;
end;
if (i>2) then begin
new (tmp3);
tmp3^.fam:=tmp1^.fam;
tmp3^.mat:=tmp1^.mat;
tmp3^.rus:=tmp1^.rus;
tmp3^.istor:=tmp1^.istor;
tmp3^.him:=tmp1^.him;
tmp3^.fiz:=tmp1^.fiz;
tmp3^.next:=t3;
t3:=tmp3;
n3:=n3+1;
end;
end;
readkey;
clrscr;
for i:=1 to 2 do begin
writeln(t2^.fam,' ', t2^.mat,' ', t2^.rus,' ', t2^.istor,' ', t2^.him ,' ',t2^.fiz);
t2:=t2^.next;
end;
readkey;
clrscr;
writeln;
for i:=1 to n3 do begin
writeln(t3^.fam,' ', t3^.mat,' ', t3^.rus,' ', t3^.istor,' ', t3^.him ,' ',t3^.fiz);
t3:=t3^.next;
end;
readkey;
end.

Автор: мисс_граффити 18.12.2006 23:00

давай по порядку.
1) чем отличаются типы stud,stud1,stud2?
2) {Dobavlenie}. Почему

tmp1^.next:=Nil;
?

Автор: MyNameIs 19.12.2006 0:02

Цитата(мисс_граффити @ 18.12.2006 19:00) *

давай по порядку.
1) чем отличаются типы stud,stud1,stud2?
2) {Dobavlenie}. Почему
tmp1^.next:=Nil;
?


Писал эту лабу я давно, а сдаю только щас и понял, что ошибок много. Про ссылки всё забыл wacko.gif
Насколько помню, студы одинаковые ставил, т.к. хотел СТАРУЮ запись не портить НОВОЙ. Т.е. редактировать новую запись студ 1 и тп. Нил не помню yes2.gif

П.С. Если не трудно, дайте ссылку на какойнить исходник по ссылкам(о как), лаба горит, а сдавать завтра((

Автор: мисс_граффити 19.12.2006 0:21

так это ж не переменные, а типы....
тип ничем не испортишь.

ссылки... это, вообще-то, в данном случае указатели.
почитай в FAQ про них.

Автор: MyNameIs 19.12.2006 0:27

Да, и ещё:
1. как отсортировать матрицу по столбцам.
2. как удалить указанную строку из матрицы.

Сортировать по строкам научился, а по столбцам нет).
А при удалении столбца, получается придётся записывать в новую матрицу??

П.С. Надеюсь это не нарушение правил форума.. rolleyes.gif