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

Въпрос при извеждане на процедурите

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

    Въпрос при извеждане на процедурите

    Да се състави главна програма за обработка на два двумерни масива C[10,10] и D[12,12]. Данните и в двата масива са в интервала [-999 - 999]. Съответните подпрограми да извършват следните обработки:
    • извеждане на условието на задачата и името на автора
    • въвеждане на входните данни;
    • извеждане на входните данни;
    • да се определи броя на отрицателните елементи по редове и по стълбове, а така също реда и стълба с най-малко отрицателни елементи;
    • да се изведат резултатите;
    • резултатът да се запише във външен файл на диск С: с име DATA08.DAT.


    program task08;

    type
    matrix=array[1..50, 1..50] of integer;

    procedure uslovie;
    begin
    writeln('Da se systavi glavna programa za obrabotka na ............');
    end;

    procedure readMatrix(var m: matrix; n:integer);
    var
    i, j: integer;
    begin
    for i := 1 to n do
    for j := 1 to n do
    begin
    write('cell at row ', i, ', column ', j, ': ');
    readln(m[i, j]);
    end;
    end;

    procedure printMatrix(m: matrix; n:integer);
    var
    i, j: integer;
    begin
    for i := 1 to n do
    begin
    for j := 1 to n do
    write(m[i, j]:2, ' ');
    writeln;
    end;
    end;

    procedure countNeg(a: matrix; n: integer; var negR, negC: array of integer; var minR, minC: integer);
    var
    i, j: integer;
    begin
    for i := 1 to n do
    begin
    negR[i] := 0;
    negC[i] := 0;
    end;
    for i := 1 to n do
    for j := 1 to n do
    if a[i, j] < 0 then
    begin
    negR[i] := negR[i] + 1;
    negC[j] := negC[j] + 1;
    end;
    minR := 1;
    for i := 1 to n do
    if negR[i] < negR[minR] then
    minR := i;
    minC := 1;
    for i := 1 to n do
    if negC[i] < negC[minC] then
    minC := i;
    end;

    procedure printArray(m: array of integer; n:integer);
    var
    i, j: integer;
    begin
    for i := 1 to n do
    write(m[i], ' ');
    writeln;
    end;

    procedure printArrayToFile(var f: text; m: array of integer; n:integer);
    var
    i, j: integer;
    begin
    for i := 1 to n do
    write(f, m[i], ' ');
    writeln(f);
    end;

    var
    a, b: matrix; (* vmesto C i D sym gi narekyl A i B zaradi copy-paste *)
    negRA, negCA, negRB, negCB: array[1..50] of integer;
    minRA, minCA, minRB, minCB: integer;
    f: text;
    begin

    (* izvejdane na uslovieto i avtora *)
    uslovie;

    writeln;

    (* vyvejdane na vhodnite danni *)

    writeln('matrix A:');
    readMatrix(a, 2); (* vmesto 10, 12 - 2, 3, za po-byrzo vyvejdane ot klaviaturata *)

    Не мога да разбера това readMatrix(a,2), защо човека, който е писал програмата използва число (т.е. 2 ) вместо параметър ? В кой случай се използват тези числа и какво е приложението им ? И какво ще рече (* vmesto 10, 12 - 2, 3, za po-byrzo vyvejdane ot klaviaturata *

  2.  
     
  3. Member
    Тук е от
    Feb 2005
    Мнения
    520
    #2

    Re:Въпрос при извеждане на процедурите

    А какво е "параметър" според теб? Струва ми се, че започваш да се учиш отзад-напред и ще ти е трудно. Ако разбереш какво е заместване по стойност и заместване по адрес може би ще си отговориш на въпроса.
    А относно : "И какво ще рече (* vmesto 10, 12 - 2, 3, za po-byrzo vyvejdane ot klaviaturata *" пробвай да компилираш , като вместо 2 напишеш да кажем 12 и ще видиш разликата

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

    Re:Въпрос при извеждане на процедурите

    Добре заместване по стойност не е ли когато е въведен масива от програмиста, а по адрес, когато декларатора сам определя range-a ?

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

    Re:Въпрос при извеждане на процедурите

    Независимо (почти) от езика:
    Когато една функция е декларирана така, че да очаква входните параметри да се задават по стойност, тя на практика няма достъп до променливите от викащата я функция. Можеш да я извикаш по два начина:
    func(2, 7);
    или
    func(var1, var2);
    Във втория случай реално изпращаш във функцията не самите променливи var1 и var2, а техни копия.

    Когато функцията очаква адрес (reference), тя получава указателя към мястото от паметта, където е поместена променливата.
    По тази причина такава функция НЕ можеш да извикаш с func(2, 7), защото това не са адреси от паметта.
    И този вид функция може да промени стойностите на външните за нея променливи.

    Според мен извикване по адрес е добре да ползваш в два случая. Когато искаш функцията да ти върне няколко променливи или когато й предаваш нещо, което заема повечко памет и искаш да намалиш използваната памет (иначе то се копира още веднъж).

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

Подобни теми

  1. Отговори: 7
    Последно: 25-09-12, 12:08
  2. Идея за извеждане на звук от ТВ
    От stanilm във форум Аудиотехника
    Отговори: 0
    Последно: 07-03-11, 22:28
  3. извеждане на функция на крива
    От ViK във форум Общ - софтуер
    Отговори: 15
    Последно: 17-11-06, 16:51

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