CENTRO TECNOLÓGICO
EPS7001 – INFORMÁTICA PARA ENGENHEIROS DE PRODUÇÃO
LISTA DE EXERCÍCIOS – ALGORITMOS
1.
Construa um algoritmo para determinar o MMC e o MDC de dois números, N1 e N2, dados.
2.
Construa um algoritmo para determinar os números primos menores ou iguais a 1000.
3.
Construa um algoritmo para calcular as raizes de uma função quadrática
c
x
b
x
a
x
f
(
)
=
2+
+
.
4. Construa um algoritmo para determinar a média aritmética e o desvio padrão dos elementos
de um vetor
x
=
(
x
1,
x
2,...,
x
n)
.
a.
∑
==
n i ix
n
11
µ
b.
∑
=−
=
n i ix
n
1 2)
(
1
µ
σ
5.
Construa um algoritmo para calcular a raiz quadrada de um número N dado, sem usar a
função SQRT.
6.
Construa um algoritmo para calcular a inclinação da reta tangente de uma função
x
x
x
f
(
)
=
ln(
2+
1
)
+
em um ponto
x
≥
0
informado pelo usuário.
7.
Construa um algoritmo para calcular a área aproximada sob a curva definida pela função
x
x
x
f
(
)
=
ln(
2+
1
)
+
, no intervalo
[ b
a
,
]
informado pelo usuário.
8.
Construa um algoritmo para deterninar o ponto de mínimo da função
xe
x
x
x
f
(
)
=
2−
2
+
.
9.
Construa um algoritmo para determinar:
∑
= ∞ →
=
n i i ny
12
1
lim
10.
Construa um algoritmo para determinar um valor aproximado de
π
.
GABARITO
QUESTÃO 01
Algoritmo MMC_MDC; P1. Ler N1 e N2; P2. Calcular MMC MMC←
1; i←
2; Enquanto (i≤
N1) ou (i≤
N2) faça:Enquanto N1 ou N2 são divisíveis por i faça Se N1 é divisível por i então N1
←
N1 div i; Se N2 é divisível por i então N2←
N2 div i; MMC←
MMC * i; i←
i + 1; P3. Calcular MDC MDC←
(N1 * N2) div MMC; P4. Apresentar MMC e MDC; P5. Fim program Exerc01; {$APPTYPE CONSOLE}uses SysUtils, Dialogs, Math;
Function MMC (N1,N2 : Integer) : Integer; Var i : Integer; begin Result := 1; i := 2; While (i <= N1) or (i <= N2) do begin
While ((N1 mod i) = 0) OR ((N2 mod i) = 0) do begin
If ((N1 mod i) = 0) then N1 := N1 div i; If ((N2 mod i) = 0) then N2 := N2 div i; Result := Result * i;
end;
i := i + 1; end;
end;
Function MDC (N1,N2 : Integer) : Integer; begin Result := (N1 * N2) div MMC(N1,N2); end; Var N1,N2 : Integer; begin
Write('Entre com dois numeros inteiros: '); Readln(N1,N2);
Writeln('Minimo Multiplo Comum = ',MMC(N1,N2)); Writeln('Maximo Divisor Comum = ',MDC(N1,N2));
MessageDlg('Fim do Programa',mtInformation,[mbOK],0); end.
Algoritmo Numeros_Primos; P1. Para N
←
1 até 1000 faça:EhPrimo
←
True;Max
←
Inteiro (Raiz (N)); k←
2;Enquanto (EhPrimo = True) e (k
≤
Max) faça: Se N é divisível por k então EhPrimo←
False; k←
k + 1;Se (EhPrimo = True) então apresenta N; P2. Fim.
program Exerc02; {$APPTYPE CONSOLE} uses SysUtils,Dialogs;
Function EhPrimo (N : Integer) : Boolean; Var i, M : Integer; begin Result := True; M := Trunc(Sqrt(N)); i := 2;
While (i <= M) and (Result = True) do begin Result := (N mod i) <> 0; i := i + 1; end; end; Var i : Integer; begin For i := 1 to 1000 do
If EhPrimo(i) then Writeln(i);
MessageDlg('Fim do Programa', mtInformation,[mbOK],0); end.
QUESTÃO 03
Algoritmo Baskara; P1. Ler A, B e C; P2. Faça D←
B * B – 4 * A * C; P3. Se D≥
0 então: D←
Raiz(D); X1←
(-B+D)/(2*A); X2←
(-B-D)/(2*A);Apresenta as raízes reais X1 e X2; P4. Se D < 0 então:
D
←
Raiz (Absoluto (D)); REAL←
-B/(2*A);IMAG
←
D/(2*A);Apresenta Raizes complexas REAL
±
IMAG P5. Fim.program Exerc03; {$APPTYPE CONSOLE} uses SysUtils, Dialogs;
Procedure Baskara (A,B,C : Real); Var D : Real; begin D := SQR(B) - 4 * A * C; If D >= 0 then begin D := SQRT (D); Writeln('Raizes Reais'); Writeln(' X1 = ',(-B+D)/(2*A)); Writeln(' X2 = ',(-B-D)/(2*A)); end else begin D := SQRT (ABS(D));
Writeln('Raizes Complexas / Imaginaias'); Writeln(' REAL = ',-B/(2*A));
Writeln(' IMAG = ',D/(2*A)); end;
end; Var
A,B,C : Real; begin
Write('Entre com os coeficientes (A,B,C) = '); Readln (A,B,C);
Baskara (A,B,C);
MessageDlg('Fim de Processamento',mtInformation,[mbOK],0); end.
Algoritmo Media_DesvioPadrao;
P1. Ler o tamanho do vetor, N; Ler elementos do vetor, V[i], i
←
1,...,N; P2. Calcular a médiaSoma
←
0;Para i
←
1 até N faça Soma←
Soma + V[i]; Media←
Soma / N; P3. Calcular desvio padrãoSoma
←
0;Para i
←
1 até N façaSoma
←
Soma + (V[i] – Media) * (V[i] – Media); DP←
Raiz (Soma / N); P4. Apresentar Media e DP; P5. Fim. program Exerc04; {$APPTYPE CONSOLE} uses SysUtils,Dialogs; TypeTVetor = Array of Real;
Function Media (UmVetor : TVetor) : Real; Var
N,i : Integer; begin
Result := 0;
N := Length(UmVetor);
For i := 0 to N-1 do Result := Result + UmVetor[i]; Result := Result / N;
end;
Function DesvioPadrao (UmVEtor : TVetor) : Real; Var Med : Real; N,i : Integer; begin Result := 0; Med := Media(UmVetor); N := Length(UmVetor);
For i := 0 to N-1 do Result := Result + SQR(UmVetor[i] - Med); Result := SQRT(Result / N); end; Var Vetor : TVetor; N,i : Integer; begin
Write('Entre com o tamanho do vetor = '); Readln(N); SetLength(Vetor,N); For i := 0 to N-1 do begin Write ('Vetor[',i:2,'] = '); Readln(Vetor[i]); end; Writeln; Writeln('Media = ',Media(Vetor));
Vetor := nil;
MessageDlg('Fim do Processamento',mtInformation,[mbOK],0); end.
Algoritmo Raiz_Quadrada; P1. Ler N; P2. Faça X
←
1 e Y←
N; P3. Enquanto X≠
Y faça: X←
(X + Y) / 2; Y←
N / X; P4. Apresente X; P5. Fim. program Exerc05; {$APPTYPE CONSOLE} uses SysUtils, Dialogs;Function Raiz(N : Real) : Real; Var
X,Y : Real; begin
X := 1; Y := N;
While Abs(X-Y)/X > 1E-08 do begin X := (X + Y) / 2; Y := N / X; end; Result := X; end; Var N : Real; begin
Write('Entre com um numero = '); Readln(N);
Writeln('Raiz = ',Raiz(N));
MessageDlg('Fim do Processamento',mtInformation,[mbOK],0); end.
QUESTÃO 06
Funcao F(X : Real) : Real; Inicio F
←
LN (X * X + 1) + Raiz (X); Retorne F; Fim. Algoritmo Inclinacao_Funcao; P1. Ler X; P2. Delta←
0.000001;P3. INC
←
(F(X+Delta) – F(X)) / Delta; P4. Apresentar INC;P5. Fim.
program Exerc06; {$APPTYPE CONSOLE} uses SysUtils,Dialogs;
Function F(X : Real) : Real; begin
Result := ln( X * X + 1 ) + SQRT(X); end;
Function Inclinacao (X : Real) : Real; Const
Delta = 1E-06; begin
Result := ( F(X+Delta) - F(X) ) / Delta; end;
Var
X : Real; begin
Write ('Entre com o valor de X = '); Readln (X);
Writeln (Inclinacao(X));
MessageDlg('Fim de Processamento',mtInformation,[mbOK],0); end.
Funcao F(X : Real) : Real; Inicio F
←
LN (X * X + 1) + Raiz (X); Retorne F; Fim. Algoritmo Area_Funcao; P1. Ler intervalo [A,B];P2. Faça: N
←
1000; Dx←
(B-A)/N; Area←
0; P3. F1←
F(A);P4. Para i
←
1 até N faça: F2←
F(A + i * Dx); Area←
Area + (F1 + F2) * Dx / 2; F1←
F2; P5. Apresentar Area; P6. Fim. program Exerc07; {$APPTYPE CONSOLE} uses SysUtils,Dialogs;Function F(X : Real) : Real; begin
Result := ln( X * X + 1 ) + SQRT(X); end;
Function Area (A,B : Real) : Real; Const N = 1000; Var Dx : Real; i : Integer; F1,F2 : Real; begin Result := 0; Dx := (B - A) / N; F1 := F(A); For i := 1 to N do begin F2 := F(A + i * Dx); Result := Result + (F1 + F2) * Dx / 2; F1 := F2; end; end; Var A,B : Real; begin
Write ('Entre com o intervalo [A,B] = '); Readln(A,B);
Writeln ('Area sob a curva = ',Area(A,B));
MessageDlg('Fim de Processamento',mtInformation,[mbOK],0); end.
QUESTÃO 08
Funcao F(X : Real) : Real; Inicio
F
←
X * X – 2 * X + Exp (X); Retorne F;Fim.
Funcao Inc(X : Real) : Real; Inicio
Delta
←
0.000001;Inc
←
( F(X+Delta) – F(X) ) / Delta; Retorne Inc;Fim.
Algoritmo Minimo_Funcao;
P1. Ler intervalo de busca [A,B]; faça Delta
←
0.000001; P2. Enquanto ((B-A) > Delta) faça:C
←
(A+B)/2;Se Inc(C)
≥
0 então B←
C; senão A←
C; P3. C←
(A+B)/2; P4. Apresente C e F(C); P5. Fim. program Exerc08; {$APPTYPE CONSOLE} uses SysUtils,Dialogs; Const Delta = 0.000001;Function F(X : Real) : Real; begin
Result := SQR(X) - 2 * X + exp(X); end;
Function Inclinacao (X : Real) : Real; begin
Result := ( F(X+Delta) - F(X) ) / Delta; end;
Var
A,B,C : Real; begin
Write('Entre com o intervalo de busca [A,B] = '); Readln(A,B);
While (B-A) > Delta do begin C := (A + B) / 2; If Inclinacao(C) >= 0 then B := C else A := C; end; C := (A + B) / 2;
Writeln ('Ponto de Minimo = ',C); Writeln ('Valor da Funcao = ',F(C));
MessageDlg('Fim de Processamento',mtInformation,[mbOK],0); end.
Algoritmo Limite_Soma;
P1. Faça: Soma
←
0; Parcela←
1; N←
0; P2. Enquanto Parcela > 1E-16 faça:Parcela
←
Parcela * 0.5; Soma←
Soma + Parcela; N←
N + 1;P3. Apresentar N e Soma; P4. Fim.
program Exerc09; {$APPTYPE CONSOLE} uses SysUtils, Dialogs; Var N : Integer; Soma,Dif : Real; begin Soma := 0; Dif := 1; N := 0; Repeat N := N + 1; Dif := Dif * 0.5; Soma := Soma + Dif; Until Dif < 1E-16;
Writeln ('Numero de parcelas = ',N); Writeln ('Limite calculado = ',Soma);
MessageDlg('Fim de Processamento',mtInformation,[mbOK],0); end.
QUESTÃO 10
Funcao YCirc(R,XCirc : Real) : Real; Inicio
YCirc
←
Raiz (R * R – XCirc * XCirc); Retorne YCirc;Fim.
Algoritmo Calcula_Pi;
P1. Faça: R
←
100000000; C←
0; P2. Y1←
YCirc(R,0);P2. Para X
←
1 até R faça: Y2←
YCirc (R,X);C
←
C + Raiz ((Y2-Y1)* (Y2-Y1) + 1) ; Y1←
Y2; P3. Pi←
2 * C / R; P4. Apresenta Pi; P5. Fim. program Exerc10; {$APPTYPE CONSOLE} uses SysUtils,Dialogs;Function YCirc (R,X : Extended) : Extended; begin Result := SQRT(SQR(R)-SQR(X)); end; Var i : Integer; R,C : Extended; Y1,Y2 : Extended; begin Writeln('Calculando... Aguarde.'); C := 0; R := 100000000; Y1 := YCirc(R,0); For i := 1 to 100000000 do begin Y2 := YCirc(R,i); C := C + SQRT(SQR(Y2-Y1)+1); Y1 := Y2; end; Writeln('Pi Calculado = ',2 * C / R); Writeln('Pi Computador = ',Pi);
MessageDlg('Fim de Processamento',mtInformation,[mbOK],0); end.