Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 22:11   #1
Илья16
 
Регистрация: 09.12.2012
Сообщений: 5
По умолчанию Написать программу, содержащую подпрограмму

Написать программу, содержащую подпрограмму для расчета числа положительных элементов массива В(10,20);
Илья16 вне форума Ответить с цитированием
Старый 10.12.2012, 04:50   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Попробуй вот так..
[addenium: этот код нерабочий; см. исправленный в посте №6]
Код:
function NumberOfPositive(var a: array of integer; k: integer): integer;
begin
  if k=0 then
    NumberOfPositive:= 0
  else
    NumberOfPositive:= Ord(a[k]>0) + NumberOfPositive(a,k-1)
end;

const
  n= 10;
  m= 20;
var
  b: array[1..m,1..n] of integer;

begin
  // here, insert the array input, and print it, if needed
  writeln('In this array, there are ',NumberOfPositive(b,m*n),' positive elements')
end.
Что неясно - спрашивай. Успехов.
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 10.12.2012 в 11:30.
TinMan вне форума Ответить с цитированием
Старый 10.12.2012, 08:45   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

TinMan, ну и зачем использовать рекурсию там, где она и даром не нужна!
кроме того, это даже не скомпилируется:
массив b - двухмерный, а массив a — одномерный...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.12.2012, 09:15   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
Type TMat = array[1..100,1..100] of integer;
Код:
function NumberOfPositive(var a: TMat;m,n: integer): integer;
var i,j:byte;
count:integer;
begin
count:=0;
for i:=1 to m do
for j:=1 to n do
   inc(count,Ord(a[i,j]>0));
NumberOfPositive:=count;
end;
Код:
 writeln('In this array, there are ',NumberOfPositive(b,m,n),' positive elements');
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 10.12.2012 в 10:51.
Mad_Cat вне форума Ответить с цитированием
Старый 10.12.2012, 10:25   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mad_Cat, не скомпилируется. Ну неужели не видно, что в описании функции массив одномерный, а передаёте в качестве фактического параметра - двухмерный?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.12.2012, 11:24   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
TinMan, ну и зачем использовать рекурсию там, где она и даром не нужна!
Серж, главная причина для этого такова - чтоб ТС жизнь медом не казалась. В расчете, что он скопипастит, а при сдаче к нему возникнут вопросы, над которыми он должен будет задуматься.
Остальные причины:
1. так короче;
2. рекурсии многие боятся и избегают - пусть видят, что это просто;
3. постить простые циклы мне, извини, в лом..

Цитата:
кроме того, это даже не скомпилируется:
массив b - двухмерный, а массив a — одномерный...
Ну, что тут скажешь.. Лажанулся я, да (+1 тебе)). Всегда надо проверять.. К тому же, там была еще одна ошибка.
Вот исправленный код.
Код:
function NumberOfPositive(var a: array of integer; k: integer): integer;
begin
  if k=0 then
    NumberOfPositive:= 0
  else
    {$R-}NumberOfPositive:= Ord(a[k-1]>0) + NumberOfPositive(a,k-1){$R+}
end;

const
  m= 10;
  n= 20;
var
  b: array[1..m,1..n] of integer;
  i,j: integer;

begin
  Randomize; 
  for i:=1 to m do begin
    for j:=1 to n do begin
      b[i,j]:= Random(m*n)-m*n div 2;
      write(b[i,j]:4)
    end;
    writeln
  end;
  writeln('In this array, there are ',NumberOfPositive(b[1],m*n),' positive elements')
end.
К сожалению, без трюков не обошлось (обход проверки диапазонов). Конечно, для реальных целей такое применять неразумно, но для учебно-познавательных - самое оно, на мой взгляд )).
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 10.12.2012, 11:31   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от TinMan
чтоб ТС жизнь медом не казалась
да. в этом случае, конечно, ваш код безупречен!
респект!



Mad_Cat, да. вот теперь зачёт!
Думаю, что именно ваш вариант TC выберет для копи-паста и сдачи!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.12.2012, 01:58   #8
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Думаю, что именно ваш вариант TC выберет для копи-паста и сдачи!
Дык ))
Серж, надеюсь, ты не думал, что я старался выиграть этот тендер.. ))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 12.12.2012, 23:34   #9
Илья16
 
Регистрация: 09.12.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Дык ))
Серж, надеюсь, ты не думал, что я старался выиграть этот тендер.. ))
Эта программа выдает ошибку...помогите переделать!
Илья16 вне форума Ответить с цитированием
Старый 12.12.2012, 23:54   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Эта программа выдает ошибку...
Это плохо...

Цитата:
помогите переделать!
помочь? Вам? Так Вы здесь ничего не делали, как можно помочь тому, кто ничего не делает?!
кроме того, Вы с Mad_Cat и TinMan ещё за оказанную помощь не рассчитались... стыдитесь!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать подпрограмму Fitch573 Помощь студентам 5 12.12.2011 21:27
Написать программу используя подпрограмму- процедуру. advokat_92 Помощь студентам 0 25.11.2010 11:00
Написать подпрограмму функцию qtinux Фриланс 13 15.02.2010 23:25