A avaliação tem duas componentes, uma teória e uma prática. A componente teórica corresponderá à melhor nota obtida em exame e a componente prática à média aritmética obtida nos trabalhos práticos.
Em ambas as partes a nota mínima obrigatória é 7,5 valores.
A nota final é dada pela fórmula que se apresenta a seguir.
Somatório( Teórico * 60% , Prático * 40% )
-- JoseCarlosRamalho - 23 Feb 2004
O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos e com as estruturas de controlo da linguagem C.
Para atingir esse fim, o aluno irá desenvolver pequenos algoritmos e tentar codificá-los em C.
Exercícios:
Exercício Nº1: O Maior de 2 Números
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê dois inteiros e escreve o maior deles.
Exercício Nº2: O Maior de N Números
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê N inteiros e escreve o maior deles.
Exercício Nº3: Números Pares
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um determinado número inteiro N e escreve os números pares até N.
Exercício Nº4: Potências
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê 2 números inteiros, a e b, e escreve o resultado de elevar a à potência de b (utilize estruturas cíclicas para calcular o valor da potência).
Exercício Nº5: Factorial
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um inteiro positivo e escreve o valor do seu factorial.
Exercício Nº6: Tabela de Conversão de Temperaturas
Considere a seguinte fórmula:Fahreneit = 32 + (1.8 * Celsius)
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que calcula uma tabela de conversão entre graus Celsius e graus Fahreneit com Fahreneit a variar entre 0 e 300 (considere intervalos de 5 graus).
-- JoseCarlosRamalho - 25 Feb 2004
Ficha Nº10: Estruturas de Dados Dinâmicas - Árvores Binárias
Objectivos:
O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados dinâmicas, nomeadamente, as árvores binárias.
Exercícios:
Exercício Nº 1: Árvores Binárias Ordenadas de Inteiros
Considere uma lista de inteiros (não se sabe o seu comprimento). Especifique então as seguintes funções e estruturas de dados:
Defina os tipos necessários para suportar uma árvore binária ordenada (de procura) de inteiros.
Especifique uma função para inserir um valor na árvore.
Especifique uma função para listar os valores armazenados (codifique as três funções de listagem possíveis).
Especifique uma função para procurar um valor na árvore (como resultado deverá devolver um apontador para o elemento ou NULL caso não o encontre).
Especifique uma função para contar os elementos da árvore.
Especifique uma função para calcular o maior elemento na árvore.
Especifique um programa, usando as funções definidas, que cria uma lista com os múltiplos de 7 entre 0 e 100 e os lista por ordem decrescente e crescente.
Especifique uma função que calcula o peso de uma árvore (a sua profundidade).
Especifique uma função que dada uma árvore, a lista por níveis.
Exercício Nº 2: Gestão do Login dos Utilizadores de uma Aplicação
Para controlar o acesso a uma aplicação informática, pretende-se manter em memória o conjunto dos pares "Username-Password"
de todos os Utilizadores autorizados.
Usando uma Árvore Binária de Procura para armazenar essa informação e após definir os tipos de variáveis em C,
necessários para suportar essa representação, implemente as seguintes operações na linguagem C:
"valida": função booleana que diz se o par "username-password" corresponde a um utilizador válido.
"daSenha": função que retorna a password de um dado username.
"listaTodos": procedimento que faz uma listagem ordenada alfabeticamente de todos os pares "Username-Password" válidos.
"insere": função que recebe um novo par "Username-Password" e a Árvore com o conjunto de utilizadores actuais e devolve uma nova Árvore com o novo par inserido na follha correcta.
Exercício Nº 3: Árvores Binárias para Expressões Aritméticas (+,-,*,/)
Defina a estrutura de dados para uma árvore binária que irá armazenar expressões aritméticas, operadores nos nodos intermédios armazenados de acordo com a sua prioridade de cálculo e operandos (números reais) nas folhas.
Especifique uma função que dada uma árvore deste tipo lista a expressão na forma: infixa, pré-fixa, pós-fixa.
Especifique uma função que dada uma árvore deste tipo calcula o valor da expressão lá armazenada.
Exercício Nº 4: Dicionários
Pretende-se criar um dicionário que associe a cada palavra (termo chave), a sua classificação morfológica, origem, significado e sinónimos.
O programa a desenvolver para manipulação do dicionário (suponha que o mesmo foi criado por uma outra aplicação), além de facultar uma consulta eficiente (dada uma palavra retorna toda a informação associada, ou produz uma mensagem de falha, caso não haja nenhuma chave igual à palavra dada), deve permitir listar globalmente toda a informação contida, ordenada alfabeticamente pelos termos-chave, e deve ser capaz de ler e salvar o dicionário em ficheiro binário.
Defina a estrutura de dados para armazenar cada entrada (par "termo-chave,informação-associada").
Implemente o dicionário num array ordenado de entradas.
Implemente o dicionário numa lista ligada dinâmica e ordenada de entradas.
Implemente o dicionário usando sub-lista ligadas dinâmica e ordenada de entradas cada lista correspondente a 1 das 26 letras do alfabeto, acessiveis através de um indíce guardado em Árvore Binária de Procura (em alternativa, armazene-o num array).
#include <stdio.h>
int main( ) {
int a, b;
printf("Primeiro número: \n");
scanf("%d", &a);
printf("Segundo número: \n";
scanf("%d", &b);
printf("O maior número é o %d\n", a>b?a:b);
return 0;
}
Exercício 2: O maior de N números
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0, conta;
int num, max;
printf("Indique quantos números vai introduzir: ");
while (N<=0) {
scanf("%d",&N);
}
printf("Escreva o próximo número: ");
scanf("%d",&num);
max = N;
for (conta=N-1; conta>0; conta--) {
printf("Escreva o próximo número: "); scanf("%d",&num);
if (num > max) {
max = num;
}
}
printf("\nO Maior dos %d numeros introduzidos e: %d \n",N,max);
return 0;
}
Exercício 3: Números pares
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
int par;
printf("Indique o limite superior para os números pares a gerar (imprimir): ");
scanf("%d",&N);
for (par=2; par<=N; par=par+2) {
printf("O próximo Numero Par e: %d \n",par);
}
printf("Ja nao ha mais Numeros Pares menores ou iguais a %d \n",N);
return 0;
}
Exercício 3: Números pares (outra solução)
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
int par, conta;
printf("Indique quantos números pares quer gerar (imprimir): ");
while (N <= 0) {
scanf("%d",&N);
}
conta=0;
while (conta < N) {
conta++;
par = 2*conta;
printf("O próximo Numero Par e: %d \n",par);
}
printf("Ja foram gerados os %d primeiros Numeros Pares \n",N);
return 0;
}
Exercício 4: Potências (de base A e expoente B)
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int A,B;
int pot;
printf("Escreva a Base e o Expoente (inteiro e nao-negativo): ");
scanf("%d %d",&A,&B);
pot = 1;
if (B >= 0) {
while (B) /* equivalente a (B>0) */
{
pot = pot*A;
B--; /* ou seja, B = B-1 */
}
printf("A potencia %d elevado a %d e igual a %d \n",A,B,pot);
} else {
printf("\n O expoente tem de ser um Numero Inteiro Nao-Negativo \n");
}
return 0;
}
Exercício 5: Factorial
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
int fact=1;
printf("Indique o Numero cujo Factorial quer calcular (inteiro e positivo): ");
while (N<=0) {
scanf("%d",&N);
}
while (N) {
fact = fact*N;
N--;
}
printf("O Factorial do numero dado e: %d \n",fact);
return(0);
}
Exercício 5: Factorial: solução recursiva
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
printf("Indique o Numero cujo Factorial quer calcular (inteiro e positivo): ");
while (N<=0) {
scanf("%d",&N);
}
printf("O Factorial do numero dado e: %d \n",factorial(N));
return(0);
}
int factorial(int a) {
if (a <= 1) return 1;
else return a * factorial(a - 1);
}
Exercício 6: Conversão Celsius para Fahreneit
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
float Celsius;
int Fahr;
for (Fahr=0; Fahr<=300; Fahr += 5) {
printf("%5d Fhareneit ==> %6.1f \n", Fahr, ((Fahr-32.0)/1.8));
N--;
}
return 0;
}
O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos e com as estruturas de controlo da linguagem C.
Nesta ficha, introduz-se também o conceito de subrotina ou função em C como método para repartir um problema em problemas mais pequenos.
Para atingir esse fim, o aluno irá desenvolver pequenos algoritmos e tentar codificá-los em C.
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um inteiros e escreve no écran os seus divisores.
Exercício Nº2: Maior Divisor Comum
Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter dois argumentos inteiros e produzir um resultado inteiro que é o maior divisor comum dos argumentos recebidos. Posteriormente codifique um programa principal (main()) que utiliza esta função para cálculo do maior divisor comum de dois números fornecidos pelo utilizador.
Ver Algorítmo de Euclides
Que pode ser resumido em:
Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter dois argumentos inteiros e produzir um resultado inteiro que é o menor múltiplo comum dos argumentos recebidos. Posteriormente codifique um programa principal (main()) que utiliza esta função para cálculo do menor múltiplo comum de dois números fornecidos pelo utilizador.
Exercício Nº4: É Primo?
Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter um argumento inteiros e produzir um resultado do tipo booleano (o docente irá desenvolver uma pequena biblioteca de booleanos: bool.h). O resultado será verdadeiro (TRUE) se o argumento passado fôr primo e falso (FALSE) caso contrário. Posteriormente codifique um programa principal (main()) que utiliza esta função para verificar quem é primo numa sequência de inteiros introduzidos pelo utilizador (terminada por 0).
Exercício Nº5: Tudo ao contrário!
Foste transferido para uma nova escola.
Nessa escola, a professora e matemática gostava muito de pôr os alunos a pensar e tentava que a mais simples tarefa fosse algo em que o raciocínio tivesse que intervir.
Uma das medidas que ela implementou foi a de utilizar os números inteiros invertidos. Por exemplo, o 12 seria 21 e o 1821 seria 1281.
Ora, os alunos locais já estão habituados a lidar com os inteiros daquela maneira e até fazem as operações de adição e subtracção com os inteiros naquela forma. No entanto, para ti, que acabaste de chegar à escola esta tarefa não é tão simples.
Assim, resolveste criar um programa em computador que fizesse três coisas:
dado um número calcula o seu inverso (o valor inteiro correcto)
dados dois números na forma invertida calcula a sua soma e devolve o resultado na mesma forma invertida
dados dois números na forma invertida calcula a sua subtracção e devolve o resultado na mesma forma invertida
Sugestão: especifica uma função para cada um dos pontos acima.
Exercício Nº6: Sequência de Fibonacci
Codifica um programa que gere os primeiros 20 números de Fibonacci. Os números de Fibonacci são definidos recursivamente da seguinte forma:
/**
title: Ano Lectivo 2003/04 -- Resolução da Ficha nº2
ficheiro: pp203resf02.c autor: PRH versao de: 2004.03.15
.uso do printf() e do scanf()
.uso de condicoes
.uso de ciclos diversos
**/
Divisores de um número (Ficha nº2 - Exercício 1)
/**
title: Divisores de um número (Ficha nº2 - Exercício 1)
**/
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int num=0, divisor;
printf("Escreva o número cujos divisores quer calcular: ");
while (num<=0) { scanf("%d",&num); }
printf("Lista dos Divisores de %d:\n",num);
for (divisor=1; divisor<=num; divisor++)
{
if ((num%divisor)==0) { printf("%d\n",divisor); }
}
return(0);
}
Divisores de um número -- 2ª versão, optimizada (Ficha nº2 - Exercício 1)
/**
title: Divisores de um número -- 2ª versão, optimizada (Ficha nº2 - Exercício 1)
**/
#include <stdio.h>
#include <math.h>
/*----- programa principal -----*/
int main( )
{int num=0, divisor, lim;
printf("Escreva o número cujos divisores quer calcular: ");
while (num<=0) { scanf("%d",&num); }
printf("Lista dos Divisores de %d:\n",num);
lim = (int)sqrt((double)num);
for (divisor=1; divisor<=lim; divisor++)
{
if ((num%divisor)==0) { printf("um par de divisores é %d e %d\n",divisor, num/divisor); }
}
return(0);
}
Menor Múltiplo Comum de dois números (Ficha nº2 - Exercício 3)
/**
title: Menor Múltiplo Comum de dois números (Ficha nº2 - Exercício 3)
**/
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int N,M,MMC;
int maior;
printf("Indique os números cujo MMC quer calcular: ");
scanf("%d%d",&N,&M);
MMC = maior = (N>=M)? N: M;
while (((MMC%N)!=0)||((MMC%M)!=0))
{
MMC += maior;
}
printf("O Menor Multiplo Comum entre %d e %d é: %d \n",N,M,MMC);
return(0);
}
Tudo ao contrário, ou "Números Invertidos" (Ficha nº1 - Exercício 5)
/**
title: Tudo ao contrário, ou "Números Invertidos" (Ficha nº1 - Exercício 5)
**/
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int orig= -1;
int inverte;
printf("Indique o Numero Original (>=0) que quer inverter: ");
while (orig<0) { scanf("%d",&orig); }
inverte = 0;
while (orig)
{
proxdig = orig%10;
orig = orig/10;
inverte = inverte*10 + proxdig;
}
printf("O numero invertido e: %d \n",inverte);
return(0);
}
Os N primeiros Números de Fibonacci (Ficha nº2 - Exercício 6)
/**
title: Os N primeiros Números de Fibonacci (Ficha nº2 - Exercício 6)
**/
#include <stdio.h>
#define MAX 20
/*----- função de Fibonacci -----*/
int fib( int n )
{int f;
if ((n==0)||(n==1))
{ f = 1; }
else { f = fib(n-1) + fib(n-2); }
return(f);
}
/*----- programa principal -----*/
int main( )
{int N;
int res;
printf("Os %d primeiros números de FIBONACCI são: \n",MAX);
for ( N=0; N<MAX; N++ )
{
res = fib(N);
printf("%6d \n",res);
}
return(0);
}
O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de vectores e matrizes em C. As strings são casos particulares de arrays: uma string é um array em que os elementos são todos do tipo char. Assim, nesta ficha surgem também alguns exercícios envolvendo manipulação de strings.
Especifique um programa e codifique-o em C que lê 10 números inteiros positivos e escreve:
a sua média e o valor máximo;
os numeros maiores que a média;
a quantidade de números menores que a média;
Exercício Nº2: Capicua
Especifique uma função que recebe uma string e verifica se a mesma é capicua (lida da esquerda para a direita, ou da direita para a esquerda, é a mesma palavra/frase).
Exemplos típicos: ala ou rapar.
Um caso curioso (e, claro, mais complexo) é a seguinte Capicua brasileira: Socorram-me subi no onibus em Marrocos.
Exercício Nº3: Conversão Romano-Árabe
Especifique uma função que recebe uma string contendo um número escrito em notação romana e que dá como resultado o respectivo valor inteiro (correspondente à notação arábica).
Exercício Nº4: Cifra por substituição arbitrária
Considere a cifra (palavra-chave) constituída pelas letras "SAPO" seguidas de um dígito n (entre 0 e 9). Para a cifragem (codificação) da mensagem efectuam-se os seguintes passos:
reduzem-se espaços seguidos a um único espaço e mantém-se os caracteres de pontuação;
os digitos rodam-se (circularmente) para a direita da quantidade n;
convertem-se todas as letras em maiúsculas ou minúsculas;
considera-se a seguinte tabela de codificação:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
S
A
P
O
B
C
D
E
F
G
H
I
J
K
L
M
N
Q
R
T
U
V
W
X
Y
Z
A construção desta tabela limita-se a colocar a palavra chave no início e completar com as restantes letras do alfabeto, não colocando as letras que se repetem.
para a codificação, substitui-se cada um dos carácteres da primeira linha pelo carácter correspondente da segunda linha.
Construa um programa que dada uma cifra, codifique a mensagem, e um outro que, dada a mensagem cifrada e a cifra, descodifique a mensagem.
Exercício Nº5: Estatísticas de texto
Crie um programa que leia todos os caracteres de um texto (até encontrar um o fimde ficheiro, eof) e que no fim indique quantas vezes apareceu cada
uma das 26 letras do alfabeto (considere maiúsculas iguais às minúsculas).
-- JoseCarlosRamalho - 09 Mar 2004
O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de matrizes em C. As strings são casos particulares de arrays: uma string é um array em que os elementos são todos do tipo char. Assim, nesta ficha surgem também alguns exercícios envolvendo manipulação de strings.
Exercícios:
Exercício Nº1: Média dos Alunos
Cada aluno de uma licenciatura em Ciências da Computação pode ter notas correspondentes a 10 disciplinas feitas durante o ano lectivo (caso não tenha sido avaliado positivamente a uma disciplina não terá essa nota).
Declare as estruturas de dados (o modelo) necessárias para suportar o sistema de informação: um aluno tem um número (inteiro), um nome (string) e uma lista de notas (reais).
Inicialize a estrutura de dados: na declaração e/ou numa função de inicialização que é chamada no início da função main().
Especifique um programa em C para calcular a média de cada aluno (faça uma função que dada a estrutura de dados principal e o identificador do aluno, produz como resultado a sua média).
Calcule a média geral da turma.
Calcule a média da turma em cada disciplina.
Calcule a percentagem de faltas (ausência de nota).
Exercício Nº2: Gestão de Armazens
Uma empresa tem 10 armazens e precisa de um programa que leia as vendas mensais dos 10 armazens, calcule a media de vendas e produza uma listagem dos armazens com vendas superiores à média calculada.
Exercício Nº3: Normalização de Espaços numa String
Especifique as seguintes funções:
Dada uma string, retira os espaços no fim da string.
Dada uma string, retira os espaços do início da string.
Dada uma string, substitui todas as sequências de um ou mais carácteres brancos (espaço ou TAB) no meio da string por um único espaço branco.
Exercício Nº4: Conversão Árabe-Romano
Especifique um programa em C que lê um inteiro e produz a string com o correspondente número em notação romana.
O objectivo principal desta ficha é familiarizar o aluno com a utilização dos algoritmos tradicionais de busca e ordenação de Arrays.
Exercícios:
Exercício Nº1: Inserção Ordenada
Voltando ao exercício da última ficha em que se geriam alunos e respectivas notas, implemente a operação correspondente à inserção de um novo aluno (faça a inserção ordenada desse aluno).
Este problema pode ser dividido em três fases:
Descobrir a posição onde o novo aluno deverá ser inserido;
Deslocar os elementos maiores uma posição para a frente;
Inserir o novo aluno na posição livre.
Exercício Nº2: Remoção
Especifique a operação de remoção de um aluno tendo o cuidado de deixar a estrutura ordenada e sem "buracos".
Exercício Nº3: Busca Dicotómica
Uma vez que a estrutura está ordenada a pesquisa pode ser optimizada. Implemente a pesquisa dicotómica sobre um array ordenado.
O objectivo principal desta ficha é familiarizar o aluno com a utilização de algoritmos mais avançados de busca e ordenação sobre Arrays. No fim, porpõem-se alguns exercícos envolvendo estruturas.
Exercícios:
Exercício Nº1: Estrutura Ligada
Voltando ao exercício da última ficha em que se geriam alunos e respectivas notas, considere a hipótese de utilizar uma ligação lógica entre os elementos como forma de os manter ordenados(como discutido na aula teórica de 01-04-2004) e implemente as seguintes funções:
Incialização do modelo de dados: lembre-se que também será necessário gerir as posições livres.
Listar: esta função produz uma listagem ordenada da informação de todos os alunos.
Consulta: esta função imprime no écran toda a informação referente a um determinado aluno.
Inserir: esta função insere o novo aluno na primeira posição livre e actualiza as ligações de forma a manter a informação logicamente ordenada.
Remover: esta função remove o aluno em causa e coloca a respectiva posição na lista de posições livres (garbage collector).
Este problema pode ser dividido em três fases:
Exercício Nº2: Estrutura ou Produto Cartesiano
Considere de novo o problema do exercício anterior e resolva as seguintes alíneas:
Defina um tipo de dados Aluno como sendo uma estrutura (struct) onde é guardada a informação do aluno.
Defina um tipo de dados Turma como sendo uma lista de Aluno.
Declare variáveis do tipo Aluno e do tipo Turma.
Adapte as funções desenvolvidas no exercício anterior para trabalhar com estes novos tipos de dados.
Ficha Nº8: Estruturas de Dados Dinâmicas - Listas Ligadas
Objectivos:
O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados dinâmicas.
Exercícios:
Exercício Nº1: Lista de Inteiros
Considere uma lista de inteiros (não se sabe o seu comprimento). Especifique então as seguintes funções e estruturas de dados:
Defina os tipos necessários para suportar uma lista ligada de inteiros.
Especifique uma função para inserir um valor na cabeça da lista.
Especifique uma função para listar os valores da lista, do início para o fim (faça também a função que lista os elementos na ordem inversa).
Especifique uma função para procurar um valor na lista (como resultado deverá devolver um apontador para o elemento ou NULL caso não o encontre).
Especifique uma função para contar os elementos da lista.
Especifique uma função para calcular o maior elemento na lista.
Especifique um programa, usando as funções definidas, que cria uma lista com os múltiplos de 3 entre 0 e 100 e os lista por ordem decrescente e crescente.
Exercício Nº2: À procura da saída ...
Suponha que existe um labirinto (pense numa representação adequada para o mesmo) que tem um ponto de entrada e um ponto de saída. Especifique um algoritmo que vai descobrir um caminho possível entre o ponto de entrada e o ponto de saída. Ajuda: modele numa lista ligada uma stack para ir guardando o caminho percorrido e as hipóteses alternativas.
Exercício Nº3: A Agenda de Contactos
Pretende-se que desenvolva uma aplicação para gerir uma agenda de contactos. Uma agenda é uma lista de entradas ou grupos de entradas. Uma entrada tem a seguinte constituição:
chave
chave única de identificação (não pode haver duas entradas com a mesma chave);
tipo
tipo da entrada: pessoa, empresa, ...
nome
nome da pessoa, empresa ou entidade;
email
contacto electrónco (é opcional)
telefone
número de telefone (obrigatório)
Um grupo pode ter entradas, referências a entradas já existentes na agenda (por chave) ou subgrupos (os grupos podem ter grupos aninhados infinitamente). O grupo tem, então, a seguinte constituição:
chave
chave única de identificação (não pode haver dois grupos com a mesma chave);
nome
nome do grupo; lista de itens: entradas e/ou grupos e/ou referências;
Por sua vez, a referência é apenas constituída pela chave da entrada ou grupo que referencia.
Desenvolva a aplicação nas seguintes etapas:
Defina as estruturas de dados necessárias para suportar o sistema de informação;
Espeifique as várias funções de inserção: inserir uma entrada na agenda, inserir um grupo na agenda, inserir uma entrada num grupo, ...
Especifique uma função para listar o conteúdo da agenda.
Especifique uma função para gravar o conteúdo da agenda num ficheiro.
Especifique uma função para carregar o conteúdo da agenda de um ficheiro.
#ifndef _LISTA
#define _LISTA
typedef struct sInteiro
{
int valor;
struct sInteiro * seg;
} Nodo, *Lista;
Lista inserir( int v, Lista l );
void listar( Lista l );
void listar_inv( Lista l );
Lista procurar( int v, Lista l );
int conta_elems( Lista l );
#endif
lista.c
#include "lista.h"
#include <stdio.h>
Lista inserir( int v, Lista l )
{
Lista novo;
novo = (Lista) malloc(sizeof(Nodo));
novo->valor = v;
novo->seg = l;
return novo;
}
void listar( Lista l )
{
if(l)
{
printf("%d ",l->valor);
listar(l->seg);
}
}
Lista inserir_ord( int v, Lista l)
{
Lista novo;
if((!l) || (l->valor > v))
{
novo = (Lista) malloc(sizeof(Nodo));
novo->valor = v;
novo->seg = l;
return novo;
}
else
{
l->seg = inserir_ord(v,l->seg);
return l;
}
}
prog.c
#include <stdio.h>
#include "lista.h"
int main()
{
Lista li=NULL;
int i=0;
while ((i+=3) < 100)
li = inserir(i,li);
listar(li);
return 0;
}
Ficha Nº9: Estruturas de Dados Dinâmicas - Listas Ligadas
Objectivos:
O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados dinâmicas.
Exercícios:
Exercício Nº1: Quantas letras?
Especifique um programa/função que dada uma frase/nome constrói uma lista de ocorrências das letras ordenada alfabeticamente. Pense numa solução com arrays e noutra com estruturas dinâmicas.
Exercício Nº2: À procura da saída ...
Suponha que existe um labirinto (pense numa representação adequada para o mesmo) que tem um ponto de entrada e um ponto de saída. Especifique um algoritmo que vai descobrir um caminho possível entre o ponto de entrada e o ponto de saída. Ajuda: modele numa lista ligada uma stack para ir guardando o caminho percorrido e as hipóteses alternativas.
Exercício Nº3: A Agenda de Contactos
Pretende-se que desenvolva uma aplicação para gerir uma agenda de contactos. Uma agenda é uma lista de entradas ou grupos de entradas. Uma entrada tem a seguinte constituição:
chave
chave única de identificação (não pode haver duas entradas com a mesma chave);
tipo
tipo da entrada: pessoa, empresa, ...
nome
nome da pessoa, empresa ou entidade;
email
contacto electrónco (é opcional)
telefone
número de telefone (obrigatório)
Um grupo pode ter entradas, referências a entradas já existentes na agenda (por chave) ou subgrupos (os grupos podem ter grupos aninhados infinitamente). O grupo tem, então, a seguinte constituição:
chave
chave única de identificação (não pode haver dois grupos com a mesma chave);
nome
nome do grupo; lista de itens: entradas e/ou grupos e/ou referências;
Por sua vez, a referência é apenas constituída pela chave da entrada ou grupo que referencia.
Desenvolva a aplicação nas seguintes etapas:
Defina as estruturas de dados necessárias para suportar o sistema de informação;
Espeifique as várias funções de inserção: inserir uma entrada na agenda, inserir um grupo na agenda, inserir uma entrada num grupo, ...
Especifique uma função para listar o conteúdo da agenda.
Especifique uma função para gravar o conteúdo da agenda num ficheiro.
Especifique uma função para carregar o conteúdo da agenda de um ficheiro.
Revisão da noção de Programação: objectivos, dificuldades e etapas.
Uma visão global dos paradigmas de programação.
Apresentação detalhada do paradigma; panorâmica histórica das linguagens de programação imperativas.
Análise Descendente de problemas
Noção de Algoritmo: Linguagem Algorítmica em português estruturado ---introdução das diversas construções linguísticas através
de problemas-exemplo típicos.
Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação),
de 1 a 10 (como se o computador estivesse na primária).
O adivinho
O computador adivinho, tenta adivinhar um número entre 0 e 100, em várias tentativas. Em cada tentativa, mostra o número
e pergunta se está correcto, ao que o utilizador responde "sim" ou "maior" ou "menor" consoante o número em que pensou seja igual, maior ou menor
do que o indicado.
-- AlbertoSimoes - 11 Mar 2005
Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da arquitectura de um compilador da linguagem C. Introdução à liguagem algorítmica que irá ser utiizada nas aulas práticas. Implementação de alguns programas pequenos.
2004-03-01
Estruturas Condicionais: a instrução if-else, instruções if-else encadeadas, a instrução switch.
2004-03-04
Apresentação da arquitectura de uma máquina de stack para a execução de programas. Execução do factorial: passagem de argumentos pela stack, endereço de retorno. A tabela ASCII e o tratamento de carácteres em C. Conversão de formatos com as instruções printf e scanf.
2004-03-08
Operações e operadores relacionais em C. Definição de funções em C: codificação do maior de dois números. Operadores aritméticos. Introdução às expressões condicionais e codificação de alguns exemplos: potências, conversão entre maiúsculas e minúsculas.
2004-03-11
Tipos de dados nativos: int, long, float, double, char. Conversão entre tipos de dados. Pequena introdução aos arrays: armazenamento em memória, declaração, exercícios com vectores de inteiros.
2004-03-15
O modelo de dados Stack: exemplos, aplicações, implementação com arrays. As funções: push, pop, empty, top, init.
2004-03-18
Manipulação de vectores: declaração, inicialização, passagem de vectores como argumentos para funções, armazenamento em memória, indexação.
2004-03-22
Arrays com mais de uma dimensão: declaração, inicialização e manipulação. Resolução de alguns exercícios com matrizes: transposta, soma da diagonal, soma duma coluna, soma duma linha. Declaração e manipulação de strings.
2004-03-25
Introdução à procura em estruturas de dados: algoritmos de busca em arrays - busca linear.
2004-03-29
Ordenação de arrays: o algoritmo das trocas directas - bubblesort. Exemplificação da inserção ordenada em arrays.
2004-04-01
Introdução ao conceito de lista ligada. Os conceitos de ordem física e ordem lógica e o problema de manter várias ordens lógicas sobre a mesma ordem física.
2004-04-05
Implementação de listas ligadas sobre estruturas estáticas: inicialização, gestão das posições livres, inserção e actualização de informação.
2004-04-15
Estruturas variantes: armazenamento de expressões aritméticas. Definição de tipos com estruturas variantes. Exemplificação de uma implementação de listas ligadas sobre arrays. Introdução ao desenvolvimento modular de programas.
2004-04-19
Não foi leccionada para permitir a alunos e docentes a participação nas JOIN2004.
2004-05-10
Enterro da Gata.
2004-05-13
Enterro da Gata.
2004-05-20
Resolução do problema: "A Central de Encomendas da Telepizza"; definição das estruturas de dados; operações de inserção e de listagem.
2004-05-24
Listas ligadas duplamente ligadas: como inserir ordenadamente. Introdução às árvores binárias de procura.
2004-05-27
Algoritmos sobre árvores binárias de procura: inserção ordenada, travessias (inorder, posorder, preorder), cáulculos com acumulação e remoção.
2004-05-31
Implementação de "demolidores" de estruturas de dados: o problema da recolha de lixo.
2004-06-03
Fecho da disciplina. Conversa com os alunos sobre o programa leccionado, os objectivos que se pretenderam atingir e o que efectivamente aconteceu ao longo do semestre.
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos
Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes com número de elementos inferior ou superior a 3.
Na defesa do trabalho deverão estar presentes todos os elementos da equipe. A ausência durante a entrega e defesa do trabalho corresponde à nota 0. Situações devidamente justificadas poderão levar a uma posterior defesa do trabalho mas, individual.
Caso sejam detectadas situações fraudulentas, as equipes envolvidas (copiantes e copiados) terão a matrícula à disciplina anulada e FRAUDE como nota a ser lançada nas pautas que serão afixadas.
O Trabalho corresponderá a um problema que depois de devidamente analisado deverá ter a sua solução implementada em C.
A plataforma que será usada para testar o trabalho será a imagem Linux disponível nas máquinas da sala aberta do Departamento.
Será da inteira responsabilidade da equipe que apresenta o trabalho, o garantir que o mesmo está em condições de ser apresentado, antes da entrega. Durante a entrega não serão admitidos erros de compilação nem que a execução do trabalho "termine abruptamente sem explicações" antes do fim esperado.
A equipe, durante a entrega, deverá fazer-se acompanhar por um relatório, impresso em papel, do trabalho que está a apresentar. Esse relatório deverá ser criado em LaTeX? de acordo com um formato que será brevemente disponibilizado.
As entregas serão feitas por marcação prévia: na semana anterior à data de finalização do trabalho, serão colocadas, na Secretaria do Departamento, as folhas de marcação.
As folhas de marcação abarcarão vários dias e várias horas, divididos em slots de 20 minutos. É da responsabilidade da equipe a marcação de uma slot que não colida com aulas de outras disciplinas.
Este ano, irá vigorar a Lei do Buraco para as marcações: se no fim da semana em que decorreram as marcações houver algum slot livre, não será aceite mais nenhuma marcação para além daquelas que estejam registadas nas folhas.
A equipe deverá comparecer 15 minutos antes da hora marcada na sala onde se efectuará a entrega.
A falta a uma marcação implica nota 0 no trabalho em questão.
Os trabalhos práticos serão avaliados por patamares:
0 - não fizeram
4-8 - não compilou, rebentou durante a execução, ...
10 - cumpre os mínimos no limite (há coisas que não estão bem)
13 - cumpre bem os mínimos
16 - cumpre bem os requisitos propostos
19 - excede a proposta
Os patamares enunciados no ponto anterior são referências. O docente poderá decidir atribuir valores intermédios nalguns casos.
Acedem ao site e registam o vosso grupo: escolhem Registar e vão introduzir um username para o grupo e a password; depois fazem login com esse nome e password; introduzem um nome para o grupo (pode ser o que quiserem, usem a imaginação), um número, e um a um os elementos do grupo; no fim selecionam actualizar; por fim, para submeter o trabalho clicam no link em cima que diz "Submeter Trabalho", seleccionam o ficheiro que contem o trabalho no vosso disco ou disquete e fazem o "Submit".
Se um dia se esquecerem da password dirijam-se a nós. Não tentem registar-se mais do que uma vez.
O ficheiro do trabalho deverá estar em formato ZIP e deverá conter:
o ficheiro C do problema que resolveram, exemplo: 21fosforos.c
se resolveram mais de um problema, os outros ficheiros C, um por problema.
Se tiverem problemas a criar o ficheiro ZIP qualquer docente da disciplina vos poderá ajudar ou até os técnicos do primeiro piso (o Jaime, o João ou a Carla).
Este trabalho prático tem como principais objectivos:
familiarização com o computador em ambiente linux, e com algumas ferramentas de apoio à programação, tais como um editor vi/emacs;
iniciação à codificação, na linguagem imperativa C, das estruturas de dados e dos algoritmos concebidos e à execução e teste e dos programas escritos;
introdução à documentação dos projectos de programação realizados usando o processador LaTeX.
Para o efeito,
esta folha contém seis enunciados, dos quais deverá resolver dois (poderá resolver mais mas só dois serão avaliados).
O relatório a elaborar, deve ser claro e sucinto e, além do respectivo enunciado e da descrição do problema, deverá conter exemplos de utilização e o código do programa.
Como foi dito, o relatório terá de ser escrito em LaTeX sugerindo-se que adoptem o esqueleto proposto que pode ser descarregado a partir da página principal dos trabalhos práticos.
Enunciados
O Adivinho
Escreva um programa em C que adivinhe um número (a chave) entre 1 e 100 escolhido pelo utilizador.
Em cada tentativa, programa palpita um número e o utilizador indica se acertou,
ou então se é maior ou menor que a chave.
O jogo prossegue até o computador acertar, ou até se atingir um número N (dado) de tentativas.
O Adivinho Sofisticado
Escreva um programa em C que escolha (use o gerador de números aleatórios da linguagem C, rand()) um número (a chave) entre 1 e 100 que terá de ser adivinhado pelo utilizador.
Em cada tentativa, o utilizador introduz o número palpitado e o computador indica se acertou, ou então se é maior ou menor que a chave.
O jogo prossegue até o utilizador acertar, ou até atingir um número N (dado) de tentativas.
O Sabichão Matemático
Escreva um programa em C que escolha (use o gerador de números aleatórios da linguagem C, rand()) dois números (os operandos) entre 0 e 10 e, depois de os mostrar ao utilizador, pergunte o valor do produto.
Ao fim de N (dado) de tentativas, o computador indica o número de vezes que o utilizador levou para acertar.
Se quiser tornar o seu programa mais interessante, gere também aleatoriamente a operação (adição, multiplicação, subtracção ou divisão) que o utilizador deve fazer.
Dados da Sorte
Escreva um programa em C que simule o lançamento de 2 dados (use o gerador de números aleatórios da linguagem C, rand()) e indique ao fim de quantas jogadas é que ambas as faces sorteadas são iguais (ostentam o mesmo valor).
Dados da Sorte 2
Escreva um programa em C que simule o lançamento de 2 dados (use o gerador de números aleatórios da linguagem C, rand()) e indique ao fim de quantas jogadas é que a soma do valor sorteado em cada dado é um número par.
21 fósforos
Escreva um programa em C que implemente o jogo dos fósforos: no início há 21 fósforos sobre a mesa; em cada jogada, cada jogador deve retirar entre 1 e 4 fósforos, perdendo aquele que retirar o último.
A estratégia ganhadora é o segundo jogador retirar sempre a diferença para 5 do número retirado pelo primeiro jogador.
O seu programa deve dar a escolher ao utilizador qual dos dois começa a jogar e, caso o computador seja o segundo a jogar deverá ganhar sempre, se fôr o primeiro deverá ganhar se o utilizador cometer um erro de estratégia.
-- JoseCarlosRamalho - 27 Feb 2004
Este trabalho prático tem como principais objectivos:
familiarização com tipos de dados estruturados;
utilização de estruturas de controle em situações mais elaboradas;
incrementar os cuidados na validação dos dados introduzidos pelo utilizador.
Dos vários enunciados apresentados deverá escolher apenas um que deverá resolver e defender. Se tiver tempo, invista na qualidade melhorando e acrescentando funcionalidades extra à sua aplicação (use a imaginação).
O relatório a elaborar, deve ser claro e sucinto e, além do respectivo enunciado e da descrição do problema, deverá conter exemplos de utilização e o código do programa.
Como foi dito, o relatório terá de ser escrito em LaTeX? sugerindo-se que adoptem o esqueleto proposto que pode ser descarregado a partir da página principal dos trabalhos práticos.
Enunciados
Minesweeper
Implemente o conhecido jogo minesweeper.
Dado um tabuleiro m * n e um conjunto de p bombas (que o programa distribuirá aleatoriamente no tabuleiro), o objectivo do jogador é acertar em todas as casas do tabuleiro sem acertar nas bombas. As jogadas são realizadas da seguinte forma:
o jogador indica uma casa do tabuleiro;
se acertou numa bomba, perdeu!
se existe alguma bomba na vizinhança dessa casa (portanto, nas 8 casas circundantes), o programa deverá mostrar (nessa casa) o número de bombas que existem à sua volta;
se não existe nenhuma bomba na vizinhança, o programa deve realizar jogadas automaticamente para cada uma das 8 casas vizinhas, prosseguindo assim até já não haver mais casas nestas condições.
Joga da Forca
Implemente o jogo da forca. Nesta implementação, o programa deve pedir inicialmente a frase mistério com que vai jogar. Depois, mostra-a na forma de um mapa com a posição das letras em relação aos espaços.
Em cada uma das 6 tentativas (este número pode ser variável), o jogador vai fornecer uma letra que, caso exista na frase mistério, será substituída no mapa. No caso de não existir, deve ser apresentada, em todas as posteriores jogadas, numa zona de letras usadas em vão.
Como resultado final, o computador deve mostar sempre a frase mistério indicando se o Jogador consegui descobrir todas as letras, ou se perdeu por ter esgotado as tentativas.
Opcionalmente, poderá tentar retirar a palavra (ou frase) aleatóriamente de um ficheiro. Uma vez que este trabalho terá um prazo mais apertado do que o que seria necessário para apresentar o funcionamento com ficheiros, está por sua conta para investigar os comandos fopen, fgets, fclose e relacionados.
Joga dos Provérbios
Implemente o jogo dos provérbios (é uma variante do jogo da forca descrito em cima). Nesta implementação, o programa deve pedir inicialmente a provérbio mistério com que vai jogar. Depois, mostra-o na forma de um mapa com a posição das letras em relação aos espaços.
No início do jogo, o jogador dispõe de um determinado saldo.
Em cada jogada, o jogador vai comprar uma letra ou tentar adivinhar o provérbio. No caso da letra, se esta existir no provérbio mistério, será substituída no mapa e o saldo do jogador decrementado, se não existir, deve ser apresentada, em todas as posteriores jogadas, numa zona de letras usadas em vão. No caso do jogador acertar no provérbio, o seu saldo será incrementado pelo valor das letras ainda não compradas e presentes no provérbio. Se falhar ao adivinhar, o seu saldo será decrementado pelo valor correspondente ao das letras ainda em jogo.
Como resultado final, o computador deve mostar sempre o provérbio mistério indicando se o Jogador conseguiu descobrir todas as letras, ou se perdeu por ter esgotado as tentativas.
O jogo termina quando o saldo do jogador se tornar negativo ou quando este decidir abandonar o jogo.
Opcionalmente, poderá tentar retirar o provérbio aleatóriamente de um ficheiro. Uma vez que este trabalho terá um prazo mais apertado do que o que seria necessário para apresentar o funcionamento com ficheiros, está por sua conta para investigar os comandos fopen, fgets, fclose e relacionados.
Este trabalho prático tem como principais objectivos:
familiarização com tipos de dados dinâmicos;
armazenamento de informação em memória secundária;
incrementar os cuidados na validação dos dados introduzidos pelo utilizador;
introduzir o aluno ao desenvolvimento de sistemas de informação.
Dos vários enunciados apresentados deverá escolher apenas um que deverá resolver e defender. Se tiver tempo, invista na qualidade melhorando e acrescentando funcionalidades extra à sua aplicação (use a imaginação).
O relatório a elaborar, deve ser claro e sucinto e, além do respectivo enunciado e da descrição do problema, deverá conter exemplos de utilização e o código do programa.
Como foi dito, o relatório terá de ser escrito em LaTeX? sugerindo-se que adoptem o esqueleto proposto que pode ser descarregado a partir da página principal dos trabalhos práticos.
Enunciados
Gestor Bibliográfico
Neste projecto, pretende-se que o aluno desenvolva uma plataforma de suporte a uma base de dados bibliográfica tipo BibTeX? , ou seja, o sistema de informação será composto por uma lista de registos. Um registo destes pode ser de um de vários tipos. Os vários tipos e a respectiva estrutura descrevem-se a seguir.
article
artigo publicado em revista; tem os seguintes campos obrigatórios: lista de autores, título, nome da revista e ano; e tem os seguintes campos opcionais: volume, número, páginas, mês e nota descritiva.
book
campos obrigatótios: lista de autores ou de editores, título, editora, ano; campos opcionais: volume ou número, série, edição, mês e nota descritiva.
inbook
capítulo de um livro; campos obrigatórios: lista de autores ou de editores, título, capítulo ou páginas, editora, ano; campos opcionais: volume ou número, série, edição, mês e nota descritiva.
inproceedings
artigo publicado nas actas de uma conferência; campos obrigatórios: lista de autores, título, título das actas, ano; campos opcionais: editor, volume ou número, série, páginas, edição, mês e nota descritiva.
masterthesis
tese de mestrado; campos obrigatórios: autor, título, instituição, ano; campos opcionais: mês e nota descritiva.
misc
Este tipo deverá ser usado para todas as entradas que não sejam classificáveis num dos outros tipos, por exemplo referências da Internet; campos obrigatórios: nenhum; campos opcionais: lista de autores, título, meio de publicação, mês, ano e nota descritiva.
phdthesis
tese de doutoramento; campos obrigatórios: autor, título, instituição, ano; campos opcionais: mês e nota descritiva.
proceedings
Actas de Conferência; campos obrigatórios: título e ano; campos opcionais: lista de editores, volume ou número, série, editora, nota descritiva, mês e organização.
techreport
Relatório Técnico; campos obrigatórios: lista de autores, título, instituição e ano; campos opcionais: número, mês e nota descritiva.
A aplicação a desenvolver deverá ter os seguintes requisitos:
No incício de uma sessão, o programa deverá carregar os registos bibliográficos de um ficheiro chamado "BIB.DAT".
No fim da sessão, os registos deverão ser gravados no mesmo ficheiro para que o estado da plicação seja preservado entre sessões.
A aplicação deverá disponibilizar as seguintes operações ao utilizador:
Inserção de um registo.
Consulta de um registo (por chave de citação)
Remoção de um registo (por chave de citação), a aplicação deverá mostrar o registo e pedir uma confirmação ao utilizador antes do registo ser removido.
Listagem (por ordem alfabética de título).
Listagem (por ordem alfabética de autor), para cada autor apresenta a sua lista de publicações ordenadas alfabeticamente por título (esta operação é um extra).
Listagem (por ordem alfabética de título em que estes estão agrupados por tipo).
Gravar, em qualquer momento o utilizador poderá solicitar a gravação dos dados em memória para um determinado ficheiro (diferente do "BIB.DAT").
Carregar, permite recuperar um estado anterior da aplicação (de um ficheiro qualquer fornecido pelo utilizador mas que obedeça à estrutura estabelecida para o repositório).
Outras operações que a sua imaginação puder fornecer...
Sugere-se que comece por desenvolver a aplicação nestas etapas:
Decidir quais as estruturas de dados que irão suportar a informação em memória central (listas ligadas, esquemas de ordenação ...).
Definição dos tipos de dados
Implementação das funções para manipulação das estruturas de dados
Implementação das funções de IO (apresentação e interacção com o utilizador)
Divirta-se ...
Agência Matrimonial
Neste projecto, pretende-se que o aluno desenvolva uma aplicação para gerir uma agência matrimonial/encontros. A aplicação irá tentar usar uma função de semelhança parametrizada pelo utilizador para encontrar uma pessoa ou lista de pessoas compatíveis com um determinado perfil. Para isso, é necessário criar uma base de dados de indívíduos onde ficará registado o perfil de cada indivíduo. O sistema terá dois modos de funcionamento: um para o administrador e outro para o utilizador normal. Mais à frente será descrito em mais pormenor o comportamento de cada um.
Um indivíduo é registado na base de dados com os seguintes campos de informação:
Código
o sistema deverá atribuir automaticamente um código a cada indivíduo que se regista; este código serve para identificar univocamente o indivíduo noutras operações.
Nome
o indivíduo é registado com o seu nome verdadeiro, opcionalmente poderá adoptar um pseudónimo que será visualizado pelo utilizador em vez do seu nome.
Sexo
Masculino ou Feminino. Data de Nascimento: data em formato ANSI: aaaa-mm-dd (a validação é um extra). Lista de Contactos: morada, email, telefone, telemóvel, ... São todos opcionais tendo, no entanto, que ser preenchido pelo menos um (a lista não pode ser vazia).
Profissão
lista de actividades que desenvolve profissionalmente.
Habilitações
lista de cursos e graus que detem. Lista de Preferências/Hábitos: actividades desportivas, hábitos tabágicos, hábitos culturais (música, leitura, teatro, cinema, ...), hábitos noturnos (pub, disco, ...), hábitos televisivos (informação, filmes, telenovelas, concursos, ...).
Objectivos
Procura um Amigo, Encontro, Compromisso com vista a casamento, ...
No acto do registo, o utente deverá ter a possibilidade de indicar, para cada item de informação, se este é visível para todos os utilizadores ou apenas para o administrador.
A aplicação a desenvolver deverá disponibilizar duas interfaces: a do administrador e a do utente.
Na interface do administrador deverão estar disponíveis as seguintes operações:
Inserção de um indivíduo - o administrador poderá inserir indivíduos, por exemplo, durante as consultas.
Remoção de um indivíduo (por código) - só o administrador poderá fazer remoções; esta operação deverá mostrar o registo que irá ser apagado e solicitar a confirmação, só então procederá à remoção efectiva.
Consulta dos dados relativos a um indivíduo (por código) - esta operação deverá mostrar a informação completa de um registo.
Listagem por ordem alfabética de nome - esta operação deverá apresentar o código, o nome e respectivo pseudónimo (se existir) de todos os indivíduos.
Listagem por ordem cronológica de nascimento - esta operação deverá apresentar o código, o nome e a idade respectiva de cada indivíduo.
Procurar perfil compatível - esta operação recebe como argumento o código de um indivíduo e, baseada numa outra função que entra em linha de conta com pesos e desvios dos vários parâmetros, dá uma lista de indivíduos ordenada do mais compatível para o menos compatível.
Procurar perfil - esta operação é semelhante à anterior só a função que determina a semelhança é definida pelo utilizador; é apresentada uma interface que permite definir domínios de valores e pesos para cada parâmetro.
Gravar - esta operação grava em ficheiro, "AGENCIA.DAT", o estado actual da Base de Dados.
Carregar - esta operação permite num determinado momento carregar uma Base de Dados previamente gravado em ficheiro; antes de carregar a nova informação o utilizador deverá ser interrogado sobre se quer limpar a informação que existe em memória ou se quer fazer o "merge" da informação (esta funcionalidade é um extra).
Na interface do utilizador normal estão disponíveis as mesmas operações, à excepção da remoção, só que apenas serão mostrados os dados marcados como não confidenciais.
Se o utilizador da aplicação, administrador ou utente, nada indicar, a aplicação deverá sempre carregar a informação de "AGENCIA.DAT" no início e gravar a informação em "AGENCIA.DAT" antes de terminar.
Não tente fazer nenhum destes enunciados de uma só vez, faça-o incrementalmente e comece por definir as estruturas de dados e a operação de inserção.
Divirta-se
Trabalho Prático Nº1 Objectivos e Organização Este trabalho prático tem como principais objectivos : familiarização com o computador em ambiente linux , e ...
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos 1 Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes ...
Resultados de Exames, Correcções e TPS 2004/2005 Notas práticas: Notas Finais (1ª Época): http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF 2003 ...
Ficha Nº1 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
Programa da Disciplina: Paradigmas de Programa o II Licenciatura em Matem tica e Ci ncias da Computa o 1 ano Iacute;ndice Remissivo 1.Introdu o Programa ...
Repositório Anárquico de Enunciados Cálculo da Tabuada Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação), de 1 a 10 ...
Avaliação A avaliação tem duas componentes, uma teória e uma prática. A componente teórica corresponderá à melhor nota obtida em exame e a componente prática à média ...
Ficha Nº3 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de vectores e matrizes em C. As strings são casos ...
Ficha Nº10: Estruturas de Dados Dinâmicas Árvores Binárias Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de ...
Resolução da Ficha Prática 1 Exercício 1: O maior de 2 números #include int main( ) { int a, b; printf("Primeiro número: \n"); scanf("%d", a); printf("Segundo ...
/ title: Ano Lectivo 2003/04 Resolução da Ficha nº2 ficheiro: pp203resf02.c autor: PRH versao de: 2004.03.15 .uso do printf() e do scanf() .uso de condicoes .uso ...
Sumários do ano lectivo 2003/2004 Aulas Teóricas (LMCC) 2004 02 26: Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da ...
Ficha Nº9: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Ficha Nº8: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Trabalho Prático III TPs: Gestor Bibliográfico; Agência Matrimonial. Objectivos e Organização Este trabalho prático tem como principais objectivos: familiariza ...
Ficha Nº7: Ficheiros e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de ficheiros e definição de tipos estruturados ...
Ficha Nº6: Arrays e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de algoritmos mais avançados de busca e ordena ...
Ficha Nº4 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de matrizes em C. As strings são casos particulares ...
Ficha Nº5: Busca e Ordenação de Arrays Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização dos algoritmos tradicionais de busca ...
Trabalho Prático II Objectivos e Organização Este trabalho prático tem como principais objectivos: familiarização com tipos de dados estruturados; utiliza ...
Regras para a submissão dos Trabalhos Práticos Este ano, todos os trabalhos terão de ser enviados electronicamente através do site: http://labdotnet.di.uminho.pt/submitPP2 ...
TWiki.Education/PP2 Web Preferences The following settings are web preferences of the TWiki.Education/PP2 web. These preferences overwrite the site level preferences ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/PP2 web. This is a convenient service, so you do not have ...
Ficha Nº2 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
Avaliação A avaliação tem duas componentes, uma teória e uma prática. A componente teórica corresponderá à melhor nota obtida em exame e a componente prática à média ...
Ficha Nº1 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
Ficha Nº10: Estruturas de Dados Dinâmicas Árvores Binárias Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de ...
Resolução da Ficha Prática 1 Exercício 1: O maior de 2 números #include int main( ) { int a, b; printf("Primeiro número: \n"); scanf("%d", a); printf("Segundo ...
Ficha Nº2 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
/ title: Ano Lectivo 2003/04 Resolução da Ficha nº2 ficheiro: pp203resf02.c autor: PRH versao de: 2004.03.15 .uso do printf() e do scanf() .uso de condicoes .uso ...
Ficha Nº3 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de vectores e matrizes em C. As strings são casos ...
Ficha Nº4 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de matrizes em C. As strings são casos particulares ...
Ficha Nº5: Busca e Ordenação de Arrays Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização dos algoritmos tradicionais de busca ...
Ficha Nº6: Arrays e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de algoritmos mais avançados de busca e ordena ...
Ficha Nº7: Ficheiros e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de ficheiros e definição de tipos estruturados ...
Ficha Nº8: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Ficha Nº9: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Programa da Disciplina: Paradigmas de Programa o II Licenciatura em Matem tica e Ci ncias da Computa o 1 ano Iacute;ndice Remissivo 1.Introdu o Programa ...
Repositório Anárquico de Enunciados Cálculo da Tabuada Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação), de 1 a 10 ...
Resultados de Exames, Correcções e TPS 2004/2005 Notas práticas: Notas Finais (1ª Época): http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF 2003 ...
Sumários do ano lectivo 2003/2004 Aulas Teóricas (LMCC) 2004 02 26: Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da ...
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos 1 Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes ...
Regras para a submissão dos Trabalhos Práticos Este ano, todos os trabalhos terão de ser enviados electronicamente através do site: http://labdotnet.di.uminho.pt/submitPP2 ...
Trabalho Prático Nº1 Objectivos e Organização Este trabalho prático tem como principais objectivos : familiarização com o computador em ambiente linux , e ...
Trabalho Prático II Objectivos e Organização Este trabalho prático tem como principais objectivos: familiarização com tipos de dados estruturados; utiliza ...
Trabalho Prático III TPs: Gestor Bibliográfico; Agência Matrimonial. Objectivos e Organização Este trabalho prático tem como principais objectivos: familiariza ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/PP2 web. This is a convenient service, so you do not have ...
TWiki.Education/PP2 Web Preferences The following settings are web preferences of the TWiki.Education/PP2 web. These preferences overwrite the site level preferences ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/PP2 web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Format: <space><space><space>, followed by: * Main.yourWikiName (if you want that the e-mail address in your home page is used) * Main.yourWikiName - yourEmailAddress (if you want to specify a different e-mail address) * Main.anyTWikiGroup (if you want to notify all members of a particular TWikiGroup)
Related topics:TWikiUsers, TWikiRegistration
The following settings are web preferences of the TWiki.Education/PP2 web. These preferences overwrite the site-level preferences in TWikiPreferences, and can be overwritten by user preferences (your personal topic, i.e. TWikiGuest in the TWiki.Main web)
Preferences:
Set WEBTITLE = Paradigmas da Programação II
List of topics of the TWiki.Education/PP2 web:
Web specific background color: (Pick a lighter one of the StandardColors)
If yes, set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. Education/PP2.Topic links.
Set SITEMAPLIST = on
Set SITEMAPWHAT = Paradigmas da Programação 2
Set SITEMAPUSETO = ...collaborate on
Exclude web from a web="all" search: (Set to on for hidden webs)
Set NOSEARCHALL =
Default template for new topics and form(s) for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
Web preferences that are not allowed to be overridden by user preferences:
Set FINALPREFERENCES = WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
Notes:
A preference is defined as: 6 spaces * Set NAME = value Example:
Set WEBBGCOLOR = #33CCFF
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #33CCFF .
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce new preferences variables and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
TWiki's Education/PP2 web
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2
The Education/PP2 web of TWiki. TWiki is a Web-Based Collaboration Platform for the Corporate World.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/PP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2
/twiki/pub/Main/LocalLogos/um_eengP.jpgWebSearchAdvanced
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/WebSearchAdvanced
(last changed by TWikiGuest)2007-05-17T14:51:38ZguestWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/WebHome
Paradigmas de Programação II 1ºano da LMCC e LESI 2004/2005 Equipe Docente: José João Almeida João Alexandre Saraiva Novidades ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:24ZJoseBacelarAlmeidaTrabalhosPraticosTP1
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosTP1
Trabalho Prático Nº1 Objectivos e Organização Este trabalho prático tem como principais objectivos : familiarização com o computador em ambiente linux , e ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:24ZJoseBacelarAlmeidaTrabalhosPraticosRegulamento
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosRegulamento
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos 1 Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaTrabalhosPraticos
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticos
Trabalhos Práticos Regulamento. Relatório: Sugere se LaTeX mini manual html de LaTeX fazer download do esqueleto ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaResultados
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/Resultados
Resultados de Exames, Correcções e TPS 2004/2005 Notas práticas: Notas Finais (1ª Época): http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF 2003 ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaRepositorioProblemas
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/RepositorioProblemas
Repositório Anárquico de Enunciados Cálculo da Tabuada Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação), de 1 a 10 ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaProgramaDetalhado
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/ProgramaDetalhado
Programa da Disciplina: Paradigmas de Programa o II Licenciatura em Matem tica e Ci ncias da Computa o 1 ano Iacute;ndice Remissivo 1.Introdu o Programa ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaNovasPP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/NovasPP2
Notas finais, após o exame de recurso Notas finais http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF (Pequenas correcções nas ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaWebLeftBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/WebLeftBar
Web Web Home Changes Index Search Webs (last changed by ArthurClemens)2004-08-16T09:01:46ZArthurClemensSumariosPP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/SumariosPP2
Sumários do ano lectivo 2003/2004 Aulas Teóricas (LMCC) 2004 02 26: Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da ... (last changed by JoseCarlosRamalho)2004-06-15T16:31:00ZJoseCarlosRamalhoFichasPraticasFicha8Res
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/FichasPraticasFicha8Res
Makefile prog.exe : prog.o lista.o gcc o prog.exe prog.o lista.o prog.o : prog.c lista.h gcc c prog.c lista.o : lista.h lista.c gcc c lista.c lista ... (last changed by JoseCarlosRamalho)2004-05-20T18:20:15ZJoseCarlosRamalhoFichasPraticasFicha9
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/FichasPraticasFicha9
Ficha Nº9: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ... (last changed by JoseCarlosRamalho)2004-05-18T01:04:00ZJoseCarlosRamalhoFichasPraticasFicha8
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/FichasPraticasFicha8
Ficha Nº8: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ... (last changed by JoseCarlosRamalho)2004-05-04T09:54:00ZJoseCarlosRamalhoTrabalhosPraticosTP3
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosTP3
Trabalho Prático III TPs: Gestor Bibliográfico; Agência Matrimonial. Objectivos e Organização Este trabalho prático tem como principais objectivos: familiariza ... (last changed by JoseCarlosRamalho)2004-05-02T11:00:00ZJoseCarlosRamalhoTrabalhosPraticosTP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosTP2
Trabalho Prático II Objectivos e Organização Este trabalho prático tem como principais objectivos: familiarização com tipos de dados estruturados; utiliza ... (last changed by JoseCarlosRamalho)2004-03-17T10:03:14ZJoseCarlosRamalho
A avaliação tem duas componentes, uma teória e uma prática. A componente teórica corresponderá à melhor nota obtida em exame e a componente prática à média aritmética obtida nos trabalhos práticos.
Em ambas as partes a nota mínima obrigatória é 7,5 valores.
A nota final é dada pela fórmula que se apresenta a seguir.
Somatório( Teórico * 60% , Prático * 40% )
-- JoseCarlosRamalho - 23 Feb 2004
O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos e com as estruturas de controlo da linguagem C.
Para atingir esse fim, o aluno irá desenvolver pequenos algoritmos e tentar codificá-los em C.
Exercícios:
Exercício Nº1: O Maior de 2 Números
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê dois inteiros e escreve o maior deles.
Exercício Nº2: O Maior de N Números
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê N inteiros e escreve o maior deles.
Exercício Nº3: Números Pares
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um determinado número inteiro N e escreve os números pares até N.
Exercício Nº4: Potências
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê 2 números inteiros, a e b, e escreve o resultado de elevar a à potência de b (utilize estruturas cíclicas para calcular o valor da potência).
Exercício Nº5: Factorial
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um inteiro positivo e escreve o valor do seu factorial.
Exercício Nº6: Tabela de Conversão de Temperaturas
Considere a seguinte fórmula:Fahreneit = 32 + (1.8 * Celsius)
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que calcula uma tabela de conversão entre graus Celsius e graus Fahreneit com Fahreneit a variar entre 0 e 300 (considere intervalos de 5 graus).
-- JoseCarlosRamalho - 25 Feb 2004
Ficha Nº10: Estruturas de Dados Dinâmicas - Árvores Binárias
Objectivos:
O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados dinâmicas, nomeadamente, as árvores binárias.
Exercícios:
Exercício Nº 1: Árvores Binárias Ordenadas de Inteiros
Considere uma lista de inteiros (não se sabe o seu comprimento). Especifique então as seguintes funções e estruturas de dados:
Defina os tipos necessários para suportar uma árvore binária ordenada (de procura) de inteiros.
Especifique uma função para inserir um valor na árvore.
Especifique uma função para listar os valores armazenados (codifique as três funções de listagem possíveis).
Especifique uma função para procurar um valor na árvore (como resultado deverá devolver um apontador para o elemento ou NULL caso não o encontre).
Especifique uma função para contar os elementos da árvore.
Especifique uma função para calcular o maior elemento na árvore.
Especifique um programa, usando as funções definidas, que cria uma lista com os múltiplos de 7 entre 0 e 100 e os lista por ordem decrescente e crescente.
Especifique uma função que calcula o peso de uma árvore (a sua profundidade).
Especifique uma função que dada uma árvore, a lista por níveis.
Exercício Nº 2: Gestão do Login dos Utilizadores de uma Aplicação
Para controlar o acesso a uma aplicação informática, pretende-se manter em memória o conjunto dos pares "Username-Password"
de todos os Utilizadores autorizados.
Usando uma Árvore Binária de Procura para armazenar essa informação e após definir os tipos de variáveis em C,
necessários para suportar essa representação, implemente as seguintes operações na linguagem C:
"valida": função booleana que diz se o par "username-password" corresponde a um utilizador válido.
"daSenha": função que retorna a password de um dado username.
"listaTodos": procedimento que faz uma listagem ordenada alfabeticamente de todos os pares "Username-Password" válidos.
"insere": função que recebe um novo par "Username-Password" e a Árvore com o conjunto de utilizadores actuais e devolve uma nova Árvore com o novo par inserido na follha correcta.
Exercício Nº 3: Árvores Binárias para Expressões Aritméticas (+,-,*,/)
Defina a estrutura de dados para uma árvore binária que irá armazenar expressões aritméticas, operadores nos nodos intermédios armazenados de acordo com a sua prioridade de cálculo e operandos (números reais) nas folhas.
Especifique uma função que dada uma árvore deste tipo lista a expressão na forma: infixa, pré-fixa, pós-fixa.
Especifique uma função que dada uma árvore deste tipo calcula o valor da expressão lá armazenada.
Exercício Nº 4: Dicionários
Pretende-se criar um dicionário que associe a cada palavra (termo chave), a sua classificação morfológica, origem, significado e sinónimos.
O programa a desenvolver para manipulação do dicionário (suponha que o mesmo foi criado por uma outra aplicação), além de facultar uma consulta eficiente (dada uma palavra retorna toda a informação associada, ou produz uma mensagem de falha, caso não haja nenhuma chave igual à palavra dada), deve permitir listar globalmente toda a informação contida, ordenada alfabeticamente pelos termos-chave, e deve ser capaz de ler e salvar o dicionário em ficheiro binário.
Defina a estrutura de dados para armazenar cada entrada (par "termo-chave,informação-associada").
Implemente o dicionário num array ordenado de entradas.
Implemente o dicionário numa lista ligada dinâmica e ordenada de entradas.
Implemente o dicionário usando sub-lista ligadas dinâmica e ordenada de entradas cada lista correspondente a 1 das 26 letras do alfabeto, acessiveis através de um indíce guardado em Árvore Binária de Procura (em alternativa, armazene-o num array).
#include <stdio.h>
int main( ) {
int a, b;
printf("Primeiro número: \n");
scanf("%d", &a);
printf("Segundo número: \n";
scanf("%d", &b);
printf("O maior número é o %d\n", a>b?a:b);
return 0;
}
Exercício 2: O maior de N números
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0, conta;
int num, max;
printf("Indique quantos números vai introduzir: ");
while (N<=0) {
scanf("%d",&N);
}
printf("Escreva o próximo número: ");
scanf("%d",&num);
max = N;
for (conta=N-1; conta>0; conta--) {
printf("Escreva o próximo número: "); scanf("%d",&num);
if (num > max) {
max = num;
}
}
printf("\nO Maior dos %d numeros introduzidos e: %d \n",N,max);
return 0;
}
Exercício 3: Números pares
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
int par;
printf("Indique o limite superior para os números pares a gerar (imprimir): ");
scanf("%d",&N);
for (par=2; par<=N; par=par+2) {
printf("O próximo Numero Par e: %d \n",par);
}
printf("Ja nao ha mais Numeros Pares menores ou iguais a %d \n",N);
return 0;
}
Exercício 3: Números pares (outra solução)
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
int par, conta;
printf("Indique quantos números pares quer gerar (imprimir): ");
while (N <= 0) {
scanf("%d",&N);
}
conta=0;
while (conta < N) {
conta++;
par = 2*conta;
printf("O próximo Numero Par e: %d \n",par);
}
printf("Ja foram gerados os %d primeiros Numeros Pares \n",N);
return 0;
}
Exercício 4: Potências (de base A e expoente B)
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int A,B;
int pot;
printf("Escreva a Base e o Expoente (inteiro e nao-negativo): ");
scanf("%d %d",&A,&B);
pot = 1;
if (B >= 0) {
while (B) /* equivalente a (B>0) */
{
pot = pot*A;
B--; /* ou seja, B = B-1 */
}
printf("A potencia %d elevado a %d e igual a %d \n",A,B,pot);
} else {
printf("\n O expoente tem de ser um Numero Inteiro Nao-Negativo \n");
}
return 0;
}
Exercício 5: Factorial
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
int fact=1;
printf("Indique o Numero cujo Factorial quer calcular (inteiro e positivo): ");
while (N<=0) {
scanf("%d",&N);
}
while (N) {
fact = fact*N;
N--;
}
printf("O Factorial do numero dado e: %d \n",fact);
return(0);
}
Exercício 5: Factorial: solução recursiva
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
int N=0;
printf("Indique o Numero cujo Factorial quer calcular (inteiro e positivo): ");
while (N<=0) {
scanf("%d",&N);
}
printf("O Factorial do numero dado e: %d \n",factorial(N));
return(0);
}
int factorial(int a) {
if (a <= 1) return 1;
else return a * factorial(a - 1);
}
Exercício 6: Conversão Celsius para Fahreneit
#include <stdio.h>
/*----- programa principal -----*/
int main( ) {
float Celsius;
int Fahr;
for (Fahr=0; Fahr<=300; Fahr += 5) {
printf("%5d Fhareneit ==> %6.1f \n", Fahr, ((Fahr-32.0)/1.8));
N--;
}
return 0;
}
O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos e com as estruturas de controlo da linguagem C.
Nesta ficha, introduz-se também o conceito de subrotina ou função em C como método para repartir um problema em problemas mais pequenos.
Para atingir esse fim, o aluno irá desenvolver pequenos algoritmos e tentar codificá-los em C.
Desenvolva o algoritmo, e posteriormente codifique-o em C, de um programa que lê um inteiros e escreve no écran os seus divisores.
Exercício Nº2: Maior Divisor Comum
Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter dois argumentos inteiros e produzir um resultado inteiro que é o maior divisor comum dos argumentos recebidos. Posteriormente codifique um programa principal (main()) que utiliza esta função para cálculo do maior divisor comum de dois números fornecidos pelo utilizador.
Ver Algorítmo de Euclides
Que pode ser resumido em:
Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter dois argumentos inteiros e produzir um resultado inteiro que é o menor múltiplo comum dos argumentos recebidos. Posteriormente codifique um programa principal (main()) que utiliza esta função para cálculo do menor múltiplo comum de dois números fornecidos pelo utilizador.
Exercício Nº4: É Primo?
Desenvolva o algoritmo, e posteriormente codifique-o em C como uma função. A sua função deverá ter um argumento inteiros e produzir um resultado do tipo booleano (o docente irá desenvolver uma pequena biblioteca de booleanos: bool.h). O resultado será verdadeiro (TRUE) se o argumento passado fôr primo e falso (FALSE) caso contrário. Posteriormente codifique um programa principal (main()) que utiliza esta função para verificar quem é primo numa sequência de inteiros introduzidos pelo utilizador (terminada por 0).
Exercício Nº5: Tudo ao contrário!
Foste transferido para uma nova escola.
Nessa escola, a professora e matemática gostava muito de pôr os alunos a pensar e tentava que a mais simples tarefa fosse algo em que o raciocínio tivesse que intervir.
Uma das medidas que ela implementou foi a de utilizar os números inteiros invertidos. Por exemplo, o 12 seria 21 e o 1821 seria 1281.
Ora, os alunos locais já estão habituados a lidar com os inteiros daquela maneira e até fazem as operações de adição e subtracção com os inteiros naquela forma. No entanto, para ti, que acabaste de chegar à escola esta tarefa não é tão simples.
Assim, resolveste criar um programa em computador que fizesse três coisas:
dado um número calcula o seu inverso (o valor inteiro correcto)
dados dois números na forma invertida calcula a sua soma e devolve o resultado na mesma forma invertida
dados dois números na forma invertida calcula a sua subtracção e devolve o resultado na mesma forma invertida
Sugestão: especifica uma função para cada um dos pontos acima.
Exercício Nº6: Sequência de Fibonacci
Codifica um programa que gere os primeiros 20 números de Fibonacci. Os números de Fibonacci são definidos recursivamente da seguinte forma:
/**
title: Ano Lectivo 2003/04 -- Resolução da Ficha nº2
ficheiro: pp203resf02.c autor: PRH versao de: 2004.03.15
.uso do printf() e do scanf()
.uso de condicoes
.uso de ciclos diversos
**/
Divisores de um número (Ficha nº2 - Exercício 1)
/**
title: Divisores de um número (Ficha nº2 - Exercício 1)
**/
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int num=0, divisor;
printf("Escreva o número cujos divisores quer calcular: ");
while (num<=0) { scanf("%d",&num); }
printf("Lista dos Divisores de %d:\n",num);
for (divisor=1; divisor<=num; divisor++)
{
if ((num%divisor)==0) { printf("%d\n",divisor); }
}
return(0);
}
Divisores de um número -- 2ª versão, optimizada (Ficha nº2 - Exercício 1)
/**
title: Divisores de um número -- 2ª versão, optimizada (Ficha nº2 - Exercício 1)
**/
#include <stdio.h>
#include <math.h>
/*----- programa principal -----*/
int main( )
{int num=0, divisor, lim;
printf("Escreva o número cujos divisores quer calcular: ");
while (num<=0) { scanf("%d",&num); }
printf("Lista dos Divisores de %d:\n",num);
lim = (int)sqrt((double)num);
for (divisor=1; divisor<=lim; divisor++)
{
if ((num%divisor)==0) { printf("um par de divisores é %d e %d\n",divisor, num/divisor); }
}
return(0);
}
Menor Múltiplo Comum de dois números (Ficha nº2 - Exercício 3)
/**
title: Menor Múltiplo Comum de dois números (Ficha nº2 - Exercício 3)
**/
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int N,M,MMC;
int maior;
printf("Indique os números cujo MMC quer calcular: ");
scanf("%d%d",&N,&M);
MMC = maior = (N>=M)? N: M;
while (((MMC%N)!=0)||((MMC%M)!=0))
{
MMC += maior;
}
printf("O Menor Multiplo Comum entre %d e %d é: %d \n",N,M,MMC);
return(0);
}
Tudo ao contrário, ou "Números Invertidos" (Ficha nº1 - Exercício 5)
/**
title: Tudo ao contrário, ou "Números Invertidos" (Ficha nº1 - Exercício 5)
**/
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int orig= -1;
int inverte;
printf("Indique o Numero Original (>=0) que quer inverter: ");
while (orig<0) { scanf("%d",&orig); }
inverte = 0;
while (orig)
{
proxdig = orig%10;
orig = orig/10;
inverte = inverte*10 + proxdig;
}
printf("O numero invertido e: %d \n",inverte);
return(0);
}
Os N primeiros Números de Fibonacci (Ficha nº2 - Exercício 6)
/**
title: Os N primeiros Números de Fibonacci (Ficha nº2 - Exercício 6)
**/
#include <stdio.h>
#define MAX 20
/*----- função de Fibonacci -----*/
int fib( int n )
{int f;
if ((n==0)||(n==1))
{ f = 1; }
else { f = fib(n-1) + fib(n-2); }
return(f);
}
/*----- programa principal -----*/
int main( )
{int N;
int res;
printf("Os %d primeiros números de FIBONACCI são: \n",MAX);
for ( N=0; N<MAX; N++ )
{
res = fib(N);
printf("%6d \n",res);
}
return(0);
}
O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de vectores e matrizes em C. As strings são casos particulares de arrays: uma string é um array em que os elementos são todos do tipo char. Assim, nesta ficha surgem também alguns exercícios envolvendo manipulação de strings.
Especifique um programa e codifique-o em C que lê 10 números inteiros positivos e escreve:
a sua média e o valor máximo;
os numeros maiores que a média;
a quantidade de números menores que a média;
Exercício Nº2: Capicua
Especifique uma função que recebe uma string e verifica se a mesma é capicua (lida da esquerda para a direita, ou da direita para a esquerda, é a mesma palavra/frase).
Exemplos típicos: ala ou rapar.
Um caso curioso (e, claro, mais complexo) é a seguinte Capicua brasileira: Socorram-me subi no onibus em Marrocos.
Exercício Nº3: Conversão Romano-Árabe
Especifique uma função que recebe uma string contendo um número escrito em notação romana e que dá como resultado o respectivo valor inteiro (correspondente à notação arábica).
Exercício Nº4: Cifra por substituição arbitrária
Considere a cifra (palavra-chave) constituída pelas letras "SAPO" seguidas de um dígito n (entre 0 e 9). Para a cifragem (codificação) da mensagem efectuam-se os seguintes passos:
reduzem-se espaços seguidos a um único espaço e mantém-se os caracteres de pontuação;
os digitos rodam-se (circularmente) para a direita da quantidade n;
convertem-se todas as letras em maiúsculas ou minúsculas;
considera-se a seguinte tabela de codificação:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
S
A
P
O
B
C
D
E
F
G
H
I
J
K
L
M
N
Q
R
T
U
V
W
X
Y
Z
A construção desta tabela limita-se a colocar a palavra chave no início e completar com as restantes letras do alfabeto, não colocando as letras que se repetem.
para a codificação, substitui-se cada um dos carácteres da primeira linha pelo carácter correspondente da segunda linha.
Construa um programa que dada uma cifra, codifique a mensagem, e um outro que, dada a mensagem cifrada e a cifra, descodifique a mensagem.
Exercício Nº5: Estatísticas de texto
Crie um programa que leia todos os caracteres de um texto (até encontrar um o fimde ficheiro, eof) e que no fim indique quantas vezes apareceu cada
uma das 26 letras do alfabeto (considere maiúsculas iguais às minúsculas).
-- JoseCarlosRamalho - 09 Mar 2004
O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de matrizes em C. As strings são casos particulares de arrays: uma string é um array em que os elementos são todos do tipo char. Assim, nesta ficha surgem também alguns exercícios envolvendo manipulação de strings.
Exercícios:
Exercício Nº1: Média dos Alunos
Cada aluno de uma licenciatura em Ciências da Computação pode ter notas correspondentes a 10 disciplinas feitas durante o ano lectivo (caso não tenha sido avaliado positivamente a uma disciplina não terá essa nota).
Declare as estruturas de dados (o modelo) necessárias para suportar o sistema de informação: um aluno tem um número (inteiro), um nome (string) e uma lista de notas (reais).
Inicialize a estrutura de dados: na declaração e/ou numa função de inicialização que é chamada no início da função main().
Especifique um programa em C para calcular a média de cada aluno (faça uma função que dada a estrutura de dados principal e o identificador do aluno, produz como resultado a sua média).
Calcule a média geral da turma.
Calcule a média da turma em cada disciplina.
Calcule a percentagem de faltas (ausência de nota).
Exercício Nº2: Gestão de Armazens
Uma empresa tem 10 armazens e precisa de um programa que leia as vendas mensais dos 10 armazens, calcule a media de vendas e produza uma listagem dos armazens com vendas superiores à média calculada.
Exercício Nº3: Normalização de Espaços numa String
Especifique as seguintes funções:
Dada uma string, retira os espaços no fim da string.
Dada uma string, retira os espaços do início da string.
Dada uma string, substitui todas as sequências de um ou mais carácteres brancos (espaço ou TAB) no meio da string por um único espaço branco.
Exercício Nº4: Conversão Árabe-Romano
Especifique um programa em C que lê um inteiro e produz a string com o correspondente número em notação romana.
O objectivo principal desta ficha é familiarizar o aluno com a utilização dos algoritmos tradicionais de busca e ordenação de Arrays.
Exercícios:
Exercício Nº1: Inserção Ordenada
Voltando ao exercício da última ficha em que se geriam alunos e respectivas notas, implemente a operação correspondente à inserção de um novo aluno (faça a inserção ordenada desse aluno).
Este problema pode ser dividido em três fases:
Descobrir a posição onde o novo aluno deverá ser inserido;
Deslocar os elementos maiores uma posição para a frente;
Inserir o novo aluno na posição livre.
Exercício Nº2: Remoção
Especifique a operação de remoção de um aluno tendo o cuidado de deixar a estrutura ordenada e sem "buracos".
Exercício Nº3: Busca Dicotómica
Uma vez que a estrutura está ordenada a pesquisa pode ser optimizada. Implemente a pesquisa dicotómica sobre um array ordenado.
O objectivo principal desta ficha é familiarizar o aluno com a utilização de algoritmos mais avançados de busca e ordenação sobre Arrays. No fim, porpõem-se alguns exercícos envolvendo estruturas.
Exercícios:
Exercício Nº1: Estrutura Ligada
Voltando ao exercício da última ficha em que se geriam alunos e respectivas notas, considere a hipótese de utilizar uma ligação lógica entre os elementos como forma de os manter ordenados(como discutido na aula teórica de 01-04-2004) e implemente as seguintes funções:
Incialização do modelo de dados: lembre-se que também será necessário gerir as posições livres.
Listar: esta função produz uma listagem ordenada da informação de todos os alunos.
Consulta: esta função imprime no écran toda a informação referente a um determinado aluno.
Inserir: esta função insere o novo aluno na primeira posição livre e actualiza as ligações de forma a manter a informação logicamente ordenada.
Remover: esta função remove o aluno em causa e coloca a respectiva posição na lista de posições livres (garbage collector).
Este problema pode ser dividido em três fases:
Exercício Nº2: Estrutura ou Produto Cartesiano
Considere de novo o problema do exercício anterior e resolva as seguintes alíneas:
Defina um tipo de dados Aluno como sendo uma estrutura (struct) onde é guardada a informação do aluno.
Defina um tipo de dados Turma como sendo uma lista de Aluno.
Declare variáveis do tipo Aluno e do tipo Turma.
Adapte as funções desenvolvidas no exercício anterior para trabalhar com estes novos tipos de dados.
Ficha Nº8: Estruturas de Dados Dinâmicas - Listas Ligadas
Objectivos:
O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados dinâmicas.
Exercícios:
Exercício Nº1: Lista de Inteiros
Considere uma lista de inteiros (não se sabe o seu comprimento). Especifique então as seguintes funções e estruturas de dados:
Defina os tipos necessários para suportar uma lista ligada de inteiros.
Especifique uma função para inserir um valor na cabeça da lista.
Especifique uma função para listar os valores da lista, do início para o fim (faça também a função que lista os elementos na ordem inversa).
Especifique uma função para procurar um valor na lista (como resultado deverá devolver um apontador para o elemento ou NULL caso não o encontre).
Especifique uma função para contar os elementos da lista.
Especifique uma função para calcular o maior elemento na lista.
Especifique um programa, usando as funções definidas, que cria uma lista com os múltiplos de 3 entre 0 e 100 e os lista por ordem decrescente e crescente.
Exercício Nº2: À procura da saída ...
Suponha que existe um labirinto (pense numa representação adequada para o mesmo) que tem um ponto de entrada e um ponto de saída. Especifique um algoritmo que vai descobrir um caminho possível entre o ponto de entrada e o ponto de saída. Ajuda: modele numa lista ligada uma stack para ir guardando o caminho percorrido e as hipóteses alternativas.
Exercício Nº3: A Agenda de Contactos
Pretende-se que desenvolva uma aplicação para gerir uma agenda de contactos. Uma agenda é uma lista de entradas ou grupos de entradas. Uma entrada tem a seguinte constituição:
chave
chave única de identificação (não pode haver duas entradas com a mesma chave);
tipo
tipo da entrada: pessoa, empresa, ...
nome
nome da pessoa, empresa ou entidade;
email
contacto electrónco (é opcional)
telefone
número de telefone (obrigatório)
Um grupo pode ter entradas, referências a entradas já existentes na agenda (por chave) ou subgrupos (os grupos podem ter grupos aninhados infinitamente). O grupo tem, então, a seguinte constituição:
chave
chave única de identificação (não pode haver dois grupos com a mesma chave);
nome
nome do grupo; lista de itens: entradas e/ou grupos e/ou referências;
Por sua vez, a referência é apenas constituída pela chave da entrada ou grupo que referencia.
Desenvolva a aplicação nas seguintes etapas:
Defina as estruturas de dados necessárias para suportar o sistema de informação;
Espeifique as várias funções de inserção: inserir uma entrada na agenda, inserir um grupo na agenda, inserir uma entrada num grupo, ...
Especifique uma função para listar o conteúdo da agenda.
Especifique uma função para gravar o conteúdo da agenda num ficheiro.
Especifique uma função para carregar o conteúdo da agenda de um ficheiro.
#ifndef _LISTA
#define _LISTA
typedef struct sInteiro
{
int valor;
struct sInteiro * seg;
} Nodo, *Lista;
Lista inserir( int v, Lista l );
void listar( Lista l );
void listar_inv( Lista l );
Lista procurar( int v, Lista l );
int conta_elems( Lista l );
#endif
lista.c
#include "lista.h"
#include <stdio.h>
Lista inserir( int v, Lista l )
{
Lista novo;
novo = (Lista) malloc(sizeof(Nodo));
novo->valor = v;
novo->seg = l;
return novo;
}
void listar( Lista l )
{
if(l)
{
printf("%d ",l->valor);
listar(l->seg);
}
}
Lista inserir_ord( int v, Lista l)
{
Lista novo;
if((!l) || (l->valor > v))
{
novo = (Lista) malloc(sizeof(Nodo));
novo->valor = v;
novo->seg = l;
return novo;
}
else
{
l->seg = inserir_ord(v,l->seg);
return l;
}
}
prog.c
#include <stdio.h>
#include "lista.h"
int main()
{
Lista li=NULL;
int i=0;
while ((i+=3) < 100)
li = inserir(i,li);
listar(li);
return 0;
}
Ficha Nº9: Estruturas de Dados Dinâmicas - Listas Ligadas
Objectivos:
O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados dinâmicas.
Exercícios:
Exercício Nº1: Quantas letras?
Especifique um programa/função que dada uma frase/nome constrói uma lista de ocorrências das letras ordenada alfabeticamente. Pense numa solução com arrays e noutra com estruturas dinâmicas.
Exercício Nº2: À procura da saída ...
Suponha que existe um labirinto (pense numa representação adequada para o mesmo) que tem um ponto de entrada e um ponto de saída. Especifique um algoritmo que vai descobrir um caminho possível entre o ponto de entrada e o ponto de saída. Ajuda: modele numa lista ligada uma stack para ir guardando o caminho percorrido e as hipóteses alternativas.
Exercício Nº3: A Agenda de Contactos
Pretende-se que desenvolva uma aplicação para gerir uma agenda de contactos. Uma agenda é uma lista de entradas ou grupos de entradas. Uma entrada tem a seguinte constituição:
chave
chave única de identificação (não pode haver duas entradas com a mesma chave);
tipo
tipo da entrada: pessoa, empresa, ...
nome
nome da pessoa, empresa ou entidade;
email
contacto electrónco (é opcional)
telefone
número de telefone (obrigatório)
Um grupo pode ter entradas, referências a entradas já existentes na agenda (por chave) ou subgrupos (os grupos podem ter grupos aninhados infinitamente). O grupo tem, então, a seguinte constituição:
chave
chave única de identificação (não pode haver dois grupos com a mesma chave);
nome
nome do grupo; lista de itens: entradas e/ou grupos e/ou referências;
Por sua vez, a referência é apenas constituída pela chave da entrada ou grupo que referencia.
Desenvolva a aplicação nas seguintes etapas:
Defina as estruturas de dados necessárias para suportar o sistema de informação;
Espeifique as várias funções de inserção: inserir uma entrada na agenda, inserir um grupo na agenda, inserir uma entrada num grupo, ...
Especifique uma função para listar o conteúdo da agenda.
Especifique uma função para gravar o conteúdo da agenda num ficheiro.
Especifique uma função para carregar o conteúdo da agenda de um ficheiro.
Revisão da noção de Programação: objectivos, dificuldades e etapas.
Uma visão global dos paradigmas de programação.
Apresentação detalhada do paradigma; panorâmica histórica das linguagens de programação imperativas.
Análise Descendente de problemas
Noção de Algoritmo: Linguagem Algorítmica em português estruturado ---introdução das diversas construções linguísticas através
de problemas-exemplo típicos.
Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação),
de 1 a 10 (como se o computador estivesse na primária).
O adivinho
O computador adivinho, tenta adivinhar um número entre 0 e 100, em várias tentativas. Em cada tentativa, mostra o número
e pergunta se está correcto, ao que o utilizador responde "sim" ou "maior" ou "menor" consoante o número em que pensou seja igual, maior ou menor
do que o indicado.
-- AlbertoSimoes - 11 Mar 2005
Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da arquitectura de um compilador da linguagem C. Introdução à liguagem algorítmica que irá ser utiizada nas aulas práticas. Implementação de alguns programas pequenos.
2004-03-01
Estruturas Condicionais: a instrução if-else, instruções if-else encadeadas, a instrução switch.
2004-03-04
Apresentação da arquitectura de uma máquina de stack para a execução de programas. Execução do factorial: passagem de argumentos pela stack, endereço de retorno. A tabela ASCII e o tratamento de carácteres em C. Conversão de formatos com as instruções printf e scanf.
2004-03-08
Operações e operadores relacionais em C. Definição de funções em C: codificação do maior de dois números. Operadores aritméticos. Introdução às expressões condicionais e codificação de alguns exemplos: potências, conversão entre maiúsculas e minúsculas.
2004-03-11
Tipos de dados nativos: int, long, float, double, char. Conversão entre tipos de dados. Pequena introdução aos arrays: armazenamento em memória, declaração, exercícios com vectores de inteiros.
2004-03-15
O modelo de dados Stack: exemplos, aplicações, implementação com arrays. As funções: push, pop, empty, top, init.
2004-03-18
Manipulação de vectores: declaração, inicialização, passagem de vectores como argumentos para funções, armazenamento em memória, indexação.
2004-03-22
Arrays com mais de uma dimensão: declaração, inicialização e manipulação. Resolução de alguns exercícios com matrizes: transposta, soma da diagonal, soma duma coluna, soma duma linha. Declaração e manipulação de strings.
2004-03-25
Introdução à procura em estruturas de dados: algoritmos de busca em arrays - busca linear.
2004-03-29
Ordenação de arrays: o algoritmo das trocas directas - bubblesort. Exemplificação da inserção ordenada em arrays.
2004-04-01
Introdução ao conceito de lista ligada. Os conceitos de ordem física e ordem lógica e o problema de manter várias ordens lógicas sobre a mesma ordem física.
2004-04-05
Implementação de listas ligadas sobre estruturas estáticas: inicialização, gestão das posições livres, inserção e actualização de informação.
2004-04-15
Estruturas variantes: armazenamento de expressões aritméticas. Definição de tipos com estruturas variantes. Exemplificação de uma implementação de listas ligadas sobre arrays. Introdução ao desenvolvimento modular de programas.
2004-04-19
Não foi leccionada para permitir a alunos e docentes a participação nas JOIN2004.
2004-05-10
Enterro da Gata.
2004-05-13
Enterro da Gata.
2004-05-20
Resolução do problema: "A Central de Encomendas da Telepizza"; definição das estruturas de dados; operações de inserção e de listagem.
2004-05-24
Listas ligadas duplamente ligadas: como inserir ordenadamente. Introdução às árvores binárias de procura.
2004-05-27
Algoritmos sobre árvores binárias de procura: inserção ordenada, travessias (inorder, posorder, preorder), cáulculos com acumulação e remoção.
2004-05-31
Implementação de "demolidores" de estruturas de dados: o problema da recolha de lixo.
2004-06-03
Fecho da disciplina. Conversa com os alunos sobre o programa leccionado, os objectivos que se pretenderam atingir e o que efectivamente aconteceu ao longo do semestre.
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos
Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes com número de elementos inferior ou superior a 3.
Na defesa do trabalho deverão estar presentes todos os elementos da equipe. A ausência durante a entrega e defesa do trabalho corresponde à nota 0. Situações devidamente justificadas poderão levar a uma posterior defesa do trabalho mas, individual.
Caso sejam detectadas situações fraudulentas, as equipes envolvidas (copiantes e copiados) terão a matrícula à disciplina anulada e FRAUDE como nota a ser lançada nas pautas que serão afixadas.
O Trabalho corresponderá a um problema que depois de devidamente analisado deverá ter a sua solução implementada em C.
A plataforma que será usada para testar o trabalho será a imagem Linux disponível nas máquinas da sala aberta do Departamento.
Será da inteira responsabilidade da equipe que apresenta o trabalho, o garantir que o mesmo está em condições de ser apresentado, antes da entrega. Durante a entrega não serão admitidos erros de compilação nem que a execução do trabalho "termine abruptamente sem explicações" antes do fim esperado.
A equipe, durante a entrega, deverá fazer-se acompanhar por um relatório, impresso em papel, do trabalho que está a apresentar. Esse relatório deverá ser criado em LaTeX? de acordo com um formato que será brevemente disponibilizado.
As entregas serão feitas por marcação prévia: na semana anterior à data de finalização do trabalho, serão colocadas, na Secretaria do Departamento, as folhas de marcação.
As folhas de marcação abarcarão vários dias e várias horas, divididos em slots de 20 minutos. É da responsabilidade da equipe a marcação de uma slot que não colida com aulas de outras disciplinas.
Este ano, irá vigorar a Lei do Buraco para as marcações: se no fim da semana em que decorreram as marcações houver algum slot livre, não será aceite mais nenhuma marcação para além daquelas que estejam registadas nas folhas.
A equipe deverá comparecer 15 minutos antes da hora marcada na sala onde se efectuará a entrega.
A falta a uma marcação implica nota 0 no trabalho em questão.
Os trabalhos práticos serão avaliados por patamares:
0 - não fizeram
4-8 - não compilou, rebentou durante a execução, ...
10 - cumpre os mínimos no limite (há coisas que não estão bem)
13 - cumpre bem os mínimos
16 - cumpre bem os requisitos propostos
19 - excede a proposta
Os patamares enunciados no ponto anterior são referências. O docente poderá decidir atribuir valores intermédios nalguns casos.
Acedem ao site e registam o vosso grupo: escolhem Registar e vão introduzir um username para o grupo e a password; depois fazem login com esse nome e password; introduzem um nome para o grupo (pode ser o que quiserem, usem a imaginação), um número, e um a um os elementos do grupo; no fim selecionam actualizar; por fim, para submeter o trabalho clicam no link em cima que diz "Submeter Trabalho", seleccionam o ficheiro que contem o trabalho no vosso disco ou disquete e fazem o "Submit".
Se um dia se esquecerem da password dirijam-se a nós. Não tentem registar-se mais do que uma vez.
O ficheiro do trabalho deverá estar em formato ZIP e deverá conter:
o ficheiro C do problema que resolveram, exemplo: 21fosforos.c
se resolveram mais de um problema, os outros ficheiros C, um por problema.
Se tiverem problemas a criar o ficheiro ZIP qualquer docente da disciplina vos poderá ajudar ou até os técnicos do primeiro piso (o Jaime, o João ou a Carla).
Este trabalho prático tem como principais objectivos:
familiarização com o computador em ambiente linux, e com algumas ferramentas de apoio à programação, tais como um editor vi/emacs;
iniciação à codificação, na linguagem imperativa C, das estruturas de dados e dos algoritmos concebidos e à execução e teste e dos programas escritos;
introdução à documentação dos projectos de programação realizados usando o processador LaTeX.
Para o efeito,
esta folha contém seis enunciados, dos quais deverá resolver dois (poderá resolver mais mas só dois serão avaliados).
O relatório a elaborar, deve ser claro e sucinto e, além do respectivo enunciado e da descrição do problema, deverá conter exemplos de utilização e o código do programa.
Como foi dito, o relatório terá de ser escrito em LaTeX sugerindo-se que adoptem o esqueleto proposto que pode ser descarregado a partir da página principal dos trabalhos práticos.
Enunciados
O Adivinho
Escreva um programa em C que adivinhe um número (a chave) entre 1 e 100 escolhido pelo utilizador.
Em cada tentativa, programa palpita um número e o utilizador indica se acertou,
ou então se é maior ou menor que a chave.
O jogo prossegue até o computador acertar, ou até se atingir um número N (dado) de tentativas.
O Adivinho Sofisticado
Escreva um programa em C que escolha (use o gerador de números aleatórios da linguagem C, rand()) um número (a chave) entre 1 e 100 que terá de ser adivinhado pelo utilizador.
Em cada tentativa, o utilizador introduz o número palpitado e o computador indica se acertou, ou então se é maior ou menor que a chave.
O jogo prossegue até o utilizador acertar, ou até atingir um número N (dado) de tentativas.
O Sabichão Matemático
Escreva um programa em C que escolha (use o gerador de números aleatórios da linguagem C, rand()) dois números (os operandos) entre 0 e 10 e, depois de os mostrar ao utilizador, pergunte o valor do produto.
Ao fim de N (dado) de tentativas, o computador indica o número de vezes que o utilizador levou para acertar.
Se quiser tornar o seu programa mais interessante, gere também aleatoriamente a operação (adição, multiplicação, subtracção ou divisão) que o utilizador deve fazer.
Dados da Sorte
Escreva um programa em C que simule o lançamento de 2 dados (use o gerador de números aleatórios da linguagem C, rand()) e indique ao fim de quantas jogadas é que ambas as faces sorteadas são iguais (ostentam o mesmo valor).
Dados da Sorte 2
Escreva um programa em C que simule o lançamento de 2 dados (use o gerador de números aleatórios da linguagem C, rand()) e indique ao fim de quantas jogadas é que a soma do valor sorteado em cada dado é um número par.
21 fósforos
Escreva um programa em C que implemente o jogo dos fósforos: no início há 21 fósforos sobre a mesa; em cada jogada, cada jogador deve retirar entre 1 e 4 fósforos, perdendo aquele que retirar o último.
A estratégia ganhadora é o segundo jogador retirar sempre a diferença para 5 do número retirado pelo primeiro jogador.
O seu programa deve dar a escolher ao utilizador qual dos dois começa a jogar e, caso o computador seja o segundo a jogar deverá ganhar sempre, se fôr o primeiro deverá ganhar se o utilizador cometer um erro de estratégia.
-- JoseCarlosRamalho - 27 Feb 2004
Este trabalho prático tem como principais objectivos:
familiarização com tipos de dados estruturados;
utilização de estruturas de controle em situações mais elaboradas;
incrementar os cuidados na validação dos dados introduzidos pelo utilizador.
Dos vários enunciados apresentados deverá escolher apenas um que deverá resolver e defender. Se tiver tempo, invista na qualidade melhorando e acrescentando funcionalidades extra à sua aplicação (use a imaginação).
O relatório a elaborar, deve ser claro e sucinto e, além do respectivo enunciado e da descrição do problema, deverá conter exemplos de utilização e o código do programa.
Como foi dito, o relatório terá de ser escrito em LaTeX? sugerindo-se que adoptem o esqueleto proposto que pode ser descarregado a partir da página principal dos trabalhos práticos.
Enunciados
Minesweeper
Implemente o conhecido jogo minesweeper.
Dado um tabuleiro m * n e um conjunto de p bombas (que o programa distribuirá aleatoriamente no tabuleiro), o objectivo do jogador é acertar em todas as casas do tabuleiro sem acertar nas bombas. As jogadas são realizadas da seguinte forma:
o jogador indica uma casa do tabuleiro;
se acertou numa bomba, perdeu!
se existe alguma bomba na vizinhança dessa casa (portanto, nas 8 casas circundantes), o programa deverá mostrar (nessa casa) o número de bombas que existem à sua volta;
se não existe nenhuma bomba na vizinhança, o programa deve realizar jogadas automaticamente para cada uma das 8 casas vizinhas, prosseguindo assim até já não haver mais casas nestas condições.
Joga da Forca
Implemente o jogo da forca. Nesta implementação, o programa deve pedir inicialmente a frase mistério com que vai jogar. Depois, mostra-a na forma de um mapa com a posição das letras em relação aos espaços.
Em cada uma das 6 tentativas (este número pode ser variável), o jogador vai fornecer uma letra que, caso exista na frase mistério, será substituída no mapa. No caso de não existir, deve ser apresentada, em todas as posteriores jogadas, numa zona de letras usadas em vão.
Como resultado final, o computador deve mostar sempre a frase mistério indicando se o Jogador consegui descobrir todas as letras, ou se perdeu por ter esgotado as tentativas.
Opcionalmente, poderá tentar retirar a palavra (ou frase) aleatóriamente de um ficheiro. Uma vez que este trabalho terá um prazo mais apertado do que o que seria necessário para apresentar o funcionamento com ficheiros, está por sua conta para investigar os comandos fopen, fgets, fclose e relacionados.
Joga dos Provérbios
Implemente o jogo dos provérbios (é uma variante do jogo da forca descrito em cima). Nesta implementação, o programa deve pedir inicialmente a provérbio mistério com que vai jogar. Depois, mostra-o na forma de um mapa com a posição das letras em relação aos espaços.
No início do jogo, o jogador dispõe de um determinado saldo.
Em cada jogada, o jogador vai comprar uma letra ou tentar adivinhar o provérbio. No caso da letra, se esta existir no provérbio mistério, será substituída no mapa e o saldo do jogador decrementado, se não existir, deve ser apresentada, em todas as posteriores jogadas, numa zona de letras usadas em vão. No caso do jogador acertar no provérbio, o seu saldo será incrementado pelo valor das letras ainda não compradas e presentes no provérbio. Se falhar ao adivinhar, o seu saldo será decrementado pelo valor correspondente ao das letras ainda em jogo.
Como resultado final, o computador deve mostar sempre o provérbio mistério indicando se o Jogador conseguiu descobrir todas as letras, ou se perdeu por ter esgotado as tentativas.
O jogo termina quando o saldo do jogador se tornar negativo ou quando este decidir abandonar o jogo.
Opcionalmente, poderá tentar retirar o provérbio aleatóriamente de um ficheiro. Uma vez que este trabalho terá um prazo mais apertado do que o que seria necessário para apresentar o funcionamento com ficheiros, está por sua conta para investigar os comandos fopen, fgets, fclose e relacionados.
Este trabalho prático tem como principais objectivos:
familiarização com tipos de dados dinâmicos;
armazenamento de informação em memória secundária;
incrementar os cuidados na validação dos dados introduzidos pelo utilizador;
introduzir o aluno ao desenvolvimento de sistemas de informação.
Dos vários enunciados apresentados deverá escolher apenas um que deverá resolver e defender. Se tiver tempo, invista na qualidade melhorando e acrescentando funcionalidades extra à sua aplicação (use a imaginação).
O relatório a elaborar, deve ser claro e sucinto e, além do respectivo enunciado e da descrição do problema, deverá conter exemplos de utilização e o código do programa.
Como foi dito, o relatório terá de ser escrito em LaTeX? sugerindo-se que adoptem o esqueleto proposto que pode ser descarregado a partir da página principal dos trabalhos práticos.
Enunciados
Gestor Bibliográfico
Neste projecto, pretende-se que o aluno desenvolva uma plataforma de suporte a uma base de dados bibliográfica tipo BibTeX? , ou seja, o sistema de informação será composto por uma lista de registos. Um registo destes pode ser de um de vários tipos. Os vários tipos e a respectiva estrutura descrevem-se a seguir.
article
artigo publicado em revista; tem os seguintes campos obrigatórios: lista de autores, título, nome da revista e ano; e tem os seguintes campos opcionais: volume, número, páginas, mês e nota descritiva.
book
campos obrigatótios: lista de autores ou de editores, título, editora, ano; campos opcionais: volume ou número, série, edição, mês e nota descritiva.
inbook
capítulo de um livro; campos obrigatórios: lista de autores ou de editores, título, capítulo ou páginas, editora, ano; campos opcionais: volume ou número, série, edição, mês e nota descritiva.
inproceedings
artigo publicado nas actas de uma conferência; campos obrigatórios: lista de autores, título, título das actas, ano; campos opcionais: editor, volume ou número, série, páginas, edição, mês e nota descritiva.
masterthesis
tese de mestrado; campos obrigatórios: autor, título, instituição, ano; campos opcionais: mês e nota descritiva.
misc
Este tipo deverá ser usado para todas as entradas que não sejam classificáveis num dos outros tipos, por exemplo referências da Internet; campos obrigatórios: nenhum; campos opcionais: lista de autores, título, meio de publicação, mês, ano e nota descritiva.
phdthesis
tese de doutoramento; campos obrigatórios: autor, título, instituição, ano; campos opcionais: mês e nota descritiva.
proceedings
Actas de Conferência; campos obrigatórios: título e ano; campos opcionais: lista de editores, volume ou número, série, editora, nota descritiva, mês e organização.
techreport
Relatório Técnico; campos obrigatórios: lista de autores, título, instituição e ano; campos opcionais: número, mês e nota descritiva.
A aplicação a desenvolver deverá ter os seguintes requisitos:
No incício de uma sessão, o programa deverá carregar os registos bibliográficos de um ficheiro chamado "BIB.DAT".
No fim da sessão, os registos deverão ser gravados no mesmo ficheiro para que o estado da plicação seja preservado entre sessões.
A aplicação deverá disponibilizar as seguintes operações ao utilizador:
Inserção de um registo.
Consulta de um registo (por chave de citação)
Remoção de um registo (por chave de citação), a aplicação deverá mostrar o registo e pedir uma confirmação ao utilizador antes do registo ser removido.
Listagem (por ordem alfabética de título).
Listagem (por ordem alfabética de autor), para cada autor apresenta a sua lista de publicações ordenadas alfabeticamente por título (esta operação é um extra).
Listagem (por ordem alfabética de título em que estes estão agrupados por tipo).
Gravar, em qualquer momento o utilizador poderá solicitar a gravação dos dados em memória para um determinado ficheiro (diferente do "BIB.DAT").
Carregar, permite recuperar um estado anterior da aplicação (de um ficheiro qualquer fornecido pelo utilizador mas que obedeça à estrutura estabelecida para o repositório).
Outras operações que a sua imaginação puder fornecer...
Sugere-se que comece por desenvolver a aplicação nestas etapas:
Decidir quais as estruturas de dados que irão suportar a informação em memória central (listas ligadas, esquemas de ordenação ...).
Definição dos tipos de dados
Implementação das funções para manipulação das estruturas de dados
Implementação das funções de IO (apresentação e interacção com o utilizador)
Divirta-se ...
Agência Matrimonial
Neste projecto, pretende-se que o aluno desenvolva uma aplicação para gerir uma agência matrimonial/encontros. A aplicação irá tentar usar uma função de semelhança parametrizada pelo utilizador para encontrar uma pessoa ou lista de pessoas compatíveis com um determinado perfil. Para isso, é necessário criar uma base de dados de indívíduos onde ficará registado o perfil de cada indivíduo. O sistema terá dois modos de funcionamento: um para o administrador e outro para o utilizador normal. Mais à frente será descrito em mais pormenor o comportamento de cada um.
Um indivíduo é registado na base de dados com os seguintes campos de informação:
Código
o sistema deverá atribuir automaticamente um código a cada indivíduo que se regista; este código serve para identificar univocamente o indivíduo noutras operações.
Nome
o indivíduo é registado com o seu nome verdadeiro, opcionalmente poderá adoptar um pseudónimo que será visualizado pelo utilizador em vez do seu nome.
Sexo
Masculino ou Feminino. Data de Nascimento: data em formato ANSI: aaaa-mm-dd (a validação é um extra). Lista de Contactos: morada, email, telefone, telemóvel, ... São todos opcionais tendo, no entanto, que ser preenchido pelo menos um (a lista não pode ser vazia).
Profissão
lista de actividades que desenvolve profissionalmente.
Habilitações
lista de cursos e graus que detem. Lista de Preferências/Hábitos: actividades desportivas, hábitos tabágicos, hábitos culturais (música, leitura, teatro, cinema, ...), hábitos noturnos (pub, disco, ...), hábitos televisivos (informação, filmes, telenovelas, concursos, ...).
Objectivos
Procura um Amigo, Encontro, Compromisso com vista a casamento, ...
No acto do registo, o utente deverá ter a possibilidade de indicar, para cada item de informação, se este é visível para todos os utilizadores ou apenas para o administrador.
A aplicação a desenvolver deverá disponibilizar duas interfaces: a do administrador e a do utente.
Na interface do administrador deverão estar disponíveis as seguintes operações:
Inserção de um indivíduo - o administrador poderá inserir indivíduos, por exemplo, durante as consultas.
Remoção de um indivíduo (por código) - só o administrador poderá fazer remoções; esta operação deverá mostrar o registo que irá ser apagado e solicitar a confirmação, só então procederá à remoção efectiva.
Consulta dos dados relativos a um indivíduo (por código) - esta operação deverá mostrar a informação completa de um registo.
Listagem por ordem alfabética de nome - esta operação deverá apresentar o código, o nome e respectivo pseudónimo (se existir) de todos os indivíduos.
Listagem por ordem cronológica de nascimento - esta operação deverá apresentar o código, o nome e a idade respectiva de cada indivíduo.
Procurar perfil compatível - esta operação recebe como argumento o código de um indivíduo e, baseada numa outra função que entra em linha de conta com pesos e desvios dos vários parâmetros, dá uma lista de indivíduos ordenada do mais compatível para o menos compatível.
Procurar perfil - esta operação é semelhante à anterior só a função que determina a semelhança é definida pelo utilizador; é apresentada uma interface que permite definir domínios de valores e pesos para cada parâmetro.
Gravar - esta operação grava em ficheiro, "AGENCIA.DAT", o estado actual da Base de Dados.
Carregar - esta operação permite num determinado momento carregar uma Base de Dados previamente gravado em ficheiro; antes de carregar a nova informação o utilizador deverá ser interrogado sobre se quer limpar a informação que existe em memória ou se quer fazer o "merge" da informação (esta funcionalidade é um extra).
Na interface do utilizador normal estão disponíveis as mesmas operações, à excepção da remoção, só que apenas serão mostrados os dados marcados como não confidenciais.
Se o utilizador da aplicação, administrador ou utente, nada indicar, a aplicação deverá sempre carregar a informação de "AGENCIA.DAT" no início e gravar a informação em "AGENCIA.DAT" antes de terminar.
Não tente fazer nenhum destes enunciados de uma só vez, faça-o incrementalmente e comece por definir as estruturas de dados e a operação de inserção.
Divirta-se
Trabalho Prático Nº1 Objectivos e Organização Este trabalho prático tem como principais objectivos : familiarização com o computador em ambiente linux , e ...
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos 1 Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes ...
Resultados de Exames, Correcções e TPS 2004/2005 Notas práticas: Notas Finais (1ª Época): http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF 2003 ...
Ficha Nº1 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
Programa da Disciplina: Paradigmas de Programa o II Licenciatura em Matem tica e Ci ncias da Computa o 1 ano Iacute;ndice Remissivo 1.Introdu o Programa ...
Repositório Anárquico de Enunciados Cálculo da Tabuada Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação), de 1 a 10 ...
Avaliação A avaliação tem duas componentes, uma teória e uma prática. A componente teórica corresponderá à melhor nota obtida em exame e a componente prática à média ...
Ficha Nº3 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de vectores e matrizes em C. As strings são casos ...
Ficha Nº10: Estruturas de Dados Dinâmicas Árvores Binárias Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de ...
Resolução da Ficha Prática 1 Exercício 1: O maior de 2 números #include int main( ) { int a, b; printf("Primeiro número: \n"); scanf("%d", a); printf("Segundo ...
/ title: Ano Lectivo 2003/04 Resolução da Ficha nº2 ficheiro: pp203resf02.c autor: PRH versao de: 2004.03.15 .uso do printf() e do scanf() .uso de condicoes .uso ...
Sumários do ano lectivo 2003/2004 Aulas Teóricas (LMCC) 2004 02 26: Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da ...
Ficha Nº9: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Ficha Nº8: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Trabalho Prático III TPs: Gestor Bibliográfico; Agência Matrimonial. Objectivos e Organização Este trabalho prático tem como principais objectivos: familiariza ...
Ficha Nº7: Ficheiros e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de ficheiros e definição de tipos estruturados ...
Ficha Nº6: Arrays e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de algoritmos mais avançados de busca e ordena ...
Ficha Nº4 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de matrizes em C. As strings são casos particulares ...
Ficha Nº5: Busca e Ordenação de Arrays Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização dos algoritmos tradicionais de busca ...
Trabalho Prático II Objectivos e Organização Este trabalho prático tem como principais objectivos: familiarização com tipos de dados estruturados; utiliza ...
Regras para a submissão dos Trabalhos Práticos Este ano, todos os trabalhos terão de ser enviados electronicamente através do site: http://labdotnet.di.uminho.pt/submitPP2 ...
TWiki.Education/PP2 Web Preferences The following settings are web preferences of the TWiki.Education/PP2 web. These preferences overwrite the site level preferences ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/PP2 web. This is a convenient service, so you do not have ...
Ficha Nº2 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
Avaliação A avaliação tem duas componentes, uma teória e uma prática. A componente teórica corresponderá à melhor nota obtida em exame e a componente prática à média ...
Ficha Nº1 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
Ficha Nº10: Estruturas de Dados Dinâmicas Árvores Binárias Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de ...
Resolução da Ficha Prática 1 Exercício 1: O maior de 2 números #include int main( ) { int a, b; printf("Primeiro número: \n"); scanf("%d", a); printf("Segundo ...
Ficha Nº2 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a linguagem algorítmica que irá ser usada para especificar os algoritmos ...
/ title: Ano Lectivo 2003/04 Resolução da Ficha nº2 ficheiro: pp203resf02.c autor: PRH versao de: 2004.03.15 .uso do printf() e do scanf() .uso de condicoes .uso ...
Ficha Nº3 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de vectores e matrizes em C. As strings são casos ...
Ficha Nº4 Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização e manipulação de matrizes em C. As strings são casos particulares ...
Ficha Nº5: Busca e Ordenação de Arrays Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização dos algoritmos tradicionais de busca ...
Ficha Nº6: Arrays e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de algoritmos mais avançados de busca e ordena ...
Ficha Nº7: Ficheiros e Estruturas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de ficheiros e definição de tipos estruturados ...
Ficha Nº8: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Ficha Nº9: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ...
Programa da Disciplina: Paradigmas de Programa o II Licenciatura em Matem tica e Ci ncias da Computa o 1 ano Iacute;ndice Remissivo 1.Introdu o Programa ...
Repositório Anárquico de Enunciados Cálculo da Tabuada Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação), de 1 a 10 ...
Resultados de Exames, Correcções e TPS 2004/2005 Notas práticas: Notas Finais (1ª Época): http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF 2003 ...
Sumários do ano lectivo 2003/2004 Aulas Teóricas (LMCC) 2004 02 26: Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da ...
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos 1 Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes ...
Regras para a submissão dos Trabalhos Práticos Este ano, todos os trabalhos terão de ser enviados electronicamente através do site: http://labdotnet.di.uminho.pt/submitPP2 ...
Trabalho Prático Nº1 Objectivos e Organização Este trabalho prático tem como principais objectivos : familiarização com o computador em ambiente linux , e ...
Trabalho Prático II Objectivos e Organização Este trabalho prático tem como principais objectivos: familiarização com tipos de dados estruturados; utiliza ...
Trabalho Prático III TPs: Gestor Bibliográfico; Agência Matrimonial. Objectivos e Organização Este trabalho prático tem como principais objectivos: familiariza ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/PP2 web. This is a convenient service, so you do not have ...
TWiki.Education/PP2 Web Preferences The following settings are web preferences of the TWiki.Education/PP2 web. These preferences overwrite the site level preferences ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/PP2 web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Format: <space><space><space>, followed by: * Main.yourWikiName (if you want that the e-mail address in your home page is used) * Main.yourWikiName - yourEmailAddress (if you want to specify a different e-mail address) * Main.anyTWikiGroup (if you want to notify all members of a particular TWikiGroup)
Related topics:TWikiUsers, TWikiRegistration
The following settings are web preferences of the TWiki.Education/PP2 web. These preferences overwrite the site-level preferences in TWikiPreferences, and can be overwritten by user preferences (your personal topic, i.e. TWikiGuest in the TWiki.Main web)
Preferences:
Set WEBTITLE = Paradigmas da Programação II
List of topics of the TWiki.Education/PP2 web:
Web specific background color: (Pick a lighter one of the StandardColors)
If yes, set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. Education/PP2.Topic links.
Set SITEMAPLIST = on
Set SITEMAPWHAT = Paradigmas da Programação 2
Set SITEMAPUSETO = ...collaborate on
Exclude web from a web="all" search: (Set to on for hidden webs)
Set NOSEARCHALL =
Default template for new topics and form(s) for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
Web preferences that are not allowed to be overridden by user preferences:
Set FINALPREFERENCES = WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
Notes:
A preference is defined as: 6 spaces * Set NAME = value Example:
Set WEBBGCOLOR = #33CCFF
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #33CCFF .
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce new preferences variables and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
TWiki's Education/PP2 web
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2
The Education/PP2 web of TWiki. TWiki is a Web-Based Collaboration Platform for the Corporate World.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/PP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2
/twiki/pub/Main/LocalLogos/um_eengP.jpgWebSearchAdvanced
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/WebSearchAdvanced
(last changed by TWikiGuest)2007-05-17T14:51:38ZguestWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/WebHome
Paradigmas de Programação II 1ºano da LMCC e LESI 2004/2005 Equipe Docente: José João Almeida João Alexandre Saraiva Novidades ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:24ZJoseBacelarAlmeidaTrabalhosPraticosTP1
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosTP1
Trabalho Prático Nº1 Objectivos e Organização Este trabalho prático tem como principais objectivos : familiarização com o computador em ambiente linux , e ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:24ZJoseBacelarAlmeidaTrabalhosPraticosRegulamento
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosRegulamento
Regulamento para a Elaboração e Entrega dos Trabalhos Práticos 1 Os trabalhos práticos deverão ser realizados em equipes de 3 elementos. Não serão aceites equipes ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaTrabalhosPraticos
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticos
Trabalhos Práticos Regulamento. Relatório: Sugere se LaTeX mini manual html de LaTeX fazer download do esqueleto ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaResultados
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/Resultados
Resultados de Exames, Correcções e TPS 2004/2005 Notas práticas: Notas Finais (1ª Época): http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF 2003 ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaRepositorioProblemas
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/RepositorioProblemas
Repositório Anárquico de Enunciados Cálculo da Tabuada Codifica um programa que receba um inteiro positivo, e imprima a sua tabuada (da multiplicação), de 1 a 10 ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaProgramaDetalhado
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/ProgramaDetalhado
Programa da Disciplina: Paradigmas de Programa o II Licenciatura em Matem tica e Ci ncias da Computa o 1 ano Iacute;ndice Remissivo 1.Introdu o Programa ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaNovasPP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/NovasPP2
Notas finais, após o exame de recurso Notas finais http://natura.di.uminho.pt/~jj/Education.PP2 05/notaJulho.pdf PDF (Pequenas correcções nas ... (last changed by JoseBacelarAlmeida)2007-02-12T19:53:23ZJoseBacelarAlmeidaWebLeftBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/WebLeftBar
Web Web Home Changes Index Search Webs (last changed by ArthurClemens)2004-08-16T09:01:46ZArthurClemensSumariosPP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/SumariosPP2
Sumários do ano lectivo 2003/2004 Aulas Teóricas (LMCC) 2004 02 26: Apresentação da disciplina: avaliação, ferramentas e plataformas a utilizar. Apresentação da ... (last changed by JoseCarlosRamalho)2004-06-15T16:31:00ZJoseCarlosRamalhoFichasPraticasFicha8Res
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/FichasPraticasFicha8Res
Makefile prog.exe : prog.o lista.o gcc o prog.exe prog.o lista.o prog.o : prog.c lista.h gcc c prog.c lista.o : lista.h lista.c gcc c lista.c lista ... (last changed by JoseCarlosRamalho)2004-05-20T18:20:15ZJoseCarlosRamalhoFichasPraticasFicha9
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/FichasPraticasFicha9
Ficha Nº9: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ... (last changed by JoseCarlosRamalho)2004-05-18T01:04:00ZJoseCarlosRamalhoFichasPraticasFicha8
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/FichasPraticasFicha8
Ficha Nº8: Estruturas de Dados Dinâmicas Listas Ligadas Objectivos: O objectivo principal desta ficha é familiarizar o aluno com a utilização de estruturas de dados ... (last changed by JoseCarlosRamalho)2004-05-04T09:54:00ZJoseCarlosRamalhoTrabalhosPraticosTP3
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosTP3
Trabalho Prático III TPs: Gestor Bibliográfico; Agência Matrimonial. Objectivos e Organização Este trabalho prático tem como principais objectivos: familiariza ... (last changed by JoseCarlosRamalho)2004-05-02T11:00:00ZJoseCarlosRamalhoTrabalhosPraticosTP2
http://wiki.di.uminho.pt/twiki/bin/view/Education/PP2/TrabalhosPraticosTP2
Trabalho Prático II Objectivos e Organização Este trabalho prático tem como principais objectivos: familiarização com tipos de dados estruturados; utiliza ... (last changed by JoseCarlosRamalho)2004-03-17T10:03:14ZJoseCarlosRamalho