ExDec Ierakstīts Februāris 20, 2013 Share Ierakstīts Februāris 20, 2013 Sveiki! Esmu atdūries pret vienu uzdevumu, kuru uzdēva skolā programmēšanas pamatos (Pascal). It kā saprotu, kas jāizdara, idejas ir, bet izpildīt neizdodas. Ir vajadzīgs iegūt skaitļu no 1 līdz 1000 ciparu summu (respektīvi paņemt katra skaitļa ciparus, saskaitīt un tad visus iegūtos rezultātus saskaitīt kopā). Tā kā mācāmies pašlaik par FOR... TO... DO, tad pieņemu, ka šī funkcija noteikti būs jāizmanto. Būtu jau arī labi, ja zinātu, cik tā summa ir, bet atrast neizdodas. Pašlaik esmu mēģinājis dažādus variantus ar a MOD b un a DIV b funkcijām, kā arī zinu, ka visu laiku tomēr atkārtojas skaitļi no 1-9. Bija doma, ka iespējams saskaitot 1+2+3+...+9 un attiecīgi pareizi sareizinot varētu iegūt rezultātu, bet, nezinot pareizo, nevaru pateikt vai pareizi izdomāju. Varbūt kāds var ar savām idejām padalīties vai vismaz rezultātu? P.S. Pašlaik iznāk 4546, taču es pieļauju, ka varētu nebūt pareizi. Link to comment Share on other sites More sharing options...
mickys Februāris 20, 2013 Share Februāris 20, 2013 (labots) kas liedz izmantot ciklu kurā skaitlis maniās no 1 līdz 1000 un saskaitīt visu kopā? Ja jau tiek mācīti FOR TO DO tad tie arī jāizmanto P.S. Rezultātām jābūt 500500 P.P.S. andza paspēja ātrāk Labots Februāris 20, 2013 - mickys Link to comment Share on other sites More sharing options...
andza Februāris 20, 2013 Share Februāris 20, 2013 500500 Link to comment Share on other sites More sharing options...
ExDec Februāris 20, 2013 Author Share Februāris 20, 2013 Nav jāsaskaita katrs skaitlis! Ir jāsaskaita cipari, kas ir katrā skaitlī un tad jāsaskaita tie rezultāti. Piemēram, 1+2+3+4+5+6+7+8+9=45 1+0+1+1+1+2+1+3+1+4+1+5+1+6+1+7+1+8+1+9=54 54+45=99 Tas ir skaitļiem no 1-19. Un šādi vajag no 1-1000. Principā jau ir te sava veida sistēma kaut kāda, bet es īsti netieku skaidrībā, kā tur īsti tikt galā. Link to comment Share on other sites More sharing options...
girts2 Februāris 20, 2013 Share Februāris 20, 2013 (labots) var total = 0; for (var i = 1; i <= 1000; i++) { var num = i; do { total += num % 10; } while ((num /= 10) > 0); } C#. Konvertācija uz Pascal paliek studenta ziņā. Labots Februāris 20, 2013 - girts2 Link to comment Share on other sites More sharing options...
ExDec Februāris 20, 2013 Author Share Februāris 20, 2013 Principā ieguvu skaitli 13501. Kāds varbūt zina vai tas ir pareizi? Link to comment Share on other sites More sharing options...
Borja Februāris 20, 2013 Share Februāris 20, 2013 Jaa - 13501 ir pareizi. Link to comment Share on other sites More sharing options...
Sanchus Februāris 20, 2013 Share Februāris 20, 2013 procedure TForm1.Button1Click(Sender: TObject); var i, j, k, l: integer; begin k:=0; l:=0; for i:=1 to StrToInt(Edit1.text) do begin for j:=1 to length(IntToStr(i)) do begin k:=k+StrToInt(copy(IntToStr(i),j,1)); l:=l+1; end; end; ShowMessage('rezultāts: '+IntToStr(k)+#13#10+'iteraciju skaits: '+IntToStr(l)); end; 2013-02-20 boot.lv.zip uupss.. šo gribēju pievienot (izpildes fails): 2013-02-20_exe.zip Link to comment Share on other sites More sharing options...
ExDec Februāris 20, 2013 Author Share Februāris 20, 2013 Yeah, about this - mums vēl tik kruti kodi nav jāraksta. Mums vēl pats sākums pamatā, tāpēc tādas lietas kā IntToStr, ShowMessage u.c. netiek lietotas. Bet nu paldies par palīdzību! Katrā ziņā ir izdevies atrast risinājumu, tā kā viss kārtībā. Link to comment Share on other sites More sharing options...
Sanchus Februāris 20, 2013 Share Februāris 20, 2013 Kāds risinājums tika atrasts? Kaut kas no visa noderēja? Te jau 100% neviens priekšā nesaka, tikai pasniedz puslīdz loģiskā veidā. Mums vēl tik kruti kodi nav jāraksta. Mums vēl pats sākums pamatā, tāpēc tādas lietas kā IntToStr, ShowMessage u.c. netiek lietotas. Bet nu paldies par palīdzību! Šie jau arī paši, paši pamati. Ar kaut ko jau jāsāk. Minētais kods veidots Delphi7, kas ir Pascal 'radinieks'. Uz Delphi ir vērts pāriet ar minimālām Pascal zināšanām, jo piesaista ar uzbūves un lietošanas vienkāršumu. Link to comment Share on other sites More sharing options...
ExDec Februāris 20, 2013 Author Share Februāris 20, 2013 Principā šādi: program summa; uses crt; var i, x, a, b :longint; begin clrscr; writeln('Skaitļu no 1 līdz 1000 ciparu summa ir:'); i:=1+2+3+4+5+6+7+8+9; x:=i*10; a:=x*10; b:=a*3+1; writeln(b); readln; end. Protams, visu var vienā darbībā ielikt, bet nu šoreiz prasīts arī, lai parāda visas darbības, tad atdalīju uz vairākām, bet pamatā te arī ar 2 pietiktu. Īstenībā ideja par šādu variantu radās, kad pabakstīju to visu ar pildspalvu uz papīra un kalkulatoru rokā, kā arī mazliet piepalīdzēja tas, ka daži čaļi atrada rezultātu, jo vismaz zināju, kam ir jāsanāk. Link to comment Share on other sites More sharing options...
ExDec Februāris 20, 2013 Author Share Februāris 20, 2013 Nu tev jau ir vienkārši ierakstīts tas skaitlis, bet es vismaz ar reāliem aprēķiniem to ieguvu un pilnīgu loģiku. Respektīvi: Skaitļi no 1-9 ir katrā desmitā. Simtā ir 10 desmiti (tātad tā rindiņa x:=i*10). Tūkstotī ir 10 simti (rindiņa a:=x*10), un visbeidzot rindiņa b:=a*3+1 <--- tā kā ir katrā simtā ir 3 vietas, kur tie skaitļi var izvietoties, ir jāreizina ar 3, kā arī jāpieskaita 1, jo skaitlis 1000 sāk jaunu simtu, kas nav iekļauts iepriekš, bet tur tomēr ir vēl 1 cipars, kas jāpieskaita. Rezultāts sanāk pareizs, tātad pagaidām man šis variants der, tiesa, vēl padomāšu par variantu ar FOR... TO... DO un citām funkcijām. Link to comment Share on other sites More sharing options...
Volodja Zavituškins Februāris 20, 2013 Share Februāris 20, 2013 (labots) -- Labots Februāris 20, 2013 - Volodja Zavituškins Link to comment Share on other sites More sharing options...
Sanchus Februāris 20, 2013 Share Februāris 20, 2013 (labots) Iepazīstoties ar atrisinājumu, ko piedāvā jaunais censonis un viņa kolēģi, visu cieņu, bet godīgi, biju ļoti vīlies. Tika pārkāpts primārais programmētāju bauslis, kā no anekdotes: Ar ko atšķiras politiķi/deputāti no programmētājiem? Programmētāju rakstītās programmas strādā. Un te arī viss beidzas. Programmai ir jābūt universālai, protams, ar robežām. Manis piedāvātam variantam robeža ir Integer vērtība -2147483648 .. 2147483647. Ja nekļūdos. Pagalam švaki, ja komandrindas apstrādā tikai skaitli 1000. Tos soļus, jo sevišķi: b:=a*3+1; skolotājs var nesaprast... Atzīstu kļūdas. Godīgi, pats Pascal nepārzinu un nemāku. Pascal neinteresē, jo DOS veidā tas praktiski nekur nav lietojams. Labots Februāris 20, 2013 - Sanchus Link to comment Share on other sites More sharing options...
girts2 Februāris 20, 2013 Share Februāris 20, 2013 #5 ir 100% strādājošs kods, kas der jebkuram skaitlim. Gribēju iekļaut arī kādu kļūdu, lai autors iedziļinātos kodā, bet uzdevums un risinājums ir tik triviāls, ka to pat nevarēja īsti izdarīt. Autora risinājums ir ļoti labs un optimāls (un arī domāšanas veids ir apsveicams!), bet der tikai skaitļiem, no kā var izvilkt logaritmu ar bāzi 10 (vai nu ar kādu autors ir izvēlējies operēt) - pārējais vienalga ir jāsarēķina citā veidā. Starp citu, tas 3 autora kodā ir log(1000). #8, acīmredzot, ir rakstījis kāds, kas nekad nav mācījies programmēšanas pamatus. Par to liecina neoptimālais kods, kas balstīts uz simbolu virkņu konvertācijām un manipulācijām ar tām. Link to comment Share on other sites More sharing options...
ExDec Februāris 20, 2013 Author Share Februāris 20, 2013 Protams, zinu, ka nav mans variants ideāls un labākais, taču konkrētais uzdevums izpildās un šeit nekas cits man netiek prasīts. Bet, kā jau teicu, es vēl pameklēšu pats kādu variantu, kurā man būs iekļautas attiecīgās funkcijas. Tā kā laiks līdz piektdienas rītam, tad ir pilnīgi iespējams, ka rīt būs svaigāka galva un vēl ko izdomāšu. Kā jau teicu, paldies visiem, kas palīdzēja! Ja nu radīsies vēl kāds risinājums, iekopēšu arī šeit. Link to comment Share on other sites More sharing options...
Sanchus Februāris 20, 2013 Share Februāris 20, 2013 #8, acīmredzot, ir rakstījis kāds, kas nekad nav mācījies programmēšanas pamatus. Pamatus mācījos. Tikai, kad sāka čakarēt smadzenes, līdzīgi, kā rakstā #5, sapratu, ka tas nav priekš manis. Galvenais, lai strādā un ir doma saprotama, atbildot uz jautājumu-kāpēc šādi? Optimizācija un matemātika kodā lai paliek lietpratējiem. Link to comment Share on other sites More sharing options...
Sanchus Februāris 20, 2013 Share Februāris 20, 2013 ieleja, miljonam kods neder . Tad jau labāk stringos nulles pa pliko skaitīt, kā rakstīts uzdevumā #1 Link to comment Share on other sites More sharing options...
Леший Februāris 21, 2013 Share Februāris 21, 2013 A man liekas, ka risinājums ir banāls. Mums ir skaitļi no 0 līdz 999, vai, lai vieglāk saprāstu, no 000 līdz 999. Šajā intervalā, uz katras pozīcijas katrs cipars no 0 līdz 9 parādās 100 reizes. Rezultāts būs summa no 0 līdz 9 (45) reiz cik reizes parādās katrs cipars (100) reiz poziciju skaits (3), jeb 13500. Protams, pareizāk to simtnieku izrēķināt šādi: 10^(poziciju skaits-1). Tas ir, lai paredzētu, ka to pašu algoritmu var izmantot intervāliem no 0 līdz 10000 utt. function calcSum(power = 3){ return 45 * pow(10, power-1) * power; } Link to comment Share on other sites More sharing options...
ExDec Februāris 21, 2013 Author Share Februāris 21, 2013 Lūk ir variants, pie kura nonācu šodien: program summa2; uses crt; var i, count, n1, n2, n3:integer; begin clrscr; for i:=1 to 999 do begin n1:=i div 100; n2:=(i mod 100) div 10; n3:=(i mod 100) mod 10; count:=count+n1+n2+n3; end; count:=count+1; writeln('Skaitļu no 1 līdz 1000 ciparu summa ir ', count); readln; end. Link to comment Share on other sites More sharing options...
ExDec Februāris 21, 2013 Author Share Februāris 21, 2013 Kā jau teicu - šeit nekur netika prasīts kas cits, šis ir konkrēts uzdevums, kas bija jāizpilda un jāizveido tā, lai notiktu prasītā darbība, nevis "ja nu notiks tas vai tas". Attiecīgi, ja būtu teikts, ka jāievada skaitlis un tad jāaprēķina ciparu summa, tad arī būtu cits variants jāmeklē! Lasīt dažiem te jāpamācās! Link to comment Share on other sites More sharing options...
ExDec Februāris 21, 2013 Author Share Februāris 21, 2013 (labots) Lūdzu nerunā, ja neko nezini par mani. Jā, es varbūt nezinu ne Paskālu, ne C++, ne arī ko citu no šāda veida programmēšanas valodām, taču zinu pietiekami daudz no php, html un css, kurus pašlaik arī apgūstu. Kā arī, ja nu nepamanīji, tad šī ir vidusskola, es TIKAI MĀCOS. Lasi to, ko esmu rakstījis iepriekš un varbūt sapratīsi. VAJADZĪGAIS ATRASTS, SLĒDZAM CIET, LAI LASĪT NEPRATĒJI NEPIEDI*Š! Labots Februāris 21, 2013 - ExDec Link to comment Share on other sites More sharing options...
Леший Februāris 21, 2013 Share Februāris 21, 2013 Autor, tā intereses pēc - tu apjēdz starpību starp manu kodu un tavu? Man ir ļoti lielas aizdomas, ka esi izvēlējies nepareizo profesiju Link to comment Share on other sites More sharing options...
ExDec Februāris 21, 2013 Author Share Februāris 21, 2013 (labots) Johaidī, te daži tiešām nemāk lasīt! Tā ir VIDUSSKOLA un man tas ir OBLIGĀTAIS PRIEKŠMETS, nevis izvēles priekšmets. Un es arī minēju, ka sākās tikai šogad un vēl nezinu visas funkcijas. Tiešām tik grūti saprast šīs lietas? Kā jau minēju, slēdzam ciet, citādi te lasītnepratēja visu piedi*sīs vēl vairāk. Tik tiešām, ja nu nav nekas, ko teikt, tad lūdzu muti ciet. Ļoti šaubos, ka kāds no šeit esošajiem cilvēkiem sāka ar sarežģītākajām lietām un bija uzreiz profesionālis. Klauni... Labots Februāris 21, 2013 - ExDec Link to comment Share on other sites More sharing options...
ExDec Februāris 21, 2013 Author Share Februāris 21, 2013 (labots) Piedod, ka nelietoju šo forumu ikdienā un nepārzinu visas iespējas. Jāiet laikam būs nošauties tagad... Kā arī man ļoti patīk šis variants, kad tiek ierakstīta atbilde, kura ātri vien tiek izlabota uz kaut ko nejēdzīgu. Interesanti, kāpēc tā? Kā arī, piedod, bet nu neredzu es nekur pogu, kas ļautu man slēgt tēmu. Ja nu vienīgi viņa ir kaut kur smuki paslēpta, jo man šādas pogas nav. Labots Februāris 21, 2013 - ExDec Link to comment Share on other sites More sharing options...
JDat Februāris 21, 2013 Share Februāris 21, 2013 Primārt! Klauna kungs! Kā cilvēku kuris vidusskolu ir beiguši 15-30 gadus atpakaļ, var zināt kās par buļā kakām tagad notiek vidusskolā. Viena lieta izpildīt keksīša pēc, cita lieta sports: vesels bars ar programmētājiem to arī izdarīja un tev palīdzēja. Un tāda ir tava pateicība? Klauni. Tulīt atnāks ļaunais atmis un aizvērs tēmu ciet un bonusā vēl tev banaū iedos. Cieni citus un citi arī tevi cienīs. Tas ka tu kaut ko nezini, tās ir tavas porblēmas. Pasaki paldies ka tavā vietā cilvēki mājadarbu izpildīja. Ķēms tāds! Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!