![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
SunDevil |
![]()
Сообщение
#21
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 10.06.05 22:42) Ты имеешь в виду запретить создание объектов типа TMas и TList если не был создан экземпляр TMatr? Тогда работай с указателями, а не с самими объектами: Var Мне не совсем понятно куда надо это вставлять, вернее в какой из моих модулей? В Main.Pas или в Menu.Pas??? |
volvo |
![]()
Сообщение
#22
|
Гость ![]() |
Ну, так это должно быть там, где ты собрался использовать эти переменные. Значит в menu.pas
![]() |
SunDevil |
![]()
Сообщение
#23
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Исходный код Unit menu; interface Procedure Run; implementation Uses Crt, main; Const maxLen = 42; myHelp:array[1..5] of string=( ' ', 'Курсовая Работа', 'Все права защищены © 2005', 'БГТУ "ВоенМех" им. Д.Ф. Устинова', 'Автор: '); Type menuString = String[maxLen]; Function ShowMenu(Var Options: Array Of menuString; Const n: Integer): Integer; Var ToExit: Boolean; i, CurrSelect: integer; Answer: Char; Begin TextAttr := 7; ClrScr; ToExit := False; CurrSelect := 1; Repeat Window(18,7,50,11); TextBackground(Blue); ClrScr; Window(1,1,80,25); GotoXY(18, 7); TextColor(White); Write('╔════════════════════════════════════════╗'); For i := 1 To 7 Do Begin GotoXY(18,7+i); Write('║ ║') End; GotoXY(18,15); Write('╚════════════════════════════════════════╝'); GotoXY(29, 8); WriteLn('Выберите действие:'); For i := 1 To n Do Begin If i = CurrSelect Then TextBackground(Red) Else TextBackground(Blue); GotoXY(20, 9+i); Write(Options[Pred(i)]) End; TextBackground(Black); Case ReadKey Of #0: Begin Answer := ReadKey; Case Answer Of #80 : {Down} If CurrSelect < n Then Inc(CurrSelect) Else CurrSelect := 1; #72 : {Up} If CurrSelect > 1 Then Dec(CurrSelect) Else CurrSelect := n; End; {case} End; #13 : {Enter} ToExit := True; End; Until ToExit; ShowMenu := CurrSelect End; Const mainMenuSize = 5; mainMenu: Array[1 .. mainMenuSize] Of menuString = (' Работа с массивом ', ' Работа с матрицей ', ' Работа со списком ', ' Справка ', ' Выход '); massivMenuSize = 4; massivMenu: Array[1 .. massivMenuSize] Of menuString = (' Ввести массив ', ' Ввести диапазон от A до B ', ' Вывести измененный массив ', ' Назад '); matrixMenuSize = 4; matrixMenu: Array[1 .. matrixMenuSize] Of menuString = (' Ввести матрицу ', ' Ввести диапазон от A до B ', ' Вывести массив значений ', ' Назад '); listMenuSize = 4; listMenu: Array[1 .. listMenuSize] Of menuString = (' Ввести список ', ' Ввести диапазон от A до B ', ' Вывести измененный список ', ' Назад '); Procedure Run; Var i,menuResult: Integer; massObj: TMas; matrixObj: TMatr; { listObj: TList } Begin Repeat Case ShowMenu(mainMenu, mainMenuSize) of 1: { Work with Array: } Begin GotoXY(1, 20); massObj.Init; Repeat menuResult := ShowMenu(massivMenu, massivMenuSize); Case menuResult Of 1: massObj.InData; { ... } 2: massObj.Form; { ... } 3: massObj.OutRes; { ... } 4: massObj.Done; End; Until menuResult = 4; End; 2: { Work with Matrix: } Begin matrixObj.Init; Repeat menuResult := ShowMenu(matrixMenu, matrixMenuSize); Case menuResult Of 1: matrixObj.InData; { ... } 2: matrixObj.Form; { ... } 3: matrixObj.OutRes; { ... } 4: matrixObj.Done; End; Until menuResult = 4; End; 3: { Work with List: } Begin { listObj.Init; } Repeat menuResult := ShowMenu(listMenu, listMenuSize); Case menuResult Of 1:; { ... } 2:; { ... } 3:; { ... } 4: { listObj.Done; } End; Until menuResult = 4; End; 4: begin Window(18,7,50,11); TextBackground(Blue); ClrScr; Window(1,1,80,25); GotoXY(18, 7); TextColor(White); Write('╔════════════════════════════════════════╗'); For i := 1 To 7 Do Begin GotoXY(18,7+i); Write('║ ║') End; GotoXY(18,15); Write('╚════════════════════════════════════════╝'); GotoXY(29, 8); WriteLn(' Справка:'); for i:=1 to 5 do begin GoToXY(23,8+i); write(myHelp[i]); end; readln end; { Show help } 5: Break; End; Until False; End; end. Вот мой Menu.pas и куда в него надо всунуть условие и описание указателей? ;) |
volvo |
![]()
Сообщение
#24
|
Гость ![]() |
Я же сказал тебе не просто описАть указатели, а работать с указателями:
Исходный код Unit menu; interface Procedure Run; implementation Uses Crt, main; Const maxLen = 42; myHelp:array[1..5] of string=( ' ', 'Курсовая Работа', 'Все права защищены © 2005', 'БГТУ "ВоенМех" им. Д.Ф. Устинова', 'Автор: '); Type menuString = String[maxLen]; Function ShowMenu(Var Options: Array Of menuString; Const n: Integer): Integer; Var ToExit: Boolean; i, CurrSelect: integer; Answer: Char; Begin TextAttr := 7; ClrScr; ToExit := False; CurrSelect := 1; Repeat Window(18,7,50,11); TextBackground(Blue); ClrScr; Window(1,1,80,25); GotoXY(18, 7); TextColor(White); Write('╔════════════════════════════════════════╗'); For i := 1 To 7 Do Begin GotoXY(18,7+i); Write('║ ║') End; GotoXY(18,15); Write('╚════════════════════════════════════════╝'); GotoXY(29, 8); WriteLn('Выберите действие:'); For i := 1 To n Do Begin If i = CurrSelect Then TextBackground(Red) Else TextBackground(Blue); GotoXY(20, 9+i); Write(Options[Pred(i)]) End; TextBackground(Black); Case ReadKey Of #0: Begin Answer := ReadKey; Case Answer Of #80 : {Down} If CurrSelect < n Then Inc(CurrSelect) Else CurrSelect := 1; #72 : {Up} If CurrSelect > 1 Then Dec(CurrSelect) Else CurrSelect := n; End; {case} End; #13 : {Enter} ToExit := True; End; Until ToExit; ShowMenu := CurrSelect End; Const mainMenuSize = 5; mainMenu: Array[1 .. mainMenuSize] Of menuString = (' Работа с массивом ', ' Работа с матрицей ', ' Работа со списком ', ' Справка ', ' Выход '); massivMenuSize = 4; massivMenu: Array[1 .. massivMenuSize] Of menuString = (' Ввести массив ', ' Ввести диапазон от A до B ', ' Вывести измененный массив ', ' Назад '); matrixMenuSize = 4; matrixMenu: Array[1 .. matrixMenuSize] Of menuString = (' Ввести матрицу ', ' Ввести диапазон от A до B ', ' Вывести массив значений ', ' Назад '); listMenuSize = 4; listMenu: Array[1 .. listMenuSize] Of menuString = (' Ввести список ', ' Ввести диапазон от A до B ', ' Вывести измененный список ', ' Назад '); Procedure Run; Var i,menuResult: Integer; pmassObj: ^TMas; pmatrixObj: ^TMatr; plistObj: ^TList Begin pmatrixObj := nil; Repeat Case ShowMenu(mainMenu, mainMenuSize) of 1: { Work with Array: } Begin GotoXY(1, 20); If pmatrixObj <> nil Then Begin New(pmassObj, Init); Repeat menuResult := ShowMenu(massivMenu, massivMenuSize); Case menuResult Of 1: pmassObj^.InData; { ... } 2: pmassObj^.Form; { ... } 3: pmassObj^.OutRes; { ... } 4: pmassObj^.Done; End; Until menuResult = 4; Dispose(pmassObj, Done) End Else WriteLn(' Не могу инициализировать массив.' + ' Матрица не была инициализирована '); End; 2: { Work with Matrix: } Begin New(pmatrixObj, Init); Repeat menuResult := ShowMenu(matrixMenu, matrixMenuSize); Case menuResult Of 1: matrixObj^.InData; { ... } 2: matrixObj^.Form; { ... } 3: matrixObj^.OutRes; { ... } 4: matrixObj^.Done; End; Until menuResult = 4; { не удаляем матрицу - она еще понадобится } End; 3: { Work with List: } Begin { listObj.Init; } Repeat menuResult := ShowMenu(listMenu, listMenuSize); Case menuResult Of 1:; { ... } 2:; { ... } 3:; { ... } 4: { listObj.Done; } End; Until menuResult = 4; End; 4: begin Window(18,7,50,11); TextBackground(Blue); ClrScr; Window(1,1,80,25); GotoXY(18, 7); TextColor(White); Write('╔════════════════════════════════════════╗'); For i := 1 To 7 Do Begin GotoXY(18,7+i); Write('║ ║') End; GotoXY(18,15); Write('╚════════════════════════════════════════╝'); GotoXY(29, 8); WriteLn(' Справка:'); for i:=1 to 5 do begin GoToXY(23,8+i); write(myHelp[i]); end; readln end; { Show help } 5: Break; End; Until False; { А вот тут уже удаляем матрицу } Dispose(pmatrixObj, Done); End; end. |
SunDevil |
![]()
Сообщение
#25
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Еще возникает такая проблема:
constructor TAbst.Init; Это общий конструктор! Он вызывается вот тут: constructor TMas.Init; Но когда я создаю матрицу, то я там задаю размерность! Так как сделать так, чтобы constructor TMas.Init не вызывал constructor TAbst.Init и делал размерность массива равным n*n? |
volvo |
![]()
Сообщение
#26
|
Гость ![]() |
:no: Никак !!! Ты не имеешь доступа к полям TMatr из TMas... Эти типы не связаны наследованием, они оба - наследники одного абстрактного типа... Так что тебе придется или оставить все как есть или наследовать TMas от TMatr (это предпочтительнее, т.к. тогда тебе не нужно будет проверять, инициализирован ли объект типа TMatr, он будет инициализироваться автоматически при инициализации TMas)
|
SunDevil |
![]()
Сообщение
#27
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
То есть мне надо наследовать так:
TMas=object(TMatr) Или еще что-то надо сюда вписать??? |
volvo |
![]()
Сообщение
#28
|
Гость ![]() |
Объясни мне, непонятливому, ПОЧЕМУ ты массив хочешь наследовать от матрицы??? Смысл в этом какой? Искусственно создать себе же проблемы и искусственно их потом решать? Ну не для этого ввели OOP !!! Если уж тебе нужно наследование и виртуальные функции, то я бы сделал так:
Исходный код Type pMassiv: ^massiv; massiv: Array[1 .. 1] Of Real; pMatrix = ^matrix; matrix = Array[1 .. 1] Of pMassiv; TAbst = Object { Абстрактный класс } Size, ArrCount: Integer; x: pMassiv; { это все равно везде присутствует } Constructor Init; { Write('Размерность: '); ReadLn(Size); GetMem(X, Size*SizeOf(Real)); } Destructor Done; Virtual; { FreeMem(X, Size*SizeOf(Real)); } Procedure InData; Virtual; Procedure OutData; Virtual; Procedure Form; Virtual; Procedure OutRes; Virtual; End; TMass = Object(TAbst) Y: pMassiv; Constructor Init; { Inherited Init; { Вызываем конструктор предка } GetMem(Y, Size*SizeOf(Real)); } Destructor Done; Virtual; { FreeMem(Y, Size*SizeOf(Real)); Inherited Done; } Procedure InData; Virtual; Procedure OutData; Virtual; Procedure Form; Virtual; Procedure OutRes; Virtual; End; TMatr = Object(TAbst) Y: pMatrix; Constructor Init; { Inherited Init; GetMem(Y, Size*SizeOf(pMassiv)); For i := 1 To Size Do GetMem(Y[i], Size*SizeOf(Real)); } Destructor Done; Virtual; { For i := 1 To Size Do FreeMem(Y[i], Size*SizeOf(Real)); FreeMem(Y, Size*SizeOf(pMassiv)); Inherited Done; } Procedure InData; Virtual; Procedure OutData; Virtual; Procedure Form; Virtual; Procedure OutRes; Virtual; End; Я уж не знаю, что ты хочешь делать со списком, но при желании его тоже можно наследовать от TAbst (правда, непонятно зачем ему нужен размер ![]() |
SunDevil |
![]()
Сообщение
#29
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
2 volvo
Я совсем запутался с этими объектами ![]() Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#30
|
Гость ![]() |
:no: Нет... Я не знаю смысла всего этого проекта, поэтому делать ничего не буду... Помочь - пожалуйста, но делать ЗА кого-то ...
|
SunDevil |
![]()
Сообщение
#31
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Спасибо за помощь, тогда как все-таки вы мне посоветуете действовать. Мне надо чтобы без ввода матрицы ни массив, ни список нельзя было ввести!!! И чтобы они основывались на размерности матрицы! Вот вся проблема, хотя еще проблема будет со списком (я его даже не начинал делать) ![]() |
volvo |
![]()
Сообщение
#32
|
Гость ![]() |
Тогда я делал бы вот так:
1. Наследуешь все как и прежде (есть абстрактный класс TAbst и от него - все остальные) 2. В конструкторе TAbst делаешь так: Constructor TAbst.Init; 3. В конструкторе TMatr: Constructor TMatr.Init; 4. Теперь TMas: Constructor TMas.Init(Size: Integer); А для того чтобы нельзя было создать MasObj или ListObj ДО того как создана матрица - я уже говорил: пользоваться указателями (пост №24), но немного с изменениями: If pmatrixObj <> nil Then Begin То же самое - со списками... :yes: |
SunDevil |
![]()
Сообщение
#33
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Мне надо еще одну переменную m вводить, для размерности матрицы! Ведь матрица может быть и не квадратной ![]() |
SunDevil |
![]()
Сообщение
#34
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Что тут не так???? Почему теперь компилятор гонит на I и говорит, что неизвестный идентификатор???
Исходный код unit main; interface uses crt; type pMassiv=^massiv; massiv=array[1..1] of integer; pMatrix=^matrix; matrix=array[1..1] of pMassiv; TAbst=object Size,ArrCount:integer; n:integer; x:pMassiv; constructor Init; procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; {mas=array[1..1] of integer;} TMas=object(TAbst) y:pMassiv; constructor Init; procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; {matr=array[1..1] of ^mas;} TMatr=object(TAbst) {m:integer; x:^matr;} y:pMatrix; constructor Init; procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; {PList1=^List1; List1=record dat:real; next:PList1; end; TList=object(TAbst) beg,beg1:PList1; constructor Init; procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end;} PMas=^TMas; PMatr=^TMatr;{ PList=^TList;} implementation constructor TAbst.Init; begin {clrscr; writeln('Введите размерность матрицы'); readln(n); clrscr;} end; procedure TAbst.InData; begin end; procedure TAbst.Form; begin end; procedure TAbst.OutRes; begin end; destructor TAbst.Done; begin end; {Array} constructor TMas.Init; begin TAbst.Init; n:=Size; getmem(y,n*sizeof(integer)); {getmem(y,n*sizeof(Mas));} end; procedure TMas.InData; var i:integer; begin clrscr; for i:=1 to n do begin write('a[',i,']= '); readln(x^[i]); end; clrscr; end; procedure TMas.Form; var i,k:integer; a,b:real; begin clrscr; writeln('Введите диапазон значений от A до B'); readln( a,B ); k:=0; for i:=1 to n do if ( x^[i]<a ) OR ( x^[i]>b ) then begin inc(k); y^[k]:=x^[i]; end; clrscr; end; procedure TMas.OutRes; var k:integer; begin clrscr; for k:=1 to n do write(y^[k],' '); readln; clrscr; end; destructor TMas.Done; begin freemem(x,n*sizeof(pMassiv)); freemem(y,n*sizeof(pMassiv)); end; {Matrix} constructor TMatr.Init; begin TAbst.Init; write('Размерность:'); readln(n); getmem(y,n*sizeof(pMassiv)); for i:=1 to n do getmem(y[i],n*sizeof(integer)); end; function TMatr.GetSize:Integer; begin GetSize:=n end; procedure TMatr.InData; var i,j:integer; begin clrscr; for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']= '); readln(x^[i]^[j]); end; clrscr; end; procedure TMatr.Form; var i,j:integer; a,b:real; begin clrscr; writeln('Введите диапазон значений от A до B'); readln( a,B ); ArrLen:=0; for i:=1 to n do for j:=1 to n do if ( x^[i]^[j]<a ) OR ( x^[i]^[j]>b ) then begin inc(ArrLen); y^[ArrLen]:=x^[i]^[j]; end; clrscr; end; procedure TMatr.OutRes; var k:integer; begin clrscr; for k:=1 to ArrLen do write(y^[k],' '); readln; clrscr; end; destructor TMatr.Done; begin freemem(x,n*sizeof(Matr)); freemem(y,n*sizeof(Matr)); end; end. Поправьте, и плиз гляньте нет ли еще ошибок??? |
volvo |
![]()
Сообщение
#35
|
Гость ![]() |
Потому что ты его не определил!!! Где у тебя описан var i:intteger? Ну, в конце концов, тебе же дается сообщение об ошибке компиляции !!! Учись исправлять такие ошибки сам, что тебе здесь, удаленный компилятор? Единственное, что могу еще сказать - читай предыдущие посты ВНИМАТЕЛЬНО... Не стОит вставлять в свой код один кусок, и не вставлять другой. Программа от этого лучше работать не станет. Там еще не меньше десятка ошибок, но в том коде, что я давал, этих ошибок просто нет... И второй раз приводить тот же код я не собираюсь.
Мне вообще кажется, что тема себя исчерпала - самостоятельного решения проблем с твоей стороны я не вижу... |
SunDevil |
![]()
Сообщение
#36
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доделал я этот гребаный курсовик, НО есть теперь опять одно НО! Сначала ввожу матрицу, потом для нее диапазон, все прекрасно. Со списком тоже все хорошо, но вот когда я перехожу к массиву, то при выводе выдает опять черт знает что.
Тестил на: 3 4 6 7 Диапазон 0;3 Вывод 4 6 7 1 Откуда теперь единица? :o Может дело в переменной k? А то ее слишком уж много у меня в программе? Посмотрите, плиз Исходный код unit main; interface uses crt; type TAbst=object n:integer; constructor Init; procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; mas=array[1..1] of integer; TMas=object(TAbst) x,y:^mas; constructor Init(n1:integer); procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; matr=array[1..1] of ^mas; TMatr=object(TAbst) m:integer; x:^matr; y:^mas; ArrLen:integer; constructor Init(n1,m1:integer); procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; PList1=^List1; List1=record dat:integer; next:PList1; end; TList=object(TAbst) beg,beg1:PList1; constructor Init(n1:integer); procedure InData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; PMas=^TMas; PMatr=^TMatr; PList=^TList; procedure InRazm(var n,m:integer); implementation procedure InRazm(var n,m:integer); begin clrscr; writeln('Введите размерность матрицы :'); readln(n,m); end; constructor TAbst.Init; begin end; procedure TAbst.InData; begin end; procedure TAbst.Form; begin end; procedure TAbst.OutRes; begin end; destructor TAbst.Done; begin end; {Array} constructor TMas.Init(n1:integer); begin n:=n1; getmem(x,n*sizeof(Mas)); getmem(y,n*sizeof(Mas)); end; procedure TMas.InData; var i:integer; begin clrscr; for i:=1 to n do begin write('a[',i,']= '); readln(x^[i]); end; clrscr; end; procedure TMas.Form; var i,k:integer; a,b:real; begin clrscr; writeln('Введите диапазон значений от A до B'); readln( a,B ); k:=0; for i:=1 to n do if (x^[i]<a) OR (x^[i]>b) then begin inc(k); y^[k]:=x^[i]; end; clrscr; end; procedure TMas.OutRes; var k:integer; begin clrscr; for k:=1 to n do write(y^[k],' '); readln; clrscr; end; destructor TMas.Done; begin freemem(x,n*sizeof(Mas)); freemem(y,n*sizeof(Mas)); end; {Matrix} constructor TMatr.Init(n1,m1:integer); var i:integer; begin n:=n1; m:=m1; getmem(x,n*sizeof(Matr)); for i:=1 to n do getmem(x^[i],m*sizeof(Mas)); getmem(y,n*m*sizeof(Mas)); end; procedure TMatr.InData; var i,j:integer; begin clrscr; for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']= '); readln(x^[i]^[j]); end; clrscr; end; procedure TMatr.Form; var i,j:integer; a,b:real; begin clrscr; writeln('Введите диапазон значений от A до B'); readln( a,B ); ArrLen:=0; for i:=1 to n do for j:=1 to m do if (x^[i]^[j]<a) OR (x^[i]^[j]>b) then begin inc(ArrLen); y^[ArrLen]:=x^[i]^[j]; end; clrscr; end; procedure TMatr.OutRes; var k:integer; begin clrscr; for k:=1 to ArrLen do write(y^[k],' '); readln; clrscr; end; destructor TMatr.Done; var i:integer; begin for i:=1 to n do freemem(x^[i],m*sizeof(Mas)); freemem(y,n*m*sizeof(Mas)); freemem(x,n*sizeof(Matr)); end; constructor TList.Init(n1:integer); begin n:=n1; end; procedure TList.InData; var i:integer; PEnd,p:PList1; begin clrscr; beg:=nil; for i:=1 to n do begin new(p); write('a[',i,']= '); readln(p^.Dat); p^.next:=nil; if beg=nil then beg:=p else PEnd^.Next:=p; PEnd:=p; end end; procedure TList.Form; var a,b:integer; p,p1,PEnd1:PList1; begin clrscr; writeln('Введите диапазон значений от A до B'); readln( a,B ); p:=beg; beg1:=nil; repeat if (p^.Dat<a) OR (p^.Dat>b) then begin new(p1); p1^.Dat:=p^.Dat; p1^.next:=nil; if beg1=nil then beg1:=p1 else PEnd1^.next:=p1; PEnd1:=p1 end; p:=p^.next; until p=nil; end; procedure TList.OutRes; var p:PList1; begin clrscr; p:=beg1; repeat write(p^.Dat,' '); p:=p^.next; until p=nil; readln end; destructor TList.Done; var p,p1:PList1; begin p:=beg; repeat p1:=p^.next; dispose(p); p:=p1; until p=nil; p:=beg1; repeat p1:=p^.next; dispose(p); p:=p1; until p=nil; end; end. |
volvo |
![]()
Сообщение
#37
|
Гость ![]() |
У тебя тут та же самая история, что была с TMatr... Я же говорил - нельзя распечатывать ВЕСЬ массив... Добавь описание ArrLen:integer; в TMas и поменяй процедуру TMas.Form вот так:
procedure TMas.Form; Работай с ArrLen вместо k... |
![]() ![]() |
![]() |
Текстовая версия | 6.07.2025 9:59 |