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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2011, 13:12   #1
trnext
 
Регистрация: 04.10.2011
Сообщений: 6
По умолчанию Проблема в ответе

Помогите пожалуйста убрать последний знак в ответе.
Пишу на Delphi 7, программа должна разлаживать заданное число на простые множители. На скрине видно, нужно * убрать в ответе.
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  x,z,e: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
Edit2.text:=Edit1.Text+'=';
z:=StrToInt (Edit1.text);
repeat
   for e:=2 to z do
   begin
   x:=z mod e;
    if x=0  then begin
    z:=z div e;
    Edit2.Text:=Edit2.Text+inttostr(e)+'*';
    break;
    end;
    end;
  until z=1;
  end;
end.
Изображения
Тип файла: jpg jpg.jpg (17.5 Кб, 56 просмотров)
trnext вне форума Ответить с цитированием
Старый 04.10.2011, 14:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

подобные задачи часто возникают.
и имеют несколько способов решения.
Самые часто используемые:
- либо при добавление знака проверять какое-то условие (если условие выхода из цикла ещё не выполняется, тогда добавлять умножение, иначе - не добавлять)
- либо прямое решение задачи "в лоб": удалять символ ПОСЛЕ окончания всей обработки..
- либо изменять цикл так, чтобы нужный символ добавлялся перед вставляемым.


решение по второму способу:
Код:
begin
  Edit2.text := Edit1.Text + '=';
  z := StrToInt(Edit1.text);
  repeat
    for e := 2 to z do
    begin
      x := z mod e;
      if x = 0 then begin
        z := z div e;
        Edit2.Text := Edit2.Text + inttostr(e) + '*';
        break;
      end;
    end;
  until z = 1;
  if Length(Edit2.Text)>0 then
    if Edit2.Text[Length(Edit2.Text)]='*'
      then Edit2.Text := Copy(Edit2.Text,1, Length(Edit2.Text)-1);

вот решение по третьему способу (рекомендую в данном случае использовать именно его):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
  x, z, e: integer;
begin
  z := StrToInt(Edit1.text);
  s := '';
  repeat
    for e := 2 to z do
    begin
      x := z mod e;
      if x = 0 then begin
        z := z div e;
        if length(s) = 0 then s := inttostr(e)
        else s := s + '*' + inttostr(e);
        break;
      end;
    end;
  until z = 1;
  Edit2.Text := Edit1.Text + '=' + s;
end;

Последний раз редактировалось Serge_Bliznykov; 04.10.2011 в 14:33.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа которая должна вычислять суммы всех членов ряда постоянно получаетd в ответе 1.Что не так? mariew13 Помощь студентам 0 24.02.2011 20:15
Почему в ответе компилятор выдает -0 (минус 0)? Igorec Помощь студентам 0 01.04.2010 08:53
Помогите в ответе на вопрос dakota97 Обсуждение статей 2 27.06.2009 20:19
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37
Ответе бысто на легкий вопрос... t13sto Паскаль, Turbo Pascal, PascalABC.NET 2 28.05.2008 21:39