Você está na página 1de 20

CENTRO UNIVERSITÁRIO DO LESTE DE MINAS GERAIS

Graduação em Engenharia Elétrica

PID Digital com Auxílio do


Software MatLab

Alunos:

Carlos Eduardo Silva Paixão – RA A06145178

Ítalo Kássio Pereira da Silva – RA A06142727

Mayra Cristina Silva Nunes – RA A06142422

Plínio Fernando Portes Andrade – RA A06149022

Thiago Pereira Alves – RA A06148962

CORONEL FABRICIANO

1° semestre/ 2015
CENTRO UNIVERSITÁRIO DO LESTE DE MINAS GERAIS

Graduação em Engenharia Elétrica

Trabalho final para disciplina


de Teoria de Controle do
curso de Engenharia Elétrica
do Centro Universitário do
Leste de Minas Gerais.

Professor: Roselito de A.
Teixeira

CORONEL FABRICIANO

1° semestre/ 2015

1
Sumário
Introdução ..................................................................................................................................... 3
Discretização das plantas .............................................................................................................. 4
Os controladores ........................................................................................................................... 9
Simulações................................................................................................................................... 12
Implementação MatLab .............................................................................................................. 16
Conclusões .................................................................................................................................. 19

2
Introdução

Os diversos sistemas de controle vêm sofrendo grandes mudanças nos


últimos anos pois o avanço dos sistemas digitais e computadores possibilita
uma nova abordagem de tais sistema. Tal abordagem permite a utilização de
sistemas micro controlados e/ou micro processados para o design de sistemas
de controle digitais também chamado de sistemas de controle moderno.

Neste trabalho trabalharemos com a análise de alguns métodos de


sintonia de controladores largamente difundido no mercado. Tal análise será
desenvolvida em termos de uma implementação digital dos controladores em
um algoritmo com um loop trabalhando a equação de diferenças do sistema
com auxílio do software MatLab da empresa MathWorks.

3
Discretização das plantas

Para este trabalho foi proposto o levantamento da função de


transferência da Planta baseado na resposta da planta em malha aberta à
excitação de degrau unitário. A resposta da planta ao degrau unitário é
apresentada pela Figura 1. O trabalho propõe então a escolha de um
controlador P, PI, PD ou PID que seja sintonizado através de um dos seguintes
métodos: método Ziegler-Nichols em malha aberta malha aberta, método
Cohen-Coon e método Lambda (λ).

Figure 1 - Resposta ao degrau unitário da planta em malha aberta. A função de transferência deve ser levantada
desta figura.

Uma vez que a curva apresenta a forma em S que é um formato


característico de funções de primeiro grau, utilizaremos as técnicas as relações
apresentadas pela num exemplo dado pela Figura 2 para o levantamento da
função de transferência do sistema na forma

𝑒 −𝑇𝑑∗𝑠
𝐺(𝑠) = 𝐾 ∗
𝜏∗𝑠 +1

4
Assim sendo, os seguintes parâmetros são obtidos:

𝐾 = 0,95

𝑇𝑑 = 8

𝜏=4

Figure 2 – Exemplo de levantamento de parâmetros pela resposta ao degrau unitário.

Portanto:

𝑒−8∗𝑠
𝐺(𝑠) = 0,95 ∗
4∗𝑠 +1
Para confirmação do levantamento correto do sistema o gráfico para a
resposta em degrau para a função 𝐺(𝑠) acima foi plotada no MatLab usando o
seguinte script:
% LEVANTAMENTO DOS PARÂMETROS DA PLANTA BASEADO NO GRÁFICO PARA GRUPO
07
t0=0;
t1=8;
t2=12; %Instante em que Y = 0.6321*Max(Y)
K=0.95; %Ganho do Sistema
L=t1-t0; %Atraso de Transporte do Sistema
tau= t2-t1;%Constante de Tempo do Sistema

% VERIFICAÇÃO DA FUNÇÃO LEVANTADA A PARTIR DO GRÁFICO


s=tf('s');
G=K*(exp(-L*s)/(tau*s + 1));
step(G);

5
O resultado está apresentado na Figura 3. Como pode ser observado o
gráfico corresponde ao mesmo gráfico da Figura 1 e deste modo podemos
seguir com a discretização do sistema e com as demais etapas do trabalho. A
discretização do sistema é feita usando a função do MatLab ‘c2d’ que converte
um sistema em tempo contínuo em um sistema digital. Tal função recebe o
sistema em tempo contínuo, tempo de amostragem e método de conversão
como parâmetros. O período T de amostragem foi calculado usando a relação
𝜏
𝑇 = 20.

Figure 3 - Resposta ao degrau unitário para função transferência da planta G(s).

A discretização do sistema feita pelo seguinte script em MatLab:


% DISCRETIZAÇÃO DO SITEMA
T = tau/20; % Período de amostragem
Gz=c2d(G,T,'zoh');
[numz, denz] = tfdata(Gz);
format long
numz = numz{:}; %Converte Cell Array to Array
denz = denz{:}; %Converte Cell Array to Array

O script acima gerou uma função transferência no domínio Z dada por:


0.046332046724322
𝐺𝑧(ɀ) = ɀ−40 ∗
ɀ − 0.951229424500714

Observe que o MatLab já calcula o atraso de transporte do sistema no


domínio ɀ fazendo ɀ−𝛽 ∗ 𝐺𝑧1(𝑍) onde 𝐺𝑧1(ɀ) é a função transferência do da
planta no domínio ɀ sem o atraso de transporte. 𝛽 é dado pelo inteiro mais
𝐿
próximo de em MatLab esse cálculo é feito usando a função ‘round’:
𝑇

beta=round(L/T); %Usado para representar o atraso de transporte em Z

6
A equação de diferenças

A partir da função de transferência da planta no domínio Z apresentada


acima é possível desenvolver a equação de estados:

𝑌(ɀ) 0.046332046724322 ɀ−1


𝐺𝑧(ɀ) = = ɀ−𝛽 ∗ ∗ −1
𝑈(ɀ) ɀ − 0.951229424500714 ɀ

𝑌(ɀ) 0.046332046724322 ∗ ɀ−𝛽−1


=
𝑈(ɀ) 1 − 0.951229424500714 ∗ ɀ−1

𝑌(ɀ) (1 − 0.951229424500714 ∗ ɀ−1 ) = 𝑈(ɀ) (0.046332046724322 ∗ ɀ−𝛽−1 )

𝑌(ɀ) − 0.951229424500714 ∗ ɀ−1 ∗ 𝑌(ɀ) = 0.046332046724322 ∗ 𝑈(ɀ) ∗ ɀ−𝛽−1

𝑌(ɀ) = 0.046332046724322 ∗ 𝑈(ɀ) ∗ ɀ−𝛽−1 + 0.951229424500714 ∗ ɀ−1 ∗ 𝑌(ɀ)

Assim a equação de diferenças é definida como:

𝑦(𝑘) = 0.046332046724322 ∗ 𝑢(𝑘 − 𝛽 − 1) + 0.951229424500714 ∗ 𝑦(𝑘 − 1)

Visando melhorar a dinâmica do projeto o script em MatLab para o


desenvolvimento da equação de diferenças foi modificado para que os valores
da equação de estados sejam extraídos diretamente da função de transferência
da planta no domínio ɀ como pode ser observado no seguinte trecho do script
MatLab:

% ---------- *** Equação de Diferenças do Modelo da Planta *** ----


y(k) = numz(2)*u(k-beta-1) - denz(2)*y(k-1);
% -----------------------------------------------------------------

7
Uma observação importante a ser feita é que 𝑢(𝑘) se refere a entrada da
planta no sistema que nesse caso é a atuação do controlador que será
posicionado logo antes da planta na malha do sistema. Outra observação a ser
considerado é o fato de que a malha do sistema será fechada pelo próprio
algoritmo em seu loop de iteração pois o algoritmo faz o cálculo do erro do
sistema baseado na diferença entre a entrada e a saída como pode ser
observado no seguinte trecho de script:
% Calcula Erro------------ ----------------------------------------
e(k) = r(k)-y(k);
%------------------------------------------------------------------
Onde 𝑟(𝑘) é a entrada do sistema que para este trabalho considerou
uma sequência de degraus apresentada pela Figura 4. Tal função de entrada
pode ser facilmente desenvolvida em MatLab através do seguinte trecho de
script:
% Sinal de referencia ------------------------------------------------
r = (1/100)*[50*ones(1,200) 35*ones(1,200) 60*ones(1,200)
45*ones(1,200) 45*ones(1,200)];
% --------------------------------------------------------------------

Figure 4 - Sinal de Referênia (SetPoint)

Para este trabalho tempos como requerimentos que o erro ao degrau


unitário do sistema depois de compensado seja nulo e que o tempo de
resposta e sobressinal sejam minimizados. Devido ao requerimento de erro
nulo ao degrau já é possível descartar o uso de controladores do tipo P e PD
pois os mesmos não são capazes de levar o erro ao degrau unitário ao zero
uma vez que estes não apresentam um integrador em suas estruturas (Norman
Nise 5ª edição – Cap. 7). Portanto reduzimos as sintonias, testes e simulações aos
controladores do tipo PI e PID.

8
Outro requerimento do trabalho é com relação aos índices de
desempenho do sistema IAE e ISE que são, respectivamente, Integral do Erro
Absoluto (Integral Absolute Error) e Integral do Erro ao Quadrado (Integral
Squared Error). Tais índices devem ser observados em cada um dos sistemas
compensados de forma a comparar qual dos controladores melhor atende as
especificações propostas.

O índice IAE é dado pela equação:



𝐼𝐴𝐸 = ∫ |𝑒(𝑡)| 𝑑𝑡
0

Enquanto o índice ISE é dado pela equação:



𝐼𝑆𝐸 = ∫ 𝑒(𝑡)2 𝑑𝑡
0

Em MatLab essa implantação é feita inicializando a variável IAE e ISE


com 0 fora do loop do algoritmo e fazendo a soma do módulo do erro em cada
iteração para o índice IAE e fazendo a soma do quadrado do erro em cada
iteração para o índice ISE como segue:
%---------Inicializa variáveis dos índices (fora do loop)-----------
IAE=0;
ISE=0;
%-------------------------------------------------------------------
%------------ *** Calcula Índices de Desempenho (dentro do loop)------
IAE = IAE + abs(e(k));
ISE = ISE + e(k)^2;
%-------------------------------------------------------------------

Os controladores

Para aumentar a eficiência do algoritmo e para diminuir o tempo de


simulação o algoritmo foi modificado de modo a incluir um laço de repetição
externo ao laço de repetição da equação de diferenças de modo a simular os
tipos de controladores PI e PID para os métodos de sintonia Ziegler-Nichols em
malha aberta, Cohen-Coon e Lambda (λ). Para cada tipo de controlador e
método os valores foram baseados em tabelas já definidas.

Método Ziegler-Nichols em malha aberta

Para o método Ziegler-Nichols em malha aberta foi utilizado a tabela


apresentada na Figura 5 para cálculo dos parâmetros do controlador PI e PID.
O script MatLab é baseado na tabela da Figura 5 e está apresentado a seguir:

9
titles{1} = 'SINTONIA ZIEGLER-NICHOLS EM MALHA ABERTA PI';
Kp(1) = 0.9*(tau/L)/K;
Ti(1) = L/0.3;
Td(1) = 0;

titles{2} = 'SINTONIA ZIEGLER-NICHOLS EM MALHA ABERTA PID';


Kp(2) = 1.2*(tau/L)/K;
Ti(2) = 2*L;
Td(2) = 0.5*L;

Figure 5 - Tabela de valores dos parâmetros dos controladores para sintonia Ziegler-Nichols em malha aberta

Método Cohen-Coon

Para o método de Cohen-Coon a tabela apresentada pela Figura 6 foi


utilizada para o cálculo dos parâmetros dos controladores PI e PID. Da mesma
forma os parâmetros foram calculados usando um script de MatLab baseado
na tabela da Figura 6 como segue:
titles{3} = 'SINTONIA COHEN-COON PI';
R=L/tau;
Kp(3) = (tau/(K*L))*(9/10 + R/12);
Ti(3) = L*((30+3*R)/(9+20*R));
Td(3) = 0;

titles{4} = 'SINTONIA COHEN-COON PID';


R=L/tau;
Kp(4) = (tau/(K*L))*(4/3+R/4);
Ti(4) = L*((32+6*R)/(13+8*R));
Td(4) = L*(4/(11+2*R));

10
Figure 6 - Tabela de valores dos parâmetros dos controladores para sintonia Cohen-Coon

Método Lambda (λ)

A Figura 7 apresenta as equações para cálculo dos valores dos


parâmetros para os controladores PI e PID para o método de sintonia Lambda
(λ). Nota-se, porém, que este método se difere um pouco dos demais por se ter
a liberdade de se escolher o valor de λ com relação aos valores de constantes
de tempo do sistema. Assim, para o método PI a escolha de 𝜆 = 1.9 ∗ 𝐿 foi a
que melhor atendeu por ser o valor que não causa sobressinal sem causar
lentidão de resposta no sistema. Da mesma forma o valor 𝜆 = 1.15 ∗ 𝐿 foi
escolhido para o controlador PID. O script MatLab está apresentado a seguir:
titles{5} = 'SINTONIA LAMBDA PI';
lambda = 1.9*L;
Kp(5) = (2*tau + L)/(2*lambda)/K;
Ti(5) = tau + L/2;
Td(5) = 0;

titles{6} = 'SINTONIA LAMBDA PID';


lambda = 1.15*L;
Kp(6) = (2*tau + L)/(2*lambda + L)/K;
Ti(6) = tau + L/2;
Td(6) = (tau*L)/(2*tau + L);

11
Figure 7 - Tabela de valores dos parâmetros dos controladores para sintonia Lambda (λ)

Simulações

As simulações para o sistema em malha fechada como controlador PI


sintonizado pelo método Ziegler-Nichols malha aberta está apresentado na
Figura 8 enquanto a mesma configuração de simulação para o controlador PID
sintonizado pelo método Ziegler-Nichols malha aberta está apresentada na
Figura 9. Pelo o observado nas Figuras 8 e 9 é possível afirmar que tais
sintonias não satisfazem os requisitos iniciais estabelecidos para o trabalho
pois a resposta ao Set Point é bastante lenta e os índices de desempenho
também são elevados.

Figure 8 - Simulação do sistema digital em malha fechada com controlador PI sintonizado segundo parâmetros da
tabela apresentada pela Figura 4

12
Figure 9 - Simulação do sistema digital em malha fechada com controlador PID sintonizado segundo parâmetros da
tabela apresentada pela Figura 4

A simulação para o sistema em malha fechada com a presença do


controlador PI sintonizado de acordo com o método Cohen-Coon está
apresentada na Figura 10 onde é possível notar bons índices de desempenho
IAE e ISE, porém altos valores de sobressinal e lentidão na resposta do
sistema para mudanças do Set Point. Da mesma forma a Figura 11
apresentada a simulação para o sistema de malha fechada com a presença do
controlador PID sintonizado de acordo com o método Cohen-Coon onde nota-
se índices de desempenho IAE e ISE ainda melhores do que os apresentados
com relação ao controlador PI (Figura 10) porém novamente é notável altos
índices de sobressinal. Assim, tanto o controlador PI quanto o PID sintonizado
segundo o método Cohen-Coon não satisfazem os requisitos iniciais para o
sistema pois ambos apresentam sobressinal elevado mesmo com bons índices
de desempenho.

A Figura 12 apresenta a simulação para o sistema em malha fechada


com o controlador PI sintonizado de acordo com método Lambda (λ). Pela
Figura 12 é possível ver que o controlador PI sintonizado pelo método Lambda
(λ) apresenta bons índices de desempenho IAE e ISE e uma velocidade
relativamente alta com relação aos controladores anteriores de resposta às
mudanças dos Set Point, porém a resposta do sistema não é a mais rápida
possível de acordo com o que pode ser visto para a simulação PID
aprensentada pela Figura 13.

13
Figure 10 - Simulação do sistema digital em malha fechada com controlador PI sintonizado segundo parâmetros da
tabela apresentada pela Figura 5

Figure 11- Simulação do sistema digital em malha fechada com controlador PID sintonizado segundo parâmetros da
tabela apresentada pela Figura 5

A Figura 13 apresenta a simulação do sistema em malha fechada com o


controlador PID sintonizado de acordo com o método Lambda (λ) onde é
possível notar alta velocidade de resposta à mudança de Set Point comparado
com os sistemas anteriores, índices de desempenho IAE e ISE inferiores aos
demais controladores, bem como sobressinal nulo. Portanto o controlador PID
sintonizado de acordo com o método Lambda (λ) apresenta as características
exigidas pelos requisitos iniciais para o sistema e deve ser usado para a
implementação final.

14
Figure 12 - Simulação do sistema digital em malha fechada com controlador PI sintonizado segundo parâmetros da
tabela apresentada pela Figura 6 com 𝜆 = 1.9*L

Figure 13 - Simulação do sistema digital em malha fechada com controlador PID sintonizado segundo parâmetros da
tabela apresentada pela Figura 6 com λ = 1.15*L

A Tabela 1 apresenta a relação entre os índices de desempenho para


cada tipo de controlador, isto é, PI e PID, sintonizado de acordo com cada um
dos métodos utilizados neste trabalho. A tabela evidencia a superioridade da
sintonia Lambda para o controlador PID pois a mesma apresenta os melhores
índices de desempenho.

15
Ziegler- Ziegler- Cohen- Cohen- Lambda Lambda
Índice/Método Nichols PI Nichols PID Coon PI Coon PID (λ) PI (λ) PID

IAE 127.2694 85.8164 74.3934 70.5687 70.4938 67.544

ISE 33.0786 21.6822 19.4722 18.0937 19.3498 19.113


Tabela 1 – Comparativo índices IAE e ISE para cada tipo de controlador

Implementação MatLab

O script MatLab completo está apresentado no a seguir:


%-----------------------------------------------------------------
% Anexo: Programa exemplo para controle de uma planta digital
% Código para implementação de controladores digitais para trabalho
% Grupo 07 - Teoria de Controle 1/2015 Unileste
% Programação: Carlos Eduardo <carlosesp00@hotmail.com>,
% Plínio Andrade <pliniofernando@hotmail.com>
% Data: 23/06/2015
%-----------------------------------------------------------------
clear
close all
% LEVANTAMENTO DOS PARÂMETROS DA PLANTA BASEADO NO GRÁFICO PARA GRUPO
07
t0=0;
t1=8;
t2=12; %Instante em que Y = 0.6321*Max(Y)
K=0.95; %Ganho do Sistema
L=t1-t0; %Atraso de Transporte do Sistema
tau= t2-t1;%Constante de Tempo do Sistema

% VERIFICAÇÃO DA FUNÇÃO LEVANTADA A PARTIR DO GRÁFICO


s=tf('s');
G=K*(exp(-L*s)/(tau*s + 1));
step(G);

titles{1} = 'SINTONIA ZIEGLER-NICHOLS PI';


Kp(1) = 0.9*(tau/L)/K;
Ti(1) = L/0.3;
Td(1) = 0;

titles{2} = 'SINTONIA ZIEGLER-NICHOLS PID';


Kp(2) = 1.2*(tau/L)/K;
Ti(2) = 2*L;
Td(2) = 0.5*L;

titles{3} = 'SINTONIA COHEN-COON PI';


R=L/tau;
Kp(3) = (tau/(K*L))*(9/10 + R/12);
Ti(3) = L*((30+3*R)/(9+20*R));
Td(3) = 0;

titles{4} = 'SINTONIA COHEN-COON PID';


R=L/tau;
Kp(4) = (tau/(K*L))*(4/3+R/4);

16
Ti(4) = L*((32+6*R)/(13+8*R));
Td(4) = L*(4/(11+2*R));

titles{5} = 'SINTONIA LAMBDA PI';


lambda = 1.9*L;
Kp(5) = (2*tau + L)/(2*lambda)/K;
Ti(5) = tau + L/2;
Td(5) = 0;

titles{6} = 'SINTONIA LAMBDA PID';


lambda = 1.15*L;
Kp(6) = (2*tau + L)/(2*lambda + L)/K;
Ti(6) = tau + L/2;
Td(6) = (tau*L)/(2*tau + L);

% DISCRETIZAÇÃO DO SITEMA
T = tau/20; % Período de amostragem
Gz=c2d(G,T,'zoh');
[numz, denz] = tfdata(Gz);
format long
numz = numz{:}; %Converte Cell Array to Array
denz = denz{:}; %Converte Cell Array to Array
beta=round(L/T); %Usado para representar o atraso de transporte em Z
% Sinal de referencia ------------------------------------------------
-------------------
r = (1/100)*[50*ones(1,200) 35*ones(1,200) 60*ones(1,200)
45*ones(1,200) 45*ones(1,200)];
% --------------------------------------------------------------------
-------------------

% LAÇO PARA O TESTE DE CADA UM DAS SINTONIAS USANDO OS VETORES DE


% PARAMETROS
for p=5:length(Kp)-1
clear n;clear y;clear e; clear u; clear ui; clear up; clear ud;
% n = 0:beta;
n = zeros(length(r));
n(1:beta+1) = 0:beta;
% Boa prática de programação ao alocar todas as variáveis de
forma
% a não permitir mudança de tamanho dos vetores no loop For.
y = zeros(length(r));
e = r;
u = zeros(length(r));
ui = zeros(length(r));
up = zeros(length(r));
ud = zeros(length(r));
% y(beta+1) = 0;
% e(beta+1) = r(beta+1);
% u(beta+1) = 0;
% ui(beta+1) = 0;
% up(beta+1) = 0;
% ud(beta+1) = 0;
IAE=0;
ISE=0;
% Parâmetros do controlador --------------------------------
Kp_atual = Kp(p);
Ti_atual = Ti(p);
Td_atual = Td(p);

17
%-----------------------------------------------------------------
----
% Trabalho com Windup - Valores Máximo e Minímo para ação de
controle
u_max = 5;
u_min = 0;
H=figure;
% *** LAÇO DE DISCRETIZAÇÃO
for k=beta+2:length(r)
tic; %Inicia Timer para medir tempo gasto em cada iteração
% ---------- *** Equação de Diferenças do Modelo da Planta ***
----
y(k) = numz(2)*u(k-beta-1) - denz(2)*y(k-1);
% ------------------------------------------------------------
-----
% Calcula Erro------------ -----------------------------------
-----
e(k) = r(k)-y(k);
%-------------------------------------------------------------
-----
% ------------ *** Calcula Índices de Desempenho -------
-------------
IAE = IAE + abs(e(k));
ISE = ISE + e(k)^2;
% ------------------------------------------------------
-------------
% PID digital ---------------------------------------------
% Proporcional
up(k) = Kp_atual*e(k);
% Ação integral
ui(k) = ui(k-1) + (Kp_atual*T/Ti_atual)*e(k);
% Ação derivativa
ud(k) = ((Kp_atual*Td_atual)/T)*(y(k-1)-y(k));
%---------------------------------------------------------
u(k)= up(k) + ui(k)+ ud(k);
%---------------------------------------------------------
% Implementação do anti Windup ---------------------------
if u(k) > u_max
ui(k) = ui(k-1);
u(k) = u_max;
else
if u(k) < u_min
ui(k) = ui(k-1);
u(k) = u_min;
end
end
%---------------------------------------------------------
% n = [n k-1]; %Codigo Alterado para nao se
redimensionar o vetor a
% cada iteração.
n(k) = k-1;
[X,U] = stairs(n(1:k)*T,u(1:k));
figure(H)

plot(X,U,'r',n(1:k)*T,y(1:k),'b',n(1:k)*T,r(1:k),'g',n(1:k)*T,e(1:k),'
m-');
% ------------------- *** Imprime Índices de desempenho *** --
--------------
text(150*T*k/length(r),0.3,'IAE = '),
text(250*T*k/length(r),0.3,num2str(IAE))

18
text(150*T*k/length(r),0.2,'ISE = '),
text(250*T*k/length(r),0.2,num2str(ISE))
% ------------------------------------------------------
-------------
elipsed_time = toc; %Para Timer
pause(T-elipsed_time) %Pausa pelo período T com desconto do
tempo gasto na iteração.
%---------------------------------------------------------
end
xlabel('Tempo em segundos')
legend('Ação de Controle','Saída','Entrada (Setpoint)','Error')
title(titles(p)) %Escreve Título do Gráfico de acordo com a
sintonia sendo usada.
end
% *** FIM DO SCRIPT

Conclusões
Com este trabalho foi possível notar a eficiência da implementação
digital de sistemas de natureza contínua de modo a se ter menos gastos com
manutenção uma vez que sistemas digitais não sofrem desgastes como
sistemas eletrônicos analógicos. Outra consideração a ser feita é com relação
ao algoritmo implementado que para este trabalho usa uma entrada definida
(vetor r) mas que na prática se usaria da leitura de sensores de medição.
Portanto um cuidado especial deve ser tomado para a criação de variáveis que
mudam o tamanho dentro do laço de repetição do algoritmo pois tais variáveis
produzirão um estouro de memória já que a entrada não está limitada a um
número finito de leituras.

19

Você também pode gostar