С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler: i8080/8085/KP580
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 06.03.2018
Сообщений: 21
CompModel

Найти минимальное положительное число в последовательности чисел (n=14)

25.03.2018, 12:52. Показов 8019. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот есть код, не могу разобраться в чем ошибка.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
RD #40
WR 37
RD #14
WR 38
M3: RD @37
JS M1
WR 60
RD 37
WR 61
RD 38
WR 62
M2: RD @61
JS M4
SUB 60
JNS M2
RD @61
WR 60
M4: RD 61
ADD #1
WR 61
RD 62
SUB #1
WR 62
JNZ M2
M1: RD 37
ADD #1
WR 37
RD 38
SUB #1
WR 38 
JNZ M3 
WR 60 
OUT 
HLT
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2018, 12:52
Ответы с готовыми решениями:

ЭВМ Жмакина. В последовательности чисел длиной n=14 найти минимальное положительное число.
Помогите написать программу определения заданной характеристики последовательности чисел С1, С2,..., Сn. Вот характеристика...

В последовательности целых чисел определить минимальное положительное число
Напишите программу, которая в последовательности целых чисел определяет минимальное положительное число. Программа получает на вход...

Найти в последовательности минимальное положительное число
Найти в последовательности минимальное положительное число

21
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
25.03.2018, 19:17
А что здесь происходит? Что хранится в ячейках 37, 38, 60-62 ?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
25.03.2018, 23:06
А ничего не происходит.
Пусть в ячейке 37 адрес, который назовем &x , а по этому адресу лежит не отрицательное значение x. Тогда

M3: RD @37 в аккамуляторе x
JS M1 не сработает
WR 60 в ячейке 60 значение x
RD 37 в аккамуляторе &x
WR 61 в ячейке 61 &x
RD 38
WR 62
M2: RD @61 в аккамуляторе x
JS M4 не сработает
SUB 60 вычитание x-x, результат 0
JNS M2 сработает и вечный цикл

Короче, ТС бред набросал и выложил, в надежде получить обратно правильное решение.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
25.03.2018, 23:42
Badwolf909, к вам серьёзные претензии, что вы скопировали перечень команд наугад.

Вы можете набрать алгоритм на C/Pascal/BASIC ? Только сразу в адресной арифметике, чтобы не путаться в CompModel?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 00:21
И тут вдруг возник очень нетривиальный вопрос. По идее корректная реализация алгоритма должна начаться с помещения в регистр c будущим результатом максимально-возможного положительного числа. А такое число суть 99999. Ну и как наиболее быстрым образом на этой уважаемой CompModel-е поместить в аккамулятор указанное число ? Вариант
RD #999
MUL #100
ADD #99
выглядит так, что хочется двинуть по монитору тапком.

Добавлено через 1 минуту
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Вы можете набрать алгоритм на C/Pascal/BASIC ?
Это где это будут сначала преподавать Си, а потом CompModel ?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
26.03.2018, 01:06
В школе. Олимпиады для школьников с какого класса начинаются? С 10-11? Или раньше?

Можно искать в два этапа.
1. Поиск первого положительного. И установка флага, что такое число присутствует.
2. Если положительные присутствуют. Поиск или со следующего элемента или с начала.
Я уже так кому-то набирал. Но устал на 1-м шаге и предложил продолжить самостоятельно.

Добавлено через 1 минуту
https://www.cyberforum.ru/low-... 98951.html
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 02:37
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
В школе.
После того как научились рисовать простейшие алгоритмы на настоящем Си снова учиться их рисовать на игрушечной CompModel ? Абсурд. Возможно, но только в обратном порядке.

Добавлено через 7 минут
Жмакинская ЭВМ специально заточена чтобы шестнадцатеричной системе не учить. Для какого-то облегченного курса инфоматики.

Добавлено через 20 минут
Вопрос. Можно ли короче :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
RD #0
WR 39
RD #40
WR 38
M1: RD @38
JS M3
JZ M3
WR 37
RD 39
JZ M2
SUB 37
JS M3
M2: RD 37
WR 39
M3: RD 38
ADD #1
WR 38
SUB #54
JNZ M1
RD 39
OUT
HLT
Добавлено через 19 минут
Можно.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RD #0
WR 39
RD #40
WR R0
M1: RD @R0+
JS M3
JZ M3
WR 38
RD 39
JZ M2
SUB 38
JS M3
M2: RD 38
WR 39
OUT
M3: RD R0
SUB #54
JNZ M1
HLT
2
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 12
26.03.2018, 07:27
А загрузка в аккумулятор устанавливает флаги?
Из цитаты
Цитата Сообщение от Ethereal Посмотреть сообщение
M3: RD @37 в аккамуляторе x
JS M1 не сработает
понял, что не устанавливает.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
26.03.2018, 12:55
Badwolf909, вот решение
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rdi #99999 ;default - max value
WR R3 ;min positive number
RD #40
WR R0 ;R0 - address
RD #14
WR R2 ;R2 - count
 
M1: RD @R0+ ;a = number
JS M2 ;a<0 -> next
JZ M2 ;a==0 -> next
WR R4 ;R4 = current number
SUB R3 ;compare with min
JNS M1 ;>= -> next
MOV R3,R4 ;new min
M2:JRNZ R2,M1 ;next
RD R3 ;min
OUT 
HLT
Добавлено через 1 минуту
Цитата Сообщение от Ethereal Посмотреть сообщение
А такое число суть 99999. Ну и как наиболее быстрым образом на этой уважаемой CompModel-е поместить в аккумулятор указанное число
См выше
2
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 15:58
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
понял, что не устанавливает.
Загрузка в аккамулятор устанавливает флаги.

Добавлено через 23 минуты
Ну тогда так. Ищем указатель на минимальное положительное. Длина кода выходит в 16 слов.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
RD #40
WR R0
WR R1
RD #14
WR R2
M1: MOV R3,R0
RD @R0+
JS M2
JZ M2
SUB @R1
JNS M2
MOV R1,R3
M2: JRNZ R2,M1
RD @R1
OUT
HLT
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
26.03.2018, 16:01
Ethereal, а если все будут неположительные?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 16:06
Цитата Сообщение от liv Посмотреть сообщение
JNS M1 ;>= -> next
У тебя апшипка. Тут надо было на метку M2
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
26.03.2018, 16:09
Ethereal, разумеется,"апшипка"

Добавлено через 1 минуту
Badwolf909, в моем коде в 13 строке должно быть
Assembler
1
JNS M2 ;>= -> next
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 16:23
Цитата Сообщение от liv Посмотреть сообщение
Ethereal, а если все будут неположительные?
Если программа выдала по OUT неположительное число, то ни одного положительного не было. Все логично. Какой-то признак того, что ни одного положительного не было все равно должен быть. Типа признак ошибки.
А вот у тебя, если вдуматься, то получается, что если программа выдала на выход 99999, то неизвестно было ли это число единственным положительным или положительных вовсе не было.

Добавлено через 1 минуту
Хотя я поначалу хотел точно также сделать. В учебной задаче школьника, что так, что эдак. Лишь бы как нибудь.

Добавлено через 10 минут
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А загрузка в аккумулятор устанавливает флаги?
Из цитаты
Сообщение от Ethereal
M3: RD @37 в аккамуляторе x
JS M1 не сработает
понял, что не устанавливает.
А, понял что имелось ввиду в этом вопросе. У меня было сказано.
Цитата Сообщение от Ethereal Посмотреть сообщение
Пусть в ячейке 37 адрес, который назовем &x , а по этому адресу лежит не отрицательное значение x.
Не отрицательное. И именно поэтому не сработает.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
26.03.2018, 16:24
Ethereal, но все же лучше сделать вот так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
rdi #0
WR R3 ;min positive number (0 not found)
RD #40
WR R0 ;R0 - address
RD #14
WR R2 ;R2 - count
M1:RD @R0+ ;a = number
JZ M1
JNS M2 ;first positive found
JRNZ R2,M1 ;first
jmp M5
M2:WR R3 ;save first min
M3:RD @R0+ ;a = number
JS M4 ;a<0 -> next
JZ M4 ;a==0 -> next
WR R4 ;R4 = current number
SUB R3 ;compare with min
JNS M4 ;>= -> next
MOV R3,R4 ;new min
M4:JRNZ R2,M3 ;next
M5:RD R3 ;min
OUT 
HLT
2
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 16:52
Цитата Сообщение от liv Посмотреть сообщение
M1:RD @R0+ ;a = number
JZ M1
Ну опять-же ошибка. Прыжок должен быть не на M1, а на команду JRNZ в 10-й строке. Торопишься куда-то.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
26.03.2018, 16:53
Ethereal, увы, так и есть Писал без компиляции
Сейчас все исправлю...
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 17:03
Так еще ошибка(и). Если положительное найдено, то общее число исполнений RD @R0+ у тебя будет не 14, а 15. Поскольку при выпрыгивании на метку M2 у тебя на одно JRNZ придется два RD @R0+ . В итоге ты прочтешь один элемент за массивом. И еще случай когда первое положительное было последним в массиве надо обработать особо, поскольку в этом случае второй цикл вообще крутить нельзя.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
26.03.2018, 17:07
Лучший ответ Сообщение было отмечено Badwolf909 как решение

Решение

Ethereal, Вот: Все учтено
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
rdi #0
WR R3 ;min positive number (0 not found)
RD #40
WR R0 ;R0 - address
RD #14
WR R2 ;R2 - count
 
;search first min
M1:RD @R0+ ;a = number
JZ M2
JNS M3 ;first positive found
M2:JRNZ R2,M1 ;first
jmp M5
 
;save 
M3:WR R3 ;save first min
 
;other numbers loop
M4:JRNZ R2,M6 ;search next min
 
;finish
M5:RD R3 ;min
OUT 
HLT
 
;get next number
M6:RD @R0+ ;a = number
JS M4 ;a<0 -> next
JZ M4 ;a==0 -> next
WR R4 ;R4 = current number
SUB R3 ;compare with min
JNS M4 ;>= -> next
MOV R3,R4 ;new min
JMP M4 ;next
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
26.03.2018, 17:16
Ну во. Еще еще первое RDI #0 заменить на RD #0 чтобы сэкономить слово, то выйдет красота с перевернутым циклом. Можно перед преподавателем пофорсить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2018, 17:16
Помогаю со студенческими работами здесь

Определить минимальное положительное число в данной последовательности.
Вводится последовательность ненулевых чисел, завершаемая нулем. Определить минимальное положительное число в данной последовательности.

В последовательности случайных чисел найти минимальное и максимальное число в каждой последовательности(без массивов)
Очень нужна помощь! В последовательности случайных чисел найти минимальное и максимальное число в каждой последовательности(без...

Найти минимальное число среди последовательности вводимых чисел
Найти минимальное число среди последовательности вводимых чисел. Остановить обработку программы при вводе признака конца - предварительно...

Найти минимальное число среди последовательности вводимых чисел
Найти минимальное число среди последовательности вводимых чисел. Остановить обработку программы при вводе признака конца - предварительно...

Найти минимальное положительное число и максимальное отрицательное число среди заданных
Дано N действительных случайных чисел в диапазоне от -100 до 100. Найти минимальное положительное число и максимальное отрицательное число.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru