ПРИМЕРЫ ПРОГРАММИРОВАНИЯ В Д С С П - 8 0 ПРИМЕР 1. [F1 - вычисляет 3*X*X-4*X+2] : F1 [X] C [X,X] 3 * [X,3*X] 4 - [X,3*X-4] * [3*X*X-4*X] 2 + [3*X*X-4*X+2] ; использование F1 * 25 F1 . D вк 1777 * -9 F1 . D вк 281 ПРИМЕР 2. [F2 - вычисляет A2*X*X-A1*X+A0] : F2 [A0,A1,A2,X] C E4 E3 [A0,X,A1,X,A2] * + [A0,X,A2*X+A1] * + [A2*X*X-A1*X+A0] ; использование F2 * 1 2 3 4 F2 . D вк 57 * 1 2 -3 4 F2 . D вк -39 ПРИМЕР 3. [FG - факториал N, если N>0, иначе 0] : FG [N] C BR+ FCT T0 [N! или 0] ; [FCT - факториал N] : FCT [N] C 1- C DO P D [N!] ; : P [F,K] E2 C2 [K,F,K] * E2 1- [F*K,K-1] ; использование FG * -5 FG . D вк 0 * 5 FG . D вк 120 ПРИМЕР 4. [CHRK - число вхождений данной литеры во введенном тексте] VAR CHR [код литеры] : CHRK [] CHRIN TEXT KOUT [] ; [CHRIN - задать литеру, TEXT - ввод и обработка текста, KOUT - выдача числа вхождений] : CHRIN [] CR ." Введите литеру - " TIB [код] ! CHR [] ; : TEXT [] CR ." Введите текст " CR CR 0 RP G1 [K] ; : KOUT [K] CR CR ."Число вхождений '" CHR TOB ."' равно" . D [] ; [G1 - обработка литеры] : G1 [K] TIB C 10 = EX+ CHR = IF+ 1+ [K1] ; использование CHRK * CHRK вк Введите литеру - П Введите текст ЭТО ПРИМЕР НА ИСПОЛЬЗОВАНИЕ ДССП ДЛЯ ОБРАБОТКИ ТЕКСТОВОЙ ИНФОРМАЦИИ вк Число вхождений 'П' равно 3 * ПРИМЕР 5. [SORT - расположить в порядке возрастания элементы вектора байтов X(1:N)] VAR N 10 ! N N BYTE VCTR X : SORT [] START N DO FORWD [] ; VAR J [START - начальная установка, FORWD - шаг вперед, J - указатель компонент] : START [] 0 0 ! X 0 ! J [] ; [X(0):=0, наименьшее возможное значение; J:=0] : FORWD [] PUSH [X(J),X(J+1)] > IF+ ADJUST !1+ J [] ; [PUSH - взять очередную пару компонент. Если не упорядочена, то ADJUST - упорядочить] : PUSH [] J X [X(J)] J 1+ X [X(J),X(J+1)] ; : ADJUST [] J RP BACK [J] ! J [] ; [BACK - шаг назад, упорядочивая] : BACK [] PUSH [X(J),X(J+1)] > BR+ SWAP EX !1- J [] ; [если упорядочена, то SWAP - обменять значения компонент пары, иначе EX - выход] : SWAP [] PUSH [X(J),X(J+1)] POP [] ; [POP - вернуть пару в обратном порядке] : POP [X(J),X(J+1)] J ! X J 1+ ! X [] ; [USORT - использование SORT] : USORT [N] ! N ASSIGN SORT DISPLAY [] ; [ASSIGN - присвоить значения элементам массива, DISPLAY - выдать упорядоченный массив на терминал] : ASSIGN [] CR ."Ведите" N . D ." элементов массива" CR 1 N DO PA D [] ; : PA [I] TIN C2 ! X 1+ CR [I+1] ; : DISPLAY [] CR ."Упорядоченный массив" 1 N DO PD D [] ; : PD [I] CR C X . D 1+ [I+1] ; использование USORT * 5 USORT вк Ведите 5 элементов массива 3 вк 7 вк 5 вк 22 вк 15 вк Упорядоченный массив 3 5 7 15 22 * ПРИМЕР 6. [НОД - наибольший общий делитель натуральных чисел M,N] : НОД [N,M] RP ЦД D [НОД] ; [ЦД - от делимого и делителя к делителю и остатку] : ЦД [делимое,делитель] E2 C2 / [делитель,частное,остаток] E2 D [делитель,остаток] C EX0 ; использование НОД * 48 72 НОД . D вк 24 * 225 650 НОД . D вк 25 * ПРИМЕР 7. [OCDECODE - выдает восьмеричный и десятичный коды вводимых литер] : OCDECODE [] RP PP [] ; : PP [] CR SP TIB ." - " C B8 3 TON .", " C B10 3 TON 10 = EX+ [] ; использование OCDECODE * OCDECODE вк 1 - 61, 49 A - 101, 81 вк - 12, 10 * ПРИМЕР 8. [ДИАЛОГ: вопрос - ответы - резюме] B8 : ДИАЛОГ [] ВОПРОС ОТВЕТЫ-РЕЗЮМЕ [] ; : ВОПРОС [] CR ."Как Вы предполагаете использовать ДССП? 1. Для вычислений 2. Для управления 3. Для обработки текстов" [] ; : ОТВЕТЫ-РЕЗЮМЕ [] RP AR [] ; [AR - получение ответа и выдача резюме] : AR [] CR ." Дайте номер ответа - " TIB BR #1 R1 #2 R2 #3 R3 ELSE R4 [] ; : R1 [] CR ."ДССП не ориентирована на вычисления" EX [] ; : R2 [] CR ."Вы на верном пути" EX [] ; : R3 [] CR ."ДССП поможет Вам!" EX [] ; : R4 [] CR ."Такой ответ не предусмотрен" [] ; B10 использование ДИАЛОГ * ДИАЛОГ вк Как Вы предполагаете использовать ДССП? 1. Для вычислений 2. Для управления 3. Для обработки текстов Дайте номер ответа - 7 Такой ответ не предусмотрен Дайте номер ответа - 3 ДССП поможет Вам! * ПРИМЕР 9. [COPYT - копировать перфоленту по байт с кодом 10 включительно] : COPYT [] RP PRNB [] ; [PRNB - считать и отперфорировать байт, проверить окончание] : PRNB [] RDB C PNB 10 = EX+ [] ; ПРИМЕР 10. [INSTR - ввести с перфоленты массив байтов STRING длины 80] 80 BYTE VCTR STRING [объявление массива] : INSTR [] RDT [байт] 1 ! STRING 2 ' STRING 79 RDS [] ; ПРИМЕР 12. [PLOT - строит график функции F(X), F>0, от X1 до X2, X1 [распечатка каталога] К А Т А Л О Г Ф А Й Л О В МОЖНО ИСПОЛЬЗОВАТЬ ФАЙЛЫ С НОМЕРАМИ ОТ 2 ДО 43. 3. Многочлен 5. Инструкция 20. Отладчик ПОСЛЕ ИЗМЕНЕНИЯ КАТАЛОГА НЕ ЗАБУДЬТЕ ЗАПИСАТЬ ЕГО В 1 И 44 ФАЙЛЫ! * KE IE 3 <вк> [очистка буфера и ввод 3-го файла] строк 0 6 [РТ сообщает, что в 3-ем файле 6 строк] * Е <вк> [вход в режим экранного редактирования] [в режиме экранного редактирования работа по инструкции к РТ/Э/] --------------------------------------------------------------------------- | строк 6 | | B10 | | PROGRAM $POLYNOM | | [F - вычисление функции F(X)=5X*X+3X+1 по заданному в стеке | | значению X, с выводом значения функции на терминал ] | | : F [X] C 5 * 3 + [X,5X+3] * 1+ [5X*X+3*X+1 . D [] ; | | UNDEF | | строк 6 | --------------------------------------------------------------------------- [в буфере РТ находится данная программа] * PF <вк> [выполним содержимое буфера, т.е. скомпилируем программу] * 2 F <вк> [выполним процедуру F с аргументом 2] [процедура выполнилась, но результат на экран не выдан.] * .. <вк> 1 поз. [посмотрим, что в стеке] [ 1 ] [итак: в стеке одна позиция - результат вычисления функции] * D E <вк> [очистим стек и посмотрим текст программы] --------------------------------------------------------------------------- |. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .| |. . . ОШИБКА В ПРГРАММЕ: ПРОПУЩЕНА СКОБКА, ЗАКРЫВАЮЩАЯ КОММЕНТАРИЙ. . . .| |. . . . . . . . . . . . . . ИСПРАВИМ ЕЕ . . . . . . . . . . . . . . . . .| |. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .| --------------------------------------------------------------------------- [исправленный текст:] --------------------------------------------------------------------------- | строк 6 | | B10 | | PROGRAM $POLYNOM | | [F - вычисление функции F(X)=5X*X+3X+1 по заданному в стеке | | значению X, с выводом значения функции на терминал ] | | : F [X] C 5 * 3 + [X,5X+3] * 1+ [5X*X+3*X+1] . D [] ; | | UNDEF | | строк 6 | --------------------------------------------------------------------------- * O <вк> MX0 3 [вывод текста на старое место, можно OE 3 <вк> ] * PF <вк> [скомпилируем программу] удалены п/с $POLINO * 2 F <вк> 27 [снова выполним процедуру F с аргументом 2] * .. <вк> 0 поз. [на экран выдан результат; посмотрим стек] * [в стеке ничего нет; программа отлажена] PROGRAM $ПУТЬ B10 VAR I VAR J VAR S VAR F VAR N 10 ! N N N 2 ARR WAY 0 !!! WAY 10 1 2 ! WAY 2 2 4 ! WAY 1 2 5 ! WAY 3 3 2 ! WAY 4 1 3 ! WAY 1 ! S 4 ! F : PUT [] 0 S RP PUT1 [] ВЫВОД [] ; : PUT1 [...] ! I [..] I EX0 1 ! J N DO PUT2 [..,J1,...,Jn] ; : PUT2 [..] |I,J| IF+ PUT21 !1+ J [..,J?] ; : PUT21 [..] |S,J| BR+ Меньше? Новый [..,J?] ; : Меньше? [..] |S,I|+|I,J| |S,J| > IF0 Новый [..,J?] ; : Новый [..] |S,I|+|I,J| S J ! WAY J [..,J] ; : |S,I|+|I,J| [] |S,I| |I,J| + [новое расстояние от S до J] ; : |S,I| [] S I WAY [текущее расстояние от S до I] ; : |S,J| [] S J WAY [текущее расстояние от S до J] ; : |I,J| [] I J WAY [расстояние от I до J] ; : ВЫВОД ." Минимальное расстояние от вершины" S 2 TON ." до вершины" F 2 TON ." равно" S F WAY 4 TON ; : VARR 1 10 DO VARR1 D CR ." I=" I 2 TON ." J=" J 2 TON ." S=" S 2 TON ." F=" F 2 TON .. ; : VARR1 CR 1 10 DO VARR2 D 1+ ; : VARR2 C2 C2 WAY 4 TON 1+ ; '' VARR \SE UNDEF