Analise de Código
11/03/2013
0
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
Posts
11/03/2013
Carlos Rocha
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)
11/03/2013
Joel Rodrigues
11/03/2013
Carlos Rocha
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
11/03/2013
Joel Rodrigues
Sendo assim, estou marcando este tópico como resolvido.
11/03/2013
Carlos Rocha
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.
Clique aqui para fazer login e interagir na Comunidade :)