Analise de Código
Pessoal.
Tenho o código abaixo em que ocorrem 2 erros:
O primeiro na funçao ocorrencias:
Dada uma letra ele compara ela com as demais.
Caso seja diferente de a,b e C(maiusculo) então retorna true. Senão, retorna false;
O erro aqui: Ele deveria testar se a letra passada como paramtro é ou não diferente das outras 3.
Mas, quando testa com a letra C, ainda que a letra passada por parametro seja C dá que não é C:
Outro erro:
Nesse loop:
Dada a variavel texto
[code]
texto:= 'ababaaEbCababaaa';
[code]
Ele retorna fielmente os true e false (salvo o problema dsa letra 'C' relatado anteriormente) mas quando dá true, não incrementa o contador.
Estou usando pascalzim 5 e já teste. Sim, ele entende a funçao inc(var). Incrementa de 1 a variavel.
Onde estarão esses erros?
Grato a quem puder ajudar.
Carlos Rocha
Tenho o código abaixo em que ocorrem 2 erros:
program acha;
var
texto, texto_e, texto_d, texto_c,caracter,letra:string;
result: boolean;
contador,i: integer;
function ocorrencias(letra:string): boolean;
begin
result := true;
if (letra<>'a') then
if (letra<>'b') then
if (letra<>'C') then
result:= true
else
result:= false
end;
begin
texto:= 'ababaaEbCababaaa';
contador:=0;
caracter:='C';
for i:=1 to length(texto) do
begin
texto_c:= texto[i];
if ocorrencias(texto_c)=TRUE then inc(contador);
writeLn(ocorrencias(texto_c));
writeLn(contador);
writeLn;
end;
writeLn('Contador: ', contador);
texto_e:=copy(texto, 0, pos(caracter,texto)-1);
texto_d:=copy(texto, pos(caracter,texto)+1, length(texto) );
if(contador>0) then
writeLn('Essa string nao e valida')
else if((pos(caracter,texto)=0) or (pos(caracter,texto)=length(texto)-1) ) then
writeLn('Essa string nao e valida')
else writeLn('Essa string e valida');
end.
O primeiro na funçao ocorrencias:
function ocorrencias(letra:string): boolean;
begin
if (letra<>'a') then
if (letra<>'b') then
if (letra<>'C') then
result:= true
else
result:= false
end;
Dada uma letra ele compara ela com as demais.
Caso seja diferente de a,b e C(maiusculo) então retorna true. Senão, retorna false;
O erro aqui: Ele deveria testar se a letra passada como paramtro é ou não diferente das outras 3.
Mas, quando testa com a letra C, ainda que a letra passada por parametro seja C dá que não é C:
Outro erro:
Nesse loop:
texto:= 'ababaaEbCababaaa';
contador:=0;
caracter:='C';
for i:=1 to length(texto) do
begin
texto_c:= texto[i];
if ocorrencias(texto_c)=TRUE then inc(contador);
writeLn(ocorrencias(texto_c));
writeLn(contador);
writeLn;
end;
Dada a variavel texto
[code]
texto:= 'ababaaEbCababaaa';
[code]
Ele retorna fielmente os true e false (salvo o problema dsa letra 'C' relatado anteriormente) mas quando dá true, não incrementa o contador.
Estou usando pascalzim 5 e já teste. Sim, ele entende a funçao inc(var). Incrementa de 1 a variavel.
Onde estarão esses erros?
Grato a quem puder ajudar.
Carlos Rocha
Carlos Rocha
Curtidas 0
Respostas
Carlos Rocha
11/03/2013
Agora mudou o quadro:
Esse for, não sei o porque, só começa do 3 loop (indice 3)
texto:= 'ababaaEbCababaaa';
contador:=0;
caracter:='C';
tamanho_texto:=length(texto);
for i:=1 to tamanho_texto do
begin
texto_c:= texto[i];
if ocorrencias(texto_c)=true then
begin
inc(contador);
end;
writeLn(texto_c);
writeLn (i);
writeLn;
end;
Esse for, não sei o porque, só começa do 3 loop (indice 3)
GOSTEI 0
Joel Rodrigues
11/03/2013
Converta os dois lados para minúsculo ou maiúsculo antes de comparar.
GOSTEI 0
Carlos Rocha
11/03/2013
Já resolvi,
Ficou assim;
Valeu
Ficou assim;
program acha;
var
texto, texto_e, texto_d, texto_c,caracter,letra:string;
contador,i,tamanho_texto: integer;
function ocorrencias(letra:string): boolean;
var result: boolean;
begin
result:=false;
if (
(letra<>'a') and
(letra<>'b') and
(letra<>'C')
) then
result:= true
end;
begin
texto:= 'ababaaEbCababaaa';
contador:=0;
caracter:='C';
tamanho_texto:=length(texto);
for i:=1 to tamanho_texto do
begin
texto_c:= texto[i];
if ocorrencias(texto_c)=true then
begin
inc(contador);
end;
end;
texto_e:=copy(texto, 0, pos(caracter,texto)-1);
texto_d:=copy(texto, pos(caracter,texto)+1, length(texto) );
if(contador>0) then
writeLn('Essa string nao e valida pois ha um caracter estranho')
else if(pos(caracter,texto)=0) then
writeLn('Essa string nao e valida pois a letra C esta na primeira posicao')
else if(pos(caracter,texto)=length(texto)-1) then
writeLn('Essa string nao e valida pois a letra C esta na ultima posicao')
else if(length(texto) mod 2 = 0 ) then
writeLn('Essa string nao e valida pois o tamanho da string e um numero impar')
else
if texto_e=texto_d then
writeLn('Essa string nao e valida pois as duas substring nao sao iguais')
else
writeLn('Essa string e valida, as duas substring sao iguais');
end.
Valeu
GOSTEI 0
Joel Rodrigues
11/03/2013
Beleza então, obrigado pelo retorno e por compartilhar a solução.
Sendo assim, estou marcando este tópico como resolvido.
Sendo assim, estou marcando este tópico como resolvido.
GOSTEI 0
Carlos Rocha
11/03/2013
Sim, sim.
O problema toos estava, nem me pergunte o porque que eu não consegui entender a logica do erro. Estava na writeLn do caracter no if
Valeu.
O problema toos estava, nem me pergunte o porque que eu não consegui entender a logica do erro. Estava na writeLn do caracter no if
Valeu.
GOSTEI 0