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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2009, 14:18   #1
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
Вопрос Что-то задача не работет...(процедуры и ф-ции, лог.вектор)

Перепроверяю уже раз 10! Не знаю в чем ошибка! Препод говорит всё правильно, только пару небольших ошибочек, из-за которые программа и не работает!! Помогите пожалуйста мне из обнаружить!!!)

{Пусть дана матрица A(nxn). Посторойте логический вектор, каждый элемент которого равен true, если в строке существует элемент, делящий весь массив на две части с одинаковой суммой элементов в каждой.}
program p106ex17;
Код:
{$APPTYPE CONSOLE}
uses
 SysUtils;

const
  n=4;

Type
   Tstr = array[1..n] of real;
   Tmatr = array[1..n] of Tstr;
   TVect = array[1..n] of boolean;

var
  Vect: TVect;
  A: Tmatr;
  i:integer;


procedure read_matr (var M:Tmatr);
var i,j:integer;
begin
 for i:=1 to n do
   for j:=1 to n do
     read(M[i,j]);
 readln
end;


function Log_Vect(A:Tstr):boolean; //Искомый логический вектор
var i,j:integer;
    sm1,sm2,sum:real;
    Ok:boolean;
begin
sum:=0;
for i:=1 to n do
  Sum:=Sum+A[i];

  Sm1:=A[1];
  Sm2:=Sum-A[1];
  ok:=false;
  j:=1;
while (j<=n-1) and (not ok) do
    Sm1:=Sm1-A[j];

  if Sm1=Sm2 then
    Ok:=true
  else
    Sm1:=Sum+A[j];

Log_Vect:=ok

end;

begin
read_matr(A);
writeln('Matrica A:');

for i:=1 to n do 
 begin
 vect[i]:=Log_Vect(A[i]);
 write(vect[i],' ');
 end;
readln
end.




Последний раз редактировалось Stilet; 30.03.2009 в 14:28.
katya36 вне форума Ответить с цитированием
Старый 30.03.2009, 21:20   #2
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
По умолчанию

Ну в чем же дело, подскажите!??!?
katya36 вне форума Ответить с цитированием
Старый 30.03.2009, 22:20   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:
  Sm1 := 0;
  Sm2 := Sum-A[1];
  ok  := false;

  j:=1;
  while (j <= n-1) and (not ok) do begin
     Ok  := Sm1 = Sm2;
     Sm1 := Sm1+A[j];
     inc(j);
     Sm2 := Sm2-A[j];
  end;
Что-ж отладчиком не пользуетесь ? Сразу бы увидели, что в цикле begin/end отсутствует и j не меняется.
alexBlack вне форума Ответить с цитированием
Старый 30.03.2009, 22:37   #4
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
По умолчанию

Спасибо!
да я отладчиком пользоваться неу мею, нам такого не объясняли ещё!(
katya36 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ф-ции и процедуры. В чём ошибка??? Программа не работает!:( katya36 Помощь студентам 3 05.03.2009 12:55
задача на функции и процедуры katya36 Помощь студентам 2 17.02.2009 15:24
задача с использованием процедуры Chief Паскаль, Turbo Pascal, PascalABC.NET 0 12.01.2009 12:59
checkListBox1.OnMouseDown не работет при выделенном элементе. Как исправить? Izhic Компоненты Delphi 4 28.10.2008 17:41
Что такое прототипы процедуры в ассемблере ? Technokiller Помощь студентам 2 06.06.2008 15:30