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

> Правила раздела!

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

> Проблема ис входным параметром рекурсивной процедуры
SurpSG
сообщение 16.02.2012 17:45
Сообщение #1





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

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


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

var
	a:array[1..n,1..n] of integer;
	b:array[1..n,1..n] of integer;
	
	TopsB:array[1..n] of integer;
	arr:array[1..n] of integer;
	start:array[1..n] of integer;
	arrVar:array[1..n]of integer;
	TopA,ind,i,j:integer;
		
		procedure check(vec:array[1..n]of integer);
	var
	i,j,k:integer;
	sumA,sumB,summ:integer;
 
	begin
	  writeln(TopA,' topA');
	 for i:=1 to n do
	   begin
		 arr[i]:=0;
	   end;
 
	   if((TopA>=1)and(TOpA<5)) then
	   begin
 
		  sumA:=0;
		  for i:=1 to n do
		  begin
			sumA:=sumA+a[TopA,i];
		  end;
		  
		  for i:=1 to n do
			begin
								
								{******************}
						 for k:=1 to n do
								begin
								writeln(vec[k],' vec ',k);
								end;
								
			   if ((vec[i]>0)and(isFree(i))) then
				 begin
					  sumB:=0;
					  for j:=1 to n do
					  begin
					  sumB:=sumB+b[i,j]
					  end;
					  if(sumA=SumB) then
					  begin
						arr[i]:=1;
						TopsB[ind]:=i;
						ind:=ind+1;
						TopA:=Topa+1;
						
						for k:=1 to n do
						begin
						arrVar[i]:=b[i,k];
						end;
						
						check(arrVar);
					  end;
				 end;
				 
			end;
 
	   end;
	   
	   summ:=0;
	   for i:=1 to n do
	   begin
		 summ:=summ+arr[i];
	   end;
	   
	   if(summ<=0) then
	   begin
			TopA:=TopA-1;
			ind:=ind-1;
	   end
	   else if(TopA<=0) then
	   begin
			writeln('no');
	   end
	   else if(TopA>=n) then
	   begin
			writeln('yes');
	   end;
	end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 

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