DiBR
обычная кошмарная
домашняя страничка
Ежекакполучится околокомпьютерное обозрение
 
  <<<  предыдущий Tech! archive #20 следующий  >>>  
   Последний выпуск       Архив       Ссылки       Полезности       humor.filtered       Фотки       О сайте   
          Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
         
- __techs (2:5015/42) ----------------------------------------------- __techs -
Msg  : 20 of 1000                          Scn
From : Pavel Gulchouck                     2:463/68        24 May 96  11:45:00
To   : Stas Gridin                                         26 May 96  07:47:10
Subj : Батнимк нужнo написать
-------------------------------------------------------------------------------
@AREA:NICE.SOURCES.D
Hi Stas!

Sat May 18 1996, Stas Gridin ==> All:

SG> Hаpoд не мoгли бы пoмoчь. Hужнo написать батник слoжения 2-х чисел, числа
SG> oт 0 дo 10. Числа задаются паpаметpами. Мoжнo пoльзoваться тoлькo
SG> кoмандами DOS'а, как внутpеннеми так и внешнеми

Hе, ну это ж совсем неспортивно - можно внешние команды, числа до 10...

Вот батник, использующий только _внутренние_ команды command.com, и
складывающий произвольные (до восьми разрядов) натуральные числа.
Только в связи с тем, что он вызывает себя по
call %0
нужно либо его вызывать с полным путем, либо чтобы он находился по %PATH%.
Да, обработка ошибочных ситуаций (в т.ч. плохих параметров и переполнения
environment) не происходит. В этом случае возможно зацикливание.
И вообще, я его потестировал совсем немного, поэтому возможны глюки.

Умножение пишется аналогично, в столбик. ;-)

И вообще, на батниках imho можно реализовать любой алгоритм. В доказательство
давно собираюсь tetris написать в ANSI, но все времени нет подобной дурью
маяться. ;-)
Хотя на языке скрипта telix я tetris видел.

=== Cut ===
@echo off
if "%1"=="getfig" goto getfig
if "%1"=="addzero" goto addzero
if exist %temp%\\add\\*. goto badtemp
cd %temp%
mkdir add
cd add
call %0 addzero %1 num1
call %0 addzero %2 num2
set sum=
set perenos=0
set curfig=0000000
set fzero=
:loop
if not exist *. goto nodel
echo y|del *. > nul
:nodel
rem выделяем очередные цифры в fig?
call %0 getfig %num1% 1
call %0 getfig %num2% 2
rem складываем эти цифры
set p2=0
if "%perenos%"=="1" goto peren
:addfig
if "%fig1%"=="0" goto endafig
if "%fig1%"=="1" set fig1=0
if "%fig1%"=="2" set fig1=1
if "%fig1%"=="3" set fig1=2
if "%fig1%"=="4" set fig1=3
if "%fig1%"=="5" set fig1=4
if "%fig1%"=="6" set fig1=5
if "%fig1%"=="7" set fig1=6
if "%fig1%"=="8" set fig1=7
if "%fig1%"=="9" set fig1=8
:peren
if "%fig2%"=="9" goto afig9
if "%fig2%"=="8" set fig2=9
if "%fig2%"=="7" set fig2=8
if "%fig2%"=="6" set fig2=7
if "%fig2%"=="5" set fig2=6
if "%fig2%"=="4" set fig2=5
if "%fig2%"=="3" set fig2=4
if "%fig2%"=="2" set fig2=3
if "%fig2%"=="1" set fig2=2
if "%fig2%"=="0" set fig2=1
goto addfig
:afig9
set p2=1
set fig2=0
goto addfig
:endafig
set perenos=%p2%
set sum=%fig2%%sum%
if "%curfig%"=="" goto putres
if "%curfig%"=="0" set curfig=
if "%curfig%"=="00" set curfig=0
if "%curfig%"=="000" set curfig=00
if "%curfig%"=="0000" set curfig=000
if "%curfig%"=="00000" set curfig=0000
if "%curfig%"=="000000" set curfig=00000
if "%curfig%"=="0000000" set curfig=000000
set fzero=0%fzero%
rem Проверяем, не хватат ли?
rem > %fzero%%num1%
if not exist 00000000 goto loop
del 00000000 > nul
rem > %fzero%%num2%
if not exist 00000000 goto loop

:putres
if "%perenos%"=="1" set sum=1%sum%
echo y|del *. > nul
cd ..
rmdir add
echo %sum%
set fig1=
set fig2=
set sum=
set curfig=
set fzero=
set perenos=
set p2=
goto exit

:getfig
rem > %2
for %%i in (*.) do ren %%i %curfig%?
for %%i in (*.) do set fig=%%i
echo y|del *. > nul
call %0 addzero %fig% fig
if "%fig%"=="00000000" set fig%3=0
if "%fig%"=="00000001" set fig%3=1
if "%fig%"=="00000002" set fig%3=2
if "%fig%"=="00000003" set fig%3=3
if "%fig%"=="00000004" set fig%3=4
if "%fig%"=="00000005" set fig%3=5
if "%fig%"=="00000006" set fig%3=6
if "%fig%"=="00000007" set fig%3=7
if "%fig%"=="00000008" set fig%3=8
if "%fig%"=="00000009" set fig%3=9
set fig=
goto exit

:addzero
rem добавляем %2 нулями впереди до восьми и присваеваем результат в %3
set zeroes=
:azloop
rem > %2%zeroes%
if exist %2%zeroes%0 goto eazloop
set zeroes=%zeroes%0
goto azloop
:eazloop
set %3=%zeroes%%2
echo y|del *.>nul
goto exit

:badtemp
echo Hе могу работать, когда в %temp%\\add столько мусора!

:exit
=== Cut ===

             Lucky carrier,
                          Гуля
                          aka  gul@lucky.carrier.kiev.ua
--- GoldED/2 2.50+
* Origin: Old programmers never die. They branch to a new address. (2:463/68)






<<<

архив dibr

>>>'