Bine ai venit guest
 
User:
Pass:

[Creare cont]
[Am uitat parola]
iBac = materialul ULTRACOMPLET de pregătire pentru bac la mate. Dacă vrei poţi.
Forum pro-didactica.ro  [Căutare în forum]

Forum » Cereri de rezolvări de probleme » Algoritm de generare??
[Subiect nou]   [Răspunde]
[1]
Autor Mesaj
ConstObreja
Grup: membru
Mesaje: 132
05 Oct 2008, 18:19

[Trimite mesaj privat]

Algoritm de generare??    [Editează]  [Citează] 

Pentru informaticienii PRO_DIDACTIC-ieni, si nu numai pentru ei, o provocare (poate lipsita de sens!!).
Cum generam, algoritmic, termeni succesivi din trunchieri succesive ale DEJA CELEBRULUI NUMAR 123456789101112.....?
Am incercat ceva (intr-un javascript atasat unui fisier html) de genul:

function genereaza()
{
x=new Array()
final="1) 1"
x[1]=1

for(n=2;n<10;n++)
{
x[n]=x[n-1]*10+n
final=final+"\n"+n+") "+x[n]
}
x[10]=1234567891
x[11]=12345678910
final=final+"\n"+"10) "+x[10]+"\n"+"11) "+x[11]
k=0
for(n=12;n<20;n++)
{r=n%100
x[n]=x[n-1]*10+r-11-k; k++;
final=final+"\n"+n+") "+x[n]
}

continut.value=final
}

Se vede clar ca x[10] si x[11] sunt trasi de par, iar ceea ce rezulta nu e ceea ce-mi trebuie. Obtin

1) 1
2) 12
3) 123
4) 1234
5) 12345
6) 123456
7) 1234567
8) 12345678
9) 123456789
10) 1234567891
11) 12345678910
12) 123456789101
13) 1234567891011
14) 12345678910111
15) 123456789101111
16) 1234567891011111
17) 12345678910111112
18) 123456789101111120
19) 1234567891011111100

Evident, aiurea (de la 15 in jos)! Am si alte variante dar .. nu-mi plac (asemenea celei de mai sus!).
Deci, e o problema de informatica aplicata! Isi pot da cu parerea si cei care nu stiu programare dar au .. intentii bune! Cine stie?
Rezumand: daca in computer am termenul x[n] care trunchiaza numarul la n cifre, cum il gasesc pe x[n+1]? Raspunsul ar trebui sa se costituie intr-o formula (nu in descriere! Aviz amatorilor!!) aplicabila.
Numai bine,


---
Dorim sa fim, cand nu vor mai fi, prin cei ce vor fi
MrlDEessvsEm
Grup: membru
Mesaje: 229
29 Sep 2008, 11:35

[Trimite mesaj privat]

Homework    [Editează]  [Citează] 

Sa inteleg ca trebuie gasit algoritmul de generare al "celebrului" numar 123456...
din cifra in cifra, chiar daca noi cunoastem aceasta insiruire de cifre din 1 in 1 cifra, urmatoarele din 2 in 2 cifre, urmatoarele din 3 in 3 cifre, etc. in functie de pozitia pe care o ocupa cifra respectiva in sir. Complicata sarcina, sau poate nu chiar atat:P

Problema e ca nu cunosc programare, eventual sa gasesc o formula empirica pe care s-o postez si care sa fie implementata de cineva intr-un program.


---
Din exp:
Ce bine e sa GANDESTI LIBER.
PROSTIA este un produs al RAULUI.
CREDINTA, daca ESTE ADEVARATA si nu simulata, odata aprinsa, nu se poate stinge, VA ARDE la nesfarsit.
MrlDEessvsEm
Grup: membru
Mesaje: 229
29 Sep 2008, 16:09

[Trimite mesaj privat]

Un inceput...    [Editează]  [Citează] 

Vom genera un tabel de 10 coloane cu infinit randuri astfel: vom insira cifrele numerelor de la 1 la oricat, cate 10 pe un rand si continuand cu randul al 2-lea, etc.

De la cifrele de la 1 la 9 avem 9 cifre*1 cifra/cifra = 9 cifre si ne mai ramane o "casuta" libera pentru o cifra.
De la numerele de la 10 la 99 avem 90 numere*2 cifre/numar = 180 cifre, din care cu prima cifra (care este 1) ocupam casuta libera si ne mai raman 179 cifre, pe care le insiram pe 17 randuri de cate 10 si pe al 18-lea rand 9 cifre si ne mai ramane o "casuta" libera pentru o cifra.
De la numerele de la 100 la 999 avem 900 numere*3 cifre/numar = 2700 cifre, din care cu prima cifra (care este 1) ocupam casuta libera si ne mai raman 2699 cifre, pe care le insiram pe 269 randuri de cate 10 si pe al 270-lea rand 9 cifre si ne mai ramane o "casuta" libera pentru o cifra.
De la numerele de la 1000 la 9999 avem 9000 numere*4 cifre/numar = 36000 cifre, din care cu prima cifra (care este 1) ocupam casuta libera si ne mai raman 35999 cifre, pe care le insiram pe 3599 randuri de cate 10 si pe al 3600-lea rand 9 cifre si ne mai ramane o "casuta" libera pentru o cifra. Etc.

1234567891
0111213141
5161718192
0212223242
5262728293
0313233343
5363738394
0414243444
5464748495
0515253545
5565758596
0616263646
5666768697
0717273747
5767778798
0818283848
5868788899
0919293949
5969798991
0010110210
3104105106
1071081091
1011111211
3114115116
1171181191
2012112212
3124125126
1271281291
3013113213
3134135136
1371381391
4014114214
3144145146
1471481491
5015115215
3154155156
1571581591
6016116216
3164165166
1671681691
7017117217
3174175176
1771781791
8018118218
3184185186
1871881891
9019119219
3194195196
1971981992
00...

Daca ne uitam pe coloane par sa fie niste secvente destul de ordonate de cifre.
(Deocamdata atat, ca imi fug ochii pe cifrele astea:P).
Ar mai trebui scrise inca o tona de cifre ca sa se vada recurenta sirurilor pe coloane.

Ca o prima concluzie: cifrele corespunzatoare pozitiilor "casutelor libere"(pozitii pe care le putem calcula - marcate cu rosu, urmatoarea astfel de pozitie e "departe") vor fi egale cu 1 si, daca nu gresesc, s-ar putea folosi acest fapt pentru analiza sirului pe coloane, dar pe portiuni cuprinse intre 2 astfel de pozitii consecutive-pe portiune de 9 cifre(practic nu avem ce analiza), mai departe pe o portiune de 180 de cifre, mai departe de 2700 cifre, 36000 cifre, etc.

Consideram prima cifra de 1(de pe pozitia a 10-a), calculam urmatoarele 10 cifre in functie de aceasta(eventual si de primele 9 cifre; cred ca nici nu este necesar), si aceste 10 cifre (eventual si urmatoarele 10, sau cate 10 sunt necesare), vor fi termenii intai, doi,...(initiali) pentru cele 10 siruri (recurente) paralele, pana la urmatoarea pozitie "pilon"(a doua casuta), de unde se judeca la fel. La a doua casuta de 1 (urmatoarele 10 cifre, sau cate 10 sunt necesare se pot exprima la fel, functie de acea cifra 1, etc).


Obs. S-ar putea ca unele siruri sa aiba nevoie de numar diferit de termeni initiali(1,2, etc.) pentru scrierea relatiilor de recurenta. Sirurile recurente se vor opri a.i. sa existe continuitate cu urmatorul set de siruri recurente (numarul de termeni ai unui sir recurent este egal cu numarul de linii pe care sunt distribuite cifrele numerelor de 1, de 2 cifre,... sau se imparte numarul total de cifre(scris intial sus) la 10(avem 10 coloane). Ultima coloana este deplasata intotdeauna cu o linie mai sus (numarul de termeni este intotdeauna egal pe coloane).

Problema mai delicata este scrierea relatiilor de recurenta si transpunerea sub forma de program a acestor informatii (daca sunt corecte).(Practic este necesara scrierea multor cifre).

Sirurile ar arata ca o impletitura (de cate 10 siruri recurente), deoarece se lucreaza pe 10 coloane; astfel avem o oarecare ordine a cifrelor(din 2 in 2, din 3 in 3 etc. pe coloane).

Ma intreb daca problema are totusi SENS! deoarece recurenta este din ce in ce mai complicata cu cat avansam in josul tabelului, cred, (fiind si mai mare numarul de cifre, combinatiile sunt si ele mai complicate, cifrele fiind tot timpul doar 10).(Practic nu prea pot sa verific).


---
Din exp:
Ce bine e sa GANDESTI LIBER.
PROSTIA este un produs al RAULUI.
CREDINTA, daca ESTE ADEVARATA si nu simulata, odata aprinsa, nu se poate stinge, VA ARDE la nesfarsit.
MrlDEessvsEm
Grup: membru
Mesaje: 229
30 Sep 2008, 12:09

[Trimite mesaj privat]


Judecand putin altfel, consideram randurile care contin pe acel 1 marcat ca randuri de referinta (randurile "1","18+1","270+18+1",...). Fiecare element(corespuzator coloanei respective) din aceste randuri sa fie pornirile pentru cele 10 siruri, iar ultimii termeni ai primului set de siruri, care se confunda cu urmatorul rand de referinta, sa reprezinte pornirile pentru al doilea set de siruri.(deci, teoretic sirurile pe coloane vor fi in continuitate).

Daca se cere cifra de pe pozitia "n", din teorema impartirii cu rest a acestui "n" la 10, (catul+1) ne va da randul (daca randurile sunt numerotate de la "1", eventual se pot numerota de la "0" si atunci catul ne va da randul), iar restul ne va da coloana pe care se afla respectiva cifra. S-ar putea considera cele 10 siruri independente(cate un programel pentru fiecare), iar in functie de valoarea restului sa ruleze programelul corespunzator (daca r=1 sirul 1, daca r=2 sirul 2,..., iar daca r=0, ceea ce corespunde cu "n" multiplu de 10, ultimul sir).

Cifra de pe pozitia "n+1" implica restul imediat urmator, adica rularea sirului urmator pana la acelasi rand (dat de catul impartirii lui "n" la 10). Daca "n" se afla pe ultima coloana (r=0) si randul "c", "n+1" se va afla pe coloana intai (ruleaza sirul 1) pana la randul "c+1"


---
Din exp:
Ce bine e sa GANDESTI LIBER.
PROSTIA este un produs al RAULUI.
CREDINTA, daca ESTE ADEVARATA si nu simulata, odata aprinsa, nu se poate stinge, VA ARDE la nesfarsit.
ConstObreja
Grup: membru
Mesaje: 132
05 Oct 2008, 18:19

[Trimite mesaj privat]


1. Cred ca am gasit un algoritm! Folosesc o pagina html cu un javascript (vezi si topicul Divizibilitate cu 11 deorece l-am folosit si acolo)
******************************************

<html>
<head>
<script language=javascript>
x=new Array()
y=new Array()
final="1"
function genereaza()
{x[1]=1

for(n=2;n<150;n++)
{x[n]=n
final=final+x[n]
}
gata=""; dif=0;k=1

lungime=final.length
continut.value="" //" numarul este: "+final+"\n Numar cifre= "+lungime
continut.value=continut.value+"Subsiruri \n"
for(k=0;k<lungime-1;k++)
{y[k]=final.slice(0,k)
continut.value=continut.value+"\n"+k+") "+y[k]
}

}


</script>
</head>
<body onload=genereaza()>
<h1 align=center>Generare</h1>
<center>
<textarea id=continut cols=160 rows=140>untext</textarea>
</html>

************************************************
2. O bucatica din raspuns:

0)
1) 1
2) 12
3) 123
4) 1234
5) 12345
6) 123456
7) 1234567
8) 12345678
9) 123456789
10) 1234567891
11) 12345678910
12) 123456789101
13) 1234567891011
14) 12345678910111
15) 123456789101112
16) 1234567891011121
17) 12345678910111213
18) 123456789101112131
19) 1234567891011121314

3. Daca aveti o idee mai buna, va astept!
4. Pentru a invata javascript vedeti http://www.w3schools.com/jsref/jsref_slice_string.asp
5. Pentru a vedea si alte fisiere care folosesc javascript vedetihttp://edu.adralex.ro/sc5roman/mate/baza/mathHome.html (e gratis si se poate COPIA!)
Numai bine,


---
Dorim sa fim, cand nu vor mai fi, prin cei ce vor fi
[1]


Legendă:  Access general  Conţine mesaje necitite  47557 membri, 58580 mesaje.
© 2007, 2008, 2009, 2010 Pro-Didactica.ρ