Programação de Computadores Engenharia Electrotécnica 1º Ano - 1º Semestre Instituto Politécnico de Viseu Escola Superior de Tecnologia 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} type vector=array[1..9] of integer; var i,n: integer; numeros:vector; write(' Quantos elementos tem o vector (2 a 9)?'); write('digite o elemento ', i,' : '); readln(numeros[i]); writeln('elementos por ordem inversa:'); write(' ',numeros[n+1-i]); 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} var i, soma: integer; numeros: array [1..8] of integer; for i := 1 to 8 do write('digite o ',i,'º elemento: '); readln(numeros[i]); end ; soma := 0; for i := 1 to 8 do soma := soma + numeros[i]; writeln(' 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} var i, soma: integer; numeros: array [1..6] of integer; for i := 1 to 6 do write('digite o ',i,'º elemento: '); readln(numeros[i]); 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); 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} const maximo=100; var i, n, imax, imin, max, min: integer; numeros: array [1..maximo] of integer; write('quantos elementos tem o array? '); write('digite o ',i,'º elemento: '); readln(numeros[i]) 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 imax := i; max := numeros[imax] end else if numeros[i] < min then imin := i; min := numeros[imin] writeln('o maximo do vector é ',max, ' ocorre na posição ',imax); writeln('o minimo do vector é ',min, ' e ocorre na posição ',imin); 2/12
{ Outra forma de fazer o mesmo...} program maxminarray2; { Versão Alternativa } const maximo=100; var i, n, imax, imin, max, min: integer; numeros: array [1..maximo] of integer; write('quantos elementos tem o array? '); write('digite o elemento ', i, ': '); readln(numeros[i]) { 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 ',numeros[imax], ' e a sua posição ',imax); writeln('o minimo ',numeros[imin], ' e a sua posição ',imin); readln } 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} const maximo=50; var i, n, prod: integer; v1,v2: array [1..maximo] of integer; write('quantos elementos tem cada array? '); write(i,'º elemento de v1, v1[',i,']= '); readln(v1[i]) write(i,'º elemento de v2, v1[',i,']= '); readln(v2[i]) prod:=0; prod:=prod+v1[i]*v2[i]; writeln('o produto interno entre os dois vectores é ',prod); 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} const maximo=50; var i, n: integer; v1,v2: array [1..maximo] of integer; v: array [1..2*maximo] of integer; write('quantos elementos tem cada array? '); write(i,'º elemento de v1, v1[',i,']= '); readln(v1[i]) write(i,'º elemento de v2, v1[',i,']= '); readln(v2[i]) v[2*i-1]:=v1[i]; v[2*i]:=v2[n+1-i]; writeln('vectores iniciais:'); write('v1: '); write(v1[i],' '); write(' v2: '); write(v2[i],' '); writeln('vector final:'); write('v: '); for i := 1 to 2*n do write(v[i],' '); 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} const n=8; var i,j,maisrep,rep,num: integer; t: array [1..n] of integer; 4/12
write('introduza o ',i,'º elemento do vector: '); readln(t[i]) maisrep:=0; rep:=0; for j:=i+1 to n do if (t[j]=t[i]) then rep:=rep+1; if (rep>maisrep) then maisrep:=rep; num:=t[i]; if (maisrep>0) then writeln('o elemento mais repetido é o nº ',num); writeln(' e ocorre ',maisrep+1,' vezes,'); write('nas posições:'); if (t[i]=num) then write(' ',i); end else writeln('não há números repetidos!'); 8 - Dado um vector com N elementos, calcular a maior diferença existente entre os seus elementos. Ex: PROGRAM maior_dif; const N = 8; var a : array[1..n] of integer; i,max,min,dif : integer; A[1] A[2] A[3] A[4] A[5] 1 6 3 2 10 maior diferença = 9 writeln('introduza os ',N,' elementos dos array:'); for i:=1 to N do write('a[',i,'] = '); readln(a[i]); max:=a[1]; min:=a[1]; for i:=2 to N do if a[i] > max then max:=a[i]; if a[i] < min then min:=a[i]; dif:=max-min; writeln('a maior diferença é ',dif); 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. PROGRAM menor_dif; const n = 5; var Ex: a : array[1..n] of integer; i,j,men_dif : integer; A[1] A[2] A[3] A[4] A[5] 1 6 3 2 10 menor diferença = 1 posições 1 e 4 writeln('introduza os ',n,' elementos dos array:'); for i:=1 to n do write('a[',i,'] = '); readln(a[i]); men_dif:=abs(a[2]-a[1]); for i:=1 to n-1 do for j:=i+1 to n do if abs(a[i]-a[j]) < men_dif then men_dif:=abs(a[i]-a[j]); 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); 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] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] 15 31 23 15 75 23 41 15 31 85 O vector resultante seria: 15 31 23 75 41 85 M = 6 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} const lin=50; col=50; var i,j,n,m,max,min:integer; med:real; matriz: array[1..lin,1..col] of real; write('n: '); write('m: '); readln(m); max := -MAXINT; min := MAXINT; 6/12
med := 0; for j := 1 to m do 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]; writeln('valor médio : ', med/(n*m):4:4); writeln('valor máximo : ', max:4:4); writeln('valor mínimo : ', min:4:4); readln; 13 - Modifique o programa anterior para uma matriz tri-dimensional NxMxP. program operacoesmatriz3d; {Determina media, maximo e minimo de uma matriz tridimensional} 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; write('n: '); write('m: '); readln(m); write('p: '); readln(p); max := -MAXINT; min := MAXINT; med := 0; for j := 1 to m do for k := 1 to p do 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]; 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; 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} const lin=100; col=100; var i,j,n,m,temp:integer; matriz: array[1..lin,1..col] of integer; write('número de linhas : '); write('número de colunas: '); readln(m); for j := 1 to m do write('elemento (',i,',',j,'): '); readln(matriz[i,j]); writeln('matriz Original:'); for j := 1 to m do write(matriz[i,j]:4); writeln('matriz Transposta:'); for j := 1 to m do write(matriz[i,j]:4); 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} 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; 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: '); 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 write(' Elemento (',i,',',j,'): '); readln(a[i,j]); writeln('introduza os elementos da matriz B: '); for j := 1 to p do write(' Elemento (',i,',',j,'): '); readln(b[i,j]); for i := 1 to m do for j := 1 to p do C[i,j]:=0; for k := 1 to n do C[i,j]:=C[i,j]+A[i,k]*B[k,j]; writeln('matriz Produto C=AxB:'); for i := 1 to m do for j := 1 to p do write(c[i,j]:4); 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.} const maximo=100; type texto = array[1..maximo] of char; var i, j: integer; frase: texto; a: char; write('escreva uma frase: '); i := 0; while not eoln do i := i + 1; read(frase[i]) readln; for j:= i downto 1 do write(frase[j]); readln 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; const maximo=100; var i, numerovogais: integer; frase: string; {Conta o número de vogais numa frase.} 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); writeln('a frase tem ', numerovogais,' vogais.'); readln; 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; write('palavra: ');readln(palavra); inversa:=''; lp := ord(palavra[0]);{ ou lp:=length(palavra); } for i:=1 to lp do caracter:=palavra[i]; { ou caracter:=copy(palavra,i,1); } inversa:=caracter+inversa; if palavra = inversa then write(palavra,' é palíndromo') else write(palavra,' não é palíndromo'); 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; write('texto: ');readln(texto); lp:=ord(texto[0]);{ ou lp:=length(texto); } saida:=''; for indice:=1 to lp do carac:=texto[indice];{ ou carac:=copy(texto,indice,1); } if (carac <> 'A') and (carac <> 'a') then saida:=saida+carac; writeln( A string sem As é :,saida); 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; write('introduza um texto: '); readln(texto); lp:=ord(texto[0]); { ou lp:=length(texto); } indice:=1;contador:=0; while indice <= lp-1 do carac:=texto[indice] + texto [Indice+1]; { ou carac:=copy(texto,indice,2); } if carac='ab' then contador:=contador+1; indice:=indice+2; end else indice:=indice+1; writeln('ab apareceu ',contador,' vezes'); 11/12
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; write( Escreva um texto: ); readln(texto); l:=texto[0]; for i:=1 to 26 do a[i]:=0; for i:=1 to l do ca:=texto[i]; c:=ord(ca); if ((c >= 65) and (c <= 90)) or ((c>=97) and (c <= 122)) then if c >= 97 then c:=c-32; j:=c-64; a[j]:=a[j]+1; for i:=1 to 26 do writeln(chr(i+64),a[i]); 12/12