Questão 1: O histograma deve ser: [0, 1, 4, 2, 0, 3, 0,, 0, 2] Exemplo: Para a matriz

Documentos relacionados
SCC Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I

Listas ligadas/listas encadeadas

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Lista Encadeada (Linked List)

Matrizes Esparsas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

GEQ Prof. Paulo R. Coelho. Lista para prova

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR

Introdução a Programação. Listas Encadeadas

SCC 202 Algoritmos e Estruturas de Dados I. Listas Lineares Encadeadas Alocação dinâmica

SCC 202 Prova 1. 28/9/2010 Resolução e Comentários

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de dados

INF 1620 Estruturas de Dados Semestre Segundo Trabalho: Jogo de Caça-Palavras

Listas e matrizes esparsas. SCC122 Estruturas de Dados

Lista Encadeada: algoritmos. Algoritmos e Estruturas de Dados I

char* prefixo (char* str, int n);

Listas Lineares. continuando...

INF 1620 P4-13/12/01 Questão 1 Nome:

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)... árvores e grafos são não lineares!

INF 1620 P4-06/12/02 Questão 1 Nome:

Universidade de São Paulo

Métodos Computacionais. Listas Encadeadas

INF 1620 P4-27/06/02 Questão 1 Nome:

Representações de Grafos

AULA 14 ESTRUTURA DE DADOS

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

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

INF 1620 P2-01/11/03 Questão 1 Nome:

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e recodificações em C dos originais:

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

Princípios de Desenvolvimento de Algoritmos MAC122

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Pipeline de Visualização 2D

Lista 02: Pilhas & Filas

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

CCM0118 Computação I Curso de Ciências Moleculares Turma 22 Segundo Semestre de 2012 Segunda Prova 25 de outubro de 2012

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

TAD: Tipo Abstrato de Dados (parte 2)

MC-102 Aula 20 Ponteiros III

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares)

INF 1620 P3-02/07/02 Questão 1 Nome:

Linguagem C: Listas Encadeadas

Atividade de laboratório listas encadeadas simples

DAS5102 Fundamentos da Estrutura da Informação

Roteiro para Laboratório - GRAFOS

Aplicações de listas e outras estruturas

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Linguagem de Programação I. Aula 08 Linguagem C: Arrays

Métodos Computacionais. Tipos Estruturados

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

TAD: Tipo Abstrato de Dados (parte 2)

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

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

1. Listas sequenciais versus listas ligadas. Lista sequencial

INF P4-12/12/09 Questão 1 Nome:

Aula 25: Alocação Dinâmica

Alocação Dinâmica. Túlio Toffolo BCC202 Aula 02 Algoritmos e Estruturas de Dados I

Alocação dinâmica de Memória

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

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Segunda Prova 19 de maio de 2008

Estruturas de Repetição

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

Princípios de Desenvolvimento de Algoritmos MAC122

Professora Jeane Melo

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Linguagem C ponteiros

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

BCC202 - Estrutura de Dados I

Alocação Dinâmica de Memória

UNIVERSIDADE DA BEIRA INTERIOR

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

INF 1620 P4-09/07/03 Questão 1 Nome:

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

Estruturas de Dados I

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Lista Encadeada Simples. Métodos Computacionais Victor Casé

Exercícios sobre repetição. 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos.

Alocação Dinâmica. Introdução à Computação

Revisão: Tipo Abstrato de Dados Recursividade

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C

Alocação Dinâmica em C

Programação científica C++

UNIVERSIDADE FEDERAL DO PAMPA CAMPUS BAGÉ ALGORITMOS E PROGRAMAÇÃO. Matrizes. Prof. Alex Camargo

INSTRUÇÕES DE REPETIÇÃO

ESTRUTURA DE DADOS VARIÁVEIS E PONTEIROS

Estruturas de Dados Filas

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Estruturas de Dados. Módulo 6 Matrizes. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Aula 9 Oficina de Programação Matrizes. Profa. Elaine Faria UFU

Transcrição:

MAC122 rincípios de Desenvolvimento de Algoritmos Lista de exercícios 01 rof.: aulo Miranda Instituto de Matemática e Estatística (IME) Universidade de São aulo (US) Alocação Dinâmica & Matrizes Questão 1: A) Faça uma função em C que recebe uma matriz de inteiros A, com m linhas e n colunas, contendo valores no intevalo de 0 a 255, e que devolve o seu histograma, com as frequências (número de ocorrências) para cada um dos valores do intervalo. O histograma deve ser representado como um vetor de inteiros de 256 posições alocado dinamicamente. Use o protótipo abaixo: int *Histograma(int **A, int m, int n); Exemplo: ara a matriz 1 2 3 5 3 5 2 255 255 2 5 2 O histograma deve ser: [0, 1, 4, 2, 0, 3, 0,, 0, 2] B) Faça a função abaixo em C que recebe uma matriz de inteiros A, com m linhas e n colunas, alocada dinamicamente (conforme a representação mostrada em aula, onde cada linha é armazenada em um vetor separado), e que altera a própria matriz A de modo a inverter suas linhas, virando a matriz na vertical (Flip Vertical). void FlipVertical(int **A, int m, int n); Exemplo: antes depois 5 3 7 3 8 2 12 6 0 4 10 9 4 10 9 12 6 0 3 8 2 5 3 7 C) Usando a mesma representação de matriz do item anterior, agora faça a inversão dos elementos na horizontal (espelhar horizontalmente). Use o protótipo abaixo: void FlipHorizontal(int **A, int m, int n); D) Uma matriz é triangular inferior se ela é quadrada e todos os seus elementos acima da diagonal principal são nulos. Exemplo: 5 0 0 0 0 3 8 0 0 0 0 6 4 0 0 2 10 9 1 0 8 7 1 3 8 Na representação usual existe um desperdício de memória de (n-1)n/2 elementos nulos, onde n é a ordem da matriz. Uma representação linearizada alternativa em um vetor com n(n+1)/2+1 elementos é mostrada abaixo, onde os valores nulos acima da diagonal são representados uma única vez na primeira posição do vetor: [0, 5, 3, 8, 0, 6, 4, 2, 10, 9, 1, 8, 7, 1, 3, 8] Escreva uma função que converte os índices (i,j) de um elemento da matriz usual para o seu índice correspondente na representação linearizada.

Estruturas ligadas Questão 2: Dada a definição abaixo: struct Reg{ int num; struct Reg *prox; ; A) Faça uma função que recebe o endereço do primeiro nó de uma lista ligada simples (sem nó-cabeça) e que devolve o número de elementos da lista. int NumElementos(struct Reg *p); Ex: Assumindo a lista abaixo como entrada, a função deve devolver tamanho 5. 8 2 1 3 9 B) Faça uma função que recebe o endereço do primeiro nó de uma lista ligada simples (sem nó-cabeça) e que verifica se um valor fornecido x pertence a lista. int ertence(struct Reg *p, int x); Use o protótipo acima onde p aponta para o primeiro nó da lista de entrada fornecida e x é o valor a ser procurado. A função deve devolver verdadeiro ou falso. Ex: Assumindo a lista do exemplo anterior como entrada, no caso de x=3 a função deve devolver verdadeiro. Já se x=4 a função deve devolver falso. C) Faça uma função que recebe duas listas ligadas simples (sem nó-cabeça), e que devolve uma terceira lista (ligada simples) contendo a intersecção das duas primeiras. struct Reg *Interseccao(struct Reg *p, struct Reg *q); Use o protótipo acima onde p aponta para o primeiro nó da primeira lista fornecida e q aponta para o primeiro nó da segunda lista. A função deve devolver o endereço da lista contendo a intersecção. Essa lista deve ser alocada dinamicamente pela função. Obs: Você pode usar as funções dos itens anteriores como funções auxiliares. Assuma também que não existem elementos repetidos nas listas fornecidas. Exemplo: Assumindo p como no exemplo do item A, e q apontando para uma lista com os números {7,3,5,1, teremos a lista de intersecção contendo apenas os números 3 e 1.

Questão 3: A) Faça uma função que recebe o endereço do primeiro nó de uma lista ligada simples (sem nó-cabeça) e que elimina todas as ocorrências de um dado valor. A função deve devolver o endereço do novo início da lista. Ex: Assumindo a lista abaixo como entrada e valor de remoção 8, 8 2 8 3 8 teremos a nova lista: 2 3 struct Reg *RemoveNum(struct Reg *p, int a); Use o protótipo acima onde p aponta para o primeiro nó da lista de entrada fornecida e a é o valor a ser eliminado. OBS: Você deve liberar a memória dos nós que foram eliminados da lista e reaproveitar os demais sem a necessidade de alocar memória adicional. B) Faça uma função que recebe o endereço do primeiro nó de uma lista ligada simples (sem nó-cabeça) e que remove todos os elementos repetidos da lista. Você pode usar a função do item anterior como função auxiliar. struct Reg *RemoveRepetidos(struct Reg *p); Use o protótipo acima onde p aponta para o primeiro nó da lista de entrada fornecida. A função deve devolver o endereço do novo início da lista. Exemplo: ara a lista de entrada do item anterior, teremos: 8 2 3

Questão 4: Dadas as definições abaixo: struct node { int item; struct node *prox; ; typedef struct node* lista; Explique o funcionamento da função XXXX abaixo, dado que ela recebe o endereço do primeiro nó de uma lista encadeada simples cujo último nó aponta para NULL: OBS: Faça desenhos ilustrando exemplos do progresso do algoritmo a cada iteração do laço. lista XXXX(lista x) { lista t, y, r; y = x; r = NULL; while (y!= NULL) { t = y->prox; y->prox = r; r = y; y = t; return r; Exemplo de chamada dessa função: int main(){ lista p = NULL; lista t; int i; /* adiciona alguns elementos na lista p */ for(i = 3; i >= 0; i--){ t = (lista)malloc(sizeof(struct node)); t->item = i; t->prox = p; p = t; p = XXXX(p); ImprimeLista(p); return 0;

Estruturas ligadas, Matrizes e Arquivos Questão 5: Um polígono pode ser representado pela sequência de seus vértices, armazenados em uma lista circular em sentido horário. Exemplo: (50,50) (600,50) X 50 50 50 400 600 50 Y (50,400) (600,400) Considere a seguinte estrutura: struct Vertice{ float x; float y; struct Vertice *prox; ; typedef struct Vertice* oligono; Você deve implementar as seguintes funções: 600 400 int NumeroDeVertices(oligono ); Função que conta o número de vértices de um polígono fornecido. or exemplo, no caso da lista circular do exemplo acima, a função deve devolver 4. oligono oligonoorontomedio(oligono ); Função que devolve um segundo polígono derivado de, de tal modo que seus vértices são obtidos pelos pontos médios dos lados do primeiro polígono. ' Exemplo: 325 50 (50,50) (600,50) X 50 225 600 225 Y (50,400) (600,400) OBS: O polígono gerado deve ser armazenado em uma segunda lista circular que deve ser alocada dinamicamente. A função pode devolver o endereço de qualquer um dos vértices do polígono gerado (não existe uma ordem preferencial). A função deve devolver NULL se o polígono for inválido, isto é, com menos que três vértices. Faça um programa que lê um polígono de um arquivo texto fornecido, contendo as coordenadas de seus vértices (um vértice por linha), e que gera uma imagem de 640x480 contendo o desenho de uma sequência de polígonos por ponto médio, até um número máximo de repetições R. O nome do arquivo de saída deve ser "poligono.pgm". 325 400 (a) (b) (c) (d) Figura 1: (a,c) Arquivos de entrada. (b,d) Imagens dos polígonos por ponto médio de a e c (com R=10 e 20 respectivamente).

Dica: utilize a função auxiliar abaixo que desenha um segmento de reta AB na imagem com o valor val fornecido. A imagem é dada pela matriz M com m linhas e n colunas, A = (x1,y1) e B = (x2,y2). void DesenhaReta(int **M, int m, int n, int x1, int y1, int x2, int y2, int val){ float x,y,dx,dy; int xi,yi; dx = (x2-x1); dy = (y2-y1); if(fabsf(dx) > fabsf(dy)){ dy = dy/(fabsf(dx)); dx = dx/(fabsf(dx)); else{ dx = dx/(fabsf(dy)); dy = dy/(fabsf(dy)); x = (float)x1; y = (float)y1; xi = x1; yi = y1; while(xi!= x2 yi!= y2){ if(yi >= 0 && yi < m && xi >= 0 && xi < n) M[yi][xi] = val; x += dx; y += dy; xi = (int)(x + 0.5); yi = (int)(y + 0.5); if(y2 >= 0 && y2 < m && x2 >= 0 && x2 < n) M[y2][x2] = val;