Prof. João B. Oliveira
1 Exer í ios sequen iais
1.0 Es reva, ompileeexe uteoprograma bomdia. . Anote os omandosusadospara
ompi-lareexe utar. Emseguidaintroduza pequenoserros emseuprograma (umde ada vez!)
e veja as mensagens quesão dadas nopro esso de ompilação.
1.1 Es reva um programa que apenas imprime duas variáveis
a
eb
, sem dar valores a elas. Vejao que a onte e.1.2 Es reva um programa que ria alguns inteiros e oats e depois imprima os valores que
estão neles, ou que vo ê olo ou neles. Para o printf(), des ubra que fazem as opções
%d, %7d, %07d,%f, %12.8f, %2.2f, %e, %E.
1.3 Des ubra oque faz o operadorsizeof().
1.4 Des ubra quantos bits são usados no seu ompilador preferido para armazenar os tipos
short int, int, long int elong long int. Use afunção sizeof() para isso.
1.5 Es reva um programa que de lara duas variáveis inteiras
a
eb
, dando valores a elas. Depois faça om que o programa troque os valores das variáveis, passando o valordea
parab
e vi e-versa.1.6 Es reva um programa que faz onversão de temperaturas de Fahrenheit para Celsius,
segundo a fórmula onhe ida:
C =
5
9
∗ (F − 32)
Depois de pronto, use seu programa para des obrir em que temperatura as duas es alas
oin idem. Usepapel,lápiseumpou odeálgebradoprimárioe onrmeoresultado om
seu programa. Analise um pou o antes de programar e pense nisso: sevo ê programar a
fórmula de onversão (na maioria das linguagens de programação)exatamente omo ela
foi dada a ima,o resultado da onversão será sempre zero. Expliqueo motivoe orrija.
1.7 Es reva um programa que re ebe as dimensões (em metros) de um terreno retangular
e em seguida as dimensões de uma asa (também em metros e retangular) sobre este
terreno. Em seguida al ule e apresente a área livredo terreno, em metros quadrados e
emper entagem.
1.8 Altereseuprogramadoexer í io1.7parafun ionar omuma asaredondaemumterreno
redondo.
1.9 Es revaumprogramaparaum aixadeban o,quere ebeumvalorinteiro
R
edetermina onúmero de notas de 100, 50,10,5 e1 reaisne essário para pagar aquantiaR
. Faça de formaque onúmerode notas usadoseja o menorpossível.1.10 Altere seu programa anteriorpara que eletrabalhe om notas de 11, 5e 1 reais e a he a
formade dar tro ode 15reais.
1.11 Es reva um programa que re ebe um horário (horas, minutos, segundos) e determina
1.12 Sevo ê estiveraumaaltura
h
(emmetros)sobreoníveldomar,sua distân iad
(também emmetros) até ohorizonteé dada aproximadamente pelafórmulad =
√
h
2
+ 2rh,
onde
r
é o raio da Terra ( er a de 6378150 metros) 1. Es reva um programa que re ebe
uma altura
h
e determina a que distân ia está o horizonte. Para matar a uriosidade, aquiestão as alturas de alguns lo ais interessantes:Lo al Altura
Torre de Pisa(topo) 55m
Taj Mahal (topo da úpula) 65m
Foguete Saturno 5 110 m
Torre Eiel (plataforma3) 276 m
Pãode Açú ar 394 m
World Trade Center (torre 1) 417 m
Cristo Redentor 704 m
Mont Blan 4810 m
K2 8611 m
Monte Everest 8830 m
Avião 30 a30.000 m
1.13 Es reva um programa que re ebe dois pontos no plano,
P
1
= (x
1
, y
1
)
eP
2
= (x
2
, y
2
)
e al ula:(a) A distân iaentre eles, dada por
d(P
1
, P
2
) =
q
(x
1
− x
2
)
2
+ (y
1
− y
2
)
2
.(b) A in linação da reta
y = ax + b
que une estes dois pontos, dada pora = (y
2
−
y
1
)/(x
2
− x
1
)
. Faça uma análise de seu programa e verique que existem ertos valores quefazem om queele apresenteum erro. Identique oerro.1.14 Adapte seu programa do exer í io 1.13 para re eber as oordenadas dos entros de dois
ír ulos, junto om seus raios. Em seguida seu programa deve determinar se os dois
ír ulos seinterse tam ounão. Depoisadapte seu programa para não pre isar usar uma
raiz quadrada.
1.15 Vo ê resolveu dar uma força para a NASA, que deseja al ular o peso das pessoas em
diferentes planetasdosistemasolar. (Issovaiter importantes onsequen iasnaexpansão
dahumanidadepelosplanetas: osgordinhosvãopreferirplanetasondebaixemdepeso,os
magrinhosvãoquerero ontrário). Es revaumprogramaquere ebeopesodeumapessoa
(em Newtons) e al ula o novo peso nos orpos elestes, de a ordo om as onversões
gravita ionaisde adaplaneta(estas onstantesestãonormalizadasemrelaçãoà onstante
daTerra),dadas abaixo:
1
Atenção: esta fórmula é uma aproximação apenas, baseada em geometria simplese sem levarem onta
umasérie defatoresatmosféri os. Tambémper ebaquesevo ê usarasunidadesemmetrososnúmerosserão
Mer úrio 0.3649337410 Vênus 0.9041794087 Marte 0.3812436289 Lua 0.1651376146 Terra 1 Júpiter 2.6513761467 Saturno 1.1386340468 Urano 1.0693170234 Netuno 1.3506625891 Plutão 0.2252803261
Depois de fazer as onversões, imprima o quanto as pessoas pesariam se estivessem na
Terra.
2 Exer í ios om de isão
2.0 Es reva um programinhaque re ebe os oe ientes
a
,b
ec
de um polinmiode segundo grauax
2
+ bx + c
e determina quando este polinmioé iguala zero. Tome uidado para al ulartudo orretamentee avise ousuário sehouverem situaçõesde erro.2.1 Es reva um programa que re ebe três valores e imprime estes três valores em ordem
res ente. Depois faça o mesmo para quatro valores, e veja omo a mais ompli ado.
Oque vo ê espera para in o valores?
2.2 Vo ê pode abrir uma aderneta de poupança depositando o valor
a
no primeiro mês e o valorb
nos meses seguintes. Supondo que a taxa de juros que vo ê re ebe pelo seu dinheiro éj
( omj > 1
, esperamos...) es reva um programa que listaquanto dinheiro vo êterá na ontaa adamês. A heovalor orretodej
,depoissuponha quea = b
efaça as ontaspra ver quantovo ê pode olo arna sua poupança todomês. Depois des ubraquando vo ê terá um milhão.
2.3 Faça um programinhaque re ebe um ano everi a seeste ano era bissexto, imprimindo
uma mensagem. As regras (pou o onhe idas) para um ano ser bissexto são:
(a) Eledeve ser divisívelporquatro.
(b) Se for um ano terminado em00, deve ser tambémdivisívelpor 400.
2.4 Es reva um programa que re ebe as quatro notas daavaliação de um aluno (três provas
e uma nota dos trabalhos) eapresenta os seguintes resultados:
(a) A médiado aluno (supondo pesos iguais).
(b) Se a últimanota era zero, o programa assumeque esta nota ainda não existe, e diz
aoaluno qualnota ele deve tirar para ter média sete.
2.5 Na ompetiçãode mergulho olímpi a as notas de um atleta são dadas assim: oitojuízes
dão notas entre 0 e 10. Em seguida a nota mais baixa e a mais alta são des artadas e a
nota nal do atleta é dada pela média das seis notas restantes. Faça um programa que
re ebe as oitonotas orrespondentes aum atletae apresentaa sua nota nal.
2.6 Na ginásti a olímpi a as notas de uma equipe são dadas assim: seis atletas fazem seus
exer í ios e re ebem suas notas entre 0 e 10. Em seguida a nota geral da equipe é dada
pelamédia das quatro maioresnotas re ebidas. Façaum programaque re ebe seis notas
vo ê ou en arregado de fazer a onversão de datas entre as duas ivilizações. Por
oin idên iaoanodostermopilitastemamesmaduraçãodoanoterrestre,mas édividido
de maneiradiferente: amenorunidade de tempoéoblip,quedura 3segundos terrestres.
Quarenta blips fazem um tak, que é a próxima unidade. Quinze taks fazem um salek, e
30saleks fazem um mazel. Oito mazel fazemum brat,e73brat ompletamoano inteiro.
Com estas informações, resolva:
•
Es reva um programa que re ebe uma data terrestre no formato dia mes hora min seg e imprimea data noformato termopilita: brat mazel salek tak blip.•
Faça um segundo programa que faz a onversão ontrária, do ano termopilitapara oano terrestre.•
Aproveite e onstrua uma tabelade onversões das unidades de tempotermopilitas, dizendo o quanto ada uma delas vale nas unidades terrestres.2.8 Em outubro de 1793 a re ém instituída Repúbli a Fran esa olo ou em vigor um novo
alendário, que foi usado até 1806. Neste alendário o ano era dividido em 12 meses
de exatamente 30 dias ada um, seguidos de 5 dias sem mês (eram seis dias em anos
bissextos). Osnomes destes12 meses eram:
(1)Vendémiaire (vindima) (5)Pluvise ( huvoso) (9)Prairial (pastagem)
(2)Brumaire (nevoeiro) (6)Ventse (ventoso) (10) Messidor ( olheita)
(3)Frimaire(geada) (7)Germinal(semeadura) (11) Thermidor ( alor)
(4)Nivse (nevado) (8)Floréal (ores ên ia) (12) Fru tidor(frutuoso)
Alémdisso, adamêseradivididoemtrêsdé adasde 10dias ada,eodé imodiaera um
diadedes anso(issonãodeixouo alendáriomaisquerido,poisno alendárioantigoodia
dedes ansoa onte iaa adasetedias). Osdiaseram hamadosdePrimeiroatéDé imoe
eramdivididosem10horasde 100minutos, adaumadivididaem100segundos(nenhum
desses tinhaamesmaduração das unidades quetemoshoje). Os in o/seis dias semmês
que ompletavam o ano eram hamados de Dia da Virtude, do Gênio, do Trabalho, da
Razão, daRe ompensa e daRevolução eeram sempre feriados.
Sabendotudoisso,es revaumalgoritmoquefaza onversãodedatasentreos alendários.
3 Exer í ios om repetição
3.0 Refaça o programa do exer í io 2.2 usando repetições e veja omo a sua vida vai ar
muito mais fá il.
3.1 Es revaum programaquelêuma sériedenúmeros,imprimindoamédiadosnúmerosque
já entraram. O programa ini ia perguntando quantos números serão digitados mas não
pode armazenar osvalores que vão hegando. Por exemplo:
Número Média
2 2
5 3.5
7 4.666
2 4
3.2 Es revaumprogramaquedeterminaomaiordivisor omumdedoisnúmeros
a
eb
,usando o algoritmode Eu lides, que naversão abaixo deixa ovalordomaior divisor omum emtmp = a;
a = b;
b = tmp % b;
3.3 Es reva um programinha que re ebe um valorinteiro
n
e diz se este valoré um número primo. Se não for, oprograma apresenta uma listados númerosque dividemn
.3.4 Ummétodosimplesdemultipli ardoisnúmerosinteiros
a
eb
éusadonointeriordaRússia até hoje. Adaptando-o para aEra daInformáti a, oalgoritmopode ser oseguinte:(a) Cria-seum a umulador
x
, ini ializado om zero. (b) Sea
é ímpar,soma-seb
emx
.( ) Multipli a-se
b
por 2.(d) Divide-se
a
por 2e trun a-se, se ne essário.(e) Repete-seos passos anteriores(ex eto o primeiro,obviamente) até que
a
seja zero. Ao nal deste algoritmo,x
armazenará ovalordea ∗ b
. Suas tarefas são:•
Programar oalgoritmoe onmar que elefun iona.•
Expli ar porque elefun iona.3.5 Es reva um programinha que re ebe os oe ientes de um polinmio
ax
5
+ bx
4
+ cx
3
+
dx
2
+ ex + f
e usao métododabisse ção (https://pt.wikipedia.org/wik i/M ©tod o_ da_bisse §£o) para determinarquando este polinmioé igual azero.3.6 Es reva um algoritmo para re eber dois inteiros
n
eb
e es reve o valor den
onvertido para a baseb
. Notequeb
deve ser maior doque 1 (embora existam também onversões para bases negativas).3.7 Es reva um programa que a haas soluçõesinteiras da equação
3X + 2Y − 7Z = 5
para valores de
X
,Y
eZ
entre zero e 100. Prepare-se, pois são algumas dúzias de soluções...3.8 A Lapnia vai estabele er um sistema om apenas três tipos de moedinhas de entavos
lapões e o rei ja de idiu que não vai haver uma moeda de um entavo. Os ministros
dizemque om essade isãoalgunsvalorespodem serimpossíveisde forne er omo tro o,
evo ê deve es rever um algoritmoque re ebetrês valorespropostospara asmoedinhase
des obre quaisosvalores entre 1e100 entavosquenão podemser onstruídos om elas.
Forneça osresultados para os seguintes asos de teste:
•
Moedas de 2, 3 e5 entavos.•
Moedas de 3, 4 e7 entavos.•
Moedas de 2, 4 e7 entavos.•
Moedas de 3, 7 e11 entavos.•
Moedas de 2, 4 e31 entavos.•
Moedas de 5, 7 e17 entavos.•
Moedas de 5, 13e 17 entavos.•
Moedas de 6, 9 e19 entavos.•
Moedas de 7, 9 e19 entavos.3.9 Um método para ál ulo de raizes quadradas de um número
N
já era onhe ido pelos babilniosem... bom, há muito tempo atrás. (Este método tambémé onhe ido omométododeHeron,um matemáti ogregoqueodes reveu 20sé ulosdepoisdosbabilnios,
perto do ano 50 DC.) Começando de um valor ini ial
k
(geralmente valendo um) os babilniosgeravamum novo valordek
de a ordo om a regra:k =
k + N/k
2
.
À medidaque o pro esso é repetido, os novos valores de
k
se aproximam ada vez mais daraizdeN
. Es revaumprograma quere ebeovalordeN
eimprimeosprimeirosdoze valores obtidos om esta fórmula, testando-os para verse eles realmentese aproximam.3.10 Vo ê tem um pêndulo de omprimento
L
onde está pendurado um peso qualquer. O pênduloestá os ilando om um ânguloθ(t)
eumavelo idadeangularω(t)
esabemosque asfunções seguem asaproximaçõesabaixo:θ(t + ∆t) ≈ θ(t) + ∆t ∗ ω(t)
ω(t + ∆t) ≈ ω(t) − ∆t ∗ (g/L ∗ sin θ(t))
onde
g
é a onstante gravita ional. Es reva um programa que re ebe os valores deθ(0)
eω(0)
, um valorpara∆t
e depois al ulaas posiçõesx
ey
dopêndulo a ada instante, até um tempo determinado.3.11 Vo ê tem
N
0
átomos de uma substân ia radioativa,mas sabe que um átomosofre de ai-mento a adaτ
unidades de tempo, em média. Sabendo disso, a físi a determina que o número de átomosN(t)
aolongo dotemposegue a expressãoN(t) = N
0
∗ e
−
t/τ
.
Sabendo disso, es reva um programa que re ebe os valores de
N
0
eτ
e depois al ula a quantidade de átomos a ada instante, até um tempo determinado. Aproveite eal- ule tudo outra vez usando a aproximação abaixo para omparar os dois onjuntos de
resultados:
N(t + ∆t) ≈ N(t) − τN(t)∆t.
3.12 Seus olegasdaBiologia riaramumaba tériaque omelixo, onsumindo er ademetade
de seu peso em lixo todos os dias. (Para fa ilitar, vamos supor que uma ba téria pesa
er a de
10
−11
gramas). Seus olegas tem apenas in o dessas ba térias, mas elas se
dividem em duas todos os dias. A partir daí, es reva um programa que imprime uma
tabela a partir do primeiro dia, quando existem apenas in o ba térias, até dois meses
depois (vo ê terá de usar inteiros longos ou números de ponto utuante para isso). A
tabela deve listar o número do dia, quantas ba térias existem até o momento e quanto
lixo elas omeram naquele dia. Depois de fazer isso, adapte seu programa para estas
situações:
(a) Suponha que as ba térias vivem apenas in o dias. Neste aso, as ba térias que
morremdevem ser des ontadas do total.
(b) Faça seu programa seadaptar àsunidades de peso: de a ordo om a quantidadede
lixo onsumidaasunidades devemser es ritasemmi rogramas(
10
−6
g),miligramas
(
10
−3
g), gramas, quilogramas ou toneladas, usando a maior unidade onde o peso
seja maior do que um. Por exemplo, se for pre iso imprimir 0.0037 gramas, vo ê
3.13 Um dos métodos que determina raizes úbi as de
N
éo métodode Joãozinho, bastante semelhanteao de Heron. Ini iando omk = 1
, ométodosegue a regrak =
2k + N/k
2
3
.
Es revaumprogramaque al ularaizes úbi as omestealgoritmo. Adapteseuprograma
para que ele onrme os resultados!
3.14 Refaça o programa do exer í io 4.5, adaptando-o para fun ionar om datas em anos
diferentes e in luindo anos bissextos om a informação do exer í io 2.3. Use-o para
determinar háquantosdias vo ê nas eu. Teste osprogramas dos seus olegas e onrme
que todos dão os mesmosvalores.
3.15 Com aregra quevo ê pode per eber apartir das equações abaixo, es reva um programa
que al ulao valorde
S
n
para qualquer valorden
maior doque zero:S
1
= 1
S
2
= 2 + 3
S
3
= 4 + 5 + 6
S
4
= 7 + 8 + 9 + 10
S
5
= 11 + 12 + 13 + 14 + 15
3.16 Uma fábri a de panelas pode ortar de 4 maneiras diferentes as hapas de aço usadas
para fazerpanelas grandes e pequenas, e essas maneirassão ilustradas aseguir:
1
2
3
4
Cada orte permite a produção de um número diferente de panelas, e o usto de ortar
a hapa 1 é de R$ 12,o usto de ortar a hapa 2 é de R$15, o usto de ortar a hapa
3 é de R$ 9 e o usto de ortar a hapa 4 é de R$ 18. Neste aso, es reva um algoritmo
queen ontraamaneiramais baratade produzirpelo menos220panelaspequenase145
panelas grandes.
3.17 Vo ê semprepode desenhar umpolígonoregulardentrode um ír uloseeletivertrês ou
mais lados, omo nagura abaixo:
Supondoqueos ír ulostemraioum,es reva umprogramaquere ebeum número
n ≥ 3
e fazas seguintes operações:(a) Determinao omprimento de um lado do polígonode
n
lados.(b) Determina o perímetro do polígono. Qual o valor do perímetro à medida que
n
res e?( ) Determine a área interna do polígono. Pode ser útil saber a área de um triângulo
onde são onhe idos oslados
a
,b
ec
(por oin idên ia, esta fórmulafoi des oberta pelo mesmo Heron do exer í io 3.9...). Ses = (a + b + c)/2
, então a área é dada porA =
q
s ∗ (s − a) ∗ (s − b) ∗ (s − c).
(d) Determinea área externa dopolígono.
(e) Determinequantaslinhasseriamproduzidassetodososvérti es( antos)dopolígono
fossem ligados om os outros vérti es. Por exemplo, para os polígonos da gura
teríamos0,2 e 5retas.
4 Funções
4.0 Es reva uma função que re ebe um inteiro
n
e retornan/2
. Depois es reva uma função que re ebe um inteiron
e retorna3n + 1
.4.1 Es reva uma nova função que usa as funções es ritas em 4.0. A nova função re ebe
um número
n
e se ele for ímpar retorna3n + 1
, se for par retornan/2
. Es reva um programinhaque re ebe um inteiro e usa esta função repetidas vezes até que o resultadoseja 1,imprimindo osnúmerosobtidos.
4.2 Adapte o programa do exer í io anterior para des obrir qual número entre 1 e 1000000
produz a sequen iamais longa até hegarem 1.
4.3 Es reva uma função que re ebe um inteiro
n
e devolve o fatorial den
. Use a função fatorial para es rever a função omb(n,k), que retorna o número de ombinações den
elementos, tomadosk
ak
.4.4 Es reva ummétodoquere ebeuma dataedizquantosdias jásepassaram desdeoiní io
doano.
4.5 Es revaum programaquere ebeduasdatasdomesmoano(ou seja,re ebeapenasmeses
e dias) e al ula quantos dias existem de diferença entre as duas datas. Para fa ilitar,
onsidere que oano não ébissexto.
4.6 Es reva uma função quere ebe inteiros
m
en
e determina o maior divisor omum dem
en
. Sugestão: use o algoritmode Eu lides para isso.4.7 Es reva um método pow(int x, int n) que re ebe x e n e al ula
x
n
. Seu método
tambémdeve fun ionar orretamentequando
n = 0
oun = 1
.4.8 Es reva uma função numdiv(int n) que re ebe um inteiro
n
e retorna o número de divisores den
. Depois es reva uma função ehprimo(int n)que veri a sen
é primo e imprimeuma mensagem natela dizendose éou não é.4.9 Es reva uma função que vai es olher faixas aleatoriamente do seu player de MP3. Vo ê
quer es olher um número de faixa entre 1 e
n
e não quer que seja um número igual aos dois últimos números sorteados.4.10 Es reva uma função que determina raizes quadradas, usando ométododoproblema 3.9.
Esta função re ebe um número
x
e retorna(evidentemente)√
x
.4.11 Es reva uma função que al ula ovalor(aproximado) de
cos(x)
, dado pelaaproximação abaixo:cos(x) ≈ 1 −
x
2
2!
+
x
4
4!
−
x
6
6!
+ · · ·
Façaasoma omtrês termos,ees revaumprograminhaquere ebevaloresde
x
e al ula seu osseno, al ulandotambémafunção ossenodisponívelnasualinguagempreferidaeapresentandoadiferençaentre osresultadosobtidos. Sevo ê a har oerro grandedemais,
re al ule om mais termos e ompare outra vez. Vo ê pode a har bastante útiles rever
funções separadas para al ularpotên ias epara al ularfatoriais.
4.12 Ninguém sabe quem props a onje tura dos primos gêmeos, mas ela sugere que existe
um número innitode pares de números primosnaforma
k
,k + 2
. Porexemplo, 17e19 são primos gêmeos, assim omo 227 e 229 e muitos (innitos?) outros pares. Usando oonhe imento do exer í io 3.3, es reva um programa que a ha pares de números primos
gêmeos.
4.13 Es reva um método soma(int i, int j) que re ebe i e j e retorna a soma de todos
os números de i até j, mas faz isso dividindo o tre ho em duas partes e depois
soma ada parte separadamente.
4.14 Es reva um método re ursivo fatorial(int n) que al ula o fatorial de n e produz
exatamente asaída abaixo parao aso n=5:
Fatorial de 5 Fatorial de 4 Fatorial de 3 Fatorial de 2 Fatorial de 1 Fatorial de 0 Retorna 1 Retorna 1 Retorna 2 Retorna 6 Retorna 24 Retorna 120
Di a: dividaoproblemaemduaspartes: imprimirasmensagensnaordem ertaedepois
olo ar espaçosem bran oantes das mensagens.
4.15 Useseu onhe imentoadquiridonosexer í iosanterioresparaimprimirasprimeirasdoze
linhas do triângulode Pas al omo mostrado abaixo. Faça isso usando funções e não se
importe om otempo gasto.
1 1
1 2
1
1 3
3
1
1 4
6
4 1
1 5 10 10 5 1
4.16 Es reva um método re ursivo numerodeuns(int n) que re ebe um número n e retorna
4.17 Es revaumafunçãoquere ebeuminteiro
n
ea adavezquefor hamadaretornaumvalor inteiro entre 0en − 1.
(Nãoé difí ilinventar umafunção assim, masé ex ep ionalmente difí il fazer uma boa função onde os números não quem se repetindo de formaóbvia.)Se vo ê quiser mais detalhes, sugere-se uma olhadanas páginas
(a) http://ar hive.n sa.uiu .e du/A pps/ CMP/ RNG/ www-rng .htm l
(b) http://www.npa .syr.edu/pr oje ts/r ando m
( ) http://www.physi s. arleto n. a / ou rses /75. 502/ slid es/j ava/ Rand omAp plet /
RandomApplet.html
4.18 A onje tura de Goldba hfoi apresentada porChristian Goldba h emuma arta a
Leo-nhard Euler noano de 1742, ediz:
Todo número par maior do que dois pode ser representado pela soma de dois
números primos.
Apesar de até hoje nãoter sido provada, a onje tura fun ionoupara todos os asos que
foram experimentados. Adapte o programa feito no exer í io 3.3, fazendo uma função
que re ebe um número
n
e retorna zero ou um para indi ar sen
é primo. Em seguida, use estafunção emum programamaior,que re ebeum númeroparm
etenta omprovar a onje tura param
.4.19 Es reva um programa que re ebe um número
x < 1
e apresenta uma soma de frações que aproximax
. Por exemplo, se re ebermosx = 0.543
uma soma de frações que pode aproximarx
seriax ≈ 1/2 + 1/24 + 1/750 = 0.5429999999999
Seu programa deveter algumtipode ontrole para ograu de aproximação desejadopelo
usuário.
5 Vetores/listas
5.0 Es reva um programa que re ebe 10 números inteiros, guarda-os em um vetor e depois
es reve estes númerosna ordem inversa daentrada.
5.1 Es reva um programa que re ebe 10 números inteiros, guarda-os em um vetor e depois
al ulaa média eo desvio padrão dos números dados.
5.2 Es reva um programa que re ebe uma palavra om o máximo de 20 ara teres e tro aa
posição de duplas de ara teres: aramelo vai ser transformado ema aremol.
5.3 Es reva um programa que re ebe uma linha de texto e a odi a, tro ando ada letra
pela letra seguinte no alfabeto. (No aso de apare er um z, onverta-o para a). Tome
uidado para onverter letras maiús ulas em outras letras maiús ulas e minús ulas em
minús ulas.
5.4 Ainda usandoum vetor om seu nome omo amostrade dados,es reva um programinha
quevarre ovetor eremoveasvogais. Imprimaseu novonomeneste formato ondensado,
e veja se dá para entender. Note que remover signi a retirar ompletamente, e não
quer dizer que vo ê pode substituí-las por espaçosem bran o,por exemplo.
5.5 Es reva o programa que de odi a ostextos odi ados pelo programa feitoem5.3.
5.6 Es revaumalgoritmoquere ebeumvetorde50elementose al ulaamédiadoselementos
mas impedindoque valores repetidos entrem novetor.
5.8 Es reva um algoritmo que re ebe um vetor de 20 elementos e a ha o maior e o menor
elementos dovetor, mas passando no vetor uma vez só.
5.9 Façaumafunçãoquere ebeuminteiro
n
e riaumvetorV
,en hendoovetor ominteiros entre zero en.
Para geraros inteiros, use afunção que vo ê desenvolveu em4.17. Altere oalgoritmofeitoparaoexer í io5.6para al ularamédiados númerosnovetor edepoisa har o valorno vetor que está mais próximo damédia.
5.10 Es reva um algoritmo que re ebe dois vetores
A
eB
e en ontra o maior elemento que está ontido nos dois vetores, ouimprimeuma mensagem senãohouver umelemento emomum.
5.11 Es reva um algoritmoque re ebe um vetor
A
ontendo números positivos e negativos e imprimeos últimos4 números positivos novetor.5.12 Crie um programa que preen he um vetor
V
om trintainteiros om valores entre zero e inquentausandoafunçãodoexer í io5.9. Emseguida,implementeduasoutrasfunçõesem seu programa:
(a) Umafunção que examinao vetor e imprimeoselementosrepetidos;
(b) Umafunção que examinao vetor e imprimeoselementosque não serepetem.
Experimente seu programa,imprimindoovetor originale omparando om osresultados
das duas funções. Verique se está tudo ok.
5.13 Es revaum programaquere ebenúmerosinteirosearmazena-osnovetor
A
. Emseguida distribua os elementos deA
entre outros dois vetores,B
eC,
olo ando os elementos paresemB
eosímparesemC
. DepoisimprimaA
,B
eC
everiquequeestá tudo erto. 5.14 Se vo ê a ha que o odi ador do exer í io 5.3 é muito primitivo, pode fazer um maisavançado: em vez de substituir ada ara ter pelo ara ter queestá naposição seguinte,
faça um algoritmo que se adapta: a primeira letra é tro ada pela seguinte no alfabeto,
masasegunda étro adapelaletraqueestáduasposiçõesdepois,ater eirapelaletratrês
posições depois, e assim por diante. Desta forma, a mensagem so orro é odi ada
para tqfswxv.
5.15 Es revaoprogramaquede odi amensagens riadaspeloprograma feitoem5.14. Tente
não arran ar muitos abelos.
5.16 Es reva umprograma quere ebeuma stringde ara tereseseparaaspalavrasdastring,
imprimindo-asumaauma. Depoisadapteseuprogramaparaimprimirafrase, omas
pa-lavrasnaordem ertamases ritasde tráspara afrente: Vida longae prosperidade
se transformaemadiV agnol e edadirepsorp.
5.17 Es reva um programa que imprime as primeiras linhas do triângulo de Pas al. Cal ule
e imprima as primeiras quinze linhas uma depois da outra, mas para fazer isso vo ê só
deve usar um úni ovetor de vinte inteiros. Desta vez não use funçõese tenteser o mais
veloz possível.
5.18 Es reva um algoritmoquere ebe um vetor S de 100 ara teresque representauma linha
detexto ontendopalavrasseparadasporespaçosembran o,eimprimeaspalavrasdessa
5.19 Es reva um algoritmoque re ebe um vetor
A
de valores inteiros ereorganizaA
de forma que os valores pares estejam nas posições ini iais deA
, e os valores ímpares sejam olo- ados nonal. Vo ê não deve usar outrosvetores para ajudarna tarefa!5.20 Faça um algoritmo que re ebe um vetor ordenado (ordem res ente) e reorganiza seus
elementospara que osmaioresestejam no iní ioe m dovetor, eosmenores estejam no
entro.
5.21 De aor do om uma pqsieusa de uma uinrvesriddae ignlsea, não ipomtraemqaul odrem
aslrteas de uma plravaa etãso,a ún ia sioa iprotmatneé quea piremriaeútmlia lrteas
etejasm nolgaur rteo. Orsetopdoeser umattaol bçguanaque v oê pdoeanidalersem
pobrlmea. Itso é poqrue nós não lmeos daa lrtea isladoa,mas aplravaa mooum tdoo.
Para aproveitar este efeito, es reva um algoritmo que re ebe uma linha de texto e faz a
transformação des rita a ima, ou seja, tro a algumas letras de posição dentro de ada
palavra, mas deixa as letras do iní io e do m no lugar erto. Em seguida adapte seu
algoritmopara transformarum texto inteiro, linha porlinha.
5.22 Vo ê está usando vetores para representar onjuntos de valores. Agora vo ê deseja
pro-gramarmétodos para fazer asoperaçõesmais omuns entre onjuntos:
(a) uniãode dois onjuntos
A
eB
(b) interse ção de dois onjuntosA
eB
( ) diferen ade dois onjuntos
A
eB
Es reva omo seriam os algoritmospara fazerestas operações. Pense que
A
eB
podem ter tamanhos diferentes.5.23 Es revaumalgoritmoquere ebe30palavraseemseguidaimprimeaspalavrasfazendo-as
aberemlinhasde 80 ara teres,indo atéa margemdireita. Seualgoritmodevees olher
quepalavras arãoemquelinhaseadi ionarbran osentreaspalavrasparaqueaslinhas
sempreterminem na posição 80.
5.24 Es revaumprogramaquere ebeum vetordenúmerosinteiroseveri asealgumnúmero
que está no vetor é a soma de outros dois números do vetor. Como seu programa se
omporta se um dos elementos do vetor for zero?
5.25 Es reva o algoritmoque re ebe duas palavras
a
eb
e dáum destes três diagnósti os: (a) aspalavrasa
eb
são iguais(b) aspalavras
a
eb
temo mesmotamanho,mas alguns ara teressão diferentes (dizer quantos)( ) apalavra
a
in luia palavrab
(dizer quantasvezes) (d) apalavrab
in lui apalavraa
(dizer quantasvezes)5.26 Es reva um gerador de nomes exóti os. Crie um vetor de sílabas, omo `elp', `tram',
`lat', `rem', `thor', `vax', `loy', `fen', `nax' e quaisquer outras quevo ê a he interessantes
(quanto mais, melhor!). Em seguida gere palavras ao a aso, om tamanhos diferentes
(sorteie o número de sílabas). Es olha as mais interessantes e ompare om as de seus
olegas. Se quiser ser realmente sosti ado, rie vetores para sílabas ini iais, sílabas de
6.0 Es reva um algoritmo que ontrola a ompra de entradas em um inema. O algoritmo
deve representar a o upação dos assentos da platéia (40 las de 50 assentos ada), onde
ada assento pode estar reservado (mar ado om R), omprado (mar ado om C), ou
livre (mar ado om .). Vo ê deve forne er uma função que pro ura um lugar livre na
platéiae informasua posição,bem omo outrafunção que imprimeum mapadaplatéia,
mar ando os lugares de a ordo om sua situação, imprimindo em seguida os totais de
lugareso upados, reservados evagos.
6.1 Es reva oalgoritmode umafunção quere ebeasinformaçõessobreo inemadaquestão
anterior ea ha dois lugares livrespara um asal.
6.2 Es reva umafunção quere ebeasinformaçõessobre o inemadaquestão anteriorea ha
um blo o retangular de lugares livres para uma turma de es ola. Vo ê pode apresentar
dois algoritmosdiferentes dependendo do omoo pedido pode ser feito:
(a) Assuma quea turma pre isade um blo oretangular de
m × n
lugares.(b) Assuma que a turma pre isa olo ar
n
alunos em blo o, mas não importam as dimensõesdo blo o.6.3 Umamatriz
M
256×256
pode ser dividida em4 sub-matrizesquadradas: I IIIII IV
Es revaoalgoritmoquetro aoselementosqueestãonassub-matrizesIIeIII.Emseguida,
apliqueoalgoritmore ursivamentepara visitarasquatro sub-matrizes,fazendoamesma
divisãoetro aem adaumadelas. Seualgoritmosódevepararquandoasub-matriztiver
apenas um elemento. Invente uma formade apresentaramatriz aonal dasequen iade
operações (saída grá a, ara teres, et .).
6.4 Faça uma função quere ebeuma matriz
A
5×5
edois inteirosi
ej
, tro andoas linhasi
ej
damatriz. Imprima oresultado e onrme.6.5 Faça uma função que re ebe uma matriz
A
10×10
ea transpõe.6.6 De lareuma matrizde ara teres
M
80×24
. Sobreesta matriz,façaasseguintes operações: (a) Ini ializetodos oselementos om espaçosem bran o.(b) Usando a função do exer í io 4.17, es olha in o posições quaisquer da matriz e
oloqueum ara ter '.' nestas posições. Estes pontosserão hamados de sementes.
( ) Para asposições
m
ij
que ainda estão em bran o, des ubra qual a sua distân iaaté a sementeS
kl
mais próxima. A fórmula de distân ia a usar pode ser a do exer í io 1.13, mas vo ê também pode usar avariação abaixo (ou outra que vo ê deseje):d(m
ij
, S
kl
) = max (|i − k| , |j − l|)
(d) Para ada ara ter namatriz, oloqueo número dasementeque está mais próxima
(de'1'a'5',ouuseoutros ara teressedesejar),eimprimaamatriznal. Sedesejar,
tente om outras fórmulas de distân ia, mais sementes ou matrizes maiores. Em
um exemplousando ara teres diferentes dos sugeridos a ima, obtivemos oseguinte
+\\\\////////O///////// /// ///: :::: ::: :::: :::: ::: :::: ::: :::: .... ... .... .... ... ... ++\\\\\\\////////////// /// ///: :::: ::: :::: :::: ::: :::: ::: :::. .... ... .... .... ... ... +++\\\\\\\\\\////////// /// ///: :::: ::: :::: :::: ::: :::: ::: ::.. .... ... .... .... ... ... ++++\\\\\\\\\\\\\////// /// ///: :::: ::: :::: :::: ::: :::: ::: ::.. .... ... .... .... ... ... +++++\\\\\\\O\\\\\\\\// /// ///: :::: ::: :::: :::O ::: :::: ::: :... .... ... .... .... ... ... +++++++\\\\\\\\\\\\\\\\ \\/ ///: :::: ::: :::: :::: ::: :::: ::: .... .... ... .... .... ... ... ++++++++\\\\\\\\\\\\\\\ \\\ \\:: :::: ::: :::: :::: ::: :::: ::: .... .... ... .... .... ... ... +++++++++\\\\\\\\\\\\\\ \\\ \\:: :::: ::: :::: :::: ::: :::: ::. .... .... ... .... .... ... ... ++++++++++\\\\\\\\\\\\\ \\\ \\:: :::: ::: :::: :::: ::: :::: :.. .... .... ... .... .... ... ... +++++++++++\\\\\\\\\\\\ \\\ \\:: :::: ::: :::: :::: --- ---- -.. .... .... ... .... .... ... ... ++++++++++++\\\\\\\\\\\ \\\ \\:: :::: :-- ---- ---- --- ---- -.. .... .... ... .... .... ... ... ++++++O+++++++\\\\\\\\\ \\\ \\-- ---- --- ---- ---- --- ---- -.. .... .... ... .... .... ... ... +++++++++++++++\\\\\\\\ \\\ \\-- ---- --- ---- ---- --- ---- -.. .... .... ... .... .... ... ... ++++++++++++++++\\\\\\\ \\\ \\-- ---- --- ---- ---- --- ---- -.. .... .... ... .... .... ... ... +++++++++++++++++\\\\\\ \\\ \--- ---- --- ---- ---- O-- ---- -.. .... .... ... .... .... ... ... ++++++++++++++++++\\\\\ \\\ \--- ---- --- ---- ---- --- ---- ... .... O... ... .... .... ... ... +++++++++++++++++++\\\\ \\\ \--- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ... +++++++++++++++++++++\\ \\\ \--- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ... ++++++++++++++++++++++\ \\\ ---- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ... +++++++++++++++++++++++ \\\ ---- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ... +++++++++++++++++++++++ +\\ ---- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ... +++++++++++++++++++++++ ++- ---- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ... +++++++++++++++++++++++ ++- ---- ---- --- ---- ---- --- ---- ... .... .... ... .... .... ... ...
6.7 Usando a mesma matriz de ara teres do exer í io 6.6, ini ialize-a om bran os e em
seguida passe apenas um elemento
m
ij
de ada olunaj
para 'O'. O elemento a ser alterado está na linhai
, dada por uma das fórmulas abaixo (invente outras depois de testar estas):i(j) = 12 + 11 ∗ sin(j/4)
i(j) = 2 + j ∗ j/300
i(j) = 12 + j ∗ sin(j/6)/9
Tome uidado om problemas de onversão entre inteiros e númerosde ponto utuante!
6.8 Usandoamesmamatrizde ara teres de6.6(oumaior,sedesejar),es revaum programa
queaini ializa om bran ose depois olo a200 elementos'x'queservem omosementes
emposições aleatórias. Emseguidaseu programa apli aas seguintes regrassobre todos
oselementosdamatriz:
(a) Se um elemento tem três vizinhos que são sementes, elevira semente.
(b) Se um elemento tem menos de dois vizinhos que são sementes, elevira bran o.
( ) Se um elemento tem quatro oumais vizinhos que são sementes, elevira bran o.
Aplique estas regras várias vezes sobre toda a matriz, imprimindo a matriz a ada vez
e veri ando omo ela evolui. Tente alterar as regras ou mudar o número de sementes
e reini ie o pro esso. Depois de implementar este programa e ver omo ele fun iona,
a esseosite http://www.math. om/studen ts/w ond ers/ life /lif e.ht ml eexperimente
uma versão maior...
6.9 Des ubra omo fun iona o jogo 2048 (http://gabriele irulli.gi thub .io/ 2048 /) e
programe-o. Depoistente mudar asregras para verse a mais fá il.
7 Stru ts
7.0 Crie uma stru t hamada fra tion que representa uma fração. Vo ê pode es olher
entre duas alternativas:
(a) Apenas om numerador e denominador.
sobre ela:
(a) fra tion mult(fra tion a, fra tion b);
(b) fra tion add(fra tion a, fra tion b);
( ) fra tion redu e(fra tion a);
Ofun ionamentodas duas primeirasfunçõesdeve ser evidente. A ter eira função re ebe
umafraçãoeareduzatéquenumeradoredenominadornãotenhamdivisoresem omum.
(Para isso, vo ê deve a har útil ter feito o exer í io 3.2). Depois de programar as três
funções, teste-as e tenha erteza de que elas fun ionam orretamente. Existe alguma
diferençasigni ativaemguardar-seosinalseparadamenteouissonãotemimportân ia?
7.1 Use as frações do problema 7.0 e reprograme o exer í io 3.9, fazendo as ontas om as
frações que vo ê deniu. Com isto vo ê não deve mais a har floats que hegam perto
daraiz de um número,mas deve a har frações quese aproximam... a he fraçõesque se
aproximam de
√
2
,√
3
,√
5
e onrme o resultado! Já esteja alerta para o fato de que os numeradores e denominadores res em rapidamente e logoestouram a apa idade dearmazenamentodos númerosinteiros,permitindoapenas quatro ou in o iterações.
7.2 Planeje registrospara armazenar os dados de ligações telefni ase os dados de usuários
de telefones. Depoisfaçaoalgoritmopara listartodasas hamadasfeitasporumusuário
emum mês de uso do telefone. Não esqueça de justi ar quaisquer de isõesimportantes
que vo ê tenha tomadoao planejaros registros.
7.3 Crie um registro que representa os dados de um terreno de forma retangular. Depois
de es olher omo representar o terreno, de lare um vetor de 100 terrenos e apresente
algoritmospara:
(a) Listar osterrenos quesão quadrados.
(b) En ontrar o terrenode maior perímetro.
( ) En ontrar o terrenoque menos seassemelha a um quadrado.
7.4 Crie uma stru t que representaum planetaperten enteà Federação, ontendo:
(a) Nome doplaneta,raio (em km),massa (em kg).
(b) Númerode satélites,número de habitantes.
( ) Quadrante e setor dagaláxia.
7.5 Usando osdados do exer í ioanterior, rie vinteplanetas eapresente algoritmospara:
(a) DeterminaronúmerodehabitantesnoquadranteGamma(o ódigoparaoquadrante
Gammaé 6).
(b) Determinarqual osetor mais populoso dagaláxia.
( ) En ontrar o maior planetade ada quadrante.
7.6 Crie uma stru t que representauma nave daFederação, ontendo:
(a) Nome danave, lasse e tamanho(toneladas).
(b) Númerode tripulantes e de naves auxiliares.
7.7 Es reva um programa que ria vinte planetas e dezesseis naves. Preen ha os dados das
naves e planetas om o gerador de nomes 5.26 feito anteriormente, e oloque números
ao a aso para os valores adequados. Depois de tudo isso seu programa deve pedir um
quadrante e um setor da galáxia, imprimindo um relatório om os dados dos planetas e
das naves nolo al.
7.8 Coloquedozenavesromulanasemseu programa. Emita um relatóriosenavesromulanas
e naves da Federação estiverem na mesma posição. No relatório, diga quais naves se
en ontraram e qual delas foi destruída. Faça om que sobre apenas uma nave em ada
quadrante e tome uidado poispodem havermais de duas naves.
7.9 Adapte seu programa para pedir o nome de uma nave e de um planeta. Redire ione a
naveparaoplaneta,masnaoesqueçade veri arseanaveeoplanetarealmenteexistem!
Veriquese háromulanos outra vez e deixe outra batalhaa onte er.
7.10 Crie portões espa iais: in lua uma opção na qual é pedido o nome de uma nave. Esta
nave entra em um portão e sai em outro lugar da galáxia. Seu programa deve dizer a
posição antiga e a nova, veri ando os romulanos outra vez. Não esqueça de veri ar se
vo ê aiu nomesmo lugarde onde saiu, istonão pode a onte er!
7.11 Crie uma stru t que representaos dados de um submarino nu lear:
(a) Nome e lasse.
(b) Deslo amento (toneladas)e tripulantes.
( ) Númerode torpedos (entre 10e 16).
(d) Posição (dois inteiros)
Coloque doze submarinos do time A e doze do time B em um tabuleiro de
12 × 12
posições tomando uidado para que não haja dois submarinos na mesma posição. Emseguida deixe queeles sedestruam emrodadas: ada submarinoque ainda tem munição
atiraumtorpedoqueatingealgumaoutraposiçãodotabuleiro,aniquilandooquehouver
lá (mesmo que seja do mesmo time). Em aso de destruição, um relatório é emitido.
Quando ninguémmais tivertorpedos, emita um relatório om a situaçãonal.
7.12 Altere o jogo doexer í io 7.11 mostrando na tela otabuleiro e onrmando visualmente
o queestá a onte endo.
8 Problemas extras
Algunsdos problemas queestãonestaseçãopodemter soluçõesbastantelentasseusarem
ape-nas laços emais nenhum armazenamento. Muitas vezes existemsoluçõesmuito mais e ientes
seforemusadassequen ias,portantováriosdestesexer í iospodemserfeitosduas vezes,uma
om laços e depois usando-se sequen ias para a eleração.
8.1 Vendo virado
Emuma al uladora,quando olhamos omo visorde abeçapara baixoalgunsnúmerosainda
podem ser lidos (só que om outros valores). Por exemplo, 1995 vira 5661. O quinto número
quepode ser lidode abeça parabaixoé8,eodé imo-quintoé21,quepassa avaler12quando
é vistode abeça para baixo. Vo ê deve responder uma pergunta bási a:
•
Qualomilionésimonúmeroquepodeser re onhe ido omooutronúmero,quandoévisto de abeça para baixo?Vo ê deveresolver um problema simples: para um número inteiro
n
, um sequen iamentoden
éumasequen ia de números onse utivosi
,i + 1
,i + 2
,...,i + j
ondeasoma de todos estes números éigual an
. Traduzindo temosn = i + (i + 1) + (i + 2) + (i + 3) + · · · + (i + j).
Depois de saber disso, vo ê pode veri ar por si mesmo que muitos números tem mais de
umsequen iamento. Porexemplo,onúmero15temquatro sequen iamentos(de omprimentos
5, 3,2 e1):
15 = 1 + 2 + 3 + 4 + 5
= 4 + 5 + 6
= 7 + 8
= 15
Agora, om todas estas importantes informações,vo ê deveresolverum problema bastante
simples: des obrir qualo número entre um e um milhão tem mais sequen iamentos.
8.3 Os dez milhões de peda inhos
Vo êdevedeterminarqualnúmeroentre1.000.000e1.500.000podeserrepresentadomaisvezes
omo oproduto de três inteiros positivos maioresdoque um (não ne essariamentediferentes).
Na ontabilização a ordem dos inteiros não é importante. Assim,
a ∗ b ∗ c
equivale ab ∗ a ∗ c
. Por exemplo, nestas ondições existem 114 triplas de números que quando são multipli adosresultamem 1.000.000.
8.4 Os números de Frodo
OsnúmerosdeFrodosãodenidosdeformabastantesimples: onúmerodeFrodo
F (n)
paran >
1
,é omenornúmero positivoque pode ser dividido portodos os valoresde 1 an
. Conhe endo esta denição, seu trabalho é determinar um algoritmo para a har os números de Frodo eapresentar uma tabela destes números até
n = 40
. Vo ê também deve levar em onta que os números res em depressa. Paran > 22
, será ne essário usar números de 64 bits para representaro resultado orreto.8.5 Fabri ando números
Seja dado um número
a = 1
. Começando oma
, outros números podem ser produzidos seguindo-se asduas regras abaixo:8.0 Multipli ando por2 um número já produzido.
8.1 Dividindo por 3 um número já produzido e des artando a parte fra ionária (ou seja,
fazendo uma divisão inteira).
Por exemplo, seguindo su essivamente estas regras podemoster
10 = 1 × 2 × 2 × 2 × 2 × 2 ÷ 3.
Seu problemaéproduzirtodos osinteirosde 2a100 seguindoapenas asregrasa ima. Para
asaída,todososnúmerosdevemserapresentadosemordem res ente, apresentando-sequantas
Os resultados possíveis não são úni os, todos os inteiros podem ser obtidos em mais de uma
forma. Por exemplo, 3e 40podem ser obtidos pelomenos nas duas formas abaixo:
3 = 2
5
÷ 3
2
= 2
119
÷ 3
74
40 = 2
64
÷ 3
37
= 2
83
÷ 3
39
,
portantodeve-se dar preferên ia aos valores menores. Algumas regrase onsiderações:
8.2 É permitido usar inteiros espe iais, omo long, BigInt e outras implementações de
in-teiros extra-longos.
8.3 Não é permitido usar float, real e double. Funções omo pow(x,y) também são
inválidas.
8.4 Se um número não pre isaser divididopor3, pode-se apresentar 3^0nasaída.
8.6 Vo ê e as mega orporações!
Os diretores de uma grande orporação resolveram promover uma nova políti a de estímulo
aos fun ionários. Esta políti aresume-se emdar aos fun ionáriosalguns minutos pordia para
respirar, tomar afé, apontar os lápis e olo ar fofo as em dia. Infelizmente, há problemas
para de idir exatamenteos horáriosem queisso deve ser feito. Umdos gerentes dáa seguinte
sugestão: Podemos usar um relógio de três ponteiros (horas, minutos e segundos) e ada vez
queostrêsponteirosformaremumaestrela(formadaportrês pontasa120grausumadaoutra:
),teremosum dessesminutosde on entração! Eles arãoespalhadospelodiaeteremos
minutos de folga!! Claro que o gerente é um idiota que deseja impressionar, mas a diretoria
engoliue sobrou pra vo ê resolver o resto doproblema.
É importantequevo ê onheçaos relógiosdafábri apara saber omoresolvero problema:
•
O ponteiro dos segundos não se move ontinuamente entre as mar ações, mas dá saltos a adasegundo;•
O ponteiro das horas move-se tambémaos saltos entre asmar ações de minutos.•
O ponteiro dos minutos tambémse moveemsaltos entre osminutos. Vo ê deveforne er as seguintes informações:8.5 Ototal de vezes em que estes minutos de des anso a onte em emum dia;
8.6 Umalistagem deles noformato hh:mm:ss.
8.7 Omaior intervaloen ontrado entre dois destes minutos.
Não esqueça de que as estrelas podem ser en ontradas em qualquer posição, podendo estar
rota ionadas, de abeça para baixo, et . Também serão riados os super-minutos, quando a
estrela está exatamente em posição verti al. Nestes asos a folga é de in o minutos. Para
Depois de ir num aixa automáti o e re eber vinte reais em moedinhas de 10 e 25 entavos,
vo ê se irrita om os ban os que deixam isso a onte er e resolve es rever um programa para
al ularsempre o menornúmero de moedinhaspara forne er uma erta quantia. (Seu plano é
venderoprogramaparaosban osdepois,porumafortuna.). Comesta intenção,seu programa
deve leros dados de entrada abaixo:
8.8 Onúmero
n
de valores de moedas existentes.8.9 Osvalores
a
1
, a
2
, . . . , a
n
destasmoedasem entavos. Istoéne essárioparaquevo êpossa exportar seu programa para vários países om moedas diferentes apreços exorbitantes.8.10 A quantia
m
aser forne ida om estas moedas.Seu programa deve ler estes dados e determinar o menor número de moedas ne essário para
formar
m
, imprimindo este número e quaisas moedas usadas. Porexemplo,se quiséssemosforne eroitentaesete
enta-vos om as moedas
existen-tes hoje no Brasil, teríamos
a seguinte entrada: 6 1 5 10 25 50 100 87 Se quiséssemos R$1.23 o
ar-quivo onteria a linha 123
ao nal e para 87 entavos
a saída seria
5 moedas
1x50 1x25 1x10 2x1
Emboraesteproblemapossa
pare er simples e
des ompli- ado, sugere-se os seguintes
testes bási os: 3 3 4 4 1 3 2 3 5 7 3 6 11 12 5 9 15 14 11 10 17 11 8.8 As moedinhas
ComoassessordogovernodaLapnia,vo êdeveajudarnareformadosistemamonetáriolo al.
O rei daLapnia deseja estabele er um sistema om apenas três valores para suas moedinhas
de entavoslapões. Aes olhadosvalores paraasmoedasaindavaiser feita,mas numaatitude
auda iosaoreijade idiuquenãovaihaverumamoedadeum entavo. Oministrodasnanças
já disse que om essa de isãoalguns valores podem ser impossíveisde forne er omo tro o, eo
rei hamouvo ê para desempatara questão.
Seu problema édeterminar, re ebendo omo entrada três valores propostos para as
moedi-nhas,quaisosvaloresentre1e100 entavosquenãopodemser onstruídos om estasmoedas.
Faça uma des rição uidadosa de seu algoritmoeforneça os resultados paraos seguintes asos
de teste, já propostos pelo rei:
•
Moedas de 2, 3e 5 entavos.•
Moedas de 3, 4e 7 entavos.•
Moedas de 2, 4e 7 entavos.•
Moedas de 3, 7e 11 entavos.•
Moedas de 2, 4e 31 entavos.•
Moedas de 5,7 e17 entavos.•
Moedas de 5,13e 17 entavos.•
Moedas de 6,9 e19 entavos.•
Moedas de 7,9 e19 entavos.9.1 O que tem nos dois?
Es reva um algoritmo que re ebe duas sequen ias
A
eB
representando onjuntos dem
en
elementosrespe tivamentee emseguidadetermina preen he uma sequen iaC
quedeve onter a interse ção dos onjuntos, ou seja, os elementos que estão emA
e emB
. Lembre que onjuntos não tem ordem e não tem repetições de elementos. Faça o algoritmo para duassituações diferentes:
•
Se as sequen iasA
eB
não tem ordemnenhuma eC
tambémnão pre isa ser ordenado.•
Se as sequen iasA
eB
estão ordenados de forma res ente eC
também pre isa ser ordenado de forma res ente.Depois analise odesempenho dos dois algoritmos. O segundo deveser bemmais rápido.
9.2 O maior pedaço
Suponhaquevo êtemumasequen iadeinteiros
A = (a
1
, . . . , a
n
)
ontendonúmerospositivose negativos. Es revao algoritmoqueexaminaesta sequen iaea haotre hoque produz omaiorvalorquandooselementosdaqueletre hosãosomados. Porexemplo,se
A = (2, −3, 4, 5, −2, 3)
o tre ho de maior soma vai doelemento 4até oelemento 3.9.3 A sequen ia todordenada
Determine o que faz o algoritmo abaixo ao re eber uma lista om vários elementos,
possivel-menterepetidos:
função mistery(lista sequen ia)
lista less, equal, great;
if (length(sequen ia) == 1) retorna sequen ia;
es olha um elemento XX de sequen ia;
para ada x na sequen ia
se x < XX então append x em less
se x = XX então append x em equal
se x > XX então append x em great
retorna on atena(mistery(less), equal, mistery(great));
Perguntaextra: oque a onte e se tro armos aúltima linha por
retorna on atena(mistery(less), mistery(great)) ?
Já que a mudança a ima não deve ter feito o que vo ê a hou que fazia, então omo se deve
mudar o algoritmopara deixar apenas uma ópia de ada elemento?
9.4 Alfabona i
Seja aseguintedenição da função
F
n
,que serve para produzir strings:F
n
=
A,
n = 0
B,
n = 1
F
n−1
+ F
n−2,
n ≥ 2,
onde o sinal
+
representa a on atenação de strings. Sabemos que na práti an ≤ 30
. Seu problemaédeterminarquantas vezes umastringS
(que éforne ida omaté 20 ara teres)estárepetida dentro de uma determinada string
F
n
. Porexemplo, quantas vezes a stringS = AB
está ontida emF
4
? E emF
12
?Para ajudar, aqui estão os
primeirosvalores de
F
n
:F
0
= A
F
1
= B
F
2
= BA
F
3
= BAB
F
4
= BABBA
F
5
= BABBABAB
Alguns testes:n
S = ABA
S = ABB
S = B
S = BBB
S = BAB
5 1 1 5 0 3
10 12 21 55 0 33
15 144 232 610 0 377
30 196417 317811 832040 0 514228
9.5 O ordenador
Uma maneira simples de ordenar uma sequen ia
A
que temn
elementos é dividi-la em duas sequen iasmenores(A
1
eA
2
, om⌊n/2⌋
e⌈n/2⌉
elementosrespe tivamente). Depoisdeordenar as duas sequen ias re ursivamente (a he o ritério de parada que deve ser usado!) podemosunir as duas sequen ias e re ompor a sequen ia maior, retornando-o ao usuário. Es reva um