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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2007, 14:18   #1
Stas)))
Пользователь Подтвердите свой е-майл
 
Аватар для Stas)))
 
Регистрация: 23.05.2007
Сообщений: 19
По умолчанию Умножение столбиком

Доброго всем времени суток! ктонить может подсказать как вообще реализовать это умножение (столбиком)! (Delphi)
Stas))) вне форума Ответить с цитированием
Старый 20.11.2007, 14:41   #2
SeRhy
Форумчанин
 
Аватар для SeRhy
 
Регистрация: 19.10.2007
Сообщений: 168
По умолчанию

Напишы код для простого умножения (c:=a+b) просто визуально оформи как умножение в столбец
SeRhy вне форума Ответить с цитированием
Старый 20.11.2007, 14:44   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот например можно сделать видимость умножения в столбик:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var zpt,i:integer; k,e,s:string; a,b,c:real;
begin
ListBox1.Items.Clear;
 a:=StrToFloat(Edit1.Text);e:='';
 c:=StrToFloat(Edit2.Text);c:=a*c;
 k:=Edit2.Text ;           zpt:=0;
 ListBox1.Items.Append(Edit1.Text);
 ListBox1.Items.Append(Edit2.Text);
 ListBox1.Items.Append('------------------');
 for i:=1 to length(Edit1.text) do e:=e+' ';
 i:=Length(Edit2.Text);
 while  i>0 do begin
 if k[i]='.' then begin dec(i);zpt:=i; end;
  b:=StrToFloat(k[i]);
  s:=floattostr(a*b);
  if zpt<>0 then Insert(',',s,zpt);
  ListBox1.Items.append(e+s); delete(e,1,1);
 dec(i);
 end;
 ListBox1.Items.Append('------------------');
 ListBox1.Items.Append(' '+e+floattostr(c));

end;

end.
В Эдиты вводатся два числа которые перемножаются
В мемо умножение расписывается (корявать правда) в столбик
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2007, 16:38   #4
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Эх... Давно делал... Когда задали в университете вычислить 100!
forForum.rar
Я не маюсь бездельем, я от него тащусь!

Последний раз редактировалось Tayfun; 20.11.2007 в 16:42.
Tayfun вне форума Ответить с цитированием
Старый 20.11.2007, 19:18   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Класс Tayfun, в архиве только project1.dpr, a Unit1.pas где? )) Забыл? Я думал приложение консольное, открыл - а там шишь
zetrix вне форума Ответить с цитированием
Старый 20.11.2007, 20:01   #6
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Цитата:
Класс Tayfun, в архиве только project1.dpr, a Unit1.pas где? )) Забыл? Я думал приложение консольное, открыл - а там шишь
Извиняюсь...
Mod.rar
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 20.11.2007, 20:47   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Уже лучше, но мы так и не заслушали начальника транспортного цеха.
puporev вне форума Ответить с цитированием
Старый 21.11.2007, 06:55   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Tayfun, вот содержание архива:
.Txt //пустой файл для вывода результатов
Project1.cfg
Project1.dof
Project1.exe
Project1.res
Project1.dpr
Содержание Project1.dpr:
Код:
program Project1;

uses
  Forms,
  Unit1 in '..\Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Теперь по теме. Скорее всего нужно не создавать эмуляцию умножения в столбик, а приводить её полностью - по шагам. Чтоб как мы на листочке в столбик решаем, так и на экране отобразилось.
zetrix вне форума Ответить с цитированием
Старый 21.11.2007, 17:28   #9
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Цитата:
Теперь по теме. Скорее всего нужно не создавать эмуляцию умножения в столбик, а приводить её полностью - по шагам. Чтоб как мы на листочке в столбик решаем, так и на экране отобразилось.
Согласен что все несовсем красиво(равнение по левую сторону, а не по правую)... Но дело в том, что там действительно показываеться умножение столбиком по шагам...
Даны два числа:
1234
4321
Потом
1234*1
+
1234*2*10
+
1234*3*10^2
+
1234*4*10^3
------------------
ответ...
Параллельно все записываеться в текстовый файл, где все без сокращений (10e4->10^4)
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 21.11.2007, 20:51   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот вроде решил. Код на Паскале. У меня работает.
Код:
program umn_st;
uses crt;
var s1,s2,u,m:string;
    iu,p,sum:longint;i,k,r,nu,nm,im:integer;
    mas:array[1..100] of longint;
function St10(a:longint;b:integer):longint; Умножить на 10 в степени b.
   var i,n:integer;
begin
   for i:=1 to b do
     a:=a*10;
     St10:=a;
end;

begin
   clrscr;
   write('chislo1=');readln(s1);
   write('chislo2=');readln(s2);
   writeln;

   if length(s1)>=length(s2)   Первый множитель, который длиннее
     then u:=s1
       else u:=s2;
   nu:=length(u);

   if length(s1)<length(s2)    Второй множитель
     then m:=s1
       else m:=s2;
   nm:=length(m);

   r:=nu+nm;                  Отступ
   writeln(u:r);     
   writeln('*':nm);          Знак умножения
   writeln(m:r);

   for i:=1 to r do
      write('-');                 Черта
   writeln;
   
   val(u,iu,k);
   for i:=nm downto 1 do
      begin
        val(m[i],im,k);
        p:=iu*im;
        writeln(p:(nu+i));mas[i]:=p;  Выводим построчно результат умножения
      end;

   for i:=1 to r do                      Черта
      write('-');
      writeln;

   sum:=0;
   for i:=1 to nm do                   Результат
     sum:=sum+St10(mas[i],nm-i);
    writeln(sum:r);readln;
end.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
умножение PAWLO1993 Паскаль, Turbo Pascal, PascalABC.NET 4 29.07.2008 18:55
Умножение в SQL Родион БД в Delphi 4 12.06.2008 17:27
Умножение и деление StiTch_Parazit Помощь студентам 10 20.05.2008 14:32
Умножение матрицы на вектор Илья Кибель Помощь студентам 5 27.10.2007 11:02