Você está na página 1de 6

CEDERJ Curso de Tecnlogo em Sistemas de Computao

Fundamentos de Programao
Profs: Alexandre Plastino & Dante Corbucci Filho

2006.1
AD 1

1 Faa um programa que leia trs nmeros do teclado, X, Y e Z, que representam lados de um
tringulo. Classifique o tringulo formado por X, Y e Z como equiltero, issceles ou escaleno.
R:
program quest_01_AD1(input{teclado}, output{vdeo});
procedure ler_triangulo(Var X,Y,Z{s}: integer);
begin
write(output, 'Informe o primeiro lado: ');
readln(input, X);
write(output, 'Informe o segundo lado: ');
readln(input, Y);
write(output, 'Informe o terceiro lado: ');
readln(input, Z);
end;
procedure classificar_triangulo(X,Y,Z{e}: integer);
begin
if X=Y then
if Y=Z then
writeln(output, 'O tringulo equiltero.')
else
writeln(output, 'O tringulo issceles.')
else
if (X=Z) or (Y=Z) then
writeln(output, 'O tringulo issceles.')
else
writeln(output, 'O tringulo escaleno.')
end;
var
X,Y,Z: integer;
begin
ler_triangulo(X,Y,Z);
classificar_triangulo(X,Y,Z)
end.

2 Considere a equao de segundo grau: Ax + Bx + C = 0. Faa um programa que leia os trs


coeficientes, A, B e C, e calcule e escreva no vdeo as razes reais da equao. Caso possua razes
imaginrias, informe no vdeo, com a mensagem IMAGINRIAS.
R:
program AD1_Q2(Input{Teclado}, Output{Video});
var
A,B,C,Delta: real;
begin
repeat
write(output, 'Diga os coeficientes da equacao de segundo grau: ');
readln(input, A, B, C);
until A<>0; {sera uma equacao de segundo grau se o coeficiente A nao for nulo}
Delta:= B*B - 4*A*C;
if Delta<0 then writeln(output, 'IMAGINARIAS')
else
writeln(output, 'Raizes: ',(-B-sqrt(Delta))/(2*A):4:1, ' e ',
(-B+sqrt(Delta))/(2*A):4:1);
readln(input)
end.

3 Faa um programa que leia, repetidamente, nmeros inteiros do teclado, at que o nmero zero
seja digitado. Todos os nmeros lidos devem ser somados e o resultado final deve ser apresentado
no vdeo. Veja os exemplos a seguir:
142 <enter>
23 <enter>
1331 <enter>
0 <enter>
A soma foi: 1496

11 <enter>
99 <enter>
0 <enter>
A soma foi: 110

Suponha que todo nmero lido tenha at quatro dgitos e a soma total nunca supere a mxima
representao do inteiro.
R:
program AD1_Q3(Input{Teclado}, Output{Video});
var
Numero, Soma: integer;
begin
Soma:= 0;
repeat
readln(input, Numero);
Soma:= Soma+Numero;
until Numero=0;
writeln(output, 'A soma foi: ', Soma);
readln(input)
end.

4 Faa um procedimento que receba de entrada uma cadeia de caracteres (string) e (no mesmo
parmetro) retorne seu contedo compactado. A compactao realizada da seguinte forma. Caso
algum caracter seja repetido em seqncia, apenas a primeira ocorrncia deve aparecer seguida pelo
nmero de ocorrncias. Caso no haja repetio em seqncia, o caracter mantido. Veja exemplos.
Entrada: abacaxi <enter>
Sada: abacaxi
R:
program AD1_Q4(Input{Teclado}, Output{Video});
procedure compacta(var cad{e/s}: string);
var
total: string;
indice, conta: integer;
begin
if cad <> '' then
begin
indice:= 1;
while indice<length(cad) do
begin
conta:= 1;
while (indice<length(cad)) and
(cad[indice]=cad[indice+1]) do
begin
delete(cad, indice+1, 1);
conta:= conta+1;
end;
if conta>1 then
begin
str(conta, total);
insert(total, cad, indice+1);
end;
indice:= indice+1 ;
end
end
end;
var
cadeia: string;
begin
write(output, 'Entrada: ');
readln(input, cadeia);
compacta(cadeia);
writeln(output, 'Saida: ', cadeia);
readln(input)
end.

Entrada: aaabbbbbacaxxxxi <enter>


Sada: a3b5acax4i

5 Faa um programa para encontrar os m maiores elementos de um vetor V de N elementos


(Const N = 50). Considere que todos os N elementos de V so distintos e que m < N. O valor m e os
N elementos do vetor devem ser lidos do teclado. Os m maiores valores devem ser apresentados no
vdeo.
R:
program quest_05_AD1(input{teclado}, output{vdeo});
{ Esta resposta poderia ser mais eficiente se
o aluno j tivesse estudado algoritmos de ordenao,
ou, pelo menos, insero ordenada.}
const
N = 50;
type
T_Dominio = 1 .. N;
T_Vetor = array[T_Dominio] of integer;
var
V: T_Vetor;
Maiores: T_Vetor;
m: integer;
procedure ler_vetor_e_m (var V{s}: T_Vetor; var m{s}: integer);
var
ind: integer;
begin
write(output, 'Informe valor de m: ');
readln(input, m);
for ind:= 1 to N do
begin
write(output, 'V[', ind, ']=');
readln(input, V[ind]);
end
end;
procedure descobre_novo_menor(Maiores{e}: T_Vetor;
m{e}: integer;
var menor{s}: integer;
var ind_menor{s}: integer);
var
ind: integer;
begin
menor := Maiores[1];
ind_menor := 1;
for ind := 2 to m do
begin
if Maiores[ind] < menor then
begin
menor := Maiores[ind];
ind_menor := ind
end
end
end;
procedure identificar_maiores (V{e}: T_Vetor;

m{e}: integer;
var Maiores{s}: T_Vetor);

var
ind: integer;
menor: integer;
ind_menor: integer;
begin
Maiores[1] := V[1];
menor := Maiores[1];
ind_menor := 1;
for ind := 2 to m do
begin
Maiores[ind] := V[ind];
if Maiores[ind] < menor then
begin
menor := Maiores[ind];
ind_menor := ind
end
end;
for ind := M+1 to N do
if V[ind] > menor then
begin
Maiores[ind_menor] := V[ind];
descobre_novo_menor(Maiores,m,menor,ind_menor);
end
end;
procedure imprimir_maiores (Maiores{e}: T_Vetor; m{e}:integer);
var
ind: integer;
begin
write(output, 'Os ', m, 'maiores elementos so: ');
for ind:=1 to m do
write(output, Maiores[ind], ' ')
end;
begin
ler_vetor_e_m(V,m);
identificar_maiores(V,m,Maiores);
imprimir_maiores(Maiores,m)
end.

6 Escreva uma funo recursiva para somar os m primeiros elementos de um vetor V de N


elementos. Considere que m N. Considere ainda as seguintes declaraes.
Const

N = 100;

Type

T_Dominio = 1.. N;
T_Vetor = array [T_Dominio] of integer;
Var
V: T_Vetor;
m: integer;
Function Soma (V{e}: T_Vetor; m{e}: integer) : integer;

R:
program quest_06_AD1(input{teclado}, output{vdeo});
const
N = 100;
type
T_Dominio = 1 .. N;
T_Vetor = array[T_Dominio] of integer;
var
V: T_Vetor;
m: integer;
function Soma (V{e}: T_Vetor; m{e}: integer): integer;
begin
if m = 1 then
Soma := V[1]
else
Soma := Soma(V,m-1) + V[m]
end;
begin
...
end.

Você também pode gostar