Programação 22/23 S2

Teste - Solução

Autor
Afiliação

CAP Diogo Silva

Academia da Força Aérea

Parte 1

  • Pergunta 1 - C,D
  • Pergunta 2 - C
  • Pergunta 3 - C
  • Pergunta 4 - B
  • Pergunta 5 - B
  • Pergunta 6 - A, B
  • Pergunta 7 - A
  • Pergunta 8 - B

Parte 2

Problema 1

  • Output

    Maria Marques
    Joao Carvalho
    Ana Pereira
    Pedro Ferreira
    Carla Martins
  • Explicação

    • O programa está a concatenar os 5 primeiros nomes próprios aos 5 últimos apelidos (por ordem inversa).
  • Qual é o tamanho máximo que um nome completo pode ter (sem contar com o \0)?

    • 99, uma vez que os vetores têm um tamanho de 100 char, mas o \0 ocupa uma das posições.

Problema 2

  • Escreve uma função que recebe um array de reais e o seu tamanho e um array de inteiros correspondente aos índices do array de reais. A função deve ordenar os índices de forma a que o array de reais fique ordenado.

void troca_pos (int *a, int *b){
    int aux;
    aux = *a;
    *a = *b;
    *b = aux;
}

void ordenaIndices (int *ind, float *array, int N){
    int i, j, n=0;
    for (i = 0; i < N; i++){
        for (j = i+1; j < N; j++){
            if (array[ind[i]] > array[ind[j]]){
                troca_pos(&ind[i], &ind[j]);
                n++;
            }
        }
    }
    return n;
}

Problema 3

  • Escreve uma função que recebe 3 matrizes.

  • As matrizes podem ser de qualquer tamanho.

  • A matriz foi implementada da seguinte forma:

    #define MAX_LINHAS 100
    #define MAX_COLUNAS 100
    
    typedef struct {
        int n_linhas;
        int n_colunas;
        float vals[MAX_LINHAS][MAX_COLUNAS];
    } Matriz;
  • A função irá efetuar a multiplicação das 2 matrizes, e devolver uma terceira matriz com o resultado.

  • A função tem de verificar se as dimensões das matrizes são compatíveis. Se não forem, a função deve devolver uma matriz com o número de linhas e colunas igual a -1.

Solução:

Matriz multMat (Matriz m1, Matriz m2){
    Matriz m3;
    int i, j, k;
    if (m1.n_colunas != m2.n_linhas){
        m3.n_linhas = -1;
        m3.n_colunas = -1;
        return m3;
    }
    m3.n_linhas = m1.n_linhas;
    m3.n_colunas = m2.n_colunas;
    // percorrer todas as posições da matriz resultante
    for (i = 0; i < m3.n_linhas; i++){
        for (j = 0; j < m3.n_colunas; j++){
            // calcular produto interno para cada elemento
            float soma = 0;
            for (k = 0; k < m1.n_colunas; k++){
                soma += m1.vals[i][k] * m2.vals[k][j];
            }
            m3.vals[i][j] = soma;
        }
    }
    return m3;
}