4 thoughts on “Limbajul Pascal. Metoda Backtracking. Permutari”
ma puteti ajuta si pe mine cu o problema
. Se dau doua numere naturale m si m. Se cere sa se afiseze in toate modurile posibile toate numerele de la 1 la n, astfel incat intre orice doua numere afisate pe pozitii consecutive, diferenta in modul sa fie >=m. Daca nu exista solutie, se da mesaj.
Ce face programul ?
Ca in nici un caz nu functioneaza asa cum te-ai astepta citind titlul.
De ce avem la procedura back parametrul P cand primul lucru pe care il face procedura la rulare e sa ii atribuie valoarea 1.
Si ca sa mearga nu ar trebui sa fie recursiv ? Pentru ca nu cel ce a scris programul a uitat sa adauge partea de recursivitate are o gramada de ‘chestii’ inutile => programul insusi e inutil!
Exercitiul:
Se consider? tabloul bidimensional cu n linii ?i n coloane ce con?ine numere naturale cu cel
mult patru cifre fiecare. Scrie?i programul Pascal care cite?te de la tastatur? num?rul
natural n (2?n?23) ?i cele n*n elemente ale tabloului ?i apoi afi?eaz? pe ecran elementele
primului p?trat concentric, separate prin câte un spa?iu. P?tratul este parcurs în sensul
acelor de ceasornic începând din col?ul s?u stânga-sus, ca în exemplu. Primul p?trat
concentric este format din prima ?i ultima linie, prima ?i ultima coloan? a tabloului.
Exemplu: pentru n=5 ?i tabloul
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
se va afi?a:
1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6
____________________________________________
Metoda de rezolvare:
i:=1; for j:=1 to n do write(a[i,j]);
j:=n; for i:=2 to n do write(a[i,j]);
i:=n; for j:=n-1 to 1 do write(a[i,j]);
j:=1; for i:=n-1 to 1 do write(a[i,j]);
____________________________________________
INTREBARE: exista vreo functie predefinita pt. o rezolvare mai eficienta? Am vazut ca unele probleme cer parcurgerea elementelor unei matrici patratice cu un nr. oarecare de linii sub forma de spirala, adica, la exemplul de mai sus, sa se afiseze: 1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6 7 8 9 5 1 9 8 3 4
…sunt abia a XI-a si nu stiu:D, de aia am intrebat
Nu stiu sa existe vreo functie predefinita care sa iti faca ce doresti tu, daca are altcineva alta viziune este invitat sa raspunda 🙂
ma puteti ajuta si pe mine cu o problema
. Se dau doua numere naturale m si m. Se cere sa se afiseze in toate modurile posibile toate numerele de la 1 la n, astfel incat intre orice doua numere afisate pe pozitii consecutive, diferenta in modul sa fie >=m. Daca nu exista solutie, se da mesaj.
Ce face programul ?
Ca in nici un caz nu functioneaza asa cum te-ai astepta citind titlul.
De ce avem la procedura back parametrul P cand primul lucru pe care il face procedura la rulare e sa ii atribuie valoarea 1.
Si ca sa mearga nu ar trebui sa fie recursiv ? Pentru ca nu cel ce a scris programul a uitat sa adauge partea de recursivitate are o gramada de ‘chestii’ inutile => programul insusi e inutil!
Exercitiul:
Se consider? tabloul bidimensional cu n linii ?i n coloane ce con?ine numere naturale cu cel
mult patru cifre fiecare. Scrie?i programul Pascal care cite?te de la tastatur? num?rul
natural n (2?n?23) ?i cele n*n elemente ale tabloului ?i apoi afi?eaz? pe ecran elementele
primului p?trat concentric, separate prin câte un spa?iu. P?tratul este parcurs în sensul
acelor de ceasornic începând din col?ul s?u stânga-sus, ca în exemplu. Primul p?trat
concentric este format din prima ?i ultima linie, prima ?i ultima coloan? a tabloului.
Exemplu: pentru n=5 ?i tabloul
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
se va afi?a:
1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6
____________________________________________
Metoda de rezolvare:
i:=1; for j:=1 to n do write(a[i,j]);
j:=n; for i:=2 to n do write(a[i,j]);
i:=n; for j:=n-1 to 1 do write(a[i,j]);
j:=1; for i:=n-1 to 1 do write(a[i,j]);
____________________________________________
INTREBARE: exista vreo functie predefinita pt. o rezolvare mai eficienta? Am vazut ca unele probleme cer parcurgerea elementelor unei matrici patratice cu un nr. oarecare de linii sub forma de spirala, adica, la exemplul de mai sus, sa se afiseze: 1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6 7 8 9 5 1 9 8 3 4
…sunt abia a XI-a si nu stiu:D, de aia am intrebat
Nu stiu sa existe vreo functie predefinita care sa iti faca ce doresti tu, daca are altcineva alta viziune este invitat sa raspunda 🙂