Мегаобучалка Главная | О нас | Обратная связь


Проверка элементов массива на чётность



2019-10-11 282 Обсуждений (0)
Проверка элементов массива на чётность 0.00 из 5.00 0 оценок




 

Для проверки отдельных байтов массива на чётность удобно использовать команду test, которая вычисляет результат действия побитового логического «И» над приёмником и источником и устанавливает флаги SF, ZF и PF в соответствии с результатом, при этом результат не сохраняется. Если после выполнения команды test флаг PF будет установлен в 1, количество бит в байте чётно.

1. Вывод на экран текстовых сообщений

Наиболее простое решение – использовать для вывода текста функцию 9h DOS (прерывание INT21h), которая получает адрес строки для вывода через регистр dx, причем строка должна завершаться символом $.

2. Преобразование числа к строковому виду

В качестве основы используем реализацию алгоритма преобразования числа

в десятичное представление. [4, 201]

Суть используемого алгоритма заключается в выполнении следующих действий:

Разделить исходное число на 10.

Добавить к остатку ASCII-код нуля.

Записать полученную цифру в стек.

Увеличить счётчик цифр.

Если ещё есть что делить, продолжить с п.1

По количеству цифр: извлечь цифру из стека и дописать в конец результирующей строки.

Дописать в конец результирующей строки символ $.

Базовый алгоритм рассчитан на работу с 16-разрядными числами. Так как в разрабатываемой программе код чётности будет представлен в виде 32-разрядного числа, модифицируем исходный алгоритм для работы с двойными словами. Такая модификация выполняется достаточно просто заменой в исходном коде наименований регистров: ax на eax, bx на ebx, dx на edx.

 


Ввод числовых данных

 

С учётом того, что разрабатываемая программа является тестовой и не требует специфического управления клавиатурой, ввод с клавиатуры запрограммируем с помощью функций DOS.

Соответственно, алгоритм ввода числа в виде текстового описания будет выглядеть следующим образом:

Подготовить буфер ввода данных

Вызвать функцию DOS 0Ah для ввода с клавиатуры

Проверить количество введенных символов. Если = 0, ошибка

Выполнить проверку ввода десятичного числа

 


В целях обеспечения возможности повторного использования, а также для более простого понимания алгоритма в нём выделен отдельный подалгоритм проверки ввода десятичного числа.


Алгоритм проверки ввода десятичного числа

 

Алгоритм проверки ввода десятичного числа можно представить в виде текстового описания:

1) Проверить количество символов. Если больше 5, ошибка

2) Обнулить результат

3) Читать символ из буфера ввода

4) Если код символа меньше «0» или больше «9», ошибка

5) Получить промежуточный результат вычитанием кода символа «0»

6) Умножить на 10 результат

7) Если в ходе умножения получено переполнение, ошибка

8) Прибавить к результату промежуточный результат

9) Если обработаны не все символы, перейти к следующему символу. Переход к п.3

10) Если обработаны все символы, вернуть результат


Приложение

 

ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ НА ЯЗЫКЕ ASSEBLER

. model small; модель памяти

. stack 100h; сегмент стека

. data; сегмент данных

MAXDIGITSequ16; максимальное количество символов

; для ввода целого числа

BUFFERSIZEequMAXDIGITS + 2 + 1; объем буфера ввода

bufferdbBUFFERSIZE dup(?) ; буфер ввода

ARRAYSIZEequ4; количество элементов массива / 4

dataArraydb4*ARRAYSIZE dup(?) ; массив данных

changeValueNodb? ; номер элемента массива для изменения

changeValuedb? ; новое значение элемента массива

parityCodedd? ; код четности

; переменные для работы генератора случайных чисел

rand_add69621

rand_mdd7FFFFFFFh

seeddd-1

;

; Сообщения для вывода на экран

;

welcomeMsgdb"Welcome to array parity checker. ", 0Dh, 0Ah

db0Dh, 0Ah

db"This program generates array with random values and calculates its parity code. ", 0Dh, 0Ah

db"Then you can change any array value and program will check parity code. ", 0Dh, 0Ah

db"Enjoy! ", 0Dh, 0Ah

db0Dh, 0Ah

db0Dh, 0Ah, "$"

errorMsgdb"Parity check error. ", 0Dh, 0Ah, "$"

okMsgdb"Parity check ok. ", 0Dh, 0Ah, "$"

dataMsgdb"Array data: $"

codeMsgdb"Parity code: $"

numberMsgdb"Enter array item number to change (0. .15): $"

valueMsgdb"Enter new value (0. .255): $"

uncorrectMsgdb"Incorrect number. $"

writelndb0Dh, 0Ah, "$"

byeMsgdb"Bye! ", 0Dh, 0Ah, "$"

itemSeparatordb" $"

. code; сегмент кода

.386; программа для процессора 80386

; - ----------------------------------------------------------------------------------------

; Главная программа

; - ---------------------------------------------------------------------------------------

start: movax, @data

movds, ax; настройка регистров

moves, ax;

andsp, not 3; выравнивание границы стека

; во избежание ошибки доступа к памяти

movax, 0003h; видеорежим 3, очистка экрана и установка курсора

int10h

movdx, offset welcomeMsg; вывести приветствие

callshowString

callfillArray; заполнить массив случайными данными

movcx, ARRAYSIZE * 4; рассчитать контрольное число

; и записать в parityCode

movsi, offset dataArray

movdi, offset parityCode

callsaveParityCode

callshowArray; вывести значения элементов массива

moveax, parityCode

callshowParityCode

callinputValueNo; запросить у пользователя номер

; элемента массива для изменения

callinputValue; запросить у пользователя новое значение

; элемента массива

callchangeItem; изменить значение элемента массива

callshowArray; вывести значения элементов массива

callgetParityCode; рассчитать контрольное число

callshowParityCode

cmpparityCode, eax

jeparityCode_notChanged

parityCode_Changed:

movdx, offset errorMsg; сообщение об изменении кода четности

callshowString

jmpmain_exit

parityCode_notChanged:

movdx, offset okMsg; сообщение о неизменности кода четности

callshowString

main_exit:

callwriteLine; перевод строки

callwriteLine; перевод строки

movdx, offset byeMsg; до свидания

callshowString

callwriteLine; перевод строки

movax, 4c00h; завершение выполнения программы

int21h

; - ---------------------------------------------------------------------------------------

;

; Заполнить массив случайными данными.

;

; Параметры: нет

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [ref] dataArray - массив данных для заполнения

; [in] ARRAYSIZE - размер массива

;

; - ---------------------------------------------------------------------------------------

fillArrayproc

pusheax

pushcx

pushedi

movedi, offset dataArray; указатель на массив данных

movcx, ARRAYSIZE; размер массива

fillArray_loop:

callrand; генерировать случайное число в eax

cld; направление записи - вперед

stosd; записать в очередной элемент массива

loopfillArray_loop

popedi

popcx

popeax

ret

fillArrayendp

; - ----------------------------------------------------------------------------------------

; Генерация случайного числа.

;

; Параметры: нет

;

; Возвращаемое значение:

; eax - случайное положительное 32-битное число (от 0 до 2^31 - 2)

;

; Модификация регистров:

; eax

;

; Глобальные переменные:

; [in] rand_a – коэффициент a

; [in] rand_m – коэффициент m

; [ref] seed – последнее случайное число

;

; Примечание:

; Используется алгоритм, описанный в [Зубков С.В.] на стр.238.

; Линейный конгруэнтный генератор описывается формулой:

;

; I [j + 1] = (a * I [j] + c) mod m

;

; При правильно выбранных числах a и c эта последовательность возвращает

; все числа от нуля до m - 1 псевдослучайным образом и ее периодичность

; сказывается только на последовательностях порядка m.

; Классический стандартный генератор Льюиса, Гудмана и Миллера

; использует a = 16807 (7^5) при m = 2^31 - 1.

; Генераторы Парка и Миллера используют a = 48271 и a = 69621

; при том же m.

; Используем последний вариант.

; Значения a и m задаются в глобальных переменных rand_a и rand_m.

; - ---------------------------------------------------------------------------------------

randproc

pushedx

moveax, dword ptr seed; считать последнее случайное число

testeax, eax; проверить его

jsfetch_seed; если не - 1, функция еще ни разу не вызывалась

; и надо создать начальное значение

randomize:

muldword ptr rand_a; умножить на число a

divdword ptr rand_m; взять остаток от деления на 2^31 - 1

moveax, edx

movdword ptr seed, eax; сохранить для следующих вызовов

popedx

ret

fetch_seed:

pushds

push0040h

popds

moveax, dword ptr ds: 006Ch; считать двойное слово из области данных BIOS

; по адресу 0040: 006C - текущее число тактов таймера

popds

jmpshort randomize

randendp

; - ----------------------------------------------------------------------------------------

; Рассчитать контрольное число элементов массива и сохранить в переменной.

;

; Параметры:

; cx - размер массива

; ds: si - указатель на начало массива

; es: di - указатель на переменную-получатель

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

; - -----------------------------------------------------------------------------------------

saveParityCodeproc

pusheax

callgetParityCode; рассчитать контрольное число

mov [di], eax; сохранить результат

popeax

ret

saveParityCodeendp

; - ----------------------------------------------------------------------------------------

; Рассчитать контрольное число четности элементов массива.

; Если размер массива больше 32 байт, контрольное число

; рассчитывается методом суммирования - см. getParitySum

; Если размер массива не более 32 байт, контрольное число

; рассчитывается методом битовых масок - см. getParityBits

;

; Параметры:

; cx - размер массива

; ds: si - указатель на начало массива

;

; Возвращаемое значение:

; eax - 32-битное контрольное число

;

; Модификация регистров:

; eax

; - ----------------------------------------------------------------------------------------

getParityCodeproc

cmpcx, 32

jagetParityCode_sum

callgetParityBits

ret

getParityCode_sum:

callgetParitySum

ret

getParityCodeendp

; - -----------------------------------------------------------------------------------------

; Рассчитать контрольное число четности элементов массива методом битовых масок.

; Используется для массивов размером не более 32 байт.

; Для каждого байта определяется количество битов. Если оно четное, соответствующий

; бит контрольного числа устанавливается в 1, если нечетное - в 0.

; Нулевому байту массива соответствует нулевой бит контрольного числа и т.д.

;

; Параметры:

; cx - размер массива

; ds: si - указатель на начало массива

;

; Возвращаемое значение:

; eax - 32-битное контрольное число

;

; Модификация регистров:

; eax

; - ----------------------------------------------------------------------------------------

getParityBitsproc

pushebx

pushcx

pushsi

xorebx, ebx; обнулить результат

std; направление чтения - назад

addsi, cx; установить указатель на последний элемент массива

decsi

getParityBits_loop:

lodsb; прочитать байт данных в al

testal, al; проверить четность

jpgetParityBits_parity; если четность, перейти к установке флага cf

clc; сброс флага cf

jmpshort getParityBits_shift; перейти к формированию результата

getParityBits_parity:

stc; установить флаг cf

getParityBits_shift:

rclebx, 1; сдвиг влево на 1 бит с учетом флага cf

loopgetParityBits_loop

moveax, ebx; записать результат в eax

popsi

popcx

popebx

ret

getParityBitsendp

; - -----------------------------------------------------------------------------------------

; Рассчитать контрольное число четности элементов массива суммированием.

; Используется для массивов размером более 32 байт.

; Для каждого байта определяется количество битов. Если оно четное,

; контрольное число увеличиваем на 1.

;

; Параметры:

; cx - размер массива

; ds: si - указатель на начало массива

;

; Возвращаемое значение:

; eax - 32-битное контрольное число

;

; Модификация регистров:

; eax

;

; - ----------------------------------------------------------------------------------------

getParitySumproc

pushebx

pushcx

pushsi

xorebx, ebx; обнулить результат

cld; направление чтения - вперед

getParitySum_loop:

lodsb; прочитать байт данных в al

testal, al; проверить четность

jnpgetParitySum_next; если не четность, продолжить

incebx; увеличить результат на 1

getParitySum_next:

loopgetParitySum_loop

moveax, ebx; записать результат в eax

popsi

popcx

popebx

ret

getParitySumendp

; - -----------------------------------------------------------------------------------------

; Вывод на экран элементов массива.

;

; Параметры: нет

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [in] dataMsg – сообщение

; [in] dataArray – массив данных

; [ref] buffer – буфер преобразования числа в строку

; [in] itemSeparator – разделитель элементов массива

; [in] ARRAYSIZE - размер массива

; - ----------------------------------------------------------------------------------------

showArrayproc

pusheax

pushcx

pushdx

pushsi

pushdi

movdx, offset dataMsg; сообщение

callshowString

 

xoreax, eax; обнулить аккумулятор

movsi, offset dataArray; читать данные из массива данных

movdi, offset buffer

movcx, ARRAYSIZE * 4; размер массива, байт

showArray_loop:

cld; направление чтения - вперед

lodsb; прочитать байт данных в al

callint2dec; преобразовать в строку

movdx, offset buffer

callshowString; вывести на экран

movdx, offset itemSeparator

callshowString; вывести пробел

loopshowArray_loop

callwriteLine; перевод строки

popdi

popsi

popdx

popcx

popeax

ret

showArrayendp

; - ---------------------------------------------------------------------------------------

; Вывод на экран контрольного кода четности.

;

; Параметры:

; eax - контрольное число

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [in] codeMsg – сообщение

; [ref] buffer – буфер преобразования числа в строку

; - -----------------------------------------------------------------------------------------

showParityCodeproc

pushdx

pushdi

movdx, offset codeMsg; сообщение

callshowString

movdi, offset buffer

callint2dec; преобразовать в строку

movdx, di

callshowString; вывести на экран

callwriteLine; перевод строки

popdi

popdx

ret

showParityCodeendp

; - ----------------------------------------------------------------------------------------

; Запросить у пользователя номер элемента массива для изменения.

;

; Параметры: нет

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [in] ARRAYSIZE - размер массива

; [in] numberMsg – запрос на ввод номера элемента массива

; [in] uncorrectMsg – сообщение об ошибке

; [out] changeValueNo – результат ввода

; - ----------------------------------------------------------------------------------------

inputValueNoproc

pushbx

pushcx

pushdx

pushsi

pushdi

movbx, ARRAYSIZE * 4 - 1; максимально допустимое значение

movcl, 2; максимально допустимое количество символов

movdx, offset numberMsg; запрос на ввод номера элемента массива

movsi, offset uncorrectMsg; сообщение об ошибке

movdi, offset changeValueNo; запомнить результат ввода в changeValueNo

callinputNumber

popdi

popsi

popdx

popcx

popbx

ret

inputValueNoendp

; - -----------------------------------------------------------------------------------------

; Запросить у пользователя новое значение элемента массива.

;

; Параметры: нет

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [in] valueMsg - запрос на ввод нового значения элемента массива

; [in] uncorrectMsg – сообщение об ошибке

; [out] changeValue – результат ввода

; - -----------------------------------------------------------------------------------------

inputValueproc

pushbx

pushcx

pushdx

pushsi

pushdi

movbx, 255; максимально допустимое значение

movcl, 3; максимально допустимое количество символов

movdx, offset valueMsg; запрос на ввод нового значения элемента массива

movsi, offset uncorrectMsg; сообщение об ошибке

movdi, offset changeValue; запомнить результат ввода в changeValue

callinputNumber

popdi

popsi

popdx

popcx

popbx

ret

inputValueendp

; - -----------------------------------------------------------------------------------------

; Изменить значение элемента массива.

;

; Параметры: нет

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [ref] dataArray – массив данных

; [in] changeValueNo – номер элемента массива для изменения

; [in] changeValue – новое значение элемента массива

; - -----------------------------------------------------------------------------------------

changeItemproc

pushax

pushbx

pushsi

movbx, offset dataArray

xorax, ax

moval, changeValueNo

movsi, ax

moval, changeValue

mov [bx + si], al

popsi

popbx

popax

ret

changeItemendp

; - ----------------------------------------------------------------------------------------

; Запрос у пользователя числа.

; Вводятся беззнаковые целые числа в диапазоне 0. .65535.

;

; Параметры:

; bx - максимально допустимое значение

; cl - максимально допустимое количество символов

; dx - указатель на строку-приглашение для ввода

; si - указатель на сообщение об ошибке

; di - указатель на байтовую переменную-получатель

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [ref] buffer – буфер преобразования строки в число

; - -----------------------------------------------------------------------------------------

inputNumberproc

pushax

pushdi

inputNumber_input:

callshowString; вывод строки-приглашения для ввода

movdi, offset buffer; указатель на буфер ввода

calldo_inputNumber

callwriteLine; перевод строки

jncinputNumber_exit; если нет ошибки ввода, выход

inputNumber_error:

pushdx

movdx, si; сообщение об ошибке

callshowString

popdx

jmpshort inputNumber_input

inputNumber_exit:

popdi

mov [di], al; запомнить результат ввода в переменной-получателе

popax

ret

inputNumberendp

; - -----------------------------------------------------------------------------------------

; Ввод числа.

; Вводятся беззнаковые целые числа в диапазоне 0. .65535.

;

; Параметры:

; bx - максимально допустимое значение

; cl - максимально допустимое количество символов

; es: di - указатель на буфер ввода

; первый байт буфера резервируется для записи максимально допустимого количества символов

; второй байт буфера резервируется для записи количества реально введенных символов

;

; Возвращаемое значение:

; ax - результат ввода

; ch - количество введенных символов

; cf -

; = 0 в случае успешного преобразования

; = 1 в случае ошибки преобразования

;

; Модификация регистров:

; ax, cx, flags. cf

; - -----------------------------------------------------------------------------------------

do_inputNumberproc

pushdx

pushsi

andcx, 0Fh; обнуление ch (длины введенной строки)

clc; сброс флага ошибки

inccl

mov [di], cl; максимальное количество символов для ввода

deccl

movdx, di; настройка указателя на начало буфера ввода

movah, 0Ah; ввод с клавиатуры

int21h

movch, [di + 1] ; количество введенных символов

cmpch, 0; если = 0, ошибка

jedo_inputNumber_error1

 

movsi, di; подготовим указатель на первый введенный символ

incsi; для последующего преобразования строки в число

incsi

pushcx; преобразование десятичного числа

movcl, ch

andcx, 0Fh

calldec2int

popcx

jcdo_inputNumber_error1; если ошибка преобразования, выход с ошибкой

cmpbx, ax

jcdo_inputNumber_error2; если превышение лимита, выход с ошибкой

; без очистки результата

jmpdo_inputNumber_exit; если не превышает лимит, выход без ошибки

do_inputNumber_error1: ; ошибка преобразования

xorax, ax; обнулить результат

do_inputNumber_error2: ; ошибка преобразования

stc; установить флаг ошибки

do_inputNumber_exit:

popsi

popdx

ret

do_inputNumberendp

; - -----------------------------------------------------------------------------------------

; Вывод строки на экран.

;

; Параметры:

; dx - адрес строки для вывода, строка должна заканчиваться символом $

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

; - ----------------------------------------------------------------------------------------

showStringproc

pushax

movah, 9h; вызов функции DOS

int21h

popax

ret

showStringendp

; - -----------------------------------------------------------------------------------------

; Перевод строки.

;

; Параметры: нет

;

; Возвращаемое значение: нет

;

; Модификация регистров: нет

;

; Глобальные переменные:

; [in] writeln – коды перевода строки

; - -----------------------------------------------------------------------------------------

writeLineproc

pushdx

movdx, offset writeln; вывод символов перевода строки

callshowString

popdx

ret

writeLineendp

; - -----------------------------------------------------------------------------------------

; Преобразование строки, содержащей десятичные символы, в число.

; Строка должна содержать строковое представление целого числа в диапазоне 0. .65535.

;

; Параметры:

; ds: si - указатель на первый обрабатываемый символ исходной строки

; cx - количество символов (беззнаковое число)

;

; Возвращаемое значение:

; ax - результат преобразования

; cf -

; = 0 в случае успешного преобразования

; = 1 в случае ошибки преобразования

;

; Модификация регистров:

; ax, flags. cf

; - -----------------------------------------------------------------------------------------

dec2intproc

pushbx

pushcx

pushdx

pushsi

cmpcx, 0; проверка: количество символов 1. .5

jedec2int_error

cmpcx, 5

jadec2int_error

xorax, ax; обнуление результата

xorbx, bx; обнуление регистра-приемника

clc; сброс флага ошибки

dec2int_loop: ; цикл обработки символов исходной строки

movbl, byte ptr [si] ; читать очередной символ

cmpbl, '0'; если меньше 0, ошибка

jbdec2int_error

cmpbl, '9'; если больше 9, ошибка

jadec2int_error

subbl, '0'; вычесть код символа 0

movdx, ax; умножение на 10 содержимого ax:

shlax, 1; ax = 2x

jcdec2int_error

shlax, 1; ax = 4x

jcdec2int_error

addax, dx; ax = 4x + x = 5x

jcdec2int_error

shlax, 1; ax = 10x

jcdec2int_error

addax, bx; добавить промежуточный результат преобразования

jcdec2int_error

incsi; перейти к следующему символу

loopdec2int_loop

jmpdec2int_exit

dec2int_error: ; ошибка преобразования

xorax, ax; обнулить результат

stc; установить флаг ошибки

dec2int_exit:

popsi

popdx

popcx

popbx

ret

dec2intendp

; - ----------------------------------------------------------------------------------------

; Преобразование числа в десятичное строковое представление.

; Полученная строка завершается символом $.

;

; Параметры:

; eax - исходное число

; es: di - указатель на первый символ буфера для выходной строки

;

; Возвращаемое значение:

; выходная строка

;

; Модификация регистров: нет

; - ----------------------------------------------------------------------------------------

int2decproc

pusheax

pushebx

pushcx

pushedx

pushdi

xorebx, ebx

movbl, 10; множитель

xorcx, cx; обнуление счетчика символов

int2dec_loop: ; начало цикла преобразования

xoredx, edx; обнуление промежуточного результата преобразования

divebx; деление ax на 10, в dl - остаток от деления

adddl, '0'; перевод в ASCII

pushdx; сохранение результата в стеке

inccx; увеличить счетчик символов

testeax, eax; проверить ax на 0

jnzint2dec_loop; если что-то осталось,

; продолжить цикл преобразования

cld; направление обработки строк - вперед

int2dec_store: ; цикл формирования конечного результата

popax; восстановить цифру из стека

stosb; записать в результат

loopint2dec_store; проверка окончания цикла

movbyte ptr [di], '$'; добавить символ завершения строки

popdi

popedx

popcx

popebx

popeax

ret

int2decendp

; - -------------------------------------------------------------------------------------- - end start; конец программы

; - ---------------------------------------------------------------------------------------


Литература

 

1. Бойко В.И. и др. Схемотехника электронных систем. Микропроцессоры и микроконтроллеры. – СПб.: БХВ-Петербург, 2004. .

2. Гутников В.С. Интегральная электроника в измерительных устройствах.2-е изд., перераб. и доп. – Л.: Энергоатомиздат. Ленигр. отд-ние, 1988.

3. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. – М.: Финансы и статистика, 1992

4. Зубков С.В. Assembler для DOS, Windows и UNIX. – М.: ДМК Пресс, 2000.

5. Кулаков В. Программирование на аппаратном уровне. Специальный справочник. – СПб: Питер, 2001.

6. Мячев А.А., Степанов В.Н. Персональные ЭВМ и микроЭВМ. Основы организации: Справочник / Под ред.А. А. Мячева. – М.: Радио и связь, 1991.

7. Использование Turbo Assembler при разработке программ. – Киев: «Диалектика», 1994

8. Фролов А.В., Фролов Г.В. Операционная система MS DOS. – М.: «Диалог-МИФИ», 1992

9. Юров В.И. Assembler. – СПб: Питер, 2000

10. http: // www. gelezo. com



2019-10-11 282 Обсуждений (0)
Проверка элементов массива на чётность 0.00 из 5.00 0 оценок









Обсуждение в статье: Проверка элементов массива на чётность

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (282)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.013 сек.)