Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Дайте направление решения задачи.

794  1 2 все
lisenkalejka гость15.05.15 12:56
lisenkalejka
NEW 15.05.15 12:56 
Здравствуйте. Помогите найти решение по второму заданию.
Первое я решила, а второе (Rest berechnen) не знаю с чего начать. Vожет кто подскажет с какого шага нужно начать и как это выглядит. Спасибо. А то совсем идей нет(((
#1 
BorisL0 постоялец15.05.15 13:32
NEW 15.05.15 13:32 
в ответ lisenkalejka 15.05.15 12:56, Последний раз изменено 15.05.15 15:03 (BorisL0)
Как я понимаю, подпрограмма должна найти остаток от деления числа из Puffer с десятичной записью: a_n a_{n-1} a_{n-2} ... a_0 на
число, записанное в Teiler.
Десятичное число в Puffer нужно представить так:
((((( a_n * 10 + a_{n-1} )*10 + a_{n-2})*10 + .... ) *10 + a_0
А далее поиск остатка от деления X ищется в цикле:
X <- остаток от деления ( a_n * 10 + a_{n-1} ) на Teiler
X <- остаток от деления X*10 + a_{n-2} на Teiler
X <- остаток от деления X*10 + a_{n-3} на Teiler ....
X <- остаток от деления X*10 + a_0 на Teiler.
Вот, вроде, и все.
P.S. a_{...} это я так обозначал индекс, "a маленькое ... снизу" (запись из LaTeX :)) )
#2 
AlexNek патриот15.05.15 14:08
AlexNek
NEW 15.05.15 14:08 
в ответ lisenkalejka 15.05.15 12:56, Последний раз изменено 15.05.15 14:17 (AlexNek)
тут есть описание с примером
http://de.wikipedia.org/wiki/IBAN
1.Setze die beiden Prüfziffern auf 00 (die IBAN beginnt dann z. B. mit DE00 für Deutschland).
2.Stelle die vier ersten Stellen an das Ende der IBAN.
3.Ersetze alle Buchstaben durch Zahlen, wobei A = 10, B = 11, …, Z = 35.
4.Berechne den ganzzahligen Rest, der bei Division durch 97 bleibt.
5.Subtrahiere den Rest von 98, das Ergebnis sind die beiden Prüfziffern. Falls das Ergebnis einstellig ist, wird es mit einer führenden Null ergänzt.
Хотя надо еще с заданием сравнить, может они по другому хотят. Но в принципе нужно по определенному алгоритму, подсчитать контрольное число.
А в чем именно проблемы возникли?
Это оказывается задание 3, а второе как бы подготовка к нему
#3 
lisenkalejka гость15.05.15 15:24
lisenkalejka
NEW 15.05.15 15:24 
в ответ BorisL0 15.05.15 13:32
Это, я так понимаю, схема Горнера?
Но мне сначала нужно дать определение мода. У меня же нет ее в списке. Может это глупость, что пишу. Но у меня на ум приходит только это. С мат. точки зрения mod (a, b) = a kleiner b, dann a/ Wenn a groser b, dann mod (a-b, b)/
Тогда можно написать так?
mod :
blt $a0, $a1, fertig
subbu $a0, $a0, $a1
beq $zero, $zero, mod
fertig:
addu $v0, $zero, $a0
jr $ ra
А дальше это нужно вписать в формулу Горнера с этим модом, как в двух формулах в задании при сложении и умножении чисел. Так? Каким кодом это показать?
#4 
BorisL0 постоялец15.05.15 15:30
NEW 15.05.15 15:30 
в ответ lisenkalejka 15.05.15 15:24
Да, это схема Горнера. Функцию вычисления остатка mod(a,b) Вы записали правильно. К сожалению, с
непосредственным кодом в ассемблере ничего не могу посоветовать -- не знаю :(((
#5 
AlexNek патриот15.05.15 17:50
AlexNek
NEW 15.05.15 17:50 
в ответ lisenkalejka 15.05.15 15:24
В ответ на:
Но у меня на ум приходит только это

Можно и рекурсивно сделать но при больших числах будет неээфективно.
http://borlpasc.narod.ru/docym/le/pract/scalar/ostat.htm
Res := X - Trunc (X / Y) * Y;
Но я тоже не знаю как на вашем ассемблере реализуются операции с плавающей точкой и как real преобразовать в integer (это делает Trunc - не округляет, а отсекает дробную часть)
Пишите лучше на псевдокоде, тогда больше людей смогут его понять.
#6 
Kvint постоялец15.05.15 22:50
Kvint
NEW 15.05.15 22:50 
в ответ lisenkalejka 15.05.15 12:56
Привет. Вопрос не по теме. А зачем так подробно изучают вирташафтсинформатики ассемблер? Есть же abap или vba
#7 
lisenkalejka гость16.05.15 10:52
lisenkalejka
NEW 16.05.15 10:52 
в ответ Kvint 15.05.15 22:50
Не знаю, я программу обучения не составляю. У нас за семестр дают 2 недели на изучения Гита,2 недели ассемблер,3 недели Ява, 3 недели С, 3 недели С++. После каждого языка нужно сдать миниклаузур и проект. Я как лошадь в мыле(((
#8 
Murr патриот16.05.15 12:26
Murr
NEW 16.05.15 12:26 
в ответ lisenkalejka 16.05.15 10:52
Я как лошадь в мыле
-----
Еще раз скажу - вполне нормальное состояние.
Так, кстати, будет до окончания работы в ИТ...
5-10 дней на изучение проблемы и вперед, код
лепить...
#9 
AlexNek патриот16.05.15 13:10
AlexNek
NEW 16.05.15 13:10 
в ответ lisenkalejka 16.05.15 10:52
В ответ на:
2 недели ассемблер,3 недели Ява, 3 недели С, 3 недели С++

Довольно странно, что за этот период с нуля можно изучить? А что они потом в бумажке напишут?
Конечно будет везде всё непонятно.
#10 
lisenkalejka гость16.05.15 14:15
lisenkalejka
NEW 16.05.15 14:15 
в ответ AlexNek 16.05.15 13:10, Последний раз изменено 16.05.15 14:17 (lisenkalejka)
Вот поэтому помощи и прошу. Хотя читаю очень много. Пытаюсь во все вникнуть, но как только открываю задания, сразу паника, спустя 2-4 дня абсолютного погружения без отдыха, что-то начинаю понимать. Но зверски тяжело. Просто тут много ребят пришли из гимназий специализированных, а я лишь обычный пользователь, чуть выше среднего. Я тут дорешиваю, можно потом скину на проверку с пояснениями? А то отдавать в среду надо, но очень хочется заранее исправить ошибки, если они есть (а они, я чувствую, у меня будут обязятельно((((( )
#11 
AlexNek патриот16.05.15 14:25
AlexNek
NEW 16.05.15 14:25 
в ответ lisenkalejka 16.05.15 14:15
В ответ на:
можно потом скину на проверку с пояснениями?

Конечно кидайте, только не один ассемблер
#12 
BorisL0 постоялец16.05.15 14:26
NEW 16.05.15 14:26 
в ответ lisenkalejka 16.05.15 14:15, Последний раз изменено 16.05.15 14:29 (BorisL0)
Да, и еще замечание по поводу операции вычисления остатка от деления 2-х целых 4-байтовых чисел mod(a,b).
Похоже, что в этом ассемблере есть операция
div	$t5,$t6		#  Lo = $t5 / $t6   (integer quotient)
# Hi = $t5 mod $t6 (remainder)


которая его (remainder) и возвращает. Так что сложности вроде алгоритма
mod (a, b) = a kleiner b, dann a/ Wenn a groser b, dann mod (a-b, b)/
как Вы написали, вроде как не нужны.

#13 
lisenkalejka гость16.05.15 14:28
lisenkalejka
NEW 16.05.15 14:28 
в ответ BorisL0 16.05.15 14:26
Спасибо, возьму на заметку.
#14 
BorisL0 постоялец16.05.15 14:39
NEW 16.05.15 14:39 
в ответ lisenkalejka 16.05.15 14:28
Это было взято с сайта http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm --
краткий обзор команд этого ассемблера.
#15 
Kvint постоялец16.05.15 16:29
Kvint
16.05.15 16:29 
в ответ lisenkalejka 16.05.15 14:15
2-3 недели на язык, толком не разберешься а больше запутаешься.
Вот кстати ссыль на скрипт. Незнаю почему лежит в открытом доступе, но мне помог очень хорошо разобраться в ассемблере
www.mobile.ifi.uni-muenchen.de/studium_lehre/sose15/rechnerarchitektur/in...
#16 
Kvint постоялец16.05.15 16:32
Kvint
NEW 16.05.15 16:32 
в ответ Kvint 16.05.15 16:29
lisenkalejka гость16.05.15 18:50
lisenkalejka
NEW 16.05.15 18:50 
в ответ AlexNek 16.05.15 14:25, Последний раз изменено 16.05.15 19:28 (lisenkalejka)
Nummer Name cs Bedeutung
$0 $zero — Hat beim Lesen immer den Wert 0
$1 $at — Wird vom Assembler verwendet; darf nicht vom Programmierer verwendet werden
$2–$3 $v0–$v1 nein Rückgabewerte eines Unterprogramms
$4–$7 $a0–$a3 nein Erste vier Argumente eines Unterprogramms
$8–$15 $t0–$t7 nein Temporäre Werte, Sichern durch Aufrufer
$16–$23 $s0–$s7 ja Temporäre Werte, Sichern durch Aufgerufenen
$24–$25 $t8–$t9 nein Temporäre Werte, Sichern durch Aufrufer
$26–$27 $k0–$k1 — Reserviert für das Betriebssystem
$28 $gp ja global pointer. Zeigt in die Mitte des ersten 64K Blockes im Datensegment
$29 $sp ja stack pointer. Kellerpegel
$30 $fp ja frame pointer. Schachtelzeiger
$31 $ra nein return address. Rücksprungadresse
A.3 Befehle
Art Opcode Operanden Bedeutung Kommentar
Arithmetik
addu $d $s t $d ← $s + $t
addiu $t $s i $t ← $s + sext32 16(i)
subu $d $s t $d ← $s − $t
Bitoperationen
and $d $s $t $d ← $s & $t
andi $d $s i $t ← $s & zext32 16(i)
or $d $s $t $d ← $s | $t
ori $d $s i $t ← $s | zext32 16(i)
xor $d $s $t $d ← $s ̂ $t
xori $d $s i $t ← $s ̂ zext32 16(i)
nor $d $s $t $d ← $s | $t
Shifts
sll $d $s n $d ← $s[31 − n ∶ 0] ⋅ 0n
srl $d $s n $d ← 0n ⋅ $s[31 ∶ n]
sra $d $s n $d ← ($s31)n ⋅ $s[31 ∶ n]
sllv $d $s $t $d ← s31−n … s0 ⋅ 0n
srlv $d $s $t $d ← 0t ⋅ s31 … st
srav $d $s $t $d ← st 31 ⋅ s31 … st
Vergleiche
slt $d $s $t $d ← if $s s< $t then 1 else 0
sltu $d $s $t $d ← if $s u<$t then 1 else 0
slti $d $s i $d ← if $s s<sext32 16(i) then 1 else 0
sltiu $d $s i $d ← if $s u< sext32 16(i) then 1 else 0
lui $d i $t ← i15 … i0 ⋅ 016
Laden
lw $d i($s) $d ← M[$s + sext32
16(i)] ($s + sext32
16(i)) & 3 = 0
lh $d i($s) $d ← sext32
16(M[$s + sext32
16(i)]) ($s + sext32
16(i)) & 1 = 0
lb $d i($s) $d ← sext32 8 (M[$s + sext32 16(i)])
lhu $d i($s) $d ← zext32 16(M[$s + sext32 16(i)]) ($s + sext32 16(i)) & 1 = 0
lbu $d i($s) $d ← zext32 8 (M[$s + sext32 16(i)])
Speichern
sw $d i($s) M[$s + sext32 16(i)] ← $d ($s + sext32 16(i)) & 3 = 0
sh $d i($s) M[$s + sext32 16(i)] ← $d[15 ∶ 0] ($s + sext32 16(i)) & 1 = 0
b $d i($s) M[$s + sext32 16(i)] ← $d[7 ∶ 0]
Sprung
beq $s $t offset pc ← pc + 4 + if $s = $t then sext32 16(offset) else 0
bne $s $t offset pc ← pc + 4 + if $s ≠ $t then sext32 16(offset) else 0
blez $t offset pc ← pc + 4 + if $t ≤ 0 then sext32 16(offset) else 0
bgtz $t offset pc ← pc + 4 + if $t > 0 then sext32 16(offset) else 0
bltz $t offset pc ← pc + 4 + if $t < 0 then sext32 16(offset) else 0
bgez $t offset pc ← pc + 4 + if $t ≥ 0 then sext32 16(offset) else 0
jal addr $31 ← pc + 8, pc ← addr
jr $s pc ← $s
syscall Rufe Betriebssystem
Pseudo
li $d i $d ← i
la $d l $d ← addr Lädt Adresse der Marke l
mul $d $s t $d ← $s × $t
div $d $s t $d ← $s/$t
not $d $s $d ← $s
neg $d $s $d ← −$s
b{lt, gt, le, ge} $d, $d, offset pc ← pc + 4 + if $s cmp $t then offset else 0
Это расшифровка...
#18 
BorisL0 постоялец16.05.15 18:57
NEW 16.05.15 18:57 
в ответ lisenkalejka 16.05.15 18:50, Последний раз изменено 16.05.15 18:59 (BorisL0)
Попробуйте весь текст кода записать на форуме между pre в квадратных скобках
... и /pre тоже в квадр. скобках,
тогда не будет искажений форматирования, переносов итд.
#19 
lisenkalejka гость16.05.15 19:12
lisenkalejka
16.05.15 19:12 
в ответ lisenkalejka 16.05.15 18:50
Задание....где-то ошибка.
#20 
1 2 все