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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2014, 21:15   #1
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию Ошибка в программе

Попыталась написать программу по прикрепленному заданию. Запускаться она запускается, только вот ничего не считает. Бред какой-то с этой процедурой получается. Помогите, пожалуйста! Что неправильно у меня? А то я уже что только не пробовала менять, все равно ничего не считается.

Код:
program L;
 const
  m=3;
  n=4;
 type
  mas=array[1..m] of integer;
  matr=array[1..m,1..n] of integer;
 var
  a:matr;
  i,j,s,smin,t:integer;
 procedure SUMMA (k:integer; var sum:integer);
 var
  j:integer;
 begin
  for j:=1 to n do
   sum:=0;
   sum:=sum+a[i,k];
 end;  
 begin 
  randomize;
  for i:=1 to m do
   begin
    for j:=1 to n do
     begin
      a[i,j]:=random(6);
      write(a[i,j]:4);
     end;
     writeln;
   end;
  SUMMA(j,s);
  write('Сумма элементов столбцов: ');
  write(s,' ');
  writeln;
   if s<smin
    then 
     begin
      smin:=s;
      t:=i;
     end;
     writeln('Мин. сумма столбцов ',smin,' в столбце ',t);
 End.
Изображения
Тип файла: jpg задание.JPG (15.6 Кб, 85 просмотров)
yulia.a вне форума Ответить с цитированием
Старый 13.05.2014, 21:46   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Как минимум:
Код:
procedure SUMMA (k:integer; var sum:integer);
 var
  j:integer;
 begin
 sum:=0;
  for j:=1 to n do
    sum:=sum+a[i,k];
 end;


Как-то так,...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.05.2014, 22:18   #3
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

Изменила немного код, включая поправку, но это ничего нормального не дало, выводит в суммах элементов столбцов(s) огромное число, никак не связанное с матрицей, а в мин. сумме столбцов(smin) все равно ноль.
Код:
program L;
 const
  m=3;
  n=4;
 type
  mas=array[1..m] of integer;
  matr=array[1..m,1..n] of integer;
 var
  a:matr;
  i,j,s,smin,t:integer;
  a1:mas;
 procedure SUMMA (b:mas; var sum:integer; n:integer);
 var
  i:integer;
 begin
  sum:=0;
  for j:=1 to n do
   sum:=sum+b[i];
 end;  
 begin 
  randomize;
  for i:=1 to m do
   begin
    for j:=1 to n do
     begin
      a[i,j]:=random(6);
      write(a[i,j]:4);
     end;
     writeln;
   end;
  SUMMA(a1,s,m);
  write('Суммы элементов столбцов: ');
  write(s,' ');
  writeln;
   if s<smin
    then 
     begin
      smin:=s;
      t:=i;
     end;
     writeln('Мин. сумма столбцов ',smin,' в столбце ',t);
 End.
yulia.a вне форума Ответить с цитированием
Старый 13.05.2014, 22:46   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Смотрим на фрагмент:
Код:
SUMMA(a1,s,m); {Подсчет суммы одномерного массива}
  write('Суммы элементов столбцов: '); {о каких столбцах речь?}
  write(s,' ');
  writeln;
   if s<smin  {smin - что это за smin, где оно было инициализировано?}
                {по умолчанию smin = 0}
    then      {и это не работает}
     begin
      smin:=s;
      t:=i;
     end;
А где подсчет суммы столбцов матрицы? Как передается столбец матрицы в процедуру?
Циклы:
Код:
 for i:=1 to m do
   begin
    for j:=1 to n do
     begin
      a[i,j]:=random(6);
      write(a[i,j]:4);
     end;
     writeln;
   end;
- это только инициализация элементов матрицы.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.05.2014, 23:35   #5
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

Цитата:
Смотрим на фрагмент:
Код:

SUMMA(a1,s,m); {Подсчет суммы одномерного массива}
write('Суммы элементов столбцов: '); {о каких столбцах речь?}
write(s,' ');
writeln;
if s<smin {smin - что это за smin, где оно было инициализировано?}
{по умолчанию smin = 0}
then {и это не работает}
begin
smin:=s;
t:=i;
end;
Суммы элементов столбцов, т.е. я имела в виду сумму элементов каждого столбца двумерного массива в отдельности.
smin приравняла к s. Но т.к. программа не работает, я не могу понять правильно это или нет





Цитата:
А где подсчет суммы столбцов матрицы? Как передается столбец матрицы в процедуру?
Циклы:
Код:

for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=random(6);
write(a[i,j]:4);
end;
writeln;
end;

- это только инициализация элементов матрицы.
В том-то и дело. Как я могу передать столбец, если нужно составить процедуру подсчета суммы значений элементов в одномерном массиве? Вот это мне как раз и непонятно, как применить процедуру, написанную для одномерного массива, к двумерному массиву. Из-за этого у меня ничего и не получается, я так думаю.
yulia.a вне форума Ответить с цитированием
Старый 18.05.2014, 17:33   #6
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

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

Код:
program L;
 const
  m=3;
  n=4;
 type
  mas=array[1..m] of integer;
  matr=array[1..m,1..n] of integer;
 var
  a:matr;
  i,j,s,smin,t:integer;
  a1:mas;
 procedure SUMMA (b:mas; var sum:integer; m:integer);
 var
  i:integer;
 begin
  sum:=0;
  for j:=1 to m do
   sum:=sum+b[i];
 end;  
 begin 
  randomize;
  for i:=1 to m do
   begin
    for j:=1 to n do
     begin
      a[i,j]:=random(6);
      write(a[i,j]:4);
     end;
     writeln;
   end;
  SUMMA(a1,s,m);
  write('Суммы элементов каждого столбца: ');
  write(s,' ');
  writeln;
  smin:=s;
   if s<smin
    then 
     begin
      smin:=s;
      t:=j;
     end;
     writeln('Мин. сумма столбцов - ',smin,' (в столбце ',t,' )');
 End.
yulia.a вне форума Ответить с цитированием
Старый 18.05.2014, 18:17   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:

program L;
 const
  m=3;
  n=4;
 type
  mas=array[1..m] of integer;
  matr=array[1..m,1..n] of integer;
 var
  a:matr;
  i,j,s,smin,t:integer;
  a1:mas;

 procedure SUMMA (b:mas; var sum:integer; m:integer);
 var
  i:integer;
 begin
  sum:=0;
  for j:=1 to m do
   sum:=sum+b[i];
 end; 

 begin 
  randomize;
  for i:=1 to m do
   begin
    for j:=1 to n do
     begin
      a[i,j]:=random(6); a1[j]:=a1[j]+a[i,j];
      write(a[i,j]:4);
     end;
     writeln;
   end;

SUMMA(a1,s,m);

  write('Суммы элементов каждого столбца: ');
  for i:=1 to n do write(a1[i]:5); writeln;
  write(s,' ');
  writeln;
  smin:=s;
   if s<smin
    then 
     begin
      smin:=s;
      t:=j;
     end;
     writeln('Мин. сумма столбцов - ',smin,' (в столбце ',t,' )');
 End.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2014, 23:47   #8
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

Спасибо! Теперь суммы по столбцам считает правильно)

Минимальную сумму он все равно не считал, я пробовала сделать сама, но он считает неправильно. Почему не понимаю. Помогите, пожалуйста!
Вот этот кусочек:
Код:
write('Суммы элементов каждого столбца: ');
  for i:=1 to n do 
  write(a1[i]:5); 
  writeln;
  smin:=a1[1];
   if a1[i]<smin
    then 
      smin:=a1[i];
      t:=i;
  writeln('Мин. сумма столбцов = ',smin,' (в столбце ',t,' )');
yulia.a вне форума Ответить с цитированием
Старый 19.05.2014, 10:25   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как он будет ее считать, если цикл у тебя распространяется только на write(a1[i]:5);
Ставь цикл для остальных операторов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка программе ch_dark БД в Delphi 4 05.12.2013 21:01
Ошибка в программе С++ dgulij Помощь студентам 3 03.03.2013 20:01
Ошибка в программе pandaaaaa Паскаль, Turbo Pascal, PascalABC.NET 4 27.12.2011 22:13
Ошибка в программе T@tali Паскаль, Turbo Pascal, PascalABC.NET 4 28.02.2011 10:32
Ошибка в программе CraZZZy-GameRRR Общие вопросы Delphi 2 14.02.2011 02:22