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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2014, 22:08   #1
black_bullet
 
Регистрация: 14.04.2014
Сообщений: 5
По умолчанию Сложения больших чисел(стеки)

Код:
program laba;
uses crt;
type
 elspysku=^number;
 number=record
  num:integer;
  dali:elspysku;
 end;
var A,B,C,head:elspysku;
  s1,s2:string;
  i,ci:integer;

procedure push(var head:elspysku; x:integer);
var element:elspysku;
begin
 new(element);{Тут ошибка}
 element^.num:=x;
 element^.dali:=head;
 head:=element;
end;
procedure output(var head:elspysku; varible:integer);
var element:elspysku;
begin
 element:=head;
 while head<>nil do
 begin
  element:=head;
  head:=element^.dali;
  write(element^.num,' ');
  dispose(element);
 end;
end;
procedure zero(var s1:string; s2:string);
begin
 for i:=length(s1) to length(s2)-1 do
  s1:='0'+s1;
end;
procedure StringToStack(s:string; var head:elspysku);
var x1,x2:integer;
begin
 for i:=1 to length(s) do
 begin
  val((copy(s,i,1)),x1,x2);
  push(head,x1);
 end;
end;
procedure Addition(A,B:elspysku; C:elspysku);
var carry,ai,bi:integer;
begin
 carry:=0;
 while A<>nil do
 begin
  push(C,((ai+bi+carry) mod 10));
  carry:=((ai+bi+carry) div 10);
 end;
 if carry> 0 then push(c,carry);
end;
begin clrscr;
 head:=nil;
 write('Enter first number A:');
 readln(s1);
 write('Enter second number B:');
 readln(s2);
 Zero(s1,s2);
 Zero(s2,s1);
 StringToStack(S1,A);
 StringToStack(S2,B);
 Addition(A,B,C);
 write('A+B=');
 while C<>nil do
 begin
  output(C,ci);
  write(ci);
 end;
end.
При роботе программы, когда ввожу 2 числа и нажимаю Ентер пишит:
Ошибка 203. Переполние кучи
black_bullet вне форума Ответить с цитированием
Старый 14.04.2014, 22:32   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
procedure Addition(A,B:elspysku; C:elspysku);
var carry,ai,bi:integer;
begin
 carry:=0;
 while A<>nil do
 begin
  push(C,((ai+bi+carry) mod 10));
  // чему равны ai и bi?
  // они не инициализированы никак
  // там мусор и цикл крутится бесконечно, пока не переполнится стек
  carry:=((ai+bi+carry) div 10);
 end;
 if carry> 0 then push(c,carry);
end;
Изображения
Тип файла: jpg 2014-04-14 22-30-22 Free Pascal IDE.jpg (39.6 Кб, 120 просмотров)
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана непустая последовательность целых чисел. Найти: Сумму чисел, больших числа x и количество всех чётных чисел maksim97maksim Паскаль, Turbo Pascal, PascalABC.NET 1 09.04.2014 13:59
Delphi7. сделать программу сложения двух чисел chpok1 Помощь студентам 4 20.09.2013 12:51
Напишите программу для сложения вещественных чисел! bazleiter Visual C++ 2 10.09.2013 08:30
программа сложения 64-битных чисел olikik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.12.2010 23:23
Сложение больших чисел Plazma Общие вопросы C/C++ 0 27.11.2010 17:11