Помощь - Поиск - Пользователи - Календарь
Полная версия: Сумма элементов строки с минимальным эл. в матрице
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Volonter
Привет всем, доброго Вам времени суток... У меня есть вот такая задачка... но до меня все никак не доходит как ее решить... помогите чем сможете smile.gif Буду рад любой помощи smile.gif... Да кстати чуть не забыл, само условие:

В данной вещественной матрице порядка n найдите сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент единственный.
volvo
1. Ищем строку, в которой находится минимальный элемент (решалось десятки раз + см. FAQ по матрицам, там тоже было)
2. проходим по этой строке и суммируем все ее элементы (одним циклом)...

Что именно вызывает затруднения? (отвечаем только после прочтения: FAQ: Массивы. Матрицы. Типичные задачи. )
Volonter
Volvo, проблема в том что я только вчера познакомился с паскалем smile.gif... у меня просто ускоренный курс по изучению паскаля... после завтра эту задачку уже отдать надо... вот в этом и причина... того что мне еще не все понятно... Если можно приблизительный ну или полностью код не могли бы Вы выложить если это Вас конечно не затруднит... Заранее благодарен.
klem4
Цитата
после завтра


Значит у тебя еще очень много времени, постарайся решить задачу сам, выложи что получится, исправим ошибки, направим в правильное русло. Не принято у нас решать за кого-то задачу полностью.
Volonter
Привет всем... вот поизучал помучался smile.gif

вот что имею на данный момент... Пока просто создается сама матрица... подталкните меня к следущему шагу задачи...

Код
Program Matrix;
Uses crt;
Type xmat = array [1..100,1..100] of integer;
    Var mat1:xmat; i,j,m,n:integer;
Begin
     clrscr;
     writeln ('vvedite 4islo strok');
     readln (m);
     writeln ('vvedite 4islo stolbcov');
     readln (n); writeln; writeln ('vvodite 3na4eni9 matrici'); writeln;
     for i:=1 to m do
     begin
          for j:=1 to n do
          read (mat1[i,j]);
     end;
     for i:=1 to m do
     begin
          for j:=1 to n do
          write (mat1[i,j]:4);
          writeln;

     end;
end.
klem4
Следующий шаг - найти строку с минимальным элементом :
min_row := 0;
min_col  := 0;

for i := 1 to m do
 for j := 1 to n do
  if (x[i,j] < x[min_row, min_col]) or (min_row = 0) then begin
     min_row := i;
     min_col  := j;
  end;


min_row будет содержать номер строки, в которой находится минимальный элемент.
Volonter
klem4б, не сочти за глупость smile.gif, но я всеже спрошу за что в твоем коде отвечает переменная Х? smile.gif
GoodWind
переменная X это и есть матрица wink.gif
volvo
За то же самое, за что у тебя в коде отвечает mat1 yes2.gif

blink.gif GoodWind, когда успел?
GoodWind
Volvo, на минуту раньше тебя blum.gif smile.gif
Volonter
Тоесть теперь я должен объявить min_row и min_col? так или не так?
Volonter
Привет народ... вот делаю все эту задачу... уже не могу... мне конечно помагали но всеже... для первого раза она меня потрепала... Так вот проверте пожалуйста по условию задачи код я хоть то натворил... или все оказалось в пустую?

Код
program test;
uses crt;
type arr = array[1..100,1..100] of real;
var
matrix: arr;
rows, lines, i, j, line :integer;
value, min, summ :real;
begin
clrscr;
writeln('Vvedite kolichestvo stolbcov: ');
readln(rows);
writeln('Vvedite colichestvo strok: ');
readln(lines);
writeln('Matrix ',rows,'X',lines,' successfuly created!!!');
{Filing a matrix}
for i:=1 to lines do
begin
     for j:=1 to rows do
     begin
     writeln('Vvedite stolbci ',j,' stroci ',i);
     readln(value);
     matrix[j,i]:=value;
     end;
end;
{End filing a matrix}
{Find a minimal value of matrix}
min:=matrix[1,1];
line:=1;
for i:=1 to rows do
begin
     for j:=1 to lines do
     begin
     if matrix[j,i] < min then begin
        min:= matrix[j,i];
        line:=i;
        end;
     end;
end;
writeln(min,'            ',line);
{End find a min value}
summ:=matrix[line,1];
for i:=2 to rows do
begin
summ:=summ+matrix[line,i];
end;
writeln('Summ elements of line ',line ,' = ',summ);
readln(summ);
end.

Конечно отличается малость от того чтоя раньше кидал но всеже... помогите, проверьте, тока пожалуйста ответьте сегодня а то мне завтра ее сдавать...
volvo
Volonter, на первый взгляд работать она конечно будет (Ну, почти будет smile.gif ), НО:
1) у тебя будут попутаны столбцы и строки:
     writeln('Vvedite stolbci ',j,' stroci ',i); { <--- Просишь СТОЛБЕЦ #j и СТРОКУ #i  }
     readln(value);
     matrix[j,i]:=value; { <--- Заносишь число в СТРОКУ #j и СТОЛБЕЦ #i !!! }

Хотя дальше в программе обращаешься правильно:
for i:=1 to rows do
begin
     for j:=1 to lines do
     begin
     if matrix[j,i] < min then begin
        min:= matrix[j,i]; { <--- Все верно: строка #j и столбец #i }
        line:=i;
        end;
     end;
end;

2)
     for j:=1 to rows do
     begin
       writeln('Vvedite stolbci ',j,' stroci ',i);
       readln(value); { <--- Зачем ? }
       matrix[j,i]:=value;
     end;

Зачем делать через доп. переменную, когда можно:
     for j:=1 to rows do
     begin
       writeln('Vvedite stolbci ',j,' stroci ',i);
       readln(matrix[j, i]);
     end;

?
Volonter
volvo, я вот тока не пойму почему после суммирование выдается результаты типа 1,0000000000E+01?
klem4
Это экспоненциальная форма ... форматируй вывод
writeln(a:2:3);


2 - количество цифр, отводящееся под число
3 - количество цифр после запятой
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.