IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Матрицы
Shaman
сообщение 4.05.2005 23:30
Сообщение #1


Гость






Для матрицы А (4 строки , 5 столбцов) определить сумму элементов строки, содержащей минимальный элемент матрицы. Для определения номера строки, содержащей минимальный элемент, использовать функцию


program matrisa;
var
a:array[1..4,1..5] of Integer; i,j:Byte; sum,min,Nstr:integer;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
Write(i,j,': '); readln(a[i,j]); min:=a[1,1];
if min>a[i,j] then min:=a[i,j]; end;
Write(min);
readln;
end;
end.



Помогите у меня тродность в написание функции если кто знает напишите алгоритм и желательно решение
и ещё буду очень признателен если дадите ссылку где можно почитать про функции а то на сайте я прочёл и не очень хорошо понял

Тегами пользуемся для исходников...
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов(1 - 13)
volvo
сообщение 4.05.2005 23:43
Сообщение #2


Гость






Алгоритм... Самое простое - пишем функцию, находящую минимум в заданной строке:
Function min_row(n: integer): integer;
var i, min: integer;
begin
min := a[1];
for i := 2 to 5 do
if min > a[i] then min := a[i];
min_row := min
end;

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

А насчет процедур и функций можно прочитать здесь: Руководство по языку B.Pascal 7 & Objects/LR (процедуры и функции)
 К началу страницы 
+ Ответить 
Shaman
сообщение 5.05.2005 11:12
Сообщение #3


Гость






program matrisa;
var
a:array[1..4,1..5] of Integer;
i,j:Byte;
sum,min:integer;
function min_row: integer;
var
n:byte;
begin
min := a[1,1];
for i:= 1 to 4 do
for j:= 1 to 5 do
if min > a[i,j] then
begin
min := a[i,j];
n:=i;
for j:=1 to 5 do min_row:=min_row+a[n,j] ; end;
end;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
Write(i,j,': '); readln(a[i,j]);
end;
sum := min_row;
WriteLn(sum); readln; end.



у меня не получаеться где тут ошибка??
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2005 11:23
Сообщение #4


Гость






Shaman, я же привел готовую функцию, зачем понадобилось ее исправлять? blink.gif
var
a:array[1..4,1..5] of Integer;

Function min_row(n: integer): integer;
var i, min: integer;
begin
min := a[1];
for i := 2 to 5 do
if min > a[i] then min := a[i];
min_row := min
end;

var
i, min, min_row, curr_min: integer;
begin
min := maxint; { значение, заведомо большее любого другого }
for i := 1 to 4 do begin
curr_min := min_row(i);
if min > curr_min then begin
{ запоминаем минимум и строку, в которой его нашли }
min := curr_min; min_row := i;
end;
end;

sum := 0;
{ суммируем значения только из одной строки... Из той, где найден минимум }
for i := 1 to 5 do s := s + a[min_row, i];
writeln('sum = ', sum)
end.


Все-таки, прочтите теорию...
 К началу страницы 
+ Ответить 
Shaman
сообщение 5.05.2005 12:34
Сообщение #5


Гость






Как я понял это ответ на мою задачу??
что то он не пашет у меня не одномерный массив а двух мерный и он выдаёт ошибку Type mismatch и указывает где это в функции и поэтому мне приходиться исправлять

var
a:array[1..4,1..5] of Integer;

Function min_row(n: integer): integer;
var i, min,j: integer;
begin
min := a[1,1];
for i := 1 to 4 do for j:=1 to 5 do
if min > a[i,j] then min := a[i,j];
min_row := min
end;



Дальше ошибка в разделе переменных над переменной min_row
Duplicate indentifier(min_row) приходиться её убирать или менять название
вообщем вот что у меня получилось но опять он не хочет сумму считать

program primer;
var
a: array[1..4,1..5] of Integer; i,min,j,sum,minrow,curr_min: integer;
Function min_row(n:integer): integer; var i,j,min: integer;
begin
min:=a[1,1];
for i:=1 to 4 do
for j:=1 to 5 do
if min>a[i,j] then min:=a[i,j]; min_row:=min
end;
begin
for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end; min:=maxint; for i:=1 to 4 do begin
curr_min:= min_row(i);
if min>curr_min then begin min:=curr_min; minrow:=i;
end;
end;
sum:=0;
for i:=1 to 5 do sum:=sum+a[minrow,i];
writeln('sum= ',sum);
readln
end.

 К началу страницы 
+ Ответить 
Shaman
сообщение 5.05.2005 12:38
Сообщение #6


Гость






Ещё вопрос что это за n?? номер строки??
Как я понимаю нам надо сначало найти минимальный элемент и запомнить его номер i и потом приравнять его к n а когда ищим сумму

sum:=0;
for j:=1 to 5 do sum:=sum+a[n,j];

 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2005 13:09
Сообщение #7


Гость






Цитата(Shaman @ 5.05.05 12:34)
что то он не пашет у меня не одномерный массив а двух мерный и он выдаёт ошибку Type mismatch и указывает где это в функции и поэтому мне приходиться исправлять

angry.gif То, что Вам приходится исправлять - а написать самому не хочется? Так пишите...

Цитата(Shaman @ 5.05.05 12:34)
Дальше ошибка в разделе переменных над переменной min_row
Duplicate indentifier(min_row)  приходиться её убирать или менять название

Всё !! Теперь мы меняемся ролями. Теперь Вы будете писАть программы, а я - искать в них ошибки.

1. Функция min_row в Вашем исполнении потеряла смысл. Ей все равно, передам я 1 или 2 или 3 - она ВСЕГДА будет делать одно и то же. Исправляйте.

2. Объясните смысл этой конструкции:
for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end;

Я смысла в ней не вижу.

3. Программа не написана "под ключ" (кстати, и не БУДЕТ написана - учитесь шаманить самостоятельно) - поэтому для того, чтобы она заработала нужно еще и ввести данные.

Учите теорию.
 К началу страницы 
+ Ответить 
Guest
сообщение 5.05.2005 13:15
Сообщение #8


Гость







for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end;


Матрицу я как заполнять буду??
 К началу страницы 
+ Ответить 
Shaman
сообщение 5.05.2005 13:47
Сообщение #9


Гость







program matrisa;
var
a:array[1..4,1..5] of Integer;
i,j,n:Byte;
sum,min:integer;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
Write(i,j,': '); readln(a[i,j]); end;
min := a[1,1];
for i:= 1 to 4 do
for j:= 1 to 5 do
if min > a[i,j] then begin
min := a[i,j];
n:=i;
end;
for j:=1 to 5 do sum:=sum+a[n,j];
Write('Min element:',min);
writeln('Summa:',sum);
readln
end.


Может я что то нетак спрашиваю я вот напсал программу без функции мне эту программу надо с функцией сделать а то что вы предлагаете я не очень хорошо понимаю и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы
 К началу страницы 
+ Ответить 
hiv
сообщение 5.05.2005 16:30
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Гм...
Цитата
... и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы

Наверно тогда бы ваша программа была бы создана с использованием функций!

А матрицу можно заполнять случайными числами. Сгенерировать их позволит функция random


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
shaman
сообщение 5.05.2005 21:56
Сообщение #11


Гость






не народ вообще странный я где нибудь писал что матрицу мне надо заполнять случайными числами??? я вообще просил либо алгоритм либо решение(полное) но так как я понял решения мне не дадут то я прошу хотябы алгоритм или решение задачи любой на матрицы с функцией тока чтоб решение было полное и сама задача (и конечно лучше бы чтоб каждое действие описывалось) или может кто нить подскажет где её взять
 К началу страницы 
+ Ответить 
Atos
сообщение 6.05.2005 10:32
Сообщение #12


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Цитата
for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end;

Матрицу я как заполнять буду??


Молча!! :D

Вообще-то для того, чтобы её заполнить, надо в неё хоть что-нибудь записать.
Например,
Код
readln(a[i,j])
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 6.05.2005 12:56
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Там есть все! И ввод, и вывод матриц.
FAQ: Массивы. Матрицы. Типичные задачи.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.05.2005 13:24
Сообщение #14


Гость






Цитата
и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы
Без теории здесь по-любому не обойтись, так что перечитать придется.

Цитата(shaman @ 5.05.05 21:56)
как я понял решения мне не дадут

Правильно понял...


Тема закрыта в связи с нежеланием автора думать самостоятельно
 К началу страницы 
+ Ответить 

Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"