atanaka 0 Denunciar post Postado Setembro 8, 2010 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
quitZAUMMM 18 Denunciar post Postado Setembro 8, 2010 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
atanaka 0 Denunciar post Postado Setembro 8, 2010 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
quitZAUMMM 18 Denunciar post Postado Setembro 8, 2010 Sim sim.. ai o v2, entra na função recursiva ;D []s Compartilhar este post Link para o post Compartilhar em outros sites
atanaka 0 Denunciar post Postado Setembro 8, 2010 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
atanaka 0 Denunciar post Postado Setembro 8, 2010 consegui achei onde estava errando OBRIGADO pela ajuda :) Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 9, 2010 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites