Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

atanaka

[Resolvido] Matriz, Recursao

Recommended Posts

Tenho um projeto pra faculdade onde o usuario vai entrar com os valores de um estoque em uma matriz. Ai tenho que selecionar por exemplo os numeros entre 100 e 199 e somar. Tenho que fazer isso numa funcao recursiva. Pela funcao que criei consigo somar todos os elementos mas nao consigo colocar uma opcao so pra somar os elementos de 100 e 199. Aqui vai o programa se alguem puder ajudar:

function soma (x,y:integer):integer;  	
	begin	
          if ((x=1) and (y=1))  then	        
	     soma:= (v[x,y]) 
	  else
	    if (y>1)then
	      soma:= (v[x,y]) + (soma(x,y-1))
	    else		
	     if (x>1) then
	        soma:= (v[x,y]) + (soma(x-1,y+1));
end;

Ja coloquei um if no comeco mas ai da um looping infinito. E tambem ja tentei colocar o if antes de chamar a funcao recursiva mas acaba somando todos os elementos da matriz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não faz a verificação fora da chamada da função?

Tipo usa um vetor auxiliar, tendeu?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não faz a verificação fora da chamada da função?

Tipo usa um vetor auxiliar, tendeu?

 

[]s

 

algo assim:

  for i:=1 to 4 do		    
    if ((v[l,c]>100) and (v[l,c]<199)) then
	begin
	   v2[x,y]:= v[l,c];
	   readln (v2[x,y]);
        end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim sim..

ai o v2, entra na função recursiva ;D

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim sim..

ai o v2, entra na função recursiva ;D

 

[]s

 

entao o programa roda mas nao mostra os resultados. Vou colocar o codigo inteiro.

 

program test; 
type
    matriz = array [1..2,1..2]of integer;
    matriz2 = array [1..2,1..2] of integer; 
type  
       estoque = record
       codigo: string[20];
       quant:integer;
       punit:real;
       ptotal:real;
end; 

type
	vetor = array [1..3] of estoque;  
var
          v: matriz;
	  v2:matriz2;
	  l,l2,c,c2,i,x2,y2: integer;
	  registro:vetor;
				
{funcao recursiva}
function soma (x,y:integer):integer;  	
	begin
	   if ((x=1) and (y=1))  then
		soma:= (v2[x,y]) 
	   else
           if (y>1)then
	        soma:= (v2[x,y]) + (soma(x,y-1))
           else		
	   if (x>1) then
	       soma:= (v[x,y]) + (soma(x-1,y+1));{troca o valor de 2 se aumentar/diminuir o tamanho da matriz}
end;



begin


{Rotina de entrada de dados do estoque}   
   for i := 1 to 3 do
     begin   
        writeln('Entre com o  ',i:2,'  codigo do produto:');
	   readln (registro[i].codigo);
	end;	


	l2:=2;
	c2:=2;
	writeln('Entre com os valores da matriz');
	for l:=1 to l2 do
	  for c:= 1 to c2 do
	    begin
		  readln (v[l,c]);
		end;
		   
	{verifica se  os numeros esta entre 100 e 199 e coloca numa segunda matriz}	
	for l:=1 to l2 do
	  for c:= 1 to c2 do
	    begin
		  if ((v[l,c]>100) and (v[l,c]<199)) then
			  begin
			     v2[x2,y2]:= v[l,c];
			     readln (v2[x2,y2]);
		      end;
		end;	  

       	soma(x2,y2);
	registro[1].punit:=soma(x2,y2);
	
   for i := 1 to 3 do
    begin 
	 writeln (i:2,  ' - ', registro[i].codigo,'    Valor Unitario:', registro[i].punit:2:2);
    end;
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.