Poniższy algorytm został przedstawiony w odcinku nr 232:
--> kill(all)$ 1 Dane wejściowe Określ wielkość momentu skręcającego [N m] --> M_s : 50$ Określ wartość naprężeń dopuszczalnych ze względu na skręcanie wału [MPa] --> tau_dop : 40$ Określ wartość naprężeń dopuszczalnych ze względu na naciski powierzchniowe dla piasty [MPa] --> sigma_dop: 45$ Określ współczynnik typu obciążenia [-] --> f: 1$ Określ współczynnik sprawności połączenia [-] --> ni: 0.75$ 2 Tablica danych rozmiarów Rozmiary połączenia wg ISO 14 w postaci [d, D, B, N] --> Rozmiary : [ [11, 14, 3, 6], [13, 16, 3.5, 6], [16, 20, 4, 6], [18, 22, 5, 6], [21, 25, 5, 6], [23, 26, 6, 6], [23, 28, 6, 6], [26, 30, 6, 6], [26, 32, 6, 6], [28, 32, 7, 6], [28, 34, 7, 6], [32, 36, 6, 8], [32, 38, 6, 8], [36, 40, 7, 8], [36, 42, 7, 8], [42, 46, 8, 8], [42, 48, 8, 8], [46, 50, 9, 8], [46, 54, 9, 8], [52, 58, 10, 8], [52, 60, 10, 8], [56, 62, 10, 8], [56, 65, 10, 8], [62, 68, 12, 8], [62, 72, 12, 8], [72, 78, 12, 10], [72, 82, 12, 10], [82, 88, 12, 10], [82, 92, 12, 10], [92, 98, 14, 10], [92, 102, 14, 10], [102, 108, 16, 10], [102, 112, 16, 10], [112, 120, 18, 10], [112, 125, 18, 10], [0, 0, 0, 0] ]$ 3 Funkcje --> wskaznik_przekroju(d, D) := ( 0.024 * (d + D)^3 )$ --> naprezenia_styczne(M, W, f) := ( M*10^3 / (W * f) )$ --> wysokosc_zeba(d, D) := ( 0.5 * (D - d) )$ --> srednica_podzialowa(d, D) := ( 0.5 * (d + D) )$ --> naciski_powierzchniowe(M, h, n, d, s) := ( if d > 0 then 2 * M * 10^3 / (d * h * n * s * ni) else 0 )$ --> MyRound(val, gain) := ( float(round(val * 10 ^ gain) / 10 ^ gain) )$ --> pokaz_wyniki_wal(i, tau) := ( prints : [ concat("Dla zadanego momentu: ", M_s, " N m, dobrano wał o wymiarach:"), concat("d = ", Rozmiary[i][1], " mm"), concat("D = ", Rozmiary[i][2], " mm"), concat("B = ", Rozmiary[i][3], " mm"), concat("Liczba zębów = ", Rozmiary[i][4]), concat("Wartość naprężeń stycznych = ", MyRound(tau, 1), " MPa <= ", tau_dop, " MPa"), concat("Oznaczenie: ", Rozmiary[i][4], "x", Rozmiary[i][1], "x", Rozmiary[i][2]) ], for j : 1 thru length(prints) step 1 do print(prints[j]) )$ --> pokaz_wyniki_piasta(dlugosc_piasty) := ( prints : [ concat("Obliczono wymaganą długość piasty przy naprężeniach dopuszczalnych: ", sigma_dop, " MPa:"), concat("L = ", MyRound(dlugosc_piasty, 1), " mm") ], for j : 1 thru length(prints) step 1 do print(prints[j]) )$ 4 Obliczenia wału --> for i:1 thru length(Rozmiary) - 1 step 1 do ( tau_obl : naprezenia_styczne(M_s, wskaznik_przekroju(Rozmiary[i][1], Rozmiary[i][2]), f), if tau_obl < tau_dop then ( ret : [i, tau_obl], return (ret) ), if i = length(Rozmiary) - 1 then ( ret : [i + 1, tau_obl], return (ret) ) )$ 5 Obliczenia piasty --> dl_piasty : naciski_powierzchniowe( M_s, wysokosc_zeba(Rozmiary[ret[1]][1], Rozmiary[ret[1]][2]), Rozmiary[ret[1]][4], srednica_podzialowa(Rozmiary[ret[1]][1], Rozmiary[ret[1]][2]), sigma_dop )$ 6 Wyniki --> pokaz_wyniki_wal(ret[1], ret[2])$ --> pokaz_wyniki_piasta(dl_piasty)$ 7 Obliczenia uproszczone --> szukany_wskaznik(M, f, tau) := ( 1000 * M * f / tau )$ --> szukana_srednica(W) := ( (16 * W / %pi)^(1/3) )$ --> W: szukany_wskaznik(M_s, f, tau_dop)$ --> D : szukana_srednica(W)$ --> d_test : 0$ --> licznik : 1$ --> while D > d_test do ( licznik : licznik + 1, d_test : Rozmiary[licznik][1], if licznik + 1 > length(Rozmiary) then ( return() ) )$ --> tau : naprezenia_styczne(M_s, wskaznik_przekroju(Rozmiary[licznik][1], Rozmiary[licznik][2]), f)$ --> dl_piasty : naciski_powierzchniowe( M_s, wysokosc_zeba(Rozmiary[licznik][1], Rozmiary[licznik][2]), Rozmiary[licznik][4], srednica_podzialowa(Rozmiary[licznik][1], Rozmiary[licznik][2]), sigma_dop )$ --> pokaz_wyniki_wal(licznik, tau)$ --> pokaz_wyniki_piasta(dl_piasty)$