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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2010, 16:20   #1
Nubik
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 17
Стрелка ПАскаль матрицы, проверьте программу

Написал программу вроде работает=). Подскажите плз, тут баги какие нибудь есть, и если можно объясните алгоритм действий выделенного фрагмента...

const n=10;
type matr = array[0..n, 0..n] of integer;

Напишите логическую функцию TEST(A ,k), принимающую значение True, если:
1. Все элементы k-го столбца нулевые.




uses crt;
const n=10;
type matr = array[0..n, 0..n] of integer;
var
X:Matr;
i,j,k:integer;
function Test(A: matr; k:integer ): Boolean;
var s:integer;
begin
s:=0;
for i:=1 to n do begin
if a[i,k]=0 then s:=s+1;
end;
if s=n then Test:=true
else Test:=false;
end;

BEGIN
randomize;
For i:=1 to n do begin
for j:=1 to n do begin
X[i,j]:=Random(10-5);
Write(X[i,j]:4)
end;
WriteLn;
end;
Repeat
Write('Vvedite chislo k > ':2);
ReadLn(k);
If (k<=0) or (k>n) then
WriteLn('Chislo nevernoe');
until (k>0) and (k<=n);
If Test(X,k)
then WriteLn('Test5 = TRUE')
else WriteLn('Test5 = FALSE');
ReadLn
END.
Nubik вне форума Ответить с цитированием
Старый 24.01.2010, 19:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ошибка в том, что массивы Вы задаёте от нуля (кстати, там получается матрица 11x11 элементов...
т.е. везде, где у Вас циклы от 1 надо цикл от 0

2) функция Test написано правильно (ну, если только исправить цикл от 0 и сверять счётчик s надо с n+1), но "в лоб".. я бы написал немного по другому - если встретили ненулевой элемент, можно прерывать перебор остальных элементов, уже ответ ясен (false)...

а объяснять там нечего. s - счётчик нулевых элементов.
s := 0; иницилизируем счётчик (т.е. перед циклом ни одного элемента ещё не подсчитали)

for i:=0 to n do перебираем все элементы
if a[i,k]=0 then s:=s+1; если очередной (I-й) элемент К-го столбца нулевой - увеличиваем счётчик нулевых элементов.
if s=(n+1) then ...True // если счётчик нулевых совпадает с количеством элементов, то тогда они все нулевые
else // иначе
функция False - есть ненулевые в столбце...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2010, 20:27   #3
Nubik
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ошибка в том, что массивы Вы задаёте от нуля (кстати, там получается матрица 11x11 элементов...
т.е. везде, где у Вас циклы от 1 надо цикл от 0
Выводится матрица 10*10 сдесь все верно
Nubik вне форума Ответить с цитированием
Старый 24.01.2010, 20:57   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Выводится то 10х10, но матрица 11х11!
psycho-coder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте, пожалуйста, программу!Не выводиться на экран! J__S(Юляшка) Общие вопросы C/C++ 5 21.12.2009 03:14
Проверьте пожалуйста программу на Си Konstantin2209 Помощь студентам 0 20.12.2009 19:31
Паскаль. Проверьте меня... Кириллович Помощь студентам 5 22.05.2009 21:39
проверьте программу плиз и исправьте что там не так Gronex Помощь студентам 3 21.05.2009 17:01
пожалуйста проверьте правильность проги на языке паскаль! владимир/к. Паскаль, Turbo Pascal, PascalABC.NET 3 21.01.2009 08:54