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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2017, 19:29   #1
Закиров Николай
Новичок
Джуниор
 
Регистрация: 06.11.2017
Сообщений: 1
По умолчанию Процедуры в Delphi

Найти среднее арифметическое отрицательных элементов каждой строки матрицы Т(n,k), n<=8, k<=11. Результат заполнить в массив R. Если в строке нет отрицательных элементов, то в массиве R не будет элемента, соответствующего этой строке. В сформированном массиве поменять местами максимальный элемент с последним.
Использовать подпрограммы для ввода исходных данных, вывода результатов и алгоритмов преобразования данных.


Сделал программу, но она вылетает. В чем проблема?

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
 T = array of array of integer;
 R = array of real;
var n, k:integer;
a: T;
b: R;
//--------------------------------------
procedure vvod(n, k: integer; var a: T);
var i, j: integer;
begin
  for i := 1 to n do
  for j := 1 to k do
    begin
      readln(a[i,j]);
    end;
end;
//--------------------------------------
procedure zadacha(k: integer; a:T; var b: R);
var
sum, count, i, j: integer;
begin
  for i:=1 to n do begin
    sum:=0;
    count:=0;
    for j:=1 to k do begin
     if a[i,j]<0 then begin
      sum:=sum+a[i,j];
      count:=count+1;
      end;
     end;
   if count<>0 then b[i]:=(sum/count);
   if count=0 then b[i]:=0;
  end;
  for i:=1 to k do
     Write(' ', b[i]);
end;
//---------------------------------------
procedure zadacha2(k:integer; b:R);
var temp: real; bmax, i:integer;
begin
  bmax:=1;
  for i:=2 to k do begin
    if b[i]>b[bmax] then bmax:=i;
    end;
  temp:=b[n];
  b[n]:=b[bmax];
  b[bmax]:=temp;
  for i:=1 to n do
    Write(' ', b[i]);
end;
//---------------------------------------
begin
  Writeln('Введите количество строк');
  Readln(n);
  Writeln('Введите количество столбцов');
  Readln(k);
  Writeln('Введите матрицу ',n,'x',k);
  vvod(n, k, a);
  zadacha(k, a, b);
  zadacha2(k, b);
  Readln;
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 07.11.2017 в 09:52.
Закиров Николай вне форума Ответить с цитированием
Старый 07.11.2017, 09:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Закиров Николай Посмотреть сообщение
T = array of array of integer;
это называется "Динамический массив"
прежде чем обращаться к элементам такого массива, нужно ОБЯЗАТЕЛЬНО выделить память под элементы (через SetLength).

почитайте, например, здесь

Цитата:
Сообщение от Закиров Николай Посмотреть сообщение
for i := 1 to n do for j := 1 to k do
да, и индексируются элементы в таких массивах от нуля до n-1 ( до k-1)

Последний раз редактировалось Serge_Bliznykov; 07.11.2017 в 09:57.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Процедуры/Функции motiv4ik Помощь студентам 1 09.01.2014 21:04
Процедуры на delphi Dante11 Помощь студентам 4 05.11.2013 00:46
Процедуры в delphi Espanol Помощь студентам 0 16.10.2013 10:46
процедуры в delphi. Борис Владимирович Помощь студентам 4 02.12.2011 02:11
Процедуры(Delphi) CAMOBAP Помощь студентам 3 14.03.2011 13:28