Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2015, 13:52   #1
МиссПолина
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 13
По умолчанию Вычитание чисел "в столбик" на Турбо Паскале

вот такая программка, нужно в этой программке прописать цикл или действие, чтоб можно было вычесть из допустим 1234567 число 1234
и получить правильный ответ, не подскажите как это можно сделать?
Код:
program lab;
var
  n, n1, n2: string;
  i, t, p, t1, t2, d: integer;
  n3: string[1];
  code1, code2: integer;
begin
  Writeln('Input n1');
  Readln(n1);
  Writeln('Input n2');
  Readln(n2);
  if length(n1)<>length(n2) then begin
    Writeln('Извините. Но пока ещё программист '+
            'не сделал вычитание чисел разной длины.');
    readln;
    Halt(1);
  end;
  p := 0;
  n := '';
  for i := length(n1) downto 1 do begin
    {perebiraem chislo-stroki spravo-nalevo}
    Val(n1[i], t1, code1);
    Val(n2[i], t2, code2);
    {prevrachaem simvol cifru}
    d := p + t1 - t2;   {operaciya vychitanya chisla s ostatkom}
    if d<0 then begin p:=-1; d:= d+10; end
    else p:=0;
    str(d, n3);
    n := n3 + n;
  end;
  if p<0 then
    WriteLn('Получилось отрицательное число!')
  else
    Writeln('Результат = ',n);
  readln;
end.

Последний раз редактировалось Аватар; 07.05.2015 в 13:59.
МиссПолина вне форума Ответить с цитированием
Старый 07.05.2015, 14:02   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Выравни более короткое нулями слева до длины более длинного и вычитай на здоровье числа одинаковой длины
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.05.2015, 14:15   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

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



p.s. узнаю свой код отсюда. а через один пост ответ (c) Аватар на то, как сделать вычитание чисел разной длины. Так и ходим по кругу..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.05.2015, 14:15   #4
МиссПолина
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 13
По умолчанию Помогите решить задачу по Турбо Паскалю

Вот программа, здесь мне нужно как прописать либо цикл, либо действие какое то, чтоб программа могла вычесть из таких чисел 1234567 число 1234 и выдавал правильный ответ, также надо как то прописать чтоб можно было получить отрицательное число, т.е допустим из 129-321 и получить правильный ответ с отрицательным числом, а не как у меня в программе написано просто текстовое предложение "отрицательное число"? Помогите пожалуйста разобраться с этой задачкой

вот программа
Код:
program lab;
var
  n, n1, n2: string;
  i, t, p, t1, t2, d: integer;
  n3: string[1];
  code1, code2: integer;
begin
  Writeln('Input n1');
  Readln(n1);
  Writeln('Input n2');
  Readln(n2);
  if length(n1)<>length(n2) then begin
    Writeln('Извините. Но пока ещё программист '+
            'не сделал вычитание чисел разной длины.');
    readln;
    Halt(1);
  end;
  p := 0;
  n := '';
  for i := length(n1) downto 1 do begin
    {perebiraem chislo-stroki spravo-nalevo}
    Val(n1[i], t1, code1);
    Val(n2[i], t2, code2);
    {prevrachaem simvol cifru}
    d := p + t1 - t2;   {operaciya vychitanya chisla s ostatkom}
    if d<0 then begin p:=-1; d:= d+10; end
    else p:=0;
    str(d, n3);
    n := n3 + n;
  end;
  if p<0 then
    WriteLn('Получилось отрицательное число!')
  else
    Writeln('Результат = ',n);
  readln;
end.

Последний раз редактировалось Stilet; 07.05.2015 в 15:31.
МиссПолина вне форума Ответить с цитированием
Старый 07.05.2015, 15:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Когда-то предлагал тут на форуме вот такой простецкий эвалюатор:
Код:
program Project1;

var s,s2:string;
  r,q:double;
  i,e,w:integer;
begin
  s:='12345-65.55+988'; r:=0;  s2:=s;
  while Length(s)>0 do begin
   val(s,q,e);
   if e<>0 then begin
    w:=e;
    val(copy(s,1,e-1),q,e);
    delete(s,1,w-1);
   end else break;
   r:=r+q;
  end; r:=r+q;
  write(s2,'=',r:10:2); readln;
end.
Может и тебе пригодится такая схема.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2015, 15:41   #6
МиссПолина
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 13
Радость

Цитата:
Сообщение от Stilet Посмотреть сообщение
Когда-то предлагал тут на форуме вот такой простецкий эвалюатор:
Код:
program Project1;

var s,s2:string;
  r,q:double;
  i,e,w:integer;
begin
  s:='12345-65.55+988'; r:=0;  s2:=s;
  while Length(s)>0 do begin
   val(s,q,e);
   if e<>0 then begin
    w:=e;
    val(copy(s,1,e-1),q,e);
    delete(s,1,w-1);
   end else break;
   r:=r+q;
  end; r:=r+q;
  write(s2,'=',r:10:2); readln;
end.
Может и тебе пригодится такая схема.

Спасибо, я попробую, а возможно ли как то и другими способами эту задачку решить))
МиссПолина вне форума Ответить с цитированием
Старый 07.05.2015, 15:45   #7
МиссПолина
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 13
По умолчанию

Задача в основном на вычитание))
Получить правильную разность в 2х многозначных (более 15 знаков) чисел)))
МиссПолина вне форума Ответить с цитированием
Старый 07.05.2015, 15:49   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
более 15 знаков
Растудытьтвоюжтуды!
Так шож ты не рассказала подробности?

И зачем темы были обьеденены? Тебе нужна реализация вычитания в столбик? Тогда мой код не катит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2015, 15:52   #9
МиссПолина
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 13
По умолчанию

Виталий, простите(((
МиссПолина вне форума Ответить с цитированием
Старый 07.05.2015, 15:54   #10
МиссПолина
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Растудытьтвоюжтуды!
Так шож ты не рассказала подробности?

И зачем темы были обьеденены? Тебе нужна реализация вычитания в столбик? Тогда мой код не катит.

Есть варианты, как решить?))))
МиссПолина вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа читает из файла <data.txt> 10 чисел, перемножает их. решить задачу на турбо паскале bikmai4ik Помощь студентам 2 05.12.2013 13:06
вычитание неупакованных BCD-чисел Танчик007 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.04.2011 17:29
Выполнить вычитание чисел MapK Паскаль, Turbo Pascal, PascalABC.NET 0 06.12.2010 21:08
Деление целых чисел(dw) через вычитание Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 12.11.2010 14:50
Вычитание чисел по основанию 4 и 16. Stager Общие вопросы C/C++ 1 21.01.2009 00:13