roblema: Valor de Nomes

Documentos relacionados
rograma (cont) ypedef char bool; oid initstructures(void); ool execstep(int,int,int,int,int); nt findarea(int); ool updateverts(int,int,int,int,int);

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

Introdução à Programação em C

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

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

MC102 Algoritmos e Programação de Computadores

Introdução à Programação C

imprimir seus quadrados.

ESTRUTURAS COMPOSTAS. Variáveis Compostas Unidimensionais VETOR. Baseado nos slides de Rosely Sanches e Simone Senger de Souza

Programação: Vetores

Estruturas Compostas Matriz

Introdução à Programação

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011

Ponteiros e Tabelas. K&R: Capítulo 5

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

Vetores. Marina Andretta. 11 de abril de 2016 ICMC-USP. Marina Andretta (ICMC-USP) sme0230-ipc 11 de abril de / 20

Introdução à Programação em C

MAC 2166 Introdução à Computação para Engenharia Escola Politécnica Primeiro Semestre de 2003 Primeira Prova 2 de abril de 2003

Introdução à Programação. Strings

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Recursão em C

ESTRUTURAS DE CONTROLE

Exemplo 1.1: Algoritmo para encontrar a quantidade de números informados maior que 50, considerando que serão informados 20 números.

Programação Estruturada

Aula 16: Laços aninhados e desvios

SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos

Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados

Laboratório 3 Comandos de repetição while, do-while e for

SSC 0301 IC para Engenharia Ambiental

Introdução à Programação

MC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS C1105 INTRODUÇÃO À PROGRAMAÇÃO EM C

Funções de Entrada e Saída

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Aula 18 Algoritmos básicos de busca e classificação

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

Lógica de Programação I

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Analise o código abaixo:

Introdução à Programação (CC111)

Introdução a Computação

SSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL RESOLUÇÃO EXERCÍCIOS. Profa. Dra. Milena Guessi Margarido

ESTRUTURAS COMPOSTAS

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

Sumário. Ficheiros. Ficheiros

Algoritmos e Estruturas de dados

ESTRUTURAS COMPOSTAS VETOR

CES-11. Algoritmos e Estruturas de Dados. Árvores Operações sobre uma árvore Estruturas para armazenar árvores

Linguagem C: Introdução

ESTRUTURAS COMPOSTAS VETOR

Algoritmos e Programação

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

REVISÃO: VECTORES, MATRIZES, STRINGS

Programação em C Funções e estruturas

Estruturas de repetição

Introdução à Computação II AULA 08 BCC Noturno - EMA896115B

A linguagem C (visão histórica)

Legibilidade do código fonte

Aula 05: Condicionais (if / else)

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

4 MDP. void média e dp(int a[],int n,float em,float ed) 7. Variáveis auxiliares 7. Faça ed igual ao desvio padrão 6 }

C/C++; biblioteca stdio

TÉCNICO DE INFORMÁTICA - SISTEMAS

Introdução à Programação Aula 07. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

3.1 - Funções para manipular dados de entrada e saída padrão

Pontifícia Universidade Católica de São Paulo Faculdade de Ciências Exatas e Tecnologia Depto. de Computação Curso: Ciência da Computação

Linguagem C (repetição)

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Compiladores - Autômatos

Introdução à Programação

1ª Avaliação Oficial Noturno

INF1005: Programação 1. Repetições. 08/03/10 (c) Paula Rodrigues 1

Programação de Computadores II

Programação Estruturada

prim = A ; prim = &A[0];

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

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

Aula 06: Condicionais (switch)

Introdução a linguagem C. Introdução à Programação 06/07

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

LP II Estrutura de Dados

Pesquisa em Árvores Digitais. Adaptado de David M.

Introdução à Programação. Ciclos 1ª parte

Lógica de Programação I

ICMC USP. 1.semestre/2011 SCC120 - ICC. Aula: Comandos em C. Profa. Roseli Ap. Francelin Romero

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

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

UNIVERSIDADE DA BEIRA INTERIOR

Estruturas de Dados Aula 11: TAD Pilha

Técnicas de Programação: Comandos de Controle de DEE UFPB

Operações em Arquivos. MC102 Felipe Bergo

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

Linguagem C Introdução à programação em C

Entrada: M ind

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Transcrição:

roblema: Valor de Nomes Slide 39 tribua-se a cada letra do alfabeto o valor indicado na tabela seguinte. 1 2 3 4 5 6 7 8 9 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 ado um conjunto de nomes completos de pessoas, determinar um nome que nha n letras e cuja soma dos valores das suas consoantes seja mínima. O valor de é dado e não excede 50, embora possam existir nomes com mais de 50 aracteres. O número de nomes do conjunto será também indicado. Caso não exista enhum nome com n letras, o programa deverá escrever inexistente. Caso ontrário, escreve o primeiro nome que está nas condições pretendidas, e a seguir o alor das suas cosoantes.

roblema: Valor de Nomes (Cont) Slide 40 obre o Input n ( 50) o número de letras dos nomes (completos) que interessa considerar; nnomes o número de nomes completos que podem ser dados (não é limitado pelo enunciado); e ainda nn omes sequências de caracteres. Vamos supor que cada uma termina por \n e é um nome completo. Não vamos limitar o tamanho dos nomes completos que o utilizador vai poder inserir. Vamos admitir também que quaisquer duas palavras do nome podem estar separadas por um número arbitrário de espaços (maior ou igual a um). No entanto, se tivermos que escrever um nome, as palavras ficam separadas por um só espaço. Assim, se for necessário guardar um nome relevante para o problema, é suficiente (e talvez necessário) ter uma string que permita guardar 50 letras + até 49 espaços + 1 terminador, ou seja 100 caracteres.

roblema: Valor de Nomes (Cont) Slide 41 lgumas observações sobre o algoritmo 1. Se efectuarmos a leitura dum nome caracter a caracter, podemos controlar o n úmero de letras que vamos lendo. À medida que formos guardando o nome em memória, vamos garantir que cada duas palavras ficam separadas por um só espaç o. 2. Se durante a leitura, chegarmos à conclusão de que o n úmero de letras que o nome temé pelo menos n + 1, então podemos imediatamente descartá-lo. 3. Nesse caso, se estivermos a meio da leitura do nome, devemos lê-lo até ao fim (para podermos aceder ao próximo nome). 4. À medida que formos lendo as letras que formam o nome, podemos ir somando o valor das consoantes. 5. Se a soma parcial exceder a soma m ınima anteriormente encontrada, podemos descartar o nome. Se a soma final for inferior a esse m ınimo e o nome tiver n letras, devemos guardá-lo (dado que passa a ser o melhor até ao momento). 6. Podemos tomar 9n + 1 como valor m ınimo inicial. No máximo as n consoantes que constituem o nome têm valor 9n. Assim, todos os nomes relevantes têm um valor menor do que 9n + 1. 7. Precisamos de duas strings: uma para guardar o melhor nome encontrado até um dado passo, e a outra, para guardar o nome que está a ser tratado.

rograma Slide 42 include <stdio.h> define VOGAL(C) (C == A C == E C == I C == O C == U ) * o y n~ao é! */ define MAXNOME 50*2 nt processa_nome(int, char [], int, char []); ain() int n, nnomes, somamin; char nomemin[maxnome],nome[maxnome]; scanf("%d %d",&n,&nnomes); somamin = 9*n+1; while(nnomes--) somamin = processa_nome(n,nomemin,somamin,nome); if (somamin == 9*n+1) printf("inexistente\n"); else printf("%s\nsoma = %d\n",nomemin,somamin);

rograma (cont) Slide 43 t processa_nome(int n, char nomemin[], int smin, char aux[]) int nletras=0, i=0, soma=0; char c; while((c=getchar()) == c == \n ); do { do { aux[i++] = c; nletras++; if (c >= a && c <= z ) c += ( A - a ); if (!VOGAL(c)) soma += (1+(c- A )%9); while ((c=getchar())!= && c!= \n && nletras <=n && soma < smin); if (nletras > n soma >= smin) { while (c!= \n ) c=getchar(); return smin; if (c == ) { aux[i++] = c; while ( (c=getchar()) == ); while (c!= \n ); if (nletras == n && soma < smin) { for(nletras=0;nletras < i; nletras++) nomemin[nletras] = aux[nletras]; nomemin[nletras] = \0 ; return soma; else return smin;

assando somamin por referência Slide 44 include <stdio.h> define VOGAL(C) (C == A C == E C == I C == O C == U ) * o y n~ao é! */ define MAXNOME 50*2 oid processa_nome(int, char [], int *, char []); ain() int n, nnomes, somamin; char nomemin[maxnome],nome[maxnome]; scanf("%d %d",&n,&nnomes); somamin = 9*n+1; while(nnomes--) processa_nome(n,nomemin,&somamin,nome); if (somamin == 9*n+1) printf("inexistente\n"); else printf("%s\nsoma = %d\n",nomemin,somamin);

assando somamin por referência (cont) Slide 45 id processa_nome(int n, char nomemin[], int *psmin, char aux[]) int nletras=0, i=0, soma=0; char c; while((c=getchar()) == c == \n ); do { do { aux[i++] = c; nletras++; if (c >= a && c <= z ) c += ( A - a ); if (!VOGAL(c)) soma += (1+(c- A )%9); while ((c=getchar())!= && c!= \n && nletras <=n && soma < *psmin); if (nletras > n soma >= *psmin) { while (c!= \n ) c=getchar(); if (c == ) { aux[i++] = c; while ( (c=getchar()) == ); while (c!= \n ); if (nletras == n && soma < *psmin) { for(nletras=0;nletras < i; nletras++) nomemin[nletras] = aux[nletras]; nomemin[nletras] = \0 ; *psmin = soma;

asamentos Estáveis Slide 46 ados n homens e n mulheres, pretende-se formar casais tais que nenhum homem refere uma mulher que não é a sua e que o prefere ao seu marido. Supõe-se que ada pessoa ordenou os do sexo oposto por ordem de preferência estrita. Prefs dos homens Prefs das mulheres 1 2 3 4 2 4 3 1 3 4 2 1 2 4 1 3 2 3 1 4 1 2 3 4 3 1 4 2 2 4 1 3 ada linha da tabela da esquerda tem as preferências dos homens. A i-ésima linha m as preferências do i-ésimo homem (por ordem decrescente).

Slide 47 asamentos Estáveis Ideia do Algoritmo de Gale & Shapley [1962] Prefs dos homens 1 2 3 4 2 4 3 1 3 4 2 1 2 4 1 3 Prefs das mulheres 2 3 1 4 1 2 3 4 3 1 4 2 2 4 1 3 Os homens propõem-se. As mulheres aceitam (provisoriamente) se não tiverem já um parceiro de quem gostem mais. Se tiverem um parceiro de que gostam menos, rejeitam-no, para aceitar o que se está a propor. Então, o homem rejeitado vai ficar livre, e propor-se-á à próxima mulher na sua lista de preferências. Qualquer um dos homens que num dado momento está livre, pode efectuar a sua proposta. O emparelhamento final não depende da ordem pelo qual os homens se vão propondo. O algoritmo é apresentado em pseudo-código a seguir

lgoritmo de Gale-Shapley [1962] Slide 48. Gale and L. S. Shapley, College admissions and the stability of Marriage, American Mathematical onthly, 69:9 15, 1962. ssign each person to be free; hile some man m is free do egin w := first woman on m s list to whom m has not yet proposed; if w is free then assign m and w to be engaged (to each other) else if w prefers m to her fiancé m then assign m and w to be engaged and m to be free else w rejects m (and m remains free) nd:. Gusfield, R. W. Irving, The Stable Marriage Problem Structure and Algorithms, MIT Press, 1989.)