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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2010, 12:54   #1
thexqn
 
Регистрация: 15.11.2009
Сообщений: 6
По умолчанию Матрицы в Паскале. Где ошибка?

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

Убедительная просьба, не переписывайте функции заново, помогите разобраться, где ошиблась, пожалуйста.

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

И, собственно, проблемы с суммой (пункт 4 меню).
Если есть вопросы, помогу разобраться. Спасибо.
thexqn вне форума Ответить с цитированием
Старый 16.04.2010, 12:54   #2
thexqn
 
Регистрация: 15.11.2009
Сообщений: 6
По умолчанию

сам код:

const
space = ' ';
n = 3;

type
TMatrix = array [1..n, 1..n] of integer;

var item, k, res: integer;
Matr: TMatrix;

///////////////////////////////////////////////////////////////////////////////
/// Ввод матрицы

procedure Input_Matr (var Matr: TMatrix);
var i, j: integer;
begin
writeln('Введите матрицу размерности ',n,' на ', n, ': ');
for i := 1 to n do
for j := 1 to n do
read(Matr[i, j]);
readln;
writeln(#10,'Ввод завершен.');
end;

///////////////////////////////////////////////////////////////////////////////
/// Заполнение матрицы случайными числами

procedure Input_Random(var Matr: TMatrix);
var ch: char; i, j: integer;
begin
write('Подтверждаете автоматический ввод элементов? (Y/N) -> ');
readln(ch);
if ch in ['Y','y','Н','н'] then
begin
randomize;
for i := 1 to n do
for j := 1 to n do
Matr[i, j] := random(21)-20;
end;
writeln(#10,'Ввод успешно завершен', #10);
end;

////////////////////////////////////////////////////////////////////////////////
/// Печать матрицы

procedure Print_Matr(Matr: TMatrix);
var i, j: integer;
begin
writeln;
for i := 1 to n do
for j := 1 to n do
begin
write(Matr[i, j], space);
if j = n then writeln;
end;
end;

////////////////////////////////////////////////////////////////////////////////
/// Проверка, есть ли в строке отрицательные элементы. Есть - ложь, нет - истина

function No_Negatives(Matr: TMatrix; k: integer): boolean;
var i: integer; OK: boolean;
begin
i := k; OK := true;
while (i <= n) and OK do
if Matr[k, i] < 0 then OK := false
else inc(i);
No_Negatives := OK
end;

///////////////////////////////////////////////////////////////////////////////
/// Сумма элементов в заданной строке, в которой нет отрицательных элементов

function Sum_El(Matr: TMatrix; k: integer): integer;
var i: integer;
begin
result := 0;
if No_Negatives(Matr,k) then
begin
for i := k to n do
result := result + Matr[k,i]
end
else result := 0;
Sum_El := result
end;

///////////////////////////////////////////////////////////////////////////////
/// Вывод меню на экран

function Menu: byte;
const
MaxItem = 5;
begin
writeln(#10,'Выберите какой-либо пункт меню:');
writeln(#10,'1 - Ввести новую матрицу;');
writeln('2 - Заполнить матрицу случайными числами;');
writeln('3 - Просмотреть текущую матрицу;');
writeln('4 - Сумма элементов в строках, не содерж. отрицательных элементов;');
writeln('5 - Минимум среди сумм элементов диагоналей,');
writeln(' параллельных главной диагонали;');
writeln('0 - Выход;');
write(#10,'Ваш выбор: -> ');

repeat
readln(result);
until result in [0..MaxItem];

menu := result

end;

////////////////////////////////////////////////////////////////////////////////



begin{main}
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
repeat
item := menu;
case item of
1: Input_Matr(Matr);
2: Input_Random(Matr);
3: Print_Matr(Matr);
4: begin
for k := 1 to n do
begin
res := Sum_El(Matr, k);
if res <> 0 then writeln(#10,'Строка - ',k,', сумма элементов в ней = ',res);
end;

end;
end;


until item = 0;
end.
thexqn вне форума Ответить с цитированием
Старый 16.04.2010, 14:30   #3
PoGeR
Новичок
Джуниор
 
Регистрация: 08.04.2010
Сообщений: 2
По умолчанию

У вас в условии написано что сложить те строки где нет отрицательных но у вас везде стоят Integer-ы он отрицательные значения не держит.. а что касается ввода, процедуры все верные, но может быть программа запуталась в выходных параметрах у вас Matr является и глобальным и локальным для всех процедур..могу ошибаться
PoGeR вне форума Ответить с цитированием
Старый 16.04.2010, 16:24   #4
Филантроп
Форумчанин
 
Аватар для Филантроп
 
Регистрация: 12.04.2010
Сообщений: 134
По умолчанию

исправьте тут
Код:
Matr[i, j] := random(21)-20;// у вас никогда не будет чисел >0
да и еще
если Matr -глобальная переменная
уберите ее из вызова процедур, т.е
например
Код:
procedure Input_Matr (var Matr: TMatrix);
превратите
в
Код:
procedure Input_Matr ;
и т.д!
Цитата:
Integer-ы - отрицательные значения не держит
еще как держит
да и еще
Цитата:
однако при выборе печати матрицы на экран выводятся нули, как исправить.
матрицу нужно сначала заполнять а потом выводить


функция
Код:
function Sum_El(Matr: TMatrix; k: integer): integer;
должна выглядеть так
Код:
function Sum_El(Matr: TMatrix; k: integer): integer;
var i: integer;
begin
result := 0;
if No_Negatives(Matr,k) then
for i := 1 to n do
result := result + Matr[k,i];

Sum_El := result
end;
кому нужна помощь! жду в аське и скайпе!

Последний раз редактировалось Филантроп; 16.04.2010 в 16:32.
Филантроп вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрицы в паскале CergWP Помощь студентам 1 08.04.2010 07:38
Матрицы в паскале gx5rmsu8x Помощь студентам 1 30.01.2010 17:16
Матрицы в паскале Мария0703 Помощь студентам 8 06.05.2009 10:27
Где ошибка? [Smarik] Общие вопросы Delphi 5 01.04.2008 09:56