Очень нужна во вторник задача, точнее лаба. Без неё на экзамен не допустят
Задача на ссылки.
Составить список группы, содержащей 15 человек. Указать для каждого студента оценки, полученные на последних экзаменах. Разработать программу, позволяющую вводить данные о студентах, заносить эту инфу в файл dan.dat.
Включить в список инфу, относящуюся к студентам, у которых больше одной 2. Добавить в конец списка студентов, имеющих хотябы 1 двойку. Удалить из начала списка 2 студентов.
Вот сдесь я пытался чтото делать, но ничего не выходить Выручайте...
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.
давай по порядку.
1) чем отличаются типы stud,stud1,stud2?
2) {Dobavlenie}. Почему
tmp1^.next:=Nil;?
tmp1^.next:=Nil;?
так это ж не переменные, а типы....
тип ничем не испортишь.
ссылки... это, вообще-то, в данном случае указатели.
почитай в FAQ про них.
Да, и ещё:
1. как отсортировать матрицу по столбцам.
2. как удалить указанную строку из матрицы.
Сортировать по строкам научился, а по столбцам нет).
А при удалении столбца, получается придётся записывать в новую матрицу??
П.С. Надеюсь это не нарушение правил форума..