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

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

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

 
 Ответить  Открыть новую тему 
> Исправить процедуру
}0pa
сообщение 7.10.2006 9:18
Сообщение #1


Пионер
**

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

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


Дана вот такая процедура, вычисляющая сумму положительных элементов каждой строки. Но необходимо избавиться от write(...) в этой процедуре.
Код
procedure summa (mx:PDynMatrix;c1:integer;c2:integer);
  var i,j, s:integer;
  begin
    for i:=1 to c1 do begin
    s:=0;
     writeln;
     for j:=1 to c2 do begin
      if  mx^[I]^[J]>0 then
       s:=s+mx^[I]^[J]
     end;
     write('Matrica А :summa polozhitelnih elementov ',i,'-oy stroki = ',s);
  end;
  writeln;
end;

А вывести нужно в самой основной программе для любой дин.матрицы.
что-то вроде
Код
procedure summa (mx:PDynMatrix;c1:integer;c2:integer;s:integer);
begin
.....
.....
....
end;
  begin
  summa(A,n,m,s1);
  write(s1);
  end.

Но так как там сумма динамическая, у меня возникли некоторые проблемы

Сообщение отредактировано: }0pa - 7.10.2006 9:23


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 7.10.2006 10:09
Сообщение #2


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

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

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


а ты бы в основную программу что-нибудь возвращал...
сумму одной строки, например. а подпрограмму вызывал в цикле.
или вектор сумм.


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


Пионер
**

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

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


Я не могу понять, как это организовать нужно. Сумма динамическая. Нужно делать два цикла и процедуре и в основной программе? Помогите плиз. очень надо


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.10.2006 13:02
Сообщение #4


Гость






Цитата
Сумма динамическая
Поясни... Что в твоем понимании динамическая сумма?

Вообще-то это извращение, делать подпрограмму, которая должна вернуть результат, процедурой. Функции в Паскале - не для красоты, кстати... Но если так нужно -

procedure summa (mx:PDynMatrix;c1:integer;c2:integer;VAR s:integer);
begin
...
end;
 К началу страницы 
+ Ответить 
}0pa
сообщение 12.10.2006 18:29
Сообщение #5


Пионер
**

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

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


Я понимаю, что немного некорректно выразился...В общем, эта процедура вычисляет сумму элементов каждой строки матрицы. Т.е. понятно, что нужно будет вызывать ее в цикле. Неужели в этом случае нельзя обойтись без циклов в каком-то месте (в подпрограмме или в осн.программе)?
Цитата
Вообще-то это извращение, делать подпрограмму, которая должна вернуть результат, процедурой. Функции в Паскале - не для красоты, кстати... Но если так нужно -
Я с тобой полностью согласен, но задание требует это "извращение".
Хотя, если получится с функцией, то фиг с ним.


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.10.2006 18:43
Сообщение #6


Гость






Цитата
Т.е. понятно, что нужно будет вызывать ее в цикле
Это с чего ты решил?
Цитата
Неужели в этом случае нельзя обойтись без циклов в каком-то месте
Все можно...

procedure summa(mx: PDynMatrix; c1, c2: integer; var s: array of integer);
var i, j: integer;
begin
for i:=1 to c1 do begin
s[pred(i)] := 0;
for j := 1 to c2 do
if mx^[I]^[J]>0 then s[pred(i)]:=s[pred(i)]+mx^[I]^[J]
end;
end;

var
vec: array[1 .. 10] of integer;
begin
...
summa(a, n, m, vec);
{ Цикл - не для вычисления, а только чтобы распечатать результаты }
for i := 1 to n do
writeln('Сумма положительных элементов ', i, '-ой строки = ', vec[i]);
...
end.
 К началу страницы 
+ Ответить 
}0pa
сообщение 12.10.2006 23:36
Сообщение #7


Пионер
**

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

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


Весьма благодарен... good.gif


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 13.10.2006 8:49
Сообщение #8


Профи
****

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

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


...
vec: array[1 .. 10] of integer;
for i:=1 to c1 do begin
s[pred(i)] := 0;
...
Неверное так не надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.10.2006 9:24
Сообщение #9


Гость






Malice, ты с открытыми массивами встречался? Индексация ВСЕГДА с нуля, им по барабану, как описана сама переменная... Хоть так:
Var
vec: array[-100 .. 199] of Integer;

хоть так
Var
vec: array[100 .. 400] of Integer;

- обращаться в процедуре все равно надо от 0 до 299...
 К началу страницы 
+ Ответить 
Malice
сообщение 13.10.2006 10:23
Сообщение #10


Профи
****

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

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


Неа, не встречался, поэтому "наверное" и написал.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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