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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2011, 22:18   #1
Neitrosha
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 29
По умолчанию Умножение полиномов (где ошибки?)

проблемы:
1. работает задание коэффициентов только в первом многочлене, второй не реагирует вообще, хотя коды вроде одинаковы, только менял переменные.
2. он как-то слишком странно выводит многочлен в эдит, иногда пропускается, например "*0x^00x^0", "-9x^0-2x^1*3x^23x^2-10x^3", т.е. вообще неверно задается
3. не уверен в том, что правильно написана процедура перемножения

unit Unit1;

interface

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

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

var
Form1: TForm1;
var
a,b,i,j,k: integer;
Ab:array[0..5,0..5] of integer;
s,t,r:string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
randomize;
a:=random(5);
s:='';
for I:=0 to a-1 do
begin
randomize;
Ab[i,1]:=random(20)-10;
if Ab[i,1]>=0 then
s:=s+'*'+IntToStr(Ab[i,1])+'x^'+IntToStr(i);

s:=s+IntToStr(Ab[i,1])+'x^'+IntToStr(i);
end;
for j:=i+1 to 3 do
begin
Ab[j,1]:=0
end;
Edit1.Text:=s;

end;




procedure TForm1.Button2Click(Sender: TObject);
begin
randomize;
b:=random(5);
t:='';
for i:=0 to b-1 do
begin
randomize;
Ab[i,2]:=random(20)-10;
if Ab[i,2]>=0 then
t:=t+'*'+IntToStr(Ab[i,2])+'x^'+IntToStr(i);

t:=t+IntToStr(Ab[i,2])+'x^'+IntToStr(i);
end;
for j := i+1 to 3 do
begin
Ab[j,2]:=0
end;
Edit2.Text:=t;
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
r:='';
begin
for i:=0 to 3 do
if Ab[i,1]=0 then Ab[i,k]:=Ab[i,2]
else if Ab[i,2]=0 then Ab[i,3]:=Ab[i,1]
else if (Ab[i,2]=0) and (Ab[i,1]=0) then Ab[i,3]:=0
else Ab[i,3]:= Ab[i,1]+Ab[i,1]*Ab[i,2];

if Ab[i,3]>0 then
r:=r+'*'+IntToStr(Ab[i,3])+'x^'+IntToStr(i)
else if Ab[i,3]<0 then
r:=r+IntToStr(Ab[i,3])+'x^'+IntToStr(i) ;
end;
Edit3.Text:=r;
end;
end.
Neitrosha вне форума Ответить с цитированием
Старый 23.03.2011, 11:02   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Как вариант можно сделать так
Код:
var
  Form1: TForm1;
  a,p: integer;
  s,t,r:string;
  Koef1,Koef2:Array[1..10] of Integer;
implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  sp:String;
  i:Byte;
begin
  randomize;
  a:=1+random(3);
  s:='';
  for I:=1 to a do
  begin
    p:=random(20)-10;
    Koef1[i]:=p;
    Sp:='('+IntToStr(P)+'x^'+IntToStr(i)+')';
    S:=S+Sp+'+'
  End;
  Delete(S,Length(S),1);
  Edit1.Text:=s;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
  Sp:String;
  i:Byte;
begin
  randomize;
  t:='';
  for i:=1 to a do
  begin
    p:=random(20)-10;
    Koef2[i]:=p;
    Sp:='('+IntToStr(P)+'x^'+IntToStr(i)+')';
    t:=t+Sp+'+'
  end;
  Delete(t,Length(t),1);
  Edit2.Text:=t;
end;

procedure TForm1.Button3Click(Sender: TObject);
Var
  sp:String;
  i:Byte;
begin
  r:='';
  For i:=1 to a do
  Begin
    Sp:='('+IntToStr(Koef1[i]*Koef2[i])+'x^'+IntToStr(i)+')';
    r:=r+Sp+'+'
  End;
  Delete(R,Length(R),1);
  Edit3.Text:=R
end;

end.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 23.03.2011, 11:07   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Код оформляйте по правилам (расширенный режим редактирования, кнопочка #)
что вот это за ерунда ?
Код:
randomize;
a:=random(5);
s:='';
for I:=0 to a-1 do
begin
randomize;
Ab[i,1]:=random(20)-10;
рандомайз надо поставить в создание формы, т.е вызывать только 1 раз за всю работу программы.
брать рандомное число и использовать его для цикла занесения в массив, где индекс - это рандомной число - вообще какая-то ересь, непонятно, чего Вы хотите добиться.

Само рандомное число легко может быть 0 и взять цикл от 0 до 0-1 это тоже большой косяк

Не хочу даже копаться в Вашем коде по умножению и вводу-выводу, ибо надо делать самому форму и т.п. прикрепляйте сразу проект ! и поправьте то о чем я сказал, а также желательно исправить имена переменных на осмысленные, чтобы было читабельно, можете ещё комментов добавить
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему у меня програма не работает? Где ошибки? vova_makarovych Общие вопросы C/C++ 4 22.09.2010 18:27
Где тут ошибки? серг Помощь студентам 3 03.11.2009 11:38
Задачи на матрицу ... Подскажите,где ошибки JiLiYa Помощь студентам 3 10.03.2009 12:09
Проверьте плиз где то ошибки ТРОЯН=) Помощь студентам 2 06.02.2009 15:10
Подскажите где ошибки? Не работает программа на Паскале ЯншинаВера Помощь студентам 1 21.05.2008 19:47