Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача про матрицу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
agressor
В заданной матрице K на E опредилить кол-во строк образующих арифм. прогрессию. Использовать подпрограмму/функцию для проверки одной строки.
klem4
Вроде привильно работает, сам с функциями особо не знаком, не изучали еще smile.gif но вроде так :

Код
uses crt;
const k=3;
     e=4;
type
  mass=array[1..k,1..e] of integer;
var
   i,j,s:integer;
   x:mass;

function arrprg(x:mass):boolean;
var bo:boolean;
begin
  for i:=1 to k do
   begin
      bo:=true;
      begin
         for j:=1 to e-2 do
          if (x[i,j]-x[i,j+1])<>(x[i,j+1]-x[i,j+2])
           then bo:=false;
         if bo=true then inc(s);
      end;
   end;
end;

Begin
  clrscr;
  s:=0;
  for i:=1 to k do
   for j:=1 to e do
    begin
       write('x[',i,',',j,']= ');
       readln(x[i,j]);
    end;
  arrprg(x);
  writeln;
  writeln('s=',s);
  readln;
  end.


volvo
klem4
Ему надо
Цитата
Использовать подпрограмму/функцию для проверки одной строки
То есть в функции должна остаться только проверка одной строки, и эта самая функция будет вызываться в цикле... ;)
klem4
Значит так :low:

Код
uses crt;
const k=3;
    e=4;
type
 mass=array[1..k,1..e] of integer;
var
  i,j,s:integer;
  x:mass;

function arrprg(x:mass):boolean;
var bo:boolean;
begin
  bo:=true;
  begin
     for j:=1 to e-2 do
      if (x[i,j]-x[i,j+1])<>(x[i,j+1]-x[i,j+2])
       then bo:=false;
        if bo=true then inc(s);
  end;
end;

Begin
 clrscr;
 s:=0;
 for i:=1 to k do
  for j:=1 to e do
   begin
      write('x[',i,',',j,']= ');
      readln(x[i,j]);
   end;
 for i:=1 to k do
  arrprg(x);
 writeln;
 writeln(s);
 readln;
 end.

agressor
она не работает!
volvo
agressor
Цитата
она не работает!
Краткость - сестра таланта?

Агрессией здесь Вы ничего не добьетесь ... Приведите тестовую матрицу, с которой программа не сработала...
agressor
У меня она виснит после ввода первого элемента.
volvo
agressor
Вот с этой матрицей я только что запускал программу 3 раза (при k = 4, e = 5):
Цитата
  1 2 3 4 5
  2 4 6 8 10
  1 2 9 12 14
  0 1 4 5 0
- все прекрасно работает...
agressor
Только матриц должна быть 3 на 4
agressor
извини ступил. :molitva:
agressor
Код
arrprg(x);
writeln; { для чего writeln; }
writeln(s);
readln;
end.
volvo
пустой Writeln; для того, чтобы визуально отделить ввод матрицы от вывода результата... В принципе можно его и убрать.

Ну так программа сработала?
agressor
Все понял вроде работает. Спасибо. У меня тут вобще Паскаль в XP работать не хочет, приходится через загрузочную дискету. Правда смешно?
klem4
Цитата(agressor @ 12.01.05 21:25)
Паскаль в XP работать не хочет, приходится через загрузочную дискету. Правда смешно?

У тебя наверняка нету файла autoexec.nt в ..\winnt\system32\
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.