[Citat] ...eu ma gandeam la un algoritm in pascal dar ma inereseaza sa aflu pentru toate tipurile de prisma regulata (normal) adica patrulatera, triunghiularea si hexagonala
|
Sa incercam impreuna macar sa punem problema pentru a fi oferita digerata computerului. Luam cazul simplu al unei prisme regulate patrulatere, deci o cutie cu baza patrat de latura a si cu inaltimea h. Atunci formulele sunt imediate si rog macar / apelez la o incercare pe hartie inainte de citire.
formule pentru cutie cu laturile ce pleaca dintr-un varf de lungimi a,a,h
Sa zicem ca vrem sa scriem un program (in pascal, sau daca trebuie mai repede in galop) ce citeste A (aria totala) si V si este obligat sa livreze toate valorile posibile pentru a si h ce respecta formulele de mai sus. Din pacate, pascal poate sa faca doar adunarile si scaderile pe care i le prescriem noi. Sa zicem ca cautam a,h astfel incat A = 37224 (de m patrati) si V = 566561 (de m cubi). Am ales doua numere pe gustul lui pascal. Din pacate nu exista functia
IoItiDau_A_si_V_TuDa_MiIute_a_si_h
implementata in pascal (sau in alte limbaje), asa ca trebuie sa analizam mai departe incat sa ajungem cat mai repede la o problema fezabila pentru pascal.
Suntem astfel obligati sa facem ceva, uman io as substitui h obtinut din prima ecuatie in cea de-a doua. Obtinem ecuatia de
gradul trei in a:
in care mai introducem si valori "urate".
Uman am face grafic, am vedea pe unde sunt cele una sau trei radacini reale, daca sunt vreunele pozitive, etc. Solutia se da cu formulele lui Tartaglia (furate de Cardano si ceva extinse), dar nu este chiar asa usor pentru pascal sa lucreze cu numere complexe, fiindca acestea apar obligatoriu. Am putea sa incercam doar o solutie aproximativa, dar atunci trebuie sa stim cum aplicam procedeul de aproximare al lui Newton.
Sau stim de o biblioteca in pascal ce face munca pentru noi.
Sau vedem ca didactic, problema nu este tocmai buna pentru pascal. Alegera armelor (limbaj de programare si cunoasterea bibliotecilor matematice aferente) este primul lucru esential in viata. Eu stiu, la scoala, un profesor ce stie (doar) pascal va face nazuri. Eu nu pot schimba nimic aici, pot incerca sa scriu cod insa daca mi se spune ce si ca chiar se merita.
Nu inainte de a da sfatul de a folosi un alt limbaj de programare. Chiar mai bine, deoarece problema este de matematica, folosirea unui sistem algebric computerizat, care are deja implementat calculul simbolic si biblioteci de cautat radacini. Problema se reduce atunci la a sti sa cerem.
Daca nu, trebuie sa implementam personal metoda lui Newton sau formulele lui Tartaglia (Cardano). Ce facem?
N.B. Folosind PARI/GP (interpreter scris pe baza unor biblioteci C) tiparim pur si simplu:
"Ruland" (Copii+paste in interpreter) vedem ceva de forma:
Inutil sa spun ca daca luam volumul ceva mai mare cubica nu mai "musca" din axa Ox, deci nu aveam solutii.
Inchei aici cu cateva intrebari despre buna definire a problemei:
Problema matematica deschisa mai ales ne-programatorilor: Ce relatie trebuie sa verifice A,V >0 astfel incat sa existe solutii a,h >0 ale problemei.
Pentru programatori: Ce arme alegem? Ce limbaj de programare si ce nivel de "automatism" (impartire pe cazuri) alegem?
Vrem solutia exacta si/sau cea aproximativa?
Ce algoritm implementam?
Daca il implementam si merge, cine-l mai citeste si ruleaza si de ce?
Avem deci o situatie ca in viata de zi cu zi, ea ilustreaza la ce sunt buni matematicienii, la ce sunt buni programatorii si ce ar trebui sa rezolve managerii (comunicarea pentru luarea de decizii este esentiala aici, altfel nu pot incepe sa lucrez). Programatorul / matematicianul trebuie sa ofere doua sau trei solutii intotdeauna. Oamenii discuta si cad de acord... Apoi se implementeaza, nu merge o data, nu merge de doua... Cand merge se obtin in sfarsit solutiile a=-0.000051234 si h = "TODO: Specify a good default for h"...
No, ce facem mai departe?
(Cine a propus problema si care e miza?)