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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с функцией ptr,обработка массивов., ещё одна проблема...
Andrewshkovskii
сообщение 6.06.2007 23:03
Сообщение #1


Бывалый
***

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

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


Задание таково,в двумерной матрице просуммировать элементы ниже гл. диагонали.
Работать с указателями.
вот код
program test2;
uses crt;
const
n=3;
m=3;
var
a:array [1..n,1..n] of integer;
i,j:integer;
procedure SumEl (pa:pointer;n,m:integer);
type
pint= ^integer;
var
si,i,j,k:integer;
function PR(P:pointer):pint;
begin
PR:=ptr(seg(p^),ofs(p^)+(I*n+j)*SI);
end;
begin
k:=0;
si:=sizeof(integer);
for i:=1 to n do
for j:=1 to m do
begin
if i>j then
k:=k+pr(pa)^;
end;
writeln('Summa elementov nije gl. diagonali = ',k);
end;
begin
clrscr;
writeln('Vvedite massiv');
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,j,']=');
read(a[i,j]);
end;
writeln('Vash massiv');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
SumEl(@a,n,m);
readkey;
end.


Вот результаты выполнения :
Код
Vvedite massiv
A[11]=1
A[12]=2
A[13]=3
A[21]=4
A[22]=5
A[23]=6
A[31]=7
A[32]=8
A[33]=9
Vash massiv
1  2  3
4  5  6
7  8  9
Summa elementov nije gl. diagonali = 12


Видимо по памяти слишком далеко шагаю...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 6.06.2007 23:27
Сообщение #2


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

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

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


надо так:
  function PR(P:pointer):pint;
begin
PR:=ptr(seg(p^),ofs(p^)+((I-1)*n+(j-1))*SI);
end;


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


Бывалый
***

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

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


спасибо...а не могли бы Вы объяснить,почему так?(я просто лекций много пропустил,досдавал долги по физике.. :E,вот и не понимаю ничерта=( )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 6.06.2007 23:36
Сообщение #4


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

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

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


Потому что твой указатель на массив - это указатель на элемент (1,1) {нумерация же не с 0 идет}.
По идее, для обращения к элементу 1,1 к нему ничего не надо прибавлять... а ты прибавляешь аж 4 шага (i=1, j=1, n=3 => i*n+j=4)
ну и с остальными элементами то же

Добавлено через 1 мин.
З.Ы. Если можно - на ты, а не на Вы lol.gif
я еще маленькая


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


Гость






Может, конечно, я придираюсь, но все же лучше не полагаться на компилятор:
function PR(P:pointer):pint;
begin
PR:=PInt(ptr(seg(p^),ofs(p^)+((I-1)*n+(j-1))*SI));
end;

Если этого не сделать, то на новых версиях Паскаль-компиляторов программа не будет скомпилирована (FPC, в частности, дает ошибку)
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 19.06.2025 10:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"