Jump to content

Fazer a divisão de dois números


fnds
 Share

Recommended Posts

À uns dias tive esta ideia, já resolvi o problema 🙂

Título:

- Fazer a divasão de dois números

Objectivo:

- Fazer um pequeno programa que faça a divisão de dois números reais finitos;

- Os números podem ser decimais, e o separador pode ser "." e ",";

- A divisão deve de ser até ao infinito;

- O programa deve mostrar a periodicidade das dizimas infinitas.

Exemplo de Input/Output:

Input:

100

200

Output:

0,5

Input:

1

0,003

Output:

333,(3)

Material de Apoio:

- Nada.

Restrições:

- Não se pode usar funções/bibliotecas que façam a divisão por nós.

Link to comment
Share on other sites

Até ao infinito? É estúpido... 1 / 2 = 0.5 / 2 = 0.25 / 2 = 0.125 / 2 = 0.625 ...

e nunca mais acabava... (infinito)

Outra coisa é não se diz deve de ser, mas deve ser... A seguir ao verbo dever não existe a proposição de....

Uma fracção, se for uma dízima infinita, é obrigatoriamente periódica. Só precisas de encontrar o período.

Link to comment
Share on other sites

Mas isso é para uma dízima infinita. E para uma finita?

Se quiseres resolver o problema de forma simples, procuras uma dízima infinita. Se encontrares um período, verificas se é realmente o valor correspondente à fracção (como? é só investigar um pouco), se não for, continuas à procura. Vais acabar por, ou encontrar um período válido, ou chegar a uma dízima periódica.

Estudando um pouco de Teoria de Números, é capaz de se encontrar algumas propriedades úteis, mas agora não tenho tempo para ver isso.

Link to comment
Share on other sites

Bem como eu não sabia que se uma dízima infinita é sempre periódica....

O que eu quero é um programa que de uma divisão retorne o período, como o da ONI.

@Tharis, até ao infinito, ou seja sempre a acrescentar casas decimais, se o input for 1/3, o programa retorna 0,333333333.... e por ai fora.

@djthyrax, podes usar o que quiseres 👍

Link to comment
Share on other sites

Implementar a divisão da "primária" consecutivamente. Quando encontras o resto 0, significa que arranjaste uma dizima finita, se encontras um resto cujo valor já tinhas encontrado anteriormente, então tens uma dízima infinita periódica, cujo período vai desde um dos restos ao outro.

Facilmente ves qual é a parte que não se repete neste caso.

Isto não é difícil de demonstrar/perceber, e até é bastante fácil de implementar.

Link to comment
Share on other sites

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Coded by Fábio Domingues (fnds) <fnds3000@gmail.com>

from sys import stdout

while 1:
    dividendo_str = raw_input('Dividendo: ')
    divisor_str = raw_input('Divisor: ')
    
    dividendo_str = dividendo_str.replace(',', '.')
    divisor_str = divisor_str.replace(',', '.')
    
    dividendo_str_virgula_pos = dividendo_str.find('.')
    if dividendo_str_virgula_pos <> -1:
        dividendo_str_virgula_pos = len(dividendo_str)-dividendo_str_virgula_pos-1
    else:
        dividendo_str_virgula_pos = 0
    
    divisor_str_virgula_pos = divisor_str.find('.')
    if divisor_str_virgula_pos <> -1:
        divisor_str_virgula_pos = len(divisor_str)-divisor_str_virgula_pos-1
    else:
        divisor_str_virgula_pos = 0
    
    if dividendo_str_virgula_pos >= divisor_str_virgula_pos:
        virgula_pos = dividendo_str_virgula_pos
    else:
        virgula_pos = divisor_str_virgula_pos
    
    dividendo = int(float(dividendo_str)*(10**virgula_pos))
    divisor = int(float(divisor_str)*(10**virgula_pos))
    
    quocientes = []
    restos = []

    while 1:
        quociente = dividendo/divisor
        resto = dividendo%divisor
        dividendo = resto*10

        quocientes.append(quociente)

        if not resto:
            break

        if resto not in restos:
            restos.append(resto)        
        else:            
            quocientes.insert(restos.index(resto)+1, '(')
            quocientes.append(')')
            break
        
    if len(quocientes) > 1:
        quocientes.insert(1, ',')

    stdout.write('Quociente: ')
    for q in quocientes:
        stdout.write(str(q))
    stdout.write('\n\n')
 

Dividendo: 1

Divisor: 2

Resultado: 0,5

Dividendo: 123

Divisor: 321

Resultado: 0,(38317757009345794392523364485981308411214953271028037)

Dividendo: 9494,5

Divisor: 9,2663

Resultado: 1024,(626873725219343211422034684825658569223962099219753299590991010

43566472054649644410390339186082902560892697193054401433150232563158973916234095

59371054250348035353916881603228904740835069013522117781638841824676515977250898

41684383195018507926572634168977909197845957933587300216915057790056441082201094

28790347819518038483537118375187507419358319933522549453395637956897575083906197

72724820046836385612380345984913072099975178873984222397289101367320289651748810

20472033066056570583728133127569795927176974628492494307328707251006334783030983

24034404239016651738018410800427355039228170898848515588746317300324832996989089

49634697775811273107928730992952958570303141491210083852238757648683940731467791

89104604858465622740468148020245405393738601167672102133537657964883502584634643

81684167359140109860462104615650259542643773674497911787876498710380626571554989

58591886729331016694905194090413649460949893700829888952440564194986132544812924

25239847619869850965325966135350679343427257913082891769098777289748874955483850

08039886470327962617225861454949656281363651079718981686325717924090521567400148

92675609466561626539179607826208950713877167801603660576497631201234581224436938

15222904503415602775649396199130181410055793574565900089571889535197435869764630

97460690890646752209619805100201806546302191813345132361352427614042282248578181

15105273949688656745410789635561119324865372370849206263557191111878527567637568

39299396738719877405221069898449219213709894995845159340837227372306098442744137

35795301252927274100773771624057067006248448679624013899830568835457518103234300

63779502066628535661483008320473112245448560914280780894208044203187895923939436

45252150264938540733626150675026709689951760681178032224296644831270302062311818

09352168610988204569245545687059559910643946343200630240764922353042746295716736

99319037803654101421279259251265337837108662572979506383346103622805218911539665

23855260459946256866278881538478141221415235854656119486742281169398789160722186

84911992920583188543431574630650853091309368356301868059527535262186633284050807

76577490476241865685332872883459417458964203619567680735568673580609304684717740

63002492904395497663576616340934353517585228192482436355395357370255657597962509

30792225591660101658698725489138059419617322987600228786031101950077161326527308

63451431531463475173478087262445636338128487098410368755598243095949839741860289

43591293180665422013101237818762612909143886988334070772584526725877642640536136

32194079621855541046588174352222569957804085773178075391472324444492407972977348

02456212296169992337826316868653076200856868437240322458802326710769131152671508

58487206328307954631298360726503566687890528042476500868739410552216094881452143

78986218879164283478842688020029569515340535057142548805888002762699243495246214

77828259391558658795851634417189169355621985042573627014018540301954393878894488

63084510538186762785577846605441222494415246646450039390047807647065171643482296

06207439862728381338829953703204083614819291410811219148959131476425326181971229

07740953778746641054142430096154883826338452240916007467921392573087424322545136

67806999557536449283964473414415678318206835522268866753720470953886664580253175

48536093154765116605333304555216213591185262726222980045973042098788081542794858

78937655806524718603973538521308397094849076762030152272212209835640978599872656

83174514099478756353668670343071128713726082686725014299126943871879822582907956

78965714470716467198342380453902852271133030443650648047224890193496864983866268

08974455823791588875818827363672663306821492936770879423286532920367352665033508

52012129976365971315411760897013910622362755360823629711967020277780775498311084

25153513268510624521114144804290817262553554277327520153675145419423070697041969

28655450395519247164456147545406472917993158002654781304296213159513505930090758

98686638679947767717427668001251848094708783441071409300368000172668702718452888

42364266211972416174740727151074323084726374065160851688376158768872149617430905

53942781908636672674098615412840076405900952915403127461877987977941573227717643

50387964991420523833676872106450255225926205713175701196809945717276582886373201

81733809611171665065883901881009680239146153265057250466745087035817964020159071

04237937472346028080247779588400979894887927220141804172107529434617916536265823

46783505822172819787833331534701013349449078920388936252873315131174255096424678

67433603487907794912748346157581774818428067297626884517013263114727561162492041

05198407131217422272104291896441945544607880167920313393695433991992488911431747

29935357154419779199896398778368928266945814402728165502951555637093554061491641

75560903488986974304738676710229541456676343308548179963955408307522959541564594

28250758123522873207213235056063369413897672210051476856997938767361298468644442

76572094579281914032569634050268176078909597142332970009604696588713941918565123

08040965649719952947778509221587904557374572375165923831518513322469594120630672

43667914917496735482339229250078240505919298965066963081273000010791793919903305

52647766638248276010921295446942145192795398379072553230523509923054509351089431

59621423869289792042131163463302504775368809557212695466367374248621348326732352

71899247811963782739604804506653140951620387857073481324800621607329786430398325

11358363100698229066617743867563105014946634579066078154171567939738622751259941

94014871092021626755015486224275061243430495451258862760756720589663619783516613

96673969113885801236739583220918813334340567432524308515804582195698390943526542

41714600217994237182046771634848860926151754206101680282313328944670472572655752

56574900445701088892006518243527621596537992510495019587105964624499530556964484

20620959822151236199993524923648058016684113400170510343934472227318347128843227

60972556468061685894046167294389346341042271456784261247747213019220184971347787

14265672382720179575450827191003960588368604513128217303562371172960081154290277

67285755911205119627035602128141761004931849821395810625600293536794621369910320

19252560353107497059236156826349244034835910773447870239469907082654349632539417

02729244682343545967646201828129890031619956185316685192579562500674487119993956

59540485414890517250682580965433884074549712398692034576907719370190906834443089

47476338991830612002633197716456406548460550597325793466647960890538834270420772

04493702988247736421225300281665821309476274241067092582800038850458111651899895

31959897693793639316663608991722694063434164661191629884635722996233663921953746

37125929443251351672188467889017191327714405965703678922547295036853976236469788

37292123069617862577296223951307425833396285464532769282237786387231149433970408

90107162513624639823877923227178053807884484637881355017644583059041904535790984

53535931277856318055750407390220476349783624531905938724194122789031220659810280

26288809988884452262499595307728003626042757087510656896495904514207396695552701

72560784779253855368377885455899334146315141966049016327984200813701261560709236

69641604523920011223465676699437747536773037782070513581472648198310005072143142

35455359744450319976689725133008860062808240613837238164100018346049663835619395

01203285022069218566202259801646827752177244423340491889966869192665896852033713

56420577792646471622977887614258118126976247261582292824536222656292155444999622

28721280338430657328167661310339617754659357024918252161056732460636931677152693

09217271186989413250164574857278525409278784412332862091665497555658677141901298

25280856436765483526326581267604113831842267140066693286425002428153631978243743

45747493605862102457291475561982668378964635291324476867789732687264603995122109

14820370590203209479511779243063574457982150372856479932659205939803373514779361

77330757691851116411081013996956714114587267841533298080139861649201946839623150

55631697657101539988992370201698628362992780289867584688602786441190119033486936

53345995704866019878484400461888779771861476533244121170262132674314451291238142

51643050624305278266406224706733000226627672317969416056030994032137962293472043

85785049048703365960523617840993708384144696372878063520499012550856328847544327

29352600282745000701466604793714859221048314861379407098842040512394375317008946

39715959984028144998543107820813053753925515038364827385256251146628103989726212

18825205313879326160387641237602926734511077776458780743122929324541618553252107

09776286112040404476436117975891132382936015453848893301533513916018259715312476

39295080021151916083010478831896226109666209814057390760066045778789808229822043

31826079449186838328135285928579907838079924025770803880729093597228667321368831

14080053527297842720395411329225257114490141696254168330401562651759601998640233

96609218350366381403580717222623916773685289705707779804236858292954037749695131

82176273161887700592469486202691473403623884398303529995791200371237710844673710

11083172355740694775692563374809794632161704240095831130008741353075121677476446

90976981103568846249312023137606164272687048768116724043037674152574382439592933

53334124731554126242405275028868048735741342283327757573141383292144653205702383

90727690664019079891650389044170812514164229519873088503501937127008622643342002

74111565565543960372532726115062106774009043523304878970031188284428520552971520

45584537517671562543841662799607178701315519678836212943677627532024648457313059

14982247499001759062408944238800815859620344689897801711578515696664256499357888

26176575332117457885024227577350182920906942361028673796445183082783851159578256

69361017882002525279777257373493195773933500965865555831345844619751141232207029

77455942501321994755188154926993514131854138113378586922504127861174363014363877

70739129965574177395508455370536244239879995251610675242545568349826791707585551

94630003345456115170024713208076578569655633856015885520650097665734975124915014

62288076146897898837723794826413994798355330606606736237764803643309627359355945

73886017072617981287029342887668217087726492774893970624736950023202356927792106

88192698272233793423480785210925612164510106515005989445625546334567195104842277

93186061318973052890582001446100385267042940548007295252689854634535898902474558

34583382795722132890150329689304253045983833892707984848321336455759040825356398

99420480666501192493228149315260675782135264344992068031468871070438038915208875

17131972847846497523283295382191381673375565220206554935626949267776782534560720

02849033594854472658990103924975448668832219979927263308979851720751540528582066

19686390468687609941400559014925050991226271543118612606973657231041516031209868

01636035958257341117814014223584386432556683897564292112277823942673990697473641

04335063617625157829986078585843324735870843810366597239459115288734446327012939

36090996406332624672199259682937094633240883632086161682656507991323397688397742

35671195622848386087219278460658515264992499703225667202659098021864174481724096

99664375209091007198126544575504786160603477116000992845040631104108435945307188

41393004759181118677357737176650874674897208162912921014860300227706851709959746

60867876067038623830439333930479263567982905798430873164046059376450147307987006

68012043642014612088967549075682850760281881657187874340351596645910449694052642

37074128832435815805661375090381274079190183784250455953293115914658493681404659

89661461424732633305634395605581515815373989618294249053020083528484940051584774

93713780041656324530826759332203792236383454021562004251966804441902377432200554

69820748302990406095205205961386961354585972826262909683476684329236048908410045

00178064599678404541186881495310965541802013748745453956811240732546971283036379

13730399404292975621337534938432815686951641971444913287935853576940094751950616

75102252247391083819863375888974024152034792743597768257017363996417124418592102

56520941476101572364374129911615207795991927738147912327466194705545902895438308

71005687275395789042012453730183568414577555227005385105166031749457712355524858

89729449726428024130451204903791157204062031231451604200166193626366510905107756

06229023450568187949882909035969049135037717319750062052815039444006777246581699

27587062797448819917334858573540679667181075510182057563428768764231678231872484

16304242254189913989402458370654953972998931612401929572752878711028134206749187

91750752727625913255560471817230178172517617603574242146271974790369403105878290

14817133052027238487853835943148829629949386486515653497080819744666155855087791

24353841339045789581602149725348844738460874351143390565813755220530308753224048

43357111252603520283176672458262737014773965876347625265747925277618898589512534

66863796768936900380950325372586685084661623301641431855217292770577253056775627

81261129037479900283824180093456935346362625859296590872300702545784185705189773

69608149962768310976333595933652050980434477623215307080495990848558755921996913

54693890765461942738741460993060876509502174546474860516063585249776070276162006

41032558842256348272773383119475950487249495483634244520466637169096618930964894

29437855454712236815125778358136473025911097201687836569072876984341107022220303

68108090607901751508153200306486947325253876951965725262510387101647906931569234

75389313965660511746867681814748065570939857332484378878300939965250423577911356

20474191424840551244833428660846292479198817219386378597714298047764479889492030

26019015140886869624337653648165934623312433225775120598297054919439258387921824

24484422045476619578472529488576886135782351100223390134141998424398087694117393

13426070815751702405490864746446801851871836655407228343567551234041634740942986

95272115083690361848850134357834302796153804646946461910363359701283144297076503

02709819453287720017698542028641421063423372867271726579109245329851181161844533

41678987298058556273809395335786667817791351456352589490951080798161078316048476

73828820564842493767739011255841058459147664116206036929518793909111511606574360

85600509372673019436020849745853253186277154851450956692530999428034922245124807

09668368172841371421171341312066304781843885909154678782253974078111004392260125

40064534927641021767048336444967246905453093467727140282529164823068538683185305

89339865965919514800945361147383529564119443575105489785567054811521319188888768

98006755662993859469259575019155434207828367309497857828906899193852994183223077

17211832122853781984179230113421754098183741083280273679893808747828151473619459

76279636964052534452802089291302893279949926076211648662357143627985279993093251

89126188446305429351521103353010370913957027076610945037393565932464953649245114

01530276377842288723654533093036055383486396943763961883383874901524880480882337

07089129425984481400343179046652925115741989790962951771472971952127602171308936

68454507192730647615553133397364643924759612790434153869397709981330196518567281

43919363715830482501106158876790088816463960804204482911194327833115698822615283

33854936706128659767113087208486666738611959466022036843184442549885067394753029

79614301285302655860483688203490066153696729007262877308094924619319469475410897

55350031835792063714751303109115828324142322178215684793283187464252182640320300

44354273010802585713823208832004144048865242869322167423890873379881937774516257

83754033432977563860440521027810452931590818341732946267658072801441783667699081

61833741622869969675059085071711470597757465223444093111597940925720082449305548

06125422228937116216828723438697214637989272956843616114306681199615812136451442

32325739507678361374011201882088859631136483817705017104993363046739259467101216

23517477310253283403300130580706430829996870379763228041397321476749079999568328

24320386777894089334470068959563148182122314192288184064837097870779059603077819

62595642273615143045228408318314753461467899808985247617711492181345305030055146

06693070589124030087521448690415807819733874361935184485717060747007975135706808

54278406699545665475972070837335290245297475799402134616837356873833137282410455

08994960232239405156319134929799380551028997550262780181949645489569731176413455

20865933544133041235444567950530416671163247466626377302699027659367816712172064

36225893830331415991280230512718129134606045562953929831755932788707466842213181

09709376989737003982171956444319739270258895136138480299580199216515761415020018

77772142063175161607113950552000259003054077679332635463993179586242621110907266

11484627089561097741277532564238153308224426146358309141728629550090111479231192

60114608851429373104691192816981966912359841576465255819474871307857505153081596

75382838889308569763551795214918575914874329559802726007144167574975988258528215

14520358719229897585875700117630553726946030238606563569062085190421203716693826

01469842331890830212706258161294151926874804398735201752587332592296817499973020

51520024173618380583404379309972696761382644637018011504052318616923691225192363

72662227642100946440326775519894672091341743738061577976106968261334081564378446

62918316911820251880470090543150987988733367147620949030357316296687998445981675

53392400418721604092248254427333455640331092237462633413552334804614571080150653

44312185014514962822269945933112461284439312346891423761371852843098108198525840

95054120846508315077215285496908151041947702966664148581418689228710488544510754

02264118364395713499455014407044883070912877847684620614484745799294216677638323

81856836061858562748885747277769983704391180946008655018723762451032235088438751

17360758878948447600444621909500016187690879854958289716499573724140163819431704

13217789193097568608829845785264884581764026634147394321358039346880631967451949

53757163053214335819043199551061372932022490098529078488717179456741094072067599

79711427430581785610221987200932410994679645597487670375446510473435999266158013

44657522419951868599117231257351909607934126889912910223066380324401325232293364

12591865145743176888294141135080884495429675274920950109536708287018551093748313

78220001510851148786462773706873293547586415289813625719003269913557730701574522

73291389227631309152520423469993417005708858983628848623506685516333380097773652

91432394806988765742529380658946936749295835446726309314397332268542999902873854

72087025026170100255765515901708340977520693264841414588347020925288410692509415

84019511563407185176391871620819528830277457021680713985085740802693631762407865

05940882552906769692325955343556759440121731435416509286338668076794405534031922

12641507397774732093715938400440305191932054865480288788405296612455888542352395

23866052253866160171805359204860623981524448809125540938670235153189514693027421

94835047429934277975027788869343751011730679990934893107281223357758760238714481

50826111824568598038051865361579055286360251664634212145084877459180039497965746

84609822690825895988690199971941335808251405631158067405544823716046318379504224

98731964214411361600638874200058275687167477849842979398465406904589749954134875

84041095151246991787444826953584494350495882930619556888941648770275082827018335

25786991571608948555518383820942555280964354704682559381846044267938659443359269

61138750094428196799153923356679580846724150955613351607437704369597358168848407

67080711826726956822032526466874588562856803686476803038969167844770836256110853

30714524675436797858908086291184183546830989715420394332149833266783937493929615

92005439064135631265985344743856771311095043329052588411771688807830525668281838

49001219472712949073524491976301220551892341063855044624067858800168351985150491

56621305159556673105770372208972297465007608214713531830396166754799650345876995

13290094212360920755857246150027519074495753429092518049275331038278493033897024

70241628265866635010737834950303788998845278050570346308666889697074344668314213

87177190464370892373439236804333984438233167499433430819205076459859922514919655

09426631989035537377378241585098690955397515729039638259067804841198752468622859

17788113918176618499293137498246333488015712851947379212846551482252894898719014

06170747763400710100039929637503642230447967365615186212404087931536859372133429

74002568446952936986715301684599030896905992683163722305558853048142192676688645

95361686973225559284719898988808909705060272169042659961365377766746166215209954

35071171880901762299947120209792473802920259434725834475464856523099834885553025

47942544489170434801377032904179661785178550230404800189935572990298177266006928

33169657792214799866181755393199011471676936857213774645759364579173996093370600

99500339941508476954124084046491048206943440208065786775735730550489407854267614

90562576217044559317095280748518826284493271316490940289004241175010521999071905

72288831572472292069110648263060768591562975513419595739399760422174978146617312

19580630888272557547241077884376719942155984589318282378079708189892405814618564

04390101766616664688171114684393986812427829878160646644291680606067146541769638

36698574404023180773339952300270874027389572968714589426200317278741245157182478

44339164499314721086086140099068668184712344733064977391191737802574922029288928

69861757119886038656205821093640395843000982053246711200802909467640805931169938

37885671735212544381252495602343977639402997960350949138275255495721053710758339

35875160527934558561669706355287439431056624542697732644097428315508887042293040

37210105435826597455294993686800556856566267010565166247585336110421635388450622

14691948242556360143746695013112029612682516214670364654716553532693739680347064

09246409030573152175086064556511228861573659389400300011870973311893636079125433

02073103612013424991636359712074938216979808553575860915359960286198374755835662

56218771246344279809632755252905690512933965013004111673483483159405587990891725

93160161013565284957318455046782426642780829457280683768062765073438157624941994

10768051973279518254319415516441298036972685969588724733712485026385936134163582

01223789430517034846702567367773544996384749036832392648629981761868275363413660

25274381360413541543010694667774624175776739367385040415268230037879196658860602

39793660900251448798333747018766929626711848310544661839137519829921327822323904

90271197781207170067880383756191791761544521545816561086949483612660932626830558

04366359819992877416012863818352524740187561378327919450050181841727550370698121

148678544834507840238282809751464986024)

😉

(Peço desculpa pelo tamanho, não tenho culpa do programa ser bom  😁.)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.