Universidade da Beira Interior Departamento de Informática (6619, 11543, 11552) Programação I Ficha prática 6 Ano letivo 2014-15 Exercícios 1. Dada as seguintes declarações e inicializações int vector[] = {3,0,9}, a=1,b=0; indique se as seguintes expressões são verdadeiras ou falsas, justificando. (a) vector[2] == 2 (b) vector[a] != a (c) vector[a+1] == 0 (d) vector[a++] == 0 (e) vector[a] - 1 == a (f) 1- vector[a] == a (g) vector[1] + a == 1 (h) vector[0] + 1 > vector[b+1] - b (i) vector[vector[1]] == 3+ vector[a+b] 2. Escreva um programa que leia 10 letras do teclado, guardando-as num vetor e de seguida mostre no ecrã apenas as vogais lidas. Como vão ser feitas várias leituras de valores do tipo char, deve usar o seguinte scanf() para evitar problemas com os \n que ficam no buffer do teclado (repare no espaço!): scanf(" %c",&letra); 3. Escreva um programa que leia 10 elementos do tipo float e mostre no ecrã os valores lidos e os valores por ordem inversa. Para isso deve criar as seguintes funções: void leVetor(float a[]); void mostraVetor(float b[]); void inverteVetor(float original[], float invertido[]); 1 Note que neste caso não passamos às funções o comprimento dos vetores pois vamos declarar esse comprimento como uma constante simbólica. 4. Escreva um programa que leia do teclado 10 valores inteiros e mostre no ecrã: (a) os valores lidos; (b) a média dos valores lidos; (c) o desvio padrão dos valores lidos; (d) o maior valor lido; (e) o menor valor lido; (f) o segundo maior valor lido. As acções descritas nas alíneas anteriores devem ser executadas por funções com protótipos semelhantes ao seguinte: void ZZZ(int v[]); onde ZZZ deve ser substituido por um nome apropriado a cada caso. P.ex., no primeiro caso ZZZ deve ser mostraVetor. Se os valores lidos forem X = {x1 , x2 , . . . , xn }, as expressões para a média (µ) e desvio padrão (σ) são as seguintes: n 1X µ= xi n i=1 v u n u1 X (xi − µ)2 σ=t n i=1 5. Escreva um programa que leia uma matriz 2 × 3 de inteiros do teclado e mostre (a) a matriz lida; (b) os elementos ímpares da matriz. As acções descritas nas alíneas anteriores devem ser executadas por funções. Os protótipos a usar nas funções referidas são os seguintes: void leMatriz(int mat[M][N]); void mostraMatriz(int mat[M][N]); void mostraImparesMatriz(int mat[M][N]); onde M e N são constantes simbólicas com as dimensões da matriz. 2 6. Escreva um programa que leia uma matriz 2 × 3 de inteiros do teclado e mostre a matriz lida (A) e a sua transposta (B). Os protótipos a usar nas funções a escrever são os seguintes (algumas já foram desenvolvidas em exercícios anteriores e devem ser reutilizadas): void leMatriz(int mat[M][N]); void mostraMatriz(int mat[M][N]); void calculaMatrizTransposta(int A[M][N], int B[M][N]); onde M e N são constantes simbólicas com as dimensões da matriz. Seja A uma matriz de dimensões p × q. A matriz transposta B = AT tem dimensões q × p em que o valor em cada posição (i, j) é dado por B(i, j) = A(j, i) 7. Escreva um programa que leia duas matrizes A e B com dimensões 2 × 3 de inteiros do teclado e mostre (a) a soma das matrizes: A + B; (b) o produto de A pela transposta de B: C = A × B T ; (c) as coordenadas dos valores negativos da matriz C. Os protótipos a usar nas funções a escrever são os seguintes (algumas já foram desenvolvidas em exercícios anteriores e devem ser reutilizadas): void void void void void void leMatriz(int mat[M][N]); mostraMatriz(int mat[M][N]); calculaSomaMatriz(int A[M][N], int B[M][N], int C[M][N]); calculaMatrizTransposta(int A[M][N], int B[M][N]); calculaProdutoMatriz(int A[M][N], int B[M][N], int C[M][N]); mostraCoordNegativosMatriz(int A[M][N]); O produto de duas matrizes A e B de dimensões p×q e q ×p respetivamente, é uma nova matriz C de dimensões p × p em que o valor em cada posição (i, j) é dado por C(i, j) = q X k=1 3 A(i, k) × B(k, j) Exercícios sobre strings: resolver apenas depois da aula T 7 8. Escreva um programa que leia uma frase do teclado (use fgets()) e, usando funções, mostre o seguinte: (a) o número de espaços na frase; (b) o número de algarismos na frase; (c) a frase invertida; (d) a frase escrita toda com letras maiúsculas. As acções descritas nas alíneas anteriores devem ser executadas por funções com protótipos semelhantes ao seguinte: YYY ZZZ(char v[]); onde ZZZ deve ser substituido por um nome apropriado a cada caso e YYY por um tipo apropriado também. P.ex., no primeiro caso ZZZ deve ser contaEspacos e YYY deve ser int. 9. Escreva um programa que leia duas frases do teclado (use fgets()) e, usando funções, mostre o seguinte: (a) qual a frase mais comprida; (b) o número de símbolos comuns a ambas as frases; (c) todas as vogais de ambas as frases. 4