Polynom - run-time error 201 – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Polynom - run-time error 201 – Pascal – Fórum – Programujte.comPolynom - run-time error 201 – Pascal – Fórum – Programujte.com

 

danny040
Duch
22. 3. 2014   #1
-
0
-

Dobrý den,

chtěl bych se zeptat, jak vyřešit u toho příkladu chybu -runtime 201. Už si vůbec nevím rady. Předem díky za odpověd.

Program Polynomial;

type
     arrayOfInt = Array[1..21] of Integer;
     biggerArrayOfInt = Array[1..41] of Integer;

function isNumber(c : Char): Boolean;
var
    res : Boolean;
    code : Longint;
begin
    
    code := Ord(c);

    if ((code > 47) AND (code < 58)) then begin
        res := true
    end
    else
    begin
        res := false;
    end;
    isNumber := res;
end;

//parse
function parsePolynomial(polynomial : String): arrayOfInt;
var
    coeficients : Array[1..21] of Integer;

    number : Integer;
    coef : Integer;

    tmp : String;

    i, j : Integer;

    positive : Boolean;


    numberPosition, numberLength : Integer;

    expectX : Boolean;

begin

    i := 1;

    for j:=1 to Length(coeficients) do
    begin
        coeficients[j] := 0;
    end;
    while (true) do
    begin
        coef := 0;
        number := 0;
        positive := true;
        expectX := true;
        if(polynomial[i] = '-') then begin
            positive := false;
            i := i + 1;
        end;
        if(polynomial[i] = '+') then begin
            i := i + 1;
        end;
        if(isNumber(polynomial[i])) then begin
            numberPosition:= i;
            while (isNumber(polynomial[i])) do
            begin
                i := i + 1;
            end;
            tmp := Copy(polynomial, numberPosition, i - numberPosition);
            Val(tmp, number);
            if(not positive) then begin
                number := number * -1;
            end;

            if ((not(polynomial[i] = '*')) OR (i > length(polynomial))) then begin
                expectX := false;
            end
            else
            begin
                i:= i + 1;
            end;
        end
        else
        begin
            if(positive) then begin
                number := 1;
            end
            else
            begin
                number := -1;
            end;
        end;

        if (expectX) then begin
            if(not(polynomial[i] = 'x')) then begin
                write('Bad input!');
                exit;
            end
            else
            begin
                i := i + 1;
                if (polynomial[i] = '^') then begin
                    i := i + 1;
                    if (not isNumber(polynomial[i])) then begin
                        write('Bad input!');
                        exit;
                    end;
                    numberPosition:= i;
                    while (isNumber(polynomial[i])) do
                    begin
                        i := i + 1;
                    end;
                    tmp := Copy(polynomial, numberPosition, i - numberPosition);
                    Val(tmp, coef);
                end
                else
                begin
                    coef := 1;
                end;
            end;
        end;

        coeficients[coef + 1] := number;

        if ((length(polynomial)) - 1 < i) then begin
            break;
        end;
    end;


   parsePolynomial := coeficients;
end;

//sum
function sumPolynomials(polynomial1, polynomial2 : array of Integer): arrayOfInt;
var
    coeficients : Array[1..21] of Integer;
    i : Integer;
begin
   
    for i := Length(polynomial1) downto 0 do
    begin
        coeficients[i+1] := polynomial1[i] + polynomial2[i];
    end;


   sumPolynomials := coeficients;
end;

//product
function productOfPolynomails(polynomial1, polynomial2 : array of Integer): biggerArrayOfInt;
var
    coeficients : Array[1..41] of Integer;
    i, j : Integer;

begin
       for j:=1 to Length(coeficients) do
    begin
        coeficients[j] := 0;
    end;
    for i := Length(polynomial1) downto 0 do
    begin
        for j := Length(polynomial2) downto 0 do
        begin
                coeficients[i+j+1] := coeficients[i+j+1] + polynomial1[i] * polynomial2[j];
        end;
    end;

    productOfPolynomails := coeficients;
end;


//division
function substractOfPolynomails(polynomial1, polynomial2 : array of Integer): arrayOfInt;
var
    coeficients : Array[1..21] of Integer;
    i : Integer;
begin
   
    for i := Length(polynomial1) downto 0 do
    begin
        coeficients[i+1] := polynomial1[i] - polynomial2[i];
    end;

   substractOfPolynomails := coeficients;
end;


procedure printPolynomial(polynomial: array of Integer);
var 
    i : Integer;
    isFirst : Boolean;
    isZero : Boolean;
begin
    isFirst := true;
    isZero := true;
       for i := length(polynomial) downto 0 do
    begin
        if polynomial[i] <> 0 then begin
            isZero := false;
            if((not isFirst) AND (polynomial[i] > 0)) then begin
                write('+');
            end;
            if((polynomial[i] = -1)) then begin
                write('-');
            end;
            if(((polynomial[i] > 1) OR (polynomial[i] < -1)) OR ((i = 0) AND not(polynomial[i] = 0))) then begin
                write(polynomial[i]);
                if((i > 0)) then begin
                    write('*');
                end;
            end;
            
            if(i > 0) then begin
                write('x');
                isFirst := false;
                if (i > 1) then begin
                    write('^', i);
                end;
            end;
            write()
        end;
    end;
    if (isZero) then begin
        write(0);
    end;
    
end;

//program logic
var
    polynomial1, polynomial2, result: Array[1..21] of Integer;
    polynomialInput: String;

begin
    readln(polynomialInput);
    polynomial1 := parsePolynomial(polynomialInput);

    readln(polynomialInput);
    polynomial2 := parsePolynomial(polynomialInput);

    printPolynomial(sumPolynomials(polynomial1, polynomial2));
    writeln('');
    printPolynomial(substractOfPolynomails(polynomial1, polynomial2));
    writeln('');
    printPolynomial(productOfPolynomails(polynomial1, polynomial2));

end.
Nahlásit jako SPAM
IP: 109.80.20.–
danny040
Duch
22. 3. 2014   #2
-
0
-

Ještě jsem zapomněl dodat, že normálně na ideone.com to funguje, ale v Free Pascal mi to háže tu chybu

Nahlásit jako SPAM
IP: 109.80.20.–
JoDiK
~ Anonymní uživatel
987 příspěvků
23. 3. 2014   #3
-
0
-

#2 danny04
Zjistil sis co ta chyba znamená? Tak tím směrem zaměř svoje hledání...

Dobrým začátkem bude zapnout si kontrolu přetečení a rozsahu v překladači a pro zadání, při kterém ti to píše tu chybu si program odkrokovat a vypisovat hodnoty - tipuju, že ti někde utekl mimo rozsah index do těch polí...

Nahlásit jako SPAM
IP: 88.100.43.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Android run project — založil Peter

Auto run EXE — založil Thebobo

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý