21

Re: Тричлен

http://ideone.com/6R7D1x
8)

Подякували: Chemist-i, Q-bart2

22 Востаннє редагувалося Q-bart (24.12.2014 17:50:40)

Re: Тричлен

Давайте поясню...

Chemist-i написав:

Q-bart, серйозно нормально працює?, ну добре.
Давайте спершу нормально його розмітимо і я його відкоментую

Прихований текст
program secret;
var
    z, a1, b1, c1, m, n: string;
    a, b, c, i: integer;
begin
    z:=' '; //Навіщо?(в мене був один випадок, що не виводився результат, бо треба було додати таку "пусту" 
//строку на початку)
    m := 'x'; //Прикольна ідея давати рядку, який буде містити х назву m (мабуть, щоб вороги не здогадались)
    n := 'y'; //Те саме. (це зробив для того, щоб якщо b1=0, то m:=''(опустити))
    
    read(a, b, c); //Читаємо а, б, с, окей

    //(ви писали:"записуйте '+2х'", я  так робив, і в підсумку в мене виводило "--1++2x--4y". Я вирішив видалити знак з стрічки, а порівнювати через введені числа.) 
    //а тут починається щось, чого я не розумію, для чого це?
    //ми перетворюємо число в рядок, після того відчикрижуємо його знак 
    //і залишається у нас беззнаковий (такий собі модуль числа члена, причому рядковий)
    str(a, a1); 
    if (a1[1]='-') or (a1[1]='+') then delete(a1, 1,1);
    
    str(b, b1); 
    if (b1[1]='-') or (b1[1]='+') then delete(b1, 1,1);
    
    str(c, c1); 
    if (c1[1]='-') or (c1[1]='+') then delete(c1, 1,1);


    if a1 = '0' then a1 := ''; //як перший член 0 змінюємо його на нічого, гаразд
    
    if b1 = '0' then //ну тут я Вашу криптозбочену логіту почав трохи розуміти
    begin 
        b1 := '';
        m := ''; 
    end;
    
    if c1 = '0' then 
    begin 
        c1 := ''; 
        n := ''; 
    end;
    
    //і тут починається... (нагадує викладача в інституті - "забудьте все чому вас навчали в школі")
    //вбиваємо одинички, додаєм знаки які позабирали напочатку (нагадує 2-х робітників СРСР,
    //один викопує яму, інший тут-же закопує, обидав молодці, обидва план виконують)
    if b1 = '1' then b1 := '';
    if c1 = '1' then c1 := ''; // Тут я мутив так: якщо с1<0 то виходить a1+b1x--c1, а має бути +с1, тому я сперше повидаляв знаки, а потім добавив, ті які треба... 
    if a<0 then a1:='-'+a1;
    if b<0 then b1:='-'+b1;
    if c<0 then c1:='+'+c1;
    if c>0 then c1:='-'+c1;
    if b>0 then b1:='+'+b1;
    
    z := a1 + b1 + m + c1 + n; //тут се збираємо докупи
    
    if z[1]='+' then delete(z, 1,1); //і наостанок вбиваємо знак на самому початку
    writeln(z); //Виводимо.
end.

Погоджуюсь, ваш приклад НАБАГАТО кращий, але я вчусь..

23

Re: Тричлен

Q-bart написав:
(ви писали:"записуйте '+2х'", я  так робив, і в підсумку в мене виводило "--1++2x--4y". Я вирішив видалити знак з стрічки, а порівнювати через введені числа.)

Приведу простий приклад для наглядності:

a,b,c,z : String;
...
a := '+2';
b := '-3x';
c := '-5y';
z := a + b + c; //який рядок виведе z?

Який?

Q-bart написав:
if c1 = '1' then c1 := ''; // Тут я мутив так: якщо с1<0 то виходить a1+b1x--c1, а має бути +с1, тому я сперше повидаляв знаки, а потім добавив, ті які треба... 

Те саме що і зверху.

Подякували: Q-bart1

24

Re: Тричлен

Дякую, так справді краще...