Резултати от 1 до 4 от общо 4

проблем при стартиране на програма на Паскал

Сподели във Facebook Сподели в Twitter Изпрати на Email Сподели в LinkedIn
  1. Member Аватара на shanto
    Тук е от
    Feb 2008
    Мнения
    621
    #1

    проблем при стартиране на програма на Паскал

    При стартиране на програма на Паскал веднага след изпълнението на програмата се получава следната грешка:
    http://darkmentor.hit.bg/sshot-1.jpg
    Мисля, че това е някаква грешка свързана с това, че програмата я направих на Dev-pas за 32 битова ОС, а съм с Vista Ultimate x64.
    Търсих в Интернет, но всичко, което открих е , че това е грешка на виртуалната машина, а не е стартирана такава.
    Програмата работи със стек - въвежда извежда елементи под формата на топки с различни цветове, за демонстрация на работата на стека.Ето и програмния код:

    Program cviat_topki;
    TYPE
    st15=string[15];
    poredica=^element; {тип указател към един елемент от стека}
    element=record
    cviat:st15; {цвят на топката}
    predishenoredica; {предишен елемент}
    end;
    VAR
    s:st15;
    posledenoredica;
    procedure dobav (s:st15); {добавяне на елемент към стека}
    VAR
    woredica;
    begin
    new(w); {създава се елемент}
    w^.cviat:=s;
    w^.predishen:=posleden;
    posleden:=w; {трябва да съдържа последната добавена топка към стека}
    end; {край на процедура}
    procedure izvlich(var s:st15);
    VAR
    woredica;
    begin
    s:=posleden^.cviat; {извлича се цвета на последната добавена топка}
    w:=posleden;
    posleden:=posleden^.predishen;
    dispose(w); {освобождава се заеманата от последната добавена топка памет}
    end;
    procedure vavej; {процедура за въвеждане на топките със съответния цвят}
    VAR
    i:integer;
    begin
    write('Vavedete cviat na topka No1 (Za izhod -> "1"): ');
    readln(s);
    i:=1;
    while s<>'1' do
    begin
    i:=i+1;
    dobav(s);
    write('Cviat na topka No',i,' : ');
    readln(s);
    end;
    end; {край на процедура}
    procedure izvej; {процедура за извеждане на цвета на топките по реда на изваждането им }
    VAR
    i:integer;
    begin
    i:=1;
    while posleden^.cviat<>'white' do
    begin
    izvlich(s);
    writeln(i,'.',s);
    i:=i+1;
    if i mod 24 = 0 then
    readln
    end;
    end; {край на процедура}
    BEGIN
    posleden:=nil;
    vavej;
    izvej;
    //readln;
    END.
    Някой да има идея на какво може да се дължи тази грешка?

  2.  
     
  3. Junior Member
    Тук е от
    Jan 2007
    Мнения
    132
    #2

    Re:проблем при стартиране на програма на Паскал

    dokolkoto gledam kraq na faila ne e zavyr6en

    procedure vavej; - do kato ne nameri "1"
    procedure izvej; - tyrsi do "while posleden^.cviat<>'white' do" kyde definirano "posleden^.cviat='white'"

    Дали това ще стане

    Program cviat_topki;
    TYPE
    st15=string[15];
    poredica=^element; {тип указател към един елемент от стека}
    element=record
    cviat:st15; {цвят на топката}
    predishenoredica; {предишен елемент}
    end;
    VAR
    s:st15;
    posledenoredica;
    procedure dobav (s:st15); {добавяне на елемент към стека}
    VAR
    woredica;
    begin
    new(w); {създава се елемент}
    w^.cviat:=s;
    w^.predishen:=posleden;
    posleden:=w; {трябва да съдържа последната добавена топка към стека}
    end; {край на процедура}
    procedure izvlich(var s:st15);
    VAR
    woredica;
    begin
    s:=posleden^.cviat; {извлича се цвета на последната добавена топка}
    w:=posleden;
    posleden:=posleden^.predishen;
    dispose(w); {освобождава се заеманата от последната добавена топка памет}
    end;
    procedure vavej; {процедура за въвеждане на топките със съответния цвят}
    VAR
    i:integer;
    begin
    write('Vavedete cviat na topka No1 (Za izhod -> "1"): ');
    readln(s);
    i:=1;
    while s<>'1' do
    begin
    i:=i+1;
    dobav(s);
    write('Cviat na topka No',i,' : ');
    readln(s);
    end;
    dobav(s); { добавя цвят '1' }
    end; {край на процедура}
    procedure izvej; {процедура за извеждане на цвета на топките по реда на изваждането им }
    VAR
    i:integer;
    begin
    i:=1; { промених на '1' }
    while posleden^.cviat<>'1' do
    begin
    izvlich(s);
    writeln(i,'.',s);
    i:=i+1;
    if i mod 24 = 0 then
    readln
    end;
    end; {край на процедура}
    BEGIN
    posleden:=nil;
    vavej;
    izvej;
    END.

  4. Member Аватара на XIIID
    Тук е от
    Dec 2002
    Живее в
    Burgas, Bulgaria
    Мнения
    829
    #3

    Re:проблем при стартиране на програма на Паскал

    Не е и така, понеже последната "топка" с цвят "1" така и не се добавя в стека, затова и извличането няма да спре коректно. И защо, по дяволите трябва да се черпи от стека до достигане на бяла топка, кафява топка или торен бръмбар?! Правилно е просто да провериш дали posleden не съдържа вече nil. Затова и дава грешка според мен, програмката опитва да вади данни от изпразнения вече стек, за които не е заделена памет въобще, та няма нищо общо с 32бит/64битовата ОС.

    Структурата на програмата ми се вижда малко нечиста... тая проверка дали стекът е празен трябва да си я върши процедурата izvej! В обектно-ориентираното програмиране "въведи" и "изведи" щяха да са си методи към класа "стек", а клиентът да не си блъска главата по какво аджеба ще познае коя топка е в дъното на торбата.

  5. Member Аватара на shanto
    Тук е от
    Feb 2008
    Мнения
    621
    #4

    Re:проблем при стартиране на програма на Паскал

    @XIIID - прав си!
    промених проверката и нещата се оправиха!
    Благодаря и на двамата за помоща.Ето и окончателния код:
    Program cviat_topki;
    TYPE
    st15=string[15];
    poredica=^element; {тип указател към един елемент от стека}
    element=record
    cviat:st15; {цвят на топката}
    predishenoredica; {предишен елемент}
    end;
    VAR
    s:st15;
    posledenoredica;
    procedure dobav (s:st15); {добавяне на елемент към стека}
    VAR
    woredica;
    begin
    new(w); {създава се елемент}
    w^.cviat:=s;
    w^.predishen:=posleden;
    posleden:=w; {трябва да съдържа последната добавена топка към стека}
    end; {край на процедура}
    procedure izvlich(var s:st15);
    VAR
    woredica;
    begin
    s:=posleden^.cviat; {извлича се цвета на последната добавена топка}
    w:=posleden;
    posleden:=posleden^.predishen;
    dispose(w); {освобождава се заеманата от последната добавена топка памет}
    end;
    procedure vavej; {процедура за въвеждане на топките със съответния цвят}
    VAR
    i:integer;
    begin
    write('Vavedete cviat na topka No1 (Za izhod -> "1"): ');
    readln(s);
    i:=1;
    while s<>'1' do
    begin
    i:=i+1;
    dobav(s);
    write('Cviat na topka No',i,' : ');
    readln(s);
    end;
    end; {край на процедура}
    procedure izvej; {процедура за извеждане на цвета на топките по реда на изваждането им }
    VAR
    i:integer;
    begin
    i:=1;
    while posleden <> nil do
    begin
    izvlich(s);
    writeln(i,'.',s);
    i:=i+1;
    if i mod 24 = 0 then
    readln
    end;
    end; {край на процедура}
    BEGIN
    posleden:=nil;
    vavej;
    writeln();
    izvej;
    readln;
    END.

Сподели във Facebook Сподели в Google Plus Сподели в Twitter Изпрати на Email Сподели в LinkedIn

Подобни теми

  1. Помощ за програма на Паскал
    От The Insane във форум Програмиране
    Отговори: 3
    Последно: 03-12-12, 15:18
  2. Липсващи права за стартиране на програма
    От glowndark във форум Общ - софтуер
    Отговори: 4
    Последно: 15-09-12, 05:58
  3. Отговори: 0
    Последно: 10-07-09, 13:59
  4. Програма за стартиране на компютъра
    От bennito във форум Общ - софтуер
    Отговори: 21
    Последно: 07-11-05, 18:32
  5. Отговори: 2
    Последно: 26-05-05, 10:06

SetCombG.com
SetCombG.com е портален сайт и Форум за битова техника, телевизори, климатици, лаптопи и смартфони, създаден през 1999 година.
Заедно сме над 20 години!
Следвай ни
Горе