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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2009, 23:27   #1
tipilat
Пользователь
 
Аватар для tipilat
 
Регистрация: 02.07.2009
Сообщений: 22
Смущение Сумма каждой строки матрицы и вывод сумм в порядке возрастания (помогите доработать)

написал прогу (спасибо форуму, тут всё черпал) вроде всё как надо, а работать отказываетя, выкидывает после ввода матрицы..

Задание такое:Характеристикой строки целочисленной матрицы назовем сумму ее положительных черных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик


А вот и мой код:
Код:
 program matrica;
 uses crt;
 var a:array[1..20,1..20] of integer;
    str:array[1..20] of integer;
    strmin,L,K,n:integer;
    i,j : byte;
 begin
  clrscr;
  writeln('Enter n');
  readln(n);

 for i:=1 to n do
 for j:=1 to n do
  begin
   write('a[',i,',',j,']=');
   readln(a[i,j]);
  end;

 for i:=1 to n do
 for j:=1 to n do
  begin
   str[i]:=0;
   if (a[i,j] div 2=0) and (a[i][j]>0) then str[i]:=str[i]+a[i,j];
  end;

 for i:=1 to n do
  begin
   strmin:= str[i];
   L:=i;
   K:=K+1;
   while K<=n do
     begin
      if strmin>str[K] then begin
      strmin:=str[K];
      L:=K;
     end;
   K:=K+1;
  end;

 str[L]:=str[i];
 str[i]:=strmin;
 end;
 for i:=1 to n do
  begin
   writeln(str[i]);
  end;
 end.
tipilat вне форума Ответить с цитированием
Старый 04.07.2009, 01:43   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

паскаль не очень знаю, но думаю моя мысль как то поможет

вот в этом куске
Код:
 for i:=1 to n do
 for j:=1 to n do
  begin
   str[i]:=0;
   if (a[i,j] div 2=0) and (a[i][j]>0) then str[i]:=str[i]+a[i,j];
  end;
думаю надо сделать как то так

Код:
 for i:=1 to n do
begin 
 str[i]:=0;   // обнулять нужно в цикле по i , а не по j
 for j:=1 to n do
  begin
   if (a[i,j] div 2=0) and (a[i][j]>0) then str[i]:=str[i]+a[i,j];
  end;
end;
PS: если я не прав - поправьте меня
counter вне форума Ответить с цитированием
Старый 04.07.2009, 08:24   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
выкидывает после ввода матрицы..
Перед последним end. напиши readln. "Выкидывать" не будет, но и результата желанного не будет, потому что написан бред.

Код:
program matrica;
uses crt;
var a:array[1..20,1..20] of integer;{дополнительный массив не нужен}
    n,i,j,l:byte;
    sm,b:integer;{сумма, буфер для обмена}
begin
clrscr;
randomize;
write('Размер матрицы n=');
readln(n);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(20)-2;
for i:=1 to n do{идем по строкам}
 begin
  sm:=0;
  for j:=1 to n do
  if (a[i,j] mod 2=0) and (a[i][j]>0) then sm:=sm+a[i,j];{считаем сумму нужных в строке}
  a[i,n+1]:=sm;{записываем ее в дополнительный столбец матрицы}
 end;
writeln('Исходная матрица:');
writeln('Сумма':n*4+6);
for i:=1 to n do
 begin
  for j:=1 to n+1 do
  if j<=n then write(a[i,j]:4){сама матрица}
  else write(a[i,j]:6);{дополнительный столбец}
  writeln;
 end;
for i:=1 to n-1 do {сортируем все столбцы матрицы по возрастанию}
for l:=i+1 to n do
if a[i,n+1]>a[l,n+1] then{одновременно с сортировкой дополнительного столбца}
for j:=1 to n+1 do
 begin
  b:=a[i,j];
  a[i,j]:=a[l,j];
  a[l,j]:=b;
 end;
writeln('Измененная матрица:');
writeln('Сумма':n*4+6);
for i:=1 to n do
 begin
  for j:=1 to n+1 do
  if j<=n then write(a[i,j]:4)
  else write(a[i,j]:6);
  writeln;
 end;
readln
end.

Последний раз редактировалось Stilet; 06.07.2009 в 09:06.
puporev вне форума Ответить с цитированием
Старый 04.07.2009, 14:22   #4
tipson
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 76
По умолчанию

ого, я чет не подумал об этом

ах да, как туда вписать процедуры?

Последний раз редактировалось Stilet; 06.07.2009 в 09:07.
tipson вне форума Ответить с цитированием
Старый 04.07.2009, 15:01   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Смотри здесь.
http://www.programmersforum.ru/showp...05&postcount=9
puporev вне форума Ответить с цитированием
Старый 04.07.2009, 15:30   #6
tipson
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 76
По умолчанию

спасибо, помогло
tipson вне форума Ответить с цитированием
Старый 04.07.2009, 18:40   #7
tipilat
Пользователь
 
Аватар для tipilat
 
Регистрация: 02.07.2009
Сообщений: 22
По умолчанию

вреде как я тему создавал..?!
бред говоришь написан)))
Не обессудь но я еще только учусь..
а вот на счёт процедур..
серьёзно, как эту прогу доработать с процедурой?
я её немного исправил добавил ввод масива от руки(так препод заказал)
Код:
program matrica;
uses crt;
var a:array[1..20,1..20] of integer;
    n,i,j,l:byte;
        sm,b:integer;
        begin
        clrscr;
        write('razmer mat n=');
        readln(n);
        for i:=1 to n do
         for j:=1 to n do
           begin
              write('a[',i,',',j,']=');
              readln(a[i,j]);
           end;
        for i:=1 to n do
          begin
           sm:=0;
           for j:=1 to n do
            if (a[i,j] mod 2=0) and (a[i][j]>0) then sm:=sm+a[i,j];
            a[i,n+1]:=sm;
       end;
 writeln('isxodnaya mat:');
 writeln('cymma':n*4+6);
     for i:=1 to n do
      begin
       for j:=1 to n+1 do
        if j<=n then write(a[i,j]:4)
        else write(a[i,j]:6);
        writeln;
      end;
     for i:=1 to n-1 do 
      for l:=i+1 to n do
      if a[i,n+1]>a[l,n+1] then
      for j:=1 to n+1 do
       begin
        b:=a[i,j];
        a[i,j]:=a[l,j];
        a[l,j]:=b;
       end;
    writeln('izmenennaya mat:');
    writeln('summa':n*4+6);
       for i:=1 to n do
        begin
         for j:=1 to n+1 do
          if j<=n then write(a[i,j]:4)

           else write(a[i,j]:6);
         writeln;
        end;
readln
end.
tipilat вне форума Ответить с цитированием
Старый 05.07.2009, 07:46   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот программа с процедурами. Как человеку, существующему в единственном числе, крутому прогеру на С++, глубоко презирающему тупорылых преподов, всякие мелочи жизни не объясняю, считаю это неуместным. Впредь найдите себе форум получше, где общаются такие же высокообразованные личности как Вы(в единственном числе).
Код:
program matrica;
uses crt;
type matr=array[1..20,1..20] of integer;
procedure Vvod(var mt:matr;var x:byte);
var i,j:byte;
begin
write('razmer matricy=');
readln(x);
writeln('Vvedite ',x*x,' elementov matricy:');
for i:=1 to x do
for j:=1 to x do
  begin
   write('el[',i,',',j,']=');
   readln(mt[i,j]);
  end;
end;
procedure Vyvod(var mt:matr;x:byte);
var i,j:byte;
begin
writeln('summa':x*4+6);
for i:=1 to x do
 begin
  for j:=1 to x+1 do
  if j<=x then write(mt[i,j]:4)
  else write(mt[i,j]:6);
  writeln;
 end;
end;
procedure Summ(var mt:matr;x:byte);
var i,j:byte;
    sm:integer;
begin
for i:=1 to x do
 begin
  sm:=0;
  for j:=1 to x do
  if (mt[i,j] mod 2=0) and (mt[i][j]>0) then inc(sm,mt[i,j]);
  mt[i,x+1]:=sm;
 end;
end;
Procedure Sort(var mt:matr;x:byte);
var i,j,l:byte;
    b:integer;
begin
for i:=1 to x-1 do
for l:=i+1 to x do
if mt[i,x+1]>mt[l,x+1] then
for j:=1 to x+1 do
 begin
  b:=mt[i,j];
  mt[i,j]:=mt[l,j];
  mt[l,j]:=b;
 end;
end;

var a:matr;
    n:byte;
begin
clrscr;
Vvod(a,n);
clrscr;
Summ(a,n);
writeln('Ishodnaya matrica:');
Vyvod(a,n);
Sort(a,n);
writeln('Izmenennaya matrica:');
Vyvod(a,n);
readln
end.
puporev вне форума Ответить с цитированием
Старый 05.07.2009, 12:45   #9
tipson
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 76
По умолчанию

сколько новых слов в мой словарь добавилось
круто...
терь токо тут буду писать...
а по теме где можно почитать про процедуры с примерами?
tipson вне форума Ответить с цитированием
Старый 05.07.2009, 12:46   #10
tipilat
Пользователь
 
Аватар для tipilat
 
Регистрация: 02.07.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Вот программа с процедурами. Как человеку, существующему в единственном числе, крутому прогеру на С++, глубоко презирающему тупорылых преподов, всякие мелочи жизни не объясняю, считаю это неуместным. Впредь найдите себе форум получше, где общаются такие же высокообразованные личности как Вы(в единственном числе).
За что столько слов то?.. Вы кажется путаете нас tipson и tipilat - разные люди..
Преподов я не призирал, и тем более не оскорблял их.. Да и вам я не грубил..
Честно говоря не очень приятно слышать такую характеристику от Вас, тем более, что я никак не пойму чем я это заслужил..
Если вас не затруднит, будьте любезны поясните мне причину столь недоброжелательного отношения..
tipilat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов матрицы в определенном порядке Dayterius Паскаль, Turbo Pascal, PascalABC.NET 1 20.05.2009 12:13
вывод матрицы на печать в определенном порядке Annet555 Помощь студентам 3 29.03.2009 00:16
Вычислить и запомнить суммы положительных элементов каждой строки матрицы kiko Паскаль, Turbo Pascal, PascalABC.NET 1 13.12.2008 17:32