06.01.2010, 21:21 | #1 (permalink) | |
Member
Регистрация: 06.01.2010
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Из Delphi в PascalABC
Ввод двумерного массива.Отсортировать с помощью модуля.Вывод. Цитата:
|
|
06.01.2010, 21:21 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посоветую вам прочитать содержимое данных топиков DELPHI Проблема с Delphi Гуманитарий и Delphi Delphi. Массивы |
06.01.2010, 21:26 | #2 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
сейчас портирую в обычный Pascal. А ABC Pascal - это программа, причем, по мне несколько криво работающая с языком Pascal
|
06.01.2010, 21:45 | #3 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
так, не все так просто..
Вот что я смог изменить: Код:
program Arrays_Module; Const n = 10; { m и n ты можешь менять ...} m = 12; { ... на своё усмотрение} type TArray = Array [1..1] of Integer; { Тип массива, в который будут записываться отрицательные и положительные числа} TMatrix = Array[0..m, 0..n] of Integer; { тип двумерного массива} procedure CreatMe(var Matrix: TMatrix); { Эта процедура заполняет массив} procedure ChangeMe(Matrix: TMatrix; var Otr, Poloj: TArray); { Эта процедура производит изменения} Function GetResultFunc(Matrix: TMatrix; Otr, Poloj: TArray): TStrings; { Эта процедура выводит результат в текстовом варианте} procedure CreatMe(var Matrix: TMatrix); var i, j: Integer; begin For i := 0 to n do For j := 0 to m do begin Matrix[j, i] := Random(255) + 1; { Во тут добавляем +1, чтобы не попался ноль} If Random(2) = 1 then Matrix[j, i] := - Matrix[j, i]; { а это случайно выбирается знак "+" или "-"} end; end; procedure ChangeMe(Matrix: TMatrix; var Otr, Poloj: TArray); var i, j: Integer; begin SetLength(otr, 0); { делаем в массиве Ort 0 элементов, ибо он может быть не пустой} SetLength(Poloj, 0); { тоже, что и сделали выше} For i := 0 to n do For j := 0 to m do begin If Matrix[j, i] < 0 then begin SetLength(otr, High(otr) + 2); Otr[High(otr)] := Matrix[j, i]; end Else if Matrix[j, i] > 0 then begin SetLength(Poloj, High(Poloj) + 2); Poloj[High(Poloj)] := Matrix[j, i]; end; end; end; Function GetResultFunc(Matrix: TMatrix; Otr, Poloj: TArray): TStrings; var i, j: Integer; begin Result := TStringList.Create; { Инициализируем объект} { Не удивляйся, что я сделал не "TStrings.Create", а "TStringList.Create" { Тут нет никакой разницы, потому что TStrings - наследник от TStringList... вот и всё...} Result.Add('Вот двумерный массив:'); Result.Add(' '); Result.Add(' '); { Сначала вывожу двумерный массив} For i := 0 to n do begin For j := 0 to m do Result.Strings[Result.Count-1] := Result.Strings[Result.Count-1] + Str(Matrix[j, i]) + ' '; Result.Add(' '); end; Result.Add(' '); { Теперь вывожу получившиеся одномерные} Result.Add('Результат сортировки: '); Result.Add('отрицательные числа:'); Result.Add(' '); For i := 0 to High(otr) do Result.Strings[Result.Count-1] := Result.Strings[Result.Count-1] + Str(otr[i]) + ', '; Result.Add(' '); Result.Add('положительные числа: '); Result.Add(' '); For i := 0 to High(poloj) do Result.Strings[Result.Count-1] := Result.Strings[Result.Count-1] + Str(poloj[i]) + ', '; Result.Add(' '); end; end. |
06.01.2010, 22:05 | #5 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
не только в скобках дело. еще замена функции IntToStr на Str, и вообще, из модуля сделана программа.. Кстати.. Извиняюсь, не полностью... надо понимать программу, что бы ее исправить или модифицировать. а я такой способностью не обладал, так что больше помочь, к сожалению, ничем не могу...
Последний раз редактировалось MrSTEP; 06.01.2010 в 22:12 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
06.01.2010, 22:14 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Угу. Сарказм, конечно, к месту. Особенно если учесть, что из комментариев в теле Delphi-модуля четко видно, что писали его не Вы.
Ладно. Сформулируйте для начала постановку задачи со всеми подробностями, чтобы не нужно было выуживать ее из программы. Попробуем. |
06.01.2010, 22:50 | #9 (permalink) |
Member
Регистрация: 06.01.2010
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
что же,что же мне начиркал профессор.."ВВод 2-х.массив.Сортировать с помощью модуля-вывод".
Поняла так: ввести двумерный массив,отсортировать с помощью модуля.Вывести 2 одномерных(положительный и отрицательный,модуль же).Вот. |
07.01.2010, 12:04 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Значит, вот. Сделал кое-что на совсем школьном уровне, т.е. без динамических массивов, как в исходном модуле, без преобразования чисел в строки и т.п. Если так не годится - напишите.
Модуль (файл должен называться Arr_Mod.pas): Код:
unit Arr_Mod; interface Const n = 9; {values can be changed at will} m = 11; type TArray = Array [0..(m+1)*(n+1)-1] of Integer; {Array type for positive and negative numbers} TMatrix = Array[0..n, 0..m] of Integer; {Two-dimesional array type} procedure CreatMe(var Matrix:TMatrix); {Filling the matrix} procedure ChangeMe(Matrix:TMatrix; var Otr,Poloj:TArray; var Nneg, Npos:INTEGER); {Changing the matrix} Procedure ResultOutput(Matrix:TMatrix; Otr,Poloj:TArray; Nneg, Npos:INTEGER); {Creating output} implementation procedure CreatMe(var Matrix:TMatrix); var i,j: Integer; begin Randomize; For i:=0 to n do For j:=0 to m do begin Matrix[i,j]:= Random(255)+1;{Adding one is to avoid zero value} If Random(2)=1 then Matrix[i,j]:=-Matrix[i,j]; {Radom choosing of "+" or "-" sign} end; end; procedure ChangeMe(Matrix:TMatrix; var Otr,Poloj:TArray; var Nneg, Npos:INTEGER); var i,j: Integer; begin Nneg:=-1; {Number of negative elements} Npos:=-1; {Number of positive elements} For i:=0 to n do For j:=0 to m do begin If Matrix[i,j]<0 then begin Inc(Nneg); Otr[Nneg]:=Matrix[i,j]; end Else begin Inc(Npos); Poloj[Npos]:=Matrix[i,j]; end; end; end; Procedure ResultOutput(Matrix:TMatrix; Otr,Poloj:TArray; Nneg,Npos:INTEGER); var i,j:Integer; begin For i:=0 to n do begin For j:=0 to m do Write(Matrix[i,j]:5); WriteLn; end; Writeln; For i:=1 to (Nneg div (m+1)) do begin For j:=0 to m do Write(Otr[(i-1)*(m+1)+j]:5); WriteLn; end; For i:=(Nneg div (m+1))*(m+1) to Nneg do Write(Otr[i]:5); WriteLn; WriteLn; For i:=1 to (Npos div (m+1)) do begin For j:=0 to m do Write(Poloj[(i-1)*(m+1)+j]:5); WriteLn; end; For i:=(Npos div (m+1))*(m+1) to Npos do Write(Poloj[i]:5); WriteLn; end; end. Код:
uses Arr_Mod; var A:TMatrix; P,N:TArray; Nn,Np:INTEGER; Begin CreatMe(A); ChangeMe(A,N,P,Nn,Np); ResultOutput(A,N,P,Nn,Np); ReadLn; End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|