IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Умножение длинных целых чисел в дополнительном коде, Ошибка
olven
сообщение 24.03.2012 15:00
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский

Репутация: -  0  +


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

var
temp,i,j: longint;
n,n2,res:longint;
s,s2,sim,sim2:string;
alf:set of char;
ch:char;
p,p2,s1,s22,por,pr,apr,step,k:longint;
a,b:longint;
apr2:longint;
arr: array[1..10] of string;
c,c2:boolean;
begin
c:=false; c2:=false;
alf:=['0'..'9'];
Write('vvedite pervoe chislo: ');
Readln(s);
Write('vvedite vtoroe chislo: ');
Readln(s2);
n:=length(s);
n2:=length(s2);
sim:='';p:=0; sim2:=''; p2:=0;
For i:=1 to n do begin {vudelenie cifr iz 1 stroki}
If s[i] in alf then sim:=sim+s[i];
If s[i]='-' then c:=true;
end;
For j:=1 to n2 do begin {vudelenie cifr iz 2 stroki}
If s2[j] in alf then
sim2:=sim2+s2[j];
If s2[j]='-' then c2:=true;
end;
For i:=1 to length(sim) do begin {perevod iz stroki v chislo (1)}
s1:=ord(sim[i])-ord('0');
p:=p*10+s1;
end;
For j:=1 to length(sim2) do begin {perevod iz stroki v chislo (2)}
s22:=ord(sim2[j])-ord('0');
p2:=p2*10+s22;
end;
Writeln('chisla: ',p,' ',p2);
a:=0; step:=1;n:=1;
While p>=2 do begin {perevod iz 10i ss v 2ss (1)}
pr:=p div 2;
apr:=p-pr*2;
a:=a+apr*step;
p:=pr;
step:=step*10;
n:=n+1;
If p=1 then a:=step+a;
end;
Writeln('dvoichnoe predstavlenie 1 chsla: ',a);
step:=1; b:=0; por:=1; {perevod iz 10i ss v 2ss (2)}
While p2>=2 do begin
pr:=p2 div 2;
apr:=p2-pr*2;
b:=b+apr*step;
p2:=pr;
step:=step*10;
If p2=1 then b:=step+b;
por:=por+1;
end;
Writeln('dvoichnoe predstavlenie 2 chisla: ',b);
Writeln('kolichestvo cifr 1: ',n);
Writeln(' 2: ',por);
If c=true then begin
apr:=a; pr:=a; a:=0; k:=1; {perevod 1go chisla v dopolnitelnui kod}
For i:=1 to n do begin
apr:=pr mod 10;
pr:=pr div 10;
If apr=0 then apr2:=1;
If apr=1 then apr2:=0;
a:=a+apr2*k;
k:=k*10;
end;
k:=a mod 10;
If k=1 then begin
apr:=0;
a:=(a div 10)*10+apr;
end;
If k=0 then begin
k:=1;
a:=(a div 10)*10+apr;
end;

end;
{ If c=false then a:=p;}
Writeln('v dopolnit kode 1: ',a);
If c2=true then begin
apr:=b; pr:=b; b:=0; k:=1; {perevod 2go chisla v dopolnitelnui kod}
For j:=1 to por do begin
apr:=pr mod 10;
pr:=pr div 10;
If apr=0 then apr2:=1;
If apr=1 then apr2:=0;
b:=b+apr2*k;
k:=k*10;
end;
k:=b mod 10;
If k=1 then begin
apr:=0;
b:=(b div 10)*10+apr;
end;
If k=0 then begin
k:=1;
b:=(b div 10)*10+apr;
end;
end;
{ If c2=false then b:=p2;}
Writeln('v dopolnit kode 2: ',b);
res:=0; {ymnozenie}
k:=0;
n:=1;
While k<=64 do begin
temp:=n and b;
if temp<>0
then res:=res+a;
a:=a shl 1;
n:=n*2;
k:=k+1;
end;
writeln('rezyltat v dopolnitelnom kode: ',res);
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
olven
сообщение 23.04.2012 21:21
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский

Репутация: -  0  +


скажите пожалуйста можно ли добавить в программу часть которая показывает это умножение?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
olven   Умножение длинных целых чисел в дополнительном коде   24.03.2012 15:00
Федосеев Павел   происходит переполнение разрядной сетки переменной...   24.03.2012 16:54
olven   происходит переполнение разрядной сетки переменно...   24.03.2012 17:04
Krjuger   Привидите пример и резальтат.   24.03.2012 17:13
olven   Привидите пример и резальтат. любые числа. диап...   24.03.2012 17:22
Федосеев Павел   Можно взять и больше, но дополнительный код для от...   24.03.2012 17:16
Федосеев Павел   Я не могу понять смысл задания. Вот описание рабо...   24.03.2012 18:30
olven   Я не могу понять смысл задания. Вот описание раб...   24.03.2012 18:37
Федосеев Павел   Я не могу понять смысл задания. Как прикрутить до...   24.03.2012 19:33
olven   Я не могу понять смысл задания. Как прикрутить д...   24.03.2012 19:40
Федосеев Павел   Ага, значит в оригинальном условии задачи фраза ...   24.03.2012 20:22
olven   Ага, значит в оригинальном условии задачи фраза ...   24.03.2012 20:43
olven   Длинная арифметика попробовала умножение описанное...   31.03.2012 14:56
Федосеев Павел   Приведи пример, на котором возникла ошибка (и данн...   31.03.2012 17:48
olven   спасибо большое, попробую разобраться.... по моему...   1.04.2012 20:01
olven   скажите пожалуйста можно ли добавить в программу ч...   23.04.2012 21:21
Федосеев Павел   А что нужно показать? В процедуре LongBin_Mul прос...   24.04.2012 8:38
olven   А что нужно показать? В процедуре LongBin_Mul про...   24.04.2012 12:11
Федосеев Павел   1) hi/lo - hi - возвращает старший байт слова (дл...   24.04.2012 13:59
olven   1) hi/lo - hi - возвращает старший байт слова (д...   24.04.2012 16:33
Федосеев Павел   olven, я немного поторопился, гворя о невозможност...   24.04.2012 18:46
olven   выводить нужно не совсем это.... нужно вообще пока...   29.04.2012 18:28
Федосеев Павел   Прикольно - ваш препод знает толк в извращениях. К...   29.04.2012 20:07
olven   она говорила лучше в файл записывать всё т.к. не у...   29.04.2012 21:23
Федосеев Павел   Нормальные руки. Ну в файл-то легко отправить.   29.04.2012 21:28
olven   да, отправлю думаю. только не поняла. какое количе...   29.04.2012 21:33
Федосеев Павел   Лог умножения, как видно из листинга примерно тако...   29.04.2012 21:37
olven   спасибо большое   29.04.2012 21:42
Федосеев Павел   Знаешь, чтобы не переделывать всё, можно сделать п...   29.04.2012 21:44
olven   так странно, он так не записывает. пустой файл До...   29.04.2012 21:51
Федосеев Павел   Сейчас проверил на TP7 и FPC2.4.2 Файл создаётся. ...   29.04.2012 21:56
olven   в файле запись сдигов всего лишь?   29.04.2012 22:08
Федосеев Павел   Да. Только лог умножения. Но если перенаправить вы...   29.04.2012 22:14
olven   понятно.. там вроде как и для длминных чисел не ве...   29.04.2012 22:22


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"