Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Задачка на PASCAL

Ответить
Настройки темы
Задачка на PASCAL
Crazy Wolf


Сообщения: n/a

Профиль | Цитировать


Приветствую ALL

Недавно подкинули задачу на Паскале.. помогите решить плиз

С помощью ООП составить описание объектного типа TMatrix обеспечивающего размещение матрицы произвольного размера с вариантностью изменения числа строки  столюцов и вывода на экран подматрицы любого размера и всей матрицы

Я сам потихоньу изучаю Си и как это сделать на Си++ в принципе знаю... (я надеюсь) но как это сделать на Паскале?

Отправлено: 21:48, 09-01-2003

 

Ветеран


Сообщения: 651
Благодарности: 1

Профиль | Отправить PM | Цитировать


Crazy Wolf
На обычном досовском Паскале можно, но я тебе примерчик без ООП сделал, просто по работе с динам. памятью:
uses crt,dos;
Type
pint=^integer;
pbyte=^byte;
pstring=^string;
Var
x,y,i,j,N,temp:integer;
size:longint;
Matrix:pointer;
{А вот это универсальная функция, позволяющая}
{работать с динам. данными, как с обычным массивом}
{p - имя динам. переменной, V - размер одного элемента в матрице в байтах, N - число столбцов, i - координата по вертикали, j - координата по горизонтали}
{координаты считаются от единицы!}
function GetElem(var p:pointer;N,V,i,j:integer):pointer;
var adr:longint;
* * p1:pointer;
begin
adr:=((i-1)*N+(j-1))*V;
p1:=pointer(longint(p)+adr);
GetElem:=p1;
end;

BEGIN
clrscr;
{спросим размерность матрицы}
readln(x);{число столбцов}
readln(y);{число строк}
N:=x
{Допустим матрица со значениями типа integer
в досевом паскале переменная типа integer занимает 2 байта,
в Delphi - 4 байта}
{Выделяем динамич. память}
size:=(x)*(y)*2;
getmem(Matrix,size);

//Пример бестолковой работы с матрицей
i:=3;{номер строки}
j:=4;{номер столбца}
pint(GetElem(Matrix,N,2,i,j))^:=temp;
temp := pint(GetElem(Matrix,N,2,i,j))^;

{Освобождаем динамич. память}
freemem(Matrix,size);{можно не делать, если конец программы}
END.

Успешной сдачи!

[s]Исправлено: Animal, 23:34 15-01-2003[/s]

Отправлено: 23:29, 15-01-2003 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Animal
Этот даже я себе скопирую, пригодится

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 02:47, 16-01-2003 | #12


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Animal
Цитата:
{Выделяем динамич. память}
size:=(x)*(y)*2;
getmem(Matrix,size);
Я бы не стал использовать константу, представляющую в д. случае размер типа Integer. Лучше использовать sizeof

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 03:57, 16-01-2003 | #13


Ветеран


Сообщения: 651
Благодарности: 1

Профиль | Отправить PM | Цитировать


shurikan
Я не писал оптимальный с т.зрения эффективности или с т.зрения красоты/краткости написания код. Это просто пример по работе с динамической памятью в досовском паскале, на мой взгляд довольно наглядный. Кстати, если смотреть формально, то использование функции вместо константы замедлит работу.

Отправлено: 09:38, 16-01-2003 | #14


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


shurikan
Тем более что он будет равен 4, если в Win32.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 12:52, 16-01-2003 | #15

Crazy Wolf


Сообщения: n/a

Профиль | Цитировать


2ALL
Большое сенкс...дошло до меня теперь....
Будете в Славном городе Стерлитамаке, что в Башкирии
:beer:

Отправлено: 00:28, 17-01-2003 | #16


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Animal
Цитата:
использование функции вместо константы замедлит работу.
sizeof вовсе не функция, если применяется для типа, вместо неё компилятор подставляет константу. В случае DOS - это будет 2, ну а для Win32, как правильно заметил vasketsov - 4. И не в красоте дело, просто её использование позволяет писать переносимый код.

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 04:06, 17-01-2003 | #17


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Я тут глянул и понял, что немного облажался:
Код: Выделить весь код
Matrix.Create([1,6,1,7]); {Первая пара нач. и конеч. индексы первого измерения,
 *вторая пара - соотв для второго. Нумеруются от 1 до 6 и от 1 до 7}
Должно быть так:
Код: Выделить весь код
Matrix := TMatrix.Create([1,6,1,7]);
Поскольку конструктор - функция класса.
Извините...


[s]Исправлено: shurikan, 7:39 17-01-2003[/s]

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 07:38, 17-01-2003 | #18


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


shurikan
Animal
В случае .NET вообще sizeof запрещено как небезопасный код.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 14:51, 17-01-2003 | #19


Ветеран


Сообщения: 651
Благодарности: 1

Профиль | Отправить PM | Цитировать


shurikan
Да знал я, знал, что в Win32 тип integer 4 байта, в коментариях ведь написано в моем первом посте - почитай! Смысл то примера - простая работа с динам. памятью на стандартном паскале DOS и только.
vasketsov
Странно, что может быть небезопасного в функции sizeof. Это ни к тому, что я тебе не верю, просто любопытно.

Отправлено: 22:13, 17-01-2003 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Задачка на PASCAL

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) Loading Программирование и базы данных 41 20-05-2015 15:28
Delphi - Задачка на Pascal'e !! stolyar Программирование и базы данных 4 21-11-2009 14:21
Задачка VuDZ Программирование и базы данных 4 02-04-2003 17:44
Задачка noname00.pas Программирование и базы данных 6 07-12-2001 11:43
Задачка... noname00.pas Программирование и базы данных 4 28-11-2001 03:17




 
Переход