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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2014, 15:14   #1
Mirancheri
Новичок
Джуниор
 
Регистрация: 25.09.2014
Сообщений: 1
По умолчанию Дополнить программу по однонаправленному списку(Pascal)

Есть программа, в ней работают ввод, вывод и сложение, нужно сделать вычитание.
задание:
Есть 2 файла в каждом больше 255 символов. Она должна складывать или вычитать эти числа(смотря что пользователь введет) ну и вывести
Все через однонаправленный список
по возможности отпишите в скайп
программа:

Код:
program klkbch;
type
   z=^m;
   m=record
      a:integer;
      b:z;
   end;
var
   sa:boolean;
   z1,z2:char;
   s:string[1];
   s2:string;
   g,i,n,c1,u1,u2,u,j,k:integer;
   p1,p2,p5,p:z;
   ma1,ma2:array [1..100000] of byte;
   ff1,ff2,ff3:text;
function eror(s:string[1]):boolean;
var
   n:integer;
begin
   n:=ord(s[1]);
   eror:=true;
   If (u=0) then
     begin
        If ((n<48)or(n>57))and(n<>45) then
          eror:=false;
        u:=u+1;
     end
   else
      If (n<48)or(n>57) then
         eror:=false;
end;
procedure vvod(p1:z; ff0:text; z3:char; ma3:array [1..100000] of byte);
var
   p4:z;
   s1:string;
   ma4:array [1..100000] of byte;
begin
   While not eof (ff0) do
     begin
        read(ff0,s[1]);
        sa:=eror(s[1]);
        If sa=false then
          exit;
     end;
   close(ff0);
   reset(ff0);
   if sa=true then
     begin
        u:=0;
        While not eof (ff0) do
          begin
             read(ff0,s[1]);
             if (ord(s[1])=45)and(u=0) then
               begin
                  z3:=s[1];
                  u:=u+1;
               end
             else
               begin
                  ma4[u+1]:=strtoint(s[1]);
                  u:=u+1;
               end;
          end;
        j:=0;
        for i:=(u) downto 1 do
          begin
             j:=j+1;
             ma3[j]:=ma4[i];
          end;
        if z3='-' then
          for i:=1 to (u-1) do
            begin
               new(p4);
               p1^.a:=ma3[i];
               p1^.b:=p4;
               p1:=p4;
               p1^.b:=nil;
            end
        else
          for i:=1 to u do
            begin
               new(p4);
               p1^.a:=ma3[i];
               p1^.b:=p4;
               p1:=p4;
               p1^.b:=nil;
            end;
     end;
   write(u,' ');
   if u1=0 then
     u1:=u
   else
     u2:=u;
end;
procedure vivod(p3:z);
var
   p4:z;
   ma4,ma5:array [1..100000] of byte;
begin
   while p3^.b<>nil do
     begin
        ma4[i]:=p3^.a;
        p3:=p3^.b;
        i:=i+1;
     end;
   for j:=(i-1) downto 1 do
     write(ff3,ma4[j]);
end;
procedure slogenie(p1,p2,p5:z);
var
   d,m,u4,u5:integer;
   p6,p7:z;
   ma4:array [1..100000] of byte;
begin
   if u1>u2 then
      u4:=u2
   else
      u4:=u1;
   u5:=0;
   if (p1^.b<>nil) then
   while u5<u4 do
     begin
        u5:=u5+1;
        new(p6);
        d:=(p1^.a+p2^.a)div 10;
        m:=(p1^.a+p2^.a)mod 10;
        p1^.b^.a:=p1^.b^.a+d;
        p1:=p1^.b;
        p2:=p2^.b;
        j:=j+1;
        ma4[j]:=m;
        write(d,' ',m,' ');
     end;
   for i:=1 to j do
     begin
        new(p6);
        p5^.a:=ma4[i];
        p5^.b:=p6;
        p5:=p6;
        p5^.b:=nil;
        
        if (d<>0)and(i=j) then
          begin
            g:=2;
            {new(p6);
             p5^.a:=d;
             p5^.b:=p6;
             p5:=p6;
             p5^.b:=nil;}
          end;
     end;
   if u1>u2 then
      while u5<u1 do
         begin
            u5:=u5+1;
            new(p6);
            if g=2 then
               p5^.a:=(p1^.a) mod 10
            else
               p5^.a:=(p1^.a+g) mod 10;
            p5^.b:=p6;
            p5:=p6;
            p5^.b:=nil;
            g:=(p1^.a+g) div 10;
            p1:=p1^.b;
         end

   else
      while u5<u2 do
         begin
            u5:=u5+1;
            new(p6);
            if g=2 then
               p5^.a:=(p2^.a+1) mod 10
            else
               p5^.a:=(p2^.a+g) mod 10;
            p5^.b:=p6;
            p5:=p6;
            p5^.b:=nil;
            g:=(p2^.a+g) div 10;
            p2:=p2^.b;
         end;
      if g>0 then
         begin
            new(p6);
            p5^.a:=1;
            p5^.b:=p6;
            p5:=p6;
            p5^.b:=nil
         end;
end;
procedure operac(z3,z4:char);
begin
   if z3='-' then
     u1:=u1-1;
   if z4='-' then
     u2:=u2-1;
   if z3='-' then
     u1:=u1-1;
   if z4='-' then

end;
begin
   u:=0;
   u1:=0;
   u2:=0;
   new(p1);
   new(p2);
   new(p5);
   Assign(ff1,'p1.txt');
   Assign(ff2,'p2.txt');
   Assign(ff3,'v.txt');
   Rewrite(ff3);
   Reset(ff1);
   Reset(ff2);
   vvod(p1,ff1,z1,ma1);
   u:=0;
   vvod(p2,ff2,z2,ma2);
   writeln(u1,' ',u2);
   if eror(s[1])=false then
     Write(ff3,'Ошибка в входных данных')
   else
      begin
         j:=0;
         slogenie(p1,p2,p5);
       //  vivod(p1);
         i:=1;
         vivod(p5);
      end;
   close(ff1);
   close(ff2);
   close(ff3)
end.

Последний раз редактировалось Mirancheri; 25.09.2014 в 15:23.
Mirancheri вне форума Ответить с цитированием
Старый 25.09.2014, 15:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если это заказ работы, то лучше тему во ФРИЛАНСЕ создать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2014, 15:46   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Не понял!
Цитата:
Есть 2 файла в каждом больше 255 символов. Она должна складывать или вычитать эти числа(смотря что пользователь введет) ну и вывести
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.09.2014, 16:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Не понял!
Это длинная арифметика.
есть два целых числа, каждое из чисел имеет более 255 знаков.
сами числа записаны в текстовых файлах (каждое число в своём файле).
код уже вычисляет сумму данных чисел, нужно добавить вычисление разности (от первого числа отнять второе (или от большего отнять меньше)


автор топика создал тему во фрилансе, поэтому, желающие написать решение за деньги - welcome to Freelance
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2014, 16:31   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Это длинная арифметика.
Теперь понял.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить алгоритм в виде блок-схем и написать соответствующую программу на языке Pascal / Pascal ABC IgorMyakota Паскаль, Turbo Pascal, PascalABC.NET 9 06.03.2014 07:32
c++ дополнить программу myrka-2009 Помощь студентам 1 02.11.2012 02:17
дополнить программу условием:"Определить среднее арифметическое значений функций, меньших 1" wowan Паскаль, Turbo Pascal, PascalABC.NET 2 22.06.2011 16:25
дополнить программу smile) Помощь студентам 2 13.09.2010 21:01
Дополнить программу в Turbo Prolog Paco de lucia Помощь студентам 0 08.03.2010 19:59