Algoritmos e Estruturas de Dados

Documentos relacionados
Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados

Introdução aos Algoritmos e Estruturas de Dados. 2 o Teste - A

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

BCC202 - Estrutura de Dados I

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Algoritmos de Ordenação: Tempo Linear

Instituto Superior Técnico Algoritmos e Estruturas de Dados

Ordenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho BCC402 Aula 04 Algoritmos e Programação Avançada

max1: 20,max2:+ max1:15, max2:20 max1:30,max2:32,max3:35 max1:40,max2:+

UNIVERSIDADE DA BEIRA INTERIOR

Prova de Programação (21090) Data: 31 de Janeiro de 2008

UNIVERSIDADE DA BEIRA INTERIOR

AED - Algoritmos e Estruturas de Dados Licenciatura em Engenharia Electrónica

Linguagem C: Ordenação

Programação de Computadores II. Cap. 16 Ordenação

Instituto de Física Segundo Semestre de Diurno. Prova Substitutiva 15/12/2000

Estruturas de Dados Algoritmos de Ordenação

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

UNIVERSIDADE DA BEIRA INTERIOR

Análise de Algoritmos

Algoritmos de Ordenação: QuickSort

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Módulo 16 - Ordenação

INF 1620 P1-04/10/03 Questão 1 Nome:

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

UNIVERSIDADE DA BEIRA INTERIOR

Estruturas de dados e algoritmos fundamentais

Algoritmos de Pesquisa e Ordenação em Vectores

Pesquisa Linear. Adriano J. Holanda 15/3/2016

INF 1010 Estruturas de Dados Avançadas

Algoritmos e Estruturas de dados

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Introdução à Programação em C Input / Output

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

AED2 - Aula 11 Problema da separação e quicksort

Introdução à Programação

Carlos Eduardo Batista. Centro de Informática - UFPB

A linguagem C (visão histórica)

UNIVERSIDADE DA BEIRA INTERIOR

André Vignatti DINF- UFPR

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

INF 1007 Programação II

INF 1620 P1-13/09/02 Questão 1 Nome:

Módulo 16 - Ordenação. Referências

Algoritmos e Estrutura de Dados

(a) Indique, em português, o que realiza a seguinte função. [4 pontos]

RESUMO DE CONCEITOS BÁSICOS DE C

UNIVERSIDADE DA BEIRA INTERIOR

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010

Programação Estruturada

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2011/2012

UNIVERSIDADE DA BEIRA INTERIOR

Aula teórica: /6. Enunciado

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Capacitação em Linguagem C Parte 2

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

Computação e Programação 201*/201* - 1º Semestre

Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

INF 1620 P3-25/11/05 Questão 1 Nome:

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

Departamento de Ciência de Computadores. b) R:

Linguagem C: Algoritmos de Ordenação

UNIVERSIDADE DA BEIRA INTERIOR

INF 1620 P1-11/04/03 Questão 1 Nome:

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

INF 1620 P1-10/04/02 Questão 1 Nome:

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Aplicações para Sistemas Embebidos 2006/2007 1º Exame, 6 de Janeiro de 2007

3. Linguagem de Programação C

Introdução à Programação em C (I)

Ordenação. Insertion Sort

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Básico: estrutura de programa, sintaxe Interface com linha de comando

Linguagens de Programação I

Tipos Abstratos de Dados TADs

Conceitos básicos de programação

Programação de Computadores II

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Transcrição:

Introdução aos Algoritmos e Estruturas de Dados Repescagem 1 o Teste - A Ano lectivo: 2011/2012 1 o Semestre RESOLUÇÃO DA REPESCAGEM DO 1 o TESTE I. (2.0 + 2.0 + 2.0 + 2.0 = 8.0 val.) I.a) Escreva em linguagem C a função int somamultiplos(int k, int a, int b) que recebe três inteiros k, a e b, e devolve a soma dos primeiros k múltiplos de a que sejam maiores do que b (inclusivé). Por exemplo, se k = 3, a = 4 e b = 10, então a função devolve a soma de 12, 16 e 20. Estes são os primeiros 3 múltiplos de 4 que são maiores do que 10. int somamultiplos(int k, int a, int b) { int soma = 0; int i = b, j; while (i % a!= 0) i++; for (j = 0; j < k; j++) { soma += i; i += a; return soma; 1/12

I.b) Escreva em linguagem C a função void maiores (int v1[], int v2[], int v3[], int t) que recebe três vectores de inteiros v1, v2 e v3 com tamanho t. A função coloca o valor 1 na posição i do vector v3, se o inteiro na posição i do vector v1 for maior que o inteiro na posição i do vector v2, e coloca o valor 0 na posição i do vector v3, caso contrário. Por exemplo, se v1={1,4,3,6,7 e v2={1,5,2,8,6 então v3={0,0,1,0,1. void maiores (int v1[], int v2[], int v3[], int t) { int i; for (i = 0; i < t; i++) v3[i] = v1[i] > v2[i]? 1 : 0; 2/12

I.c) O número internacional de conta bancária, IBAN (International Bank Account Number), é um código internacional para identificação de contas bancárias. Os dois primeiros caracteres do IBAN correspondem ao país de domiciliação da conta, e os dois caracteres seguintes são de controlo e permitem validar o código do país. Todos os códigos IBAN de contas domiciliadas em Portugal começam por PT50. Os restantes caracteres correspondem ao NIB (Número de Identificação Bancária) da conta. O NIB é composto por 21 dígitos, organizados da seguinte forma: código do banco (4 digitos); código do balcão ou agência (4 digitos); número de conta (11 digitos); dígitos de controlo (2 digitos). Considere a função le_iban_pt apresentada abaixo que efectua a leitura de códigos IBAN correspondentes a contas domiciliadas em Portugal. Defina os tipos IBAN e NIB, por forma a que estes ocupem a menor memória possível, e a função abaixo compile e funcione correctamente. IBAN le_iban_pt() { IBAN i; NIB n; scanf("%c%c%2d%4d%4d%11s%c%c", &(i.pais[0]), &(i.pais[1]), &(i.controlo), &(n.banco), &(n.agencia), n.conta, &(n.controlo[0]), &(n.controlo[1])); i.nib = n; return i; typedef struct { int banco; int agencia; char conta[12]; char controlo[2]; NIB; typedef struct { char pais[2]; int controlo; NIB nib; IBAN; 3/12

I.d) Um número racional é todo o número real que possa ser expresso como o quociente de dois números inteiros (numerador/denominador). Implemente a função aproxima, cujo protótipo é apresentado abaixo, e que calcula a melhor aproximação racional a um determinado número real positivo v. A melhor aproximação é aquela em que o valor absoluto da diferença entre o valor dadoveovalor aproximado r[0]/r[1] é o menor possível. O numerador e denominador da aproximação devem ser guardados em r[0] e r[1], respectivamente. Assuma que tanto o numerador como o denominador estão compreendidos entre 1 e 1000. void aproxima(double v, int r[2]); Por exemplo, se v = 2.5, uma melhor aproximação será r[0] = 5 e r[1] = 2, com um erro de 2.5 5 2 = 0. Nota: Pode utilizar a função double fabs(double x), que calcula o valor absoluto de um dado número real x. A conversão de int para double pode ser forçada através de (double). void racional(double x, int r[2]) { int i, j; double a, err = 1000.; for (i = 1; i <= 1000; i++) for (j = 1; j <= 1000; j++) { a = ((double) i)/((double) j); if (fabs(a-x) < err) { r[0] = i; r[1] = j; err = fabs(a-x); A solução aqui apresentada é quadrática. Existem soluções lineares no pior caso, mas esta seria o suficiente para obtenção da cotação total. 4/12

Grupo II (1.5+1.5+1.5+1.5 = 6.0 val.) II.a) Considere o seguinte programa escrito em linguagem C: #include <stdio.h> #define N 100 void preenche(int m[n][n]) { int i, j; for (i = 0; i < N; i++) for (j = 0; j < N; j++) m[i][j] = j < i? -i : j; int soma(int m[n][n]) { int i, j, soma = 0; for (i = 0; i < N; i++) for (j = 0; j < N; j++) soma += m[i][j]; return soma; int main() { int m[n][n]; preenche(m); printf("%d\n", soma(m)); return 0; Sabendo que a soma da série 1,2,...,n é dada por, 1 + 2 + 3 +... + n = n(n + 1) 2 indique qual o valor impresso no standard output pelo programa acima. Sugestão: Avalie o funcionamento do programa para uma matriz de pequena dimensão e depois extrapole para o valor de N indicado. 100 (100+1) 2 100 = 4950 5/12

II.b) Considere o seguinte programa na linguagem C: #include <stdio.h> #include <string.h> int main() { char s[] = "abcdefg"; int i; for (i = 0; i < strlen(s); i++) if (s[i] >= a && s[i] <= z ) s[i] += A - a ; else s[i]++; printf("%s\n", s); return 0; Qual a sequência de caracteres enviada para o standard output pelo programa acima. ACCEEGG 6/12

II.c) Considere o seguinte programa na linguagem C: 1 #include <stdio.h> 2 3 #define DIM 5 4 5 void f (int v1[], int v2[], int v3[], int p) { 6 if (p < DIM) { 7 v3[p] = XXXX? YYYY : ZZZZ; 8 f(v1,v2,v3,++p); 9 10 11 12 int main() { 13 int v1[] = {2,3,3,5,5, v2[] = {2,1,3,3,5, v3[dim]; 14 f(v1,v2,v3,0); 15 return 0; 16 Indique qual a expressão que deverá substituir XXXX? YYYY : ZZZZ; na linha 7 por forma a que v3={4,2,6,2,10 após a última chamada à função f. Este exercício tinha várias soluções aceitáveis. Uma das soluções seria a seguinte: v3[p] = p%2==0? v1[p]+v2[p] : v1[p]-v2[p]; 7/12

II.d) Considere o seguinte programa na linguagem C. #include <stdio.h> #define N 5 #define M 3 int contaiguais (int v1[n], int v2[m]) { int i, iguais = 0; for (i = 0; i < N; i++){ int j = 0, found = 0; while (j < M &&!found){ if (v1[i] == v2[j]){ iguais++; found = 1; j++; return iguais; int main() { int v1[] = {1,2,3,4,5, v2[] = {1,10,5; printf("%d\n", contaiguais(v1,v2)); return 0; Para este programa, indique a expressão da complexidade assimptótica mais apertada para descrever o comportamento no pior caso em função de N e de M. Note que apenas será aceite como resposta correcta a expressão mais apertada para o limite assimptótico. O(NM) 8/12

Grupo III (1.5+1.5+1.5+1.5 = 6.0 val.) III.a) Considere a aplicação do algoritmo bubblesort ao seguinte vector: a = { 10, 1, 6, -2, 11, 2, 0, 4, 7, -4 Supondo que em cada iteração o algoritmo percorre o vector da direita para a esquerda, qual o conteúdo do vector a após as duas primeiras iterações? a = { -4,-2,10,1,6,0,11,2,4,7 9/12

III.b) Considere que se pretende ordenar o vector a abaixo, utilizando o algoritmo de ordenação heapsort. O heapsort começa por transformar o vector a ordenar num amontoado (heap), após o que vai efectuando a extracção dos elementos do amontoado e colocando-os na sua posição final no vector. Qual será a configuração do vector após a extracção do terceiro elemento? a = { 12, 15, 3, 7, 9, 6, 18, 11 a = { 11, 9, 6, 7, 3, 12, 15, 18 10/12

III.c) Considere o seguinte vector de números inteiros sem sinal, que se encontram representados por palavras de 6 bits: a = { 25, 12, 3, 18, 20, 1, 2, 14, 6. Qual o conteúdo do vector após o primeiro passo do algoritmo de ordenação radix sort MSD, em que em cada passo os elementos são ordenados considerando 2 bits (ou seja, byte = 2 bits)? a = { 12, 3, 1, 2, 14, 6, 25, 18, 20 11/12

III.d) Considere as seguintes afirmações relativas à complexidade dos algoritmos de ordenação: a. O algoritmo InsertionSort é Θ(n lg n). b. O algoritmo SelectionSort é O(n 2 ). c. O algoritmo QuickSort é O(n 2 ). d. O algoritmo HeapSort é O(n lg n) e. O algoritmo MergeSort é Ω(n 2 ) Para cada uma das afirmações, indique se é verdadeira ou falsa. a) b) c) d) e) F V V V F 12/12