Duração: 1h30
1. (2.0 valores) Para cada um dos programas seguintes, indique o que é escrito no ecrã
quando os programas são executados:
1.a) (1.0 valores)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _t{
char * sss;
struct _r *nnn;
} t_r;
t_r * f1(t_r *n, char *str){
t_r *a;
a = (t_r*)malloc(sizeof(t_r));
if(a == NULL)
exit(1);
a->sss = str;
a->nnn = n;
return a;
}
int main(){
char s1[] = "1234567";
t_r *k = NULL;
k = f1(k, s1);
k = f1(k, &s1[2]);
k = f1(k, &s1[5]);
f1(k, &s1[3]);
while(k != NULL){
printf("%s\n", k->sss);
k = k->nnn;
}
exit(0);
}
— 1/3 —
1.b) (1.0 valores)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void x(char a[], char *b, int n){
char c;
c = (a[2]+ *b)/2;
a[0] = a[(a[0]-'0' + n)/2];
*b = c;
}
int main(){
char s1[]="0987654321";
int v2[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
x(s1, &s1[4], v2[3]);
printf("%s\n", s1);
x(&s1[2], &s1[0], v2[5]);
printf("%s\n", s1);
x(&s1[7], &s1[4], v2[0]);
printf("%s\n", s1);
x(&s1[7], &s1[4], v2[4]);
printf("%s\n", s1);
exit(0);
}
2. (1.5 valores)
2.a) (0.5 valores) Defina o cabeçalho (protótipo) de uma função que aceita como
argumento uma matriz W de dimensões DIM1xDIM2 e calcula e devolve a matriz A
dada por:
A = W ×W T
onde T designa a matriz transposta.
2.b) (1.0 valores) Implemente (escreva o código) a função anterior.
Notas: os valores DIM1 e DIM2 foram anteriormente definidos usando a instrução
#define
— 2/3 —
3. (4.0 valores) Considere uma lista ligada que representa as sucessivas paragens do
percurso de um autocarro. Admita que cada elemento da lista corresponde a uma
paragem e é constituído pelo nome dessa paragem, o tempo médio do percurso entre
essa paragem e a seguinte. O tempo é representado por um inteiro e expresso em
minutos. A ultima paragem também aparece na lista mas o tempo aí armazenado é 0.
3.a) (0.5 valores) Defina um tipo de dados t_lista_par que permita suportar a lista
descrita.
3.b) (1.0 valores) Desenvolva uma função (cria_percurso) que recebe os nomes
da paragem inicial e final e o tempo de percurso entre estas e retorna uma lista com
esses dois elementos.
Exemplo:
inicio = cria_percurso(“Amadora”, “Oeiras”, 40) devolve a
seguinte lista:
inicio ->Amadora(40m) -> Oeiras(0m)
3.c) (1.0 valores) Escreva uma função com protótipo (cabeçalho) seguinte:
float tempoMedio(t_lista_par *base);
que receba como argumentos o apontador para a primeira paragem e devolva o tempo
médio necessário para a conclusão do percurso.
3.d) (1.5 valores) Escreva uma função com protótipo:
int insereNovaPar(t_lista_par *base, char * nome_ant,
float percent, char *nome_novo);
que recebe um apontador para a base da lista e insere uma nova paragem (chamada
nome_novo) a seguir a uma paragem já existente (nome_ant). O parâmetro
percent é a percentagem do tempo originalmente gasto após a paragem onde se faz a
inserção que passa a ser gasto após a nova paragem.
Para a lista anterior, se realizarmos:
insereNovaPar(inicio, “Amadora”, 0.75, “Queluz”) ficamos
com a seguinte lista:
inicio ->Amadora(10m) -> Queluz (30m) -> Oeiras(0m)
Esta função não pode inserir paragens antes da primeira, nem após a última. Se a
inserção for realizada, a função retorna 1. Se a paragem nome_ant não existir retorna
2 e se se tentar introduzir uma paragem após a última, retorna 3.
4. (2.5 valores)
4.a) (0.5 valores) Defina o tipo de dados t_hora, que permita armazenar as horas e
minutos correspondentes a um instante de tempo. Os valores dos minutos e horas devem
ser armazenados separadamente.
4.b) (1.0 valores) Implemente uma função (cria_tempo), que recebe um inteiro
correspondente ao número de minutos e retorna uma estrutura, do tipo anterior,
correspondente a esse valor (deve calcular as horas e minutos correspondentes).
4.c) (1.0 valores) Implemente uma função (muda_hora), que recebe uma hora, e um
inteiro (negativo ou positivo) correspondente aos minutos e efectua o atraso ou
adiantamento da hora recebida. A nova hora não pode ficar com 75 minutos, devendo os
valores armazenados ser normalizados
— 3/3 —
Download

1/3 — Duração: 1h30 1. (2.0 valores) Para cada um dos programas