![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Задание:
1. Создать функции для: • выделения памяти под двумерный целочисленный массив (размер массива запросить через ввод с клавиатуры); • изменения размера массива; • изменения количества элементов заданной строки; • заполнения массива элементами; • просмотра элементов массива на экране (приближенно в виде матрицы); • уничтожения выделенной для массива памяти. В функциях просмотра элементов и уничтожения массива организовать необходимые проверки на правильность указателей (не Nil). Отладить написанные функции. 2. Организовать тестирование при помощи меню, для чего создать два массива: • массив строк, содержащий названия пунктов меню; • массив указателей на функции, для выполнения соответствующих видов работ. Для упрощения работы целочисленный массив и переменную, задающую размер массива описать на глобальном уровне. 3. Переделать описанные функции для работы с помощю открытых массивов. Уважаемые Форумчане! Помогите сделать эту лабу,пожалуйста! ![]() |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
По-моему, тебе сюда:
Динамические массивы и матрицы хотя в Делфи возможен другой вариант реализации. Но не представляю, как в нем выполнить это: Цитата функцию для изменения количества элементов заданной строки; -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Rocket |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Организовать тестирование при помощи меню, для чего создать два массива: • массив строк, содержащий названия пунктов меню; • массив указателей на функции, для выполнения соответствующих видов работ. Для упрощения работы целочисленный массив и переменную, задающую размер массива описать на глобальном уровне. А вот это как замутить? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А вот это - см. здесь:
http://volvo71.narod.ru/menus.htm (правда у меня там нет описания массива указателей на функции, но это добавляется в течении нескольких секунд) |
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Переделать описанные функции для работы с помощю открытых массивов. Где можно про это почитать? Добавлено через 14 мин. А вот это - см. здесь: http://volvo71.narod.ru/menus.htm (правда у меня там нет описания массива указателей на функции, но это добавляется в течении нескольких секунд) Где здесь именно то ,что мне нужно? Вы не могли написать примерный вариант этого пункта. Также включив описание массива указателей на функции. ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Именно то, что тебе нужно можешь написать только ты сам... Не хочешь пользоваться тем что есть - пиши с нуля...
|
Rocket |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
Rocket |
![]()
Сообщение
#8
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Так как всё-таки это организовать:.
тестирование при помощи меню, для чего создать два массива: • массив строк, содержащий названия пунктов меню; • массив указателей на функции, для выполнения соответствующих видов работ.??? Подскажите,плиз!!! |
Rocket |
![]()
Сообщение
#9
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Ребята!Пожалуйста, помогите очень нужно!!! Я чёт вообще не вкурю
![]() |
Rocket |
![]()
Сообщение
#10
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вот создал процедуру для выделения памяти, просмотра элементов и уничтожения выделенной памяти:
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.
Проблема возникла с удаление. В чём ошибка? Подскажите,пожайлуста! И ещё,всё-таки как реализовать изменение количества элементов заданной строки??? |
Rocket |
![]()
Сообщение
#11
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Так где всё-таки ошибочка?
![]() Сообщение отредактировано: volvo - 14.01.2009 10:08 |
мисс_граффити |
![]()
Сообщение
#12
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
что бы это значило?...
Цитата TDynMatrix = Array[1 .. 1] of PVector; array из 1 элемента... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
hardcase |
![]()
Сообщение
#13
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
что бы это значило?... Это си-подобная конструкция, таким способом в С объявляют структуры переменной длины, например, динамические массивы.array из 1 элемента... -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата Так где всё-таки ошибочка? В чем выражается эта "ошибочка"? Я попробовал - ничего не ошибается, все работает... |
Rocket |
![]()
Сообщение
#15
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
А что ты хотел, чтобы произошло? Ты просто удалил области памяти из списка свободных блоков, теперь если ты попытаешься запросить еще раз память через 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;
|
Rocket |
![]()
Сообщение
#17
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
А что ты хотел, чтобы произошло? Ты просто удалил области памяти из списка свободных блоков, теперь если ты попытаешься запросить еще раз память через 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;
Большое Вам Спасибо!!! |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 1:28 |