Разработать программу вычисления y=(a1-a2)x+(a2-a3)*2x+...+(a9-a10)*9x при x=2 A={15;1;3;7;-2;6;12;10;9;3} предел вводить с клавиатуры Интересует как вводить с клавиатуры предел,т.е. x=2?Поясните пожалуйста,как это делается
Чтобы не плодить новые темы, спрошу здесь. Не могу разобраться, почему не работает программа. Программа консольная, должна принимать имя диска (через read\write console), проверять его функцией GetDriveType и, в зависимости от того, что ввели, выводить инфу. Но - не работает, почему-то функция постоянно возвращает одно и тоже значение (вне зависимости от того, какое имя диска и как ввел, хоть С:\, хоть СССС, хоть что), а именно DRIVE_NO_ROOT_DIR. (т.е. 1 в еах, как видно в отладчике). В стандартном Масме в инклудах нет DRIVE_NO_ROOT_DIR, поэтому надо прописывать DRIVE_NO_ROOT_DIR equ 1 (как в МСДН). Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\kernel32.inc include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .const sConsoleTitle db "Disk verifier",0 .data lpFilename db 256 dup (0) bootdisk db "ZHESTKIY DISK",0 invitex db "VVEDITE DISK!",0 cdrom db "CD ROM",0 hz4to db "UNCNOWN DEVICE",0 .data? hStdout dd ? hStdin dd ? bReaded dd ? bWritten dd ? diske db ? .code Start: Invoke SetConsoleTitle,addr sConsoleTitle Invoke GetStdHandle,STD_OUTPUT_HANDLE mov hStdout,eax mov esi,sizeof invitex Invoke WriteConsole,hStdout,addr invitex,esi,addr bWritten,NULL ;выводим приглашение ввести диск Invoke GetStdHandle,STD_INPUT_HANDLE mov hStdin,eax ;or - Invoke ReadConsole,hStdin,addr diske,sizeof diske,addr bReaded,NULL Invoke ReadConsole,hStdin,addr lpFilename,sizeof lpFilename,addr bReaded,NULL ;считываем диск Invoke GetDriveType,addr lpFilename ;проверяем cmp eax,DRIVE_FIXED je Zhest cmp eax,DRIVE_CDROM je CD cmp eax,DRIVE_NO_ROOT_DIR je Unk Exit: Invoke ExitProcess,0 Zhest: Invoke WriteConsole,hStdout,addr bootdisk,sizeof bootdisk,NULL,NULL CD: Invoke WriteConsole,hStdout,addr cdrom,sizeof cdrom,NULL,NULL Unk: Invoke WriteConsole,hStdout,addr hz4to,sizeof hz4to,NULL,NULL end Start
Код (Text): ;-------- Invoke ReadConsole,hStdin,addr lpFilename,3,addr bReaded,NULL ;считываем диск Invoke GetDriveType,addr lpFilename ;проверяем cmp eax,DRIVE_FIXED je Zhest cmp eax,DRIVE_CDROM je CD cmp eax,DRIVE_NO_ROOT_DIR je Unk Zhest: Invoke WriteConsole,hStdout,addr bootdisk,sizeof bootdisk,NULL,NULL CD: Invoke WriteConsole,hStdout,addr cdrom,sizeof cdrom,NULL,NULL Unk: Invoke WriteConsole,hStdout,addr hz4to,sizeof hz4to,NULL,NULL Exit: invoke Sleep,2000 Invoke ExitProcess,0 end Start 1) перенёс ExitProcess в конец программы, т.к. нет джампов на "Exit:" - из-за этого вылетала ошибка 2) добавил "invoke Sleep,2000" - чтобы посмотреть, что получилось 3) уменьшил размер lpFilename до трёх символов(больше не требуется), т.к. лишние нули в "lpFilename db 256 dup (0)" приводили к постоянному возврату "UNCNOWN DEVICE" вводить: С:\
bizdon, спасибо, так все работает. Единственное, я добавил в каждую метку код jmp Exit, иначе у меня (скажем при вводе жесткого диска) выводились все три текста подряд.