Programação de Computadores
Instituto Politécnico de Viseu
Escola Superior de Tecnologia
Engenharia Electrotécnica
1º Ano - 1º Semestre
Ficha de Trabalho N.º5
Soluções Propostas
1 - Elabore um programa que leia um vector de n elementos inteiros (em que n é um valor inteiro entre 2 e 9 especificado
pelo utilizador) e apresente no monitor os elementos pela ordem inversa.
program Ordem_Inversa;
{apresenta no monitor os elementos pela ordem inversa}
uses crt;
type vector=array[1..9] of integer;
var i,n: integer;
numeros:vector;
begin
clrscr;
write(' Quantos elementos tem o vector (2 a 9)?');
readln(n);
for i := 1 to n do
begin
write('Digite o elemento ', i,' : ');
readln(numeros[i]);
end;
writeln('Elementos por ordem inversa:');
for i := 1 to n do
write('
',numeros[n+1-i]);
writeln;
writeln;
end.
2 - Elabore um programa que, dado um array de 8 elementos, calcule a soma desses elementos. Os elementos devem ser
inteiros dados pelo utilizador.
program somaValoresArray;
{Determina a soma de um vector com 8 elementos}
uses crt;
var i, soma: integer;
numeros: array [1..8] of integer;
begin
clrscr;
for i := 1 to 8 do
begin
write('Digite o ',i,'º elemento: ');
readln(numeros[i]);
end ;
soma := 0;
for i := 1 to 8 do
soma := soma + numeros[i];
writeln('
end.
A soma dos 8 elementos é ',soma);
3 - Elabore um programa que, considerando um vector com 6 inteiros, determine a soma dos elementos de ordem par.
program somaValoresArray;
{Determina a soma dos elementos de ordem par de um vector com 6 elementos}
uses crt;
var i, soma: integer;
numeros: array [1..6] of integer;
begin
clrscr;
for i := 1 to 6 do
begin
write('Digite o ',i,'º elemento: ');
readln(numeros[i]);
end;
soma := 0;
for i := 1 to 6 do
{ ou for i := 1 to 3 do }
if (i mod 2 = 0) then
{ soma := soma + numeros[2*i];}
soma := soma + numeros[i];
writeln('A soma dos elementos de ordem par é ',soma);
end.
4 - Elabore um programa que peça um array com n elementos inteiros e determine o valor máximo, o valor mínimo e as
respectivas posições.
program maxMinArray;
{Determina o maximo e o minimo de um vector com N elementos}
uses crt;
const maximo=100;
var i, n, imax, imin, max, min: integer;
numeros: array [1..maximo] of integer;
begin
clrscr;
write('Quantos elementos tem o array? ');
readln(n);
for i := 1 to n do
begin
write('Digite o ',i,'º elemento: ');
readln(numeros[i])
end;
imax := 1;
{ inicialização das variáveis }
imin := 1;
max := numeros[imax];
min := numeros[imin];
for i := 2 to n do
if numeros[i] > max then
begin
imax := i;
max := numeros[imax]
end
else if numeros[i] < min then
begin
imin := i;
min := numeros[imin]
end;
writeln('O maximo do vector é ',max, ' ocorre na posição ',imax);
writeln('O minimo do vector é ',min, ' e ocorre na posição ',imin);
end.
2/12
{ Outra forma de fazer o mesmo...}
program maxMinArray2;
{ Versão Alternativa }
uses crt;
const maximo=100;
var i, n, imax, imin, max, min: integer;
numeros: array [1..maximo] of integer;
begin
clrscr;
write('Quantos elementos tem o array? ');
readln(n);
for i := 1 to n do
begin
write('Digite o elemento ', i, ': ');
readln(numeros[i])
end;
{ inicialização das variáveis }
imax := 1;
imin := 1;
for i := 2 to n do
if numeros[i] > numeros[imax] then
imax := i;
else if numeros[i] < numeros[imin] then
imin := i;
writeln('O maximo
writeln('O minimo
readln
',numeros[imax], ' e a sua posição
',numeros[imin], ' e a sua posição
',imax);
',imin);
end.}
5 - Elabore um programa que determine o produto interno entre dois vectores de n componentes.
program ProdutoInterno;
{Determina o produto interno entre dois vectores de n componentes}
uses crt;
const maximo=50;
var i, n, prod: integer;
v1,v2: array [1..maximo] of integer;
begin
clrscr;
write('Quantos elementos tem cada array? ');
readln(n);
for i := 1 to n do
begin
write(i,'º elemento de v1, v1[',i,']= ');
readln(v1[i])
end;
for i := 1 to n do
begin
write(i,'º elemento de v2, v1[',i,']= ');
readln(v2[i])
end;
prod:=0;
for i := 1 to n do
prod:=prod+v1[i]*v2[i];
writeln('O produto interno entre os dois vectores é ',prod);
writeln;
end.
3/12
6 - Elabore um programa que leia dois vectores de n elementos cada (inteiros) e determine um terceiro com 2n elementos
que contenha os elementos do primeiro vector intercalados com os do segundo vector, mas estes pela ordem inversa da
original. Mostre o vector final no monitor. Considere n = 4 elementos, por exemplo:
vector x = [1 3 5 7]
=> vector final = [1 8 3 6 5 4 7 2]
vector y = [2 4 6 8]
program Intercala;
{Intercala os elementos de 2 vectores, o 2º por ordem inversa}
uses crt;
const maximo=50;
var i, n: integer;
v1,v2: array [1..maximo] of integer;
v: array [1..2*maximo] of integer;
begin
clrscr;
write('Quantos elementos tem cada array? ');
readln(n);
for i := 1 to n do
begin
write(i,'º elemento de v1, v1[',i,']= ');
readln(v1[i])
end;
for i := 1 to n do
begin
write(i,'º elemento de v2, v1[',i,']= ');
readln(v2[i])
end;
for i := 1 to n do
begin
v[2*i-1]:=v1[i];
v[2*i]:=v2[n+1-i];
end;
writeln('Vectores iniciais:');
write('v1: ');
for i := 1 to n do
write(v1[i],' ');
write('
v2: ');
for i := 1 to n do
write(v2[i],' ');
writeln;
writeln('Vector final:');
write('v: ');
for i := 1 to 2*n do
write(v[i],' ');
writeln;
end.
7 - Faça um programa que, a partir de um vector de dimensão N, determine o número que aparece mais vezes bem como as
posições no vector onde ele aparece.
program ProcuraRep; {Determina o número queaparece mais vezes bem como as
posições no vector onde ele aparece}
uses crt;
const n=8;
var i,j,maisrep,rep,num: integer;
t: array [1..n] of integer;
4/12
begin
clrscr;
for i := 1 to n do
begin
write('Introduza o ',i,'º elemento do vector: ');
readln(t[i])
end;
maisrep:=0;
for i := 1 to n do
begin
rep:=0;
for j:=i+1 to n do
if (t[j]=t[i]) then
rep:=rep+1;
if (rep>maisrep) then
begin
maisrep:=rep;
num:=t[i];
end;
end;
if (maisrep>0) then
begin
writeln('O elemento mais repetido é o nº ',num);
writeln(' e ocorre ',maisrep+1,' vezes,');
write('nas posições:');
for i := 1 to n do
if (t[i]=num) then
write(' ',i);
end
else
writeln('Não há números repetidos!');
writeln;
end.
8 - Dado um vector com N elementos, calcular a maior diferença existente entre os seus elementos.
Ex:
A[1] A[2] A[3] A[4] A[5]
1
6
3
2
10
maior diferença = 9
PROGRAM maior_dif;
const N = 8;
var a : array[1..N] of integer;
i,max,min,dif : integer;
begin
writeln('Introduza os ',N,' elementos dos array:');
for i:=1 to N do
begin
write('A[',i,'] = ');
readln(a[i]);
end;
max:=a[1]; min:=a[1];
for i:=2 to N do
begin
if a[i] > max then max:=a[i];
if a[i] < min then min:=a[i];
end;
dif:=max-min;
writeln('A maior diferença é ',dif);
end.
5/12
9 - Dado um vector não ordenado de números inteiros positivos, mostrar a menor diferença entre 2 elementos, bem como
os respectivos números de ordem no vector.
A[1] A[2] A[3] A[4] A[5]
1
6
3
2
10
menor diferença = 1
posições 1 e 4
Ex:
PROGRAM menor_dif;
const n = 5;
var
a : array[1..n] of integer;
i,j,men_dif : integer;
begin
writeln('Introduza os ',n,' elementos dos array:');
for i:=1 to n do
begin
write('A[',i,'] = ');
readln(a[i]);
end;
men_dif:=abs(a[2]-a[1]);
for i:=1 to n-1 do
begin
for j:=i+1 to n do
if abs(a[i]-a[j]) < men_dif then
men_dif:=abs(a[i]-a[j]);
end;
writeln('Menor diferença= ',men_dif);
for i:=1 to n-1 do
for j:=i+1 to n do
if abs(a[i]-a[j])=men_dif then
writeln(' Entre ',i,' e ',j);
end.
10 - Numa lista de N valores determinar os valores maiores que os valores adjacentes, isto é, v[i-1] <v[i] > v[i+1].
11 - Ler um vector A não ordenado de N inteiros e mostrar o vector na mesma sequência, ignorando os valores em
duplicado. O número de elementos restantes (M) é também mostrado.
Ex:
A[1]
15
O vector resultante seria:
15
M=6
A[2]
31
A[3]
23
A[4]
15
A[5]
75
A[6]
23
31
23
75
41
85
A[7]
41
A[8]
15
A[9]
31
A[10]
85
12 - Dada uma matriz NxM de elementos inteiros, determinar o valor médio dos seus elementos, o valor máximo e o
valor mínimo.
program operacoesMatriz;
{ Determina media, maximo e minimo de uma matriz}
uses crt;
const lin=50;
col=50;
var i,j,n,m,max,min:integer;
med:real;
matriz: array[1..lin,1..col] of real;
begin
clrscr;
write('N: ');
readln(n);
write('M: ');
readln(m);
max := -MAXINT;
min := MAXINT;
6/12
med := 0;
for i := 1 to n do
for j := 1 to m do
begin
write('Elemento (',i,',',j,'): ');
readln(matriz[i,j]);
med := med + matriz[i,j];
if matriz[i,j] > max then
max := matriz[i,j];
if matriz[i,j] < min then
min := matriz[i,j];
end;
writeln('Valor médio : ', med/(n*m):4:4);
writeln('Valor máximo : ', max:4:4);
writeln('Valor mínimo : ', min:4:4);
readln;
end.
13 - Modifique o programa anterior para uma matriz tri-dimensional NxMxP.
program operacoesMatriz3D;
{Determina media, maximo e minimo de uma matriz tridimensional}
uses crt;
const lin=15;
col=15;
profundidade=15;
var i,j,k,n,m,p:integer;
med,max,min:real;
matriz: array[1..lin,1..col,1..profundidade] of real;
begin
clrscr;
write('N: ');
readln(n);
write('M: ');
readln(m);
write('P: ');
readln(p);
max := -MAXINT;
min := MAXINT;
med := 0;
for i := 1 to n do
for j := 1 to m do
for k := 1 to p do
begin
write('Elemento (',i,',',j,',',k,'): ');
readln(matriz[i,j,k]);
med := med + matriz[i,j,k];
if matriz[i,j,k] > max then
max := matriz[i,j,k];
if matriz[i,j,k] < min then
min := matriz[i,j,k];
end;
writeln('A m‚dia ‚: ', med/(n*m*p):4:4);
writeln('O m ximo ‚: ', max:4:4);
writeln('O m¡nimo ‚: ', min:4:4);
readln;
end.
7/12
14 - Escreva um programa em Pascal que leia um array bi-dimensional de valores inteiros com N linhas e M colulas e
troque as linhas e colunas do array.
program TranspoeMatriz;
{Troca as linhas pelas colunas de uma matriz de inteiros}
uses crt;
const lin=100;
col=100;
var i,j,n,m,temp:integer;
matriz: array[1..lin,1..col] of integer;
begin
clrscr;
write('Número de linhas : ');
readln(n);
write('Número de colunas: ');
readln(m);
for i := 1 to n do
for j := 1 to m do
begin
write('Elemento (',i,',',j,'): ');
readln(matriz[i,j]);
end;
writeln('Matriz Original:');
for i := 1 to n do
begin
for j := 1 to m do
write(matriz[i,j]:4);
writeln;
end;
writeln('Matriz Transposta:');
for j := 1 to m do
begin
for i := 1 to n do
write(matriz[i,j]:4);
writeln;
end;
end.
15 - Faça um programa que efectue o produto entre duas matrizes: A[m x n] e B[n x p]. Considere que m, n e p são
variáveis globais com os valores 3, 2 e 2, respectivamente.
8/12
16 - Melhore o programa anterior por forma a que efectue o produto de duas matrizes de dimensão arbitrária, fornecida
pelo utilizador.
program MultiplicaMatriz; {Multiplicação de matrizes de inteiros}
uses crt;
const MM=50;NN=50;PP=50;
var m,n,p,i,j,k:integer;
A: array[1..MM,1..NN] of integer;
B: array[1..NN,1..PP] of integer;
C: array[1..MM,1..PP] of integer;
begin
clrscr;
writeln('Cálculo do produto de duas matrizes, C=AxB');
write('Número de linhas da matriz A: ');
readln(m);
write('Número de colunas da matriz A: ');
readln(n);
write('Número de colunas da matriz B: ');
readln(p);
writeln('Introduza os elementos da matriz A: ');
for i := 1 to m do
for j := 1 to n do
begin
write('
Elemento (',i,',',j,'): ');
readln(A[i,j]);
end;
writeln('Introduza os elementos da matriz B: ');
for i := 1 to n do
for j := 1 to p do
begin
write('
Elemento (',i,',',j,'): ');
readln(B[i,j]);
end;
for i := 1 to m do
for j := 1 to p do
begin
C[i,j]:=0;
for k := 1 to n do
C[i,j]:=C[i,j]+A[i,k]*B[k,j];
end;
writeln('Matriz Produto C=AxB:');
for i := 1 to m do
begin
for j := 1 to p do
write(C[i,j]:4);
writeln;
end;
end.
9/12
17 - Escreva um programa que leia uma frase dada pelo utilizador e a escreva pela ordem inversa.
program inverteString;
{Inverte texto escrito pelo utilizador.}
uses crt;
const maximo=100;
type texto = array[1..maximo] of char;
var i, j: integer;
frase: texto;
a: char;
begin
clrscr;
write('Escreva uma frase: ');
i := 0;
while not eoln do
begin
i := i + 1;
read(frase[i])
end;
readln;
for j:= i downto 1 do
write(frase[j]);
readln
end.
18 - Escreva um programa que leia uma string e escreva o número de vogais nela existentes. Por exemplo:
Escreva uma frase: Quantas vogais tem esta frase?
Número de vogais: 11
program contaVogais;
uses crt;
const maximo=100;
var i, numeroVogais: integer;
frase: string;
{Conta o número de vogais numa frase.}
begin
write('Escreva uma frase: ');
readln(frase);
numeroVogais := 0;
for i:= 1 to length(frase) do
case frase[i] of
'a', 'e', 'i', 'o', 'u', 'y',
'A', 'E', 'I', 'O', 'U', 'Y': inc(numeroVogais);
end;
writeln('A frase tem ', numeroVogais,' vogais.');
readln;
end.
19 - Escreva um programa que dadas duas string's, str1 e str2, como parâmetros de entrada faça a sua concatenação,
devolvendo a string resultante em str1. Por exemplo, se str1 for "Aula" e str2 for "pratica" a função deverá devolver
"Aulapratica" em str1.
10/12
20 - Preparar um programa que determine se uma palavra ou frase é palíndromo, isto é, uma cadeia de caracteres que seja
idêntica nos dois sentidos. Ex.: ARARA
PROGRAM palindromo;
var palavra,inversa,caracter : string;
i,lp : integer;
begin
write('Palavra: ');readln(palavra);
inversa:='';
lp := ord(palavra[0]);{ ou lp:=length(palavra); }
for i:=1 to lp do
begin
caracter:=palavra[i]; { ou caracter:=copy(palavra,i,1); }
inversa:=caracter+inversa;
end;
if palavra = inversa then
write(palavra,' é palíndromo')
else
write(palavra,' não é palíndromo');
end.
21 - Elabore um programa que retire todos os A e mostre no monitor o texto depois de modificado.
Ex.: Ontem ja era tarde
=>
Ontem j er trde
PROGRAM tira_car;
var texto,saida,carac : string;
lp,indice : integer;
begin
write('Texto: ');readln(texto);
lp:=ord(texto[0]);{ ou lp:=length(texto); }
saida:='';
for indice:=1 to lp do
begin
carac:=texto[Indice];{ ou carac:=copy(texto,indice,1); }
if (carac <> 'A') and (carac <> 'a') then
saida:=saida+carac;
end;
writeln(‘A string sem As é : ’,saida);
end.
22 - Elabore um programa que calcule e mostre o número de vezes que a string AB aparece num texto.
PROGRAM pesquisa_AB;
var texto,carac : string;
indice,lp,contador : integer;
begin
write('Introduza um texto: ');
readln(texto);
lp:=ord(texto[0]); { ou lp:=length(texto); }
indice:=1;contador:=0;
while indice <= lp-1 do
begin
carac:=texto[Indice] + texto [Indice+1];
{ ou carac:=copy(texto,indice,2); }
if carac='AB' then
begin
contador:=contador+1;
indice:=indice+2;
end
else indice:=indice+1;
end;
writeln('AB apareceu ',contador,' vezes');
11/12
end.
23 - Dado um texto, faça um programa que calcule e mostre no monitor o número de vezes que aparece cada uma das
letras do alfabeto nesse texto.
PROGRAM freq_car;
var i,c,j,l : integer;
a : array[1..26] of integer;
texto : string;
ca : char;
begin
write(‘Escreva um texto: ‘);
readln(texto);
l:=texto[0];
for i:=1 to 26 do
a[I]:=0;
for i:=1 to l do
begin
ca:=texto[i];
c:=ord(ca);
if ((c >= 65) and (c <= 90)) or ((c>=97) and (c <= 122)) then
begin
if c >= 97 then c:=c-32;
j:=c-64;
a[j]:=a[j]+1;
end;
end;
for i:=1 to 26 do
writeln(chr(i+64),a[i]);
end.
12/12
Download

Resolução - Escola Superior de Tecnologia