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

Паскал къде бъркам

Сподели във Facebook Сподели в Twitter Изпрати на Email Сподели в LinkedIn
  1. Junior Member
    Тук е от
    Nov 2004
    Мнения
    100
    #1

    Паскал къде бъркам

    Да се състави програма за обработка на масиви D[G,G], E[O,O] и F[W,W] където данните са реални числа в интервала [- 1000 - 1000], съответните подпрограми да извършват следните действия:
    - въвеждане на входните данни
    - отпечатване на входните данни
    - а) да се образува едномерен масив С, елемените на който са елементите от масива А намиращи се под главния диагонал.
    б) Получения масив да се сортира по големина.
    - отпечатване на получените резултати след обработка a) и обработка б).


    Ето и решението ми, което дава грешка
    Код:
    program zad;
    const MAX=50;
    
    
    type MAS=Array[1..Max,1..Max] of real;
       MASC=Array[1..(MAX*(MAX-1)) DIV 2] OF REAL;
    var
    D,E,F: MAS;
    Q,R,T: MASC;
    G,O,W: integer;
    S,A,B: integer;
    i,j:integer;
    
    
    procedure avtor;
    begin
    writeln('Avtor: Grigor Ivanov');
    writeln('Fak. No, EMF, ');
    writeln;
    end;
    
    procedure uslovie;
    begin
    writeln('Uslovie...');
    writeln;
    end;
    
    procedure vhod(var x:Mas; var y:integer);
    begin
    write('Vuvedete broi red i stulbove');
    readln(y);
    for i:=1 to y do
    for j:=1 to y do
    repeat
    write('[',i,',',j,']=');
    readln(x[i,j]);
    until ((x[i,j]>-1000) and (x[i,j]<1000));
    end;
    
    
    Procedure Izhod(x:mas; y:integer);
    begin
    writeln('Izvejdane na vhodq6ti danni:');
    for i:=1 to y do
    begin
    for j:=1 to y do
    write (x[i,j]:2:2,' ');
    writeln;
    end;
    end;
    
    Procedure Action(x:mas; k,y:integer; var c:masc);
    begin
     K:=1;
     FOR I:=2 TO Y DO
      FOR J:=1 TO I-1 DO 
       BEGIN 
        C[K]:=X[I,J];
        K:=K+1; 
       END; 
       end;
     { SORTIRAME MASIVA "C" } 
     Procedure Sortirovka (x:mas; m:integer; var c:masc);
     begin
     FOR I:=2 TO M DO
      BEGIN 
       X[I,J]:=C[I];
       J:=I-1;
       WHILE (X[I,J]<C[J]) AND (J>0) DO
        BEGIN 
         c[J+1]:=c[J];
         J:=J-1; 
        END; 
       c[J+1]:=x[i,j];
      END; 
    
    
     { IZVEJDAME SORTIRANIQ MASIV } 
    writeln;
    writeln('Sorirani elementi pod glavniq diagonal:');
    For I:=1 to M do
    write(C[I]:2:2,' ');
    readln
    end;
    
    
    begin
    avtor;
    uslovie;
    writeln('Rabota s masiva D:');
    vhod(D,G);
    izhod(D,G);
    action(D,G,S,Q);
    sortirovka(D,G,Q);
    readln ;
    writeln('Rabota s masiv E:');
    vhod(E,O);
    izhod(E,O);
    action(E,O,A,R);
    sortirovka (E,O,R);
    readln;
    writeln('Rabota s Masiv F:');
    vhod(F,W);
    izhod(F,W);
    action(F,W,B,T);
    sortirovka(F,W,T);
    readln
    end.
    Дава грешни резултати

  2.  
     
  3. Senior Member Аватара на Bibi
    Тук е от
    Nov 2004
    Мнения
    2,757
    #2

    Re: Паскал къде бъркам

    Като започнеш да пишеш една променлива с главна буква, пиши я навсякъде така, че иначе трудно се разчита кода.

    1. Объркал си параметрите с които извикваш action. Размени ги така:
    Код:
    action(D,S,G,Q);
    Освен това този параметър k в момента каква роля играе?
    Според мен никаква - нищо не му подаваш като вход и нищо не извеждаш в него като изход.
    Или го махни и отвън пресмятай дължината на C&#91;] като (G*(G-1)) DIV 2,
    или направи процедурата така, че да го връща:
    Код:
    Procedure Action(x:mas; y:integer; var c:masc; var k:integer);
    Ако избереш втория начин, обърни внимание, че в момента в края на процедурата K не показва броя елементи в C&#91;], а с 1 повече. Т.е. за да върне вярна стойност, обърни ги така:
    Код:
    Procedure Action(x:mas; y:integer; var c:masc; var k:integer);
    begin
     K := 0;
     FOR I := 2 TO Y DO
      FOR J := 1 TO I-1 DO 
       BEGIN
        K := K+1;
        C[K] := X[I,J];
       END;
    end;
    Като промениш action, след това ще трябва да промениш и реда на параметрите, с които я извикваш.

    2. Отдели разпечатването на едномерен масив в процедура и разпечатай C&#91;] и преди сортирането.
    Защото процедурата за сортиране е малко странна и предполагам не работи вярно.
    - За какво ти е първия параметър? И защо той е двумерен масив? Съвсем излишно е.
    - Колко очакваш да е стойността на M? Колкото редове има двумерния Q&#91;] или колкото са елементите на C&#91;]?
    - Колко е стойността на J в началото на процедурата?
    - А колко трябва да е x[i,j] след шифтванията? На практика там имаш произволно число.
    - Освен това във WHILE от този вид, винаги слагай условието за индекса отпред. Ето така:
    Код:
    WHILE (J > 0) AND (X[I,J] < C[J]) DO
    иначе е некоректно и сигурно ще дава грешка, когато се обръщаш към C[0].
    Ако я преправиш с тези забележки, сигурно вече ще работи вярно:
    Код:
    Procedure Sortirovka (m:integer; var c:masc);
    var Temp: real;
    begin
     FOR I := 2 TO M DO
      BEGIN 
       Temp := C[I];
       J := I - 1;
       WHILE (J > 0) AND (Temp < C[J]) DO
        BEGIN 
         c[J+1] := c[J];
         J := J - 1;
        END;
       c[J+1] := Temp;
      END; 
    end;
    Само трябва да внимаваш да я извикаш с правилната стойност на M.
    Има и по-добри начини да напишеш сортиране на едномерен масив. Ако ти се занимава.

    За сега толкова. Ако има още проблеми, пак пиши.

  4. Junior Member
    Тук е от
    Nov 2004
    Мнения
    100
    #3

    Re: Паскал къде бъркам

    Благодаря ти много, но не съм особено на ТИ с Паскала и половината ти обяснения не са ми ясни... След като махна "К" така ли трябва да изглежда action-a ми

    Код:
    Procedure Action(x:mas; y:integer; var c:masc);
    begin
    FOR I:=2 TO Y DO
      FOR J:=1 TO Y DO
     (G*(G-1)) DIV 2;
        end;
    И при извеждането на процедурите, колко параметри тряба да сложа ? Ако имаш време ще съм ти много благодарен да ми я напишеш в готов вид, тъй като не съм сигурен, че ще се справя, а задачата ми трябва за сряда

    Благодаря ти за търпението

  5. Senior Member Аватара на Bibi
    Тук е от
    Nov 2004
    Мнения
    2,757
    #4

    Re: Паскал къде бъркам

    Неее.
    Остави го както си е, само махни единия параметър от списъка.
    Иначе вътре в процедурата K си има смисъл на брояч, който да обхожда елементите на новия масив, не го махай съвсем.
    Ей така:
    Код:
    Procedure Action(x:mas; y:integer; var c:masc);
    var K:integer;
    begin
     K := 0;
     FOR I := 2 TO Y DO
      FOR J := 1 TO I-1 DO 
       BEGIN
        K := K+1;
        C[K] := X[I,J];
       END;
    end;
    После, там, където ги извикваш, ще ти трябва
    Код:
    action(D,G,Q);
    S := (G*(G-1)) DIV 2;
    izhod_2(Q,S);
    sortirovka(Q,S);
    izhod_2(Q,S);
    Като процедурата izhod_2(x:mas; y:integer) я напиши по подобен начин както е izhod, но да работи с едномерен масив.

    Не мога да ти напиша цялото, защото няма къде да тествам, но и не е хубаво да ти го пиша.
    Ако се съсредоточиш, ще успееш и сам.
    Ще помагаме, ако още трябва.

  6. Senior Member
    Тук е от
    Feb 2003
    Мнения
    2,351
    #5

    Re: Паскал къде бъркам

    Цитат Първоначално публикувано от xzone
    Благодаря ти много, но не съм особено на ТИ с Паскала и половината ти обяснения не са ми ясни...
    Добре де, като не си на ТИ с Паскала що са тикаш да пишеш баш на него програми?
    ААА, да не би да си студент и това да ти е задължението.
    Тц.тц.тц. Добре че не учиш медицина, че да се извайкаш колко сложно било да се учи анатомията. А после да взимаш 50 лв за преглед и да предписваш широкоспектърни антибиотици

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

Подобни теми

  1. Къде бъркам ?
    От xzone във форум Програмиране
    Отговори: 3
    Последно: 17-08-09, 15:11
  2. Въпрос за Паскал
    От xzone във форум Програмиране
    Отговори: 2
    Последно: 17-08-09, 01:16
  3. Connlimit - помощ, къде бъркам
    От koko-bg във форум Linux
    Отговори: 8
    Последно: 31-12-06, 17:16
  4. Паскал?
    От heat_ във форум Програмиране
    Отговори: 2
    Последно: 25-07-06, 11:09
  5. Отговори: 3
    Последно: 29-03-06, 09:53

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