Задание:
1. Создать функции для:
• выделения памяти под двумерный целочисленный массив (размер массива запросить через ввод с клавиатуры);
• изменения размера массива;
• изменения количества элементов заданной строки;
• заполнения массива элементами;
• просмотра элементов массива на экране (приближенно в виде матрицы);
• уничтожения выделенной для массива памяти.
В функциях просмотра элементов и уничтожения массива организовать необходимые проверки на правильность указателей (не Nil). Отладить написанные функции.
2. Организовать тестирование при помощи меню, для чего создать два массива:
• массив строк, содержащий названия пунктов меню;
• массив указателей на функции, для выполнения соответствующих видов работ.
Для упрощения работы целочисленный массив и переменную, задающую размер массива описать на глобальном уровне.
3. Переделать описанные функции для работы с помощю открытых массивов.
Уважаемые Форумчане! Помогите сделать эту лабу,пожалуйста! Подскажите что тут, да как делается....
По-моему, тебе сюда:
http://forum.pascal.net.ru/index.php?showtopic=6730
хотя в Делфи возможен другой вариант реализации. Но не представляю, как в нем выполнить это:
А вот это - см. здесь:
http://volvo71.narod.ru/menus.htm
(правда у меня там нет описания массива указателей на функции, но это добавляется в течении нескольких секунд)
Именно то, что тебе нужно можешь написать только ты сам... Не хочешь пользоваться тем что есть - пиши с нуля...
Так как всё-таки это организовать:.
тестирование при помощи меню, для чего создать два массива:
• массив строк, содержащий названия пунктов меню;
• массив указателей на функции, для выполнения соответствующих видов работ.??? Подскажите,плиз!!!
Ребята!Пожалуйста, помогите очень нужно!!! Я чёт вообще не вкурю
Вот создал процедуру для выделения памяти, просмотра элементов и уничтожения выделенной памяти:
Program LabN2part1;
{$APPTYPE CONSOLE}
uses
SysUtils;
Type
TType = Word;
Type
PVector = ^TVector;
TVector = Array[1 .. 1] of TType;
PDynMatrix = ^TDynMatrix;
TDynMatrix = Array[1 .. 1] of PVector;
Var
mxDynamic: PDynMatrix;
n, i, j, command: Word;
procedure InitMa3x(var mxDynamic: PDynMatrix);
Begin
Write('n = '); ReadLn(n);
GetMem(mxDynamic, n * SizeOf(PVector));
For i := 1 To n Do
GetMem(mxDynamic^[i], n * SizeOf(TType));
end;
procedure ShowMa3x(var mxDynamic: PDynMatrix);
begin
For i := 1 To n Do
For j := 1 To n Do
mxDynamic^[I]^[J]:=I*J;
For i := 1 To n Do Begin
WriteLn;
For j := 1 To n Do
Write(mxDynamic^[I]^[J]:4);
end;
End;
procedure KillMa3x( var mxDynamic: PDynMatrix);
begin
For i := 1 To n Do
FreeMem(mxDynamic^[i], n * SizeOf(TType));
FreeMem(mxDynamic, n * SizeOf(PVector));
End;
begin
{ TO]DO -oUser -cConsole Main : Insert code here }
command:=0;
repeat
writeln;
writeln(' MENU');
writeln('1.Init Ma3x');
writeln('2.Show Ma3x');
writeln('3.Kill Ma3x');
writeln('4.Exit');
readln(command);
case command of
1: begin InitMa3x(mxDynamic); end;
2: begin ShowMa3x(mxDynamic); end;
3: begin KillMa3x(mxDynamic); end;
end;
until command=4;
readln;
end.
Так где всё-таки ошибочка?
что бы это значило?...
А что ты хотел, чтобы произошло? Ты просто удалил области памяти из списка свободных блоков, теперь если ты попытаешься запросить еще раз память через GetMem, то могут быть выделены те области, в которых раньше находилась твоя матрица, вот тогда действительно данные запортятся. Пока же дополнительно память не выделяется, старые данные сохраняются.
А вообще-то неплохо было бы:
procedure KillMa3x( var mxDynamic: PDynMatrix);
begin
For i := 1 To n Do
FreeMem(mxDynamic^[i], n * SizeOf(TType));
FreeMem(mxDynamic, n * SizeOf(PVector));
mxDynamic := nil; // теперь при чтении "удаленных" данных будет AV ...
End;
procedure KillMa3x( var mxDynamic: PDynMatrix);
begin
For i := 1 To n Do
FreeMem(mxDynamic^[i], n * SizeOf(TType));
FreeMem(mxDynamic, n * SizeOf(PVector));
mxDynamic := nil; // теперь при чтении "удаленных" данных будет AV ...
End;