IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа с динамическими и открытыми массивами, Лабораторная работа
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Задание:
1. Создать функции для:
• выделения памяти под двумерный целочисленный массив (размер массива запросить через ввод с клавиатуры);
• изменения размера массива;
• изменения количества элементов заданной строки;
• заполнения массива элементами;
• просмотра элементов массива на экране (приближенно в виде матрицы);
• уничтожения выделенной для массива памяти.
В функциях просмотра элементов и уничтожения массива организовать необходимые проверки на правильность указателей (не Nil). Отладить написанные функции.
2. Организовать тестирование при помощи меню, для чего создать два массива:
• массив строк, содержащий названия пунктов меню;
• массив указателей на функции, для выполнения соответствующих видов работ.
Для упрощения работы целочисленный массив и переменную, задающую размер массива описать на глобальном уровне.
3. Переделать описанные функции для работы с помощю открытых массивов.

Уважаемые Форумчане! Помогите сделать эту лабу,пожалуйста! smile.gif Подскажите что тут, да как делается....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


По-моему, тебе сюда:
Динамические массивы и матрицы

хотя в Делфи возможен другой вариант реализации. Но не представляю, как в нем выполнить это:
Цитата
функцию для изменения количества элементов заданной строки;


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(Rocket @ 3.06.2007 17:53) *

Организовать тестирование при помощи меню, для чего создать два массива:
• массив строк, содержащий названия пунктов меню;
• массив указателей на функции, для выполнения соответствующих видов работ.
Для упрощения работы целочисленный массив и переменную, задающую размер массива описать на глобальном уровне.


А вот это как замутить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






А вот это - см. здесь:
http://volvo71.narod.ru/menus.htm

(правда у меня там нет описания массива указателей на функции, но это добавляется в течении нескольких секунд)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(Rocket @ 3.06.2007 17:53) *

Переделать описанные функции для работы с помощю открытых массивов.

Где можно про это почитать?


Добавлено через 14 мин.
Цитата(volvo @ 3.06.2007 18:19) *

А вот это - см. здесь:
http://volvo71.narod.ru/menus.htm

(правда у меня там нет описания массива указателей на функции, но это добавляется в течении нескольких секунд)

Где здесь именно то ,что мне нужно? Вы не могли написать примерный вариант этого пункта. Также включив описание массива указателей на функции. yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Именно то, что тебе нужно можешь написать только ты сам... Не хочешь пользоваться тем что есть - пиши с нуля...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 3.06.2007 19:13) *

Именно то, что тебе нужно можешь написать только ты сам... Не хочешь пользоваться тем что есть - пиши с нуля...

Да,я это понимаю.... Но всё-таки, вы не могли показать примерный вариант этого меню?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Так как всё-таки это организовать:.
тестирование при помощи меню, для чего создать два массива:
• массив строк, содержащий названия пунктов меню;
• массив указателей на функции, для выполнения соответствующих видов работ.??? Подскажите,плиз!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Ребята!Пожалуйста, помогите очень нужно!!! Я чёт вообще не вкурю wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Вот создал процедуру для выделения памяти, просмотра элементов и уничтожения выделенной памяти:


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.


Проблема возникла с удаление. В чём ошибка? Подскажите,пожайлуста!

И ещё,всё-таки как реализовать изменение количества элементов заданной строки???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Так где всё-таки ошибочка? blink.gif

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


что бы это значило?...
Цитата
TDynMatrix = Array[1 .. 1] of PVector;

array из 1 элемента...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(мисс_граффити @ 13.06.2007 21:56) *
что бы это значило?...

array из 1 элемента...
Это си-подобная конструкция, таким способом в С объявляют структуры переменной длины, например, динамические массивы.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
Так где всё-таки ошибочка?
В чем выражается эта "ошибочка"? Я попробовал - ничего не ошибается, все работает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 14.06.2007 3:00) *

В чем выражается эта "ошибочка"? Я попробовал - ничего не ошибается, все работает...

Я заполняю массив элементамиЂ,вывожу на экран,всё нормально. Потом очищаю память и вывожу массив на экран, а он полностью выводится как и был заполнен....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 14.06.2007 15:04) *

А что ты хотел, чтобы произошло? Ты просто удалил области памяти из списка свободных блоков, теперь если ты попытаешься запросить еще раз память через 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;


Большое Вам Спасибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 21.09.2020 20:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name