Функции за работа в масив

Да се създаде програма за работа с масив от реални числа, в която след въвеждане на цяло положително число N (N<20)  чрез функции се реализира следното:

  • въвеждане на елементите на масива, N на брой
  • запис на масива във файл
  • прочитане на масива от файл
  • намиране на сумата на първите N елементa
  • намиране на броят на първите N ненулеви елементи
  • намиране на стойността на най-малкия елемент
  • намиране на номера на най-малкия елемент

Функциите да могат да се избират от меню. Масивът да бъде деклариран като глобална променлива.

Публикувано в 10a с етикети , . Постоянна връзка.

6 Responses to Функции за работа в масив

  1. Боряна каза:

    с обяснения

    program Project1;
    var
      a: array[1..20] of real;
      N, opcia: integer;
    
    //процедура за въвеждане
    procedure Vavejdane(N: integer);
    var
      i: integer;
    begin
      WriteLn('Vavedete ', N, ' na broi elementi.');
      for i:=1 to N do
        ReadLn(a[i]);
    end;
    
    //процедура за запис във файл
    procedure Zapis(N: integer);
    var
      F: file of real;
      i: integer;
      chislo: real;
    begin
      WriteLn('Izbrahte da zapishete masiva vav fail.');
      Assign(F, 'masiv.dat');
      Rewrite(F);
      for i:=1 to N do begin
        chislo:=a[i];
        Write(F, chislo);
      end;
      Close(F);
    end;
    
    //процедура за четене от файл
    procedure Prochit(N: integer);
    var
      F: file of real;
      i: integer;
      chislo: real;
    begin
      WriteLn('Izbrahte da prochetete masiva vav fail. Eto negovite elementi:');
      Assign(F, 'masiv.dat');
      Reset(F);
      for i:=1 to N do begin
        Read(F, chislo);
        WriteLn(chislo:0:0);
      end;
      Close(F);
    end;
    
    //функция за намиране на сумата на стойностите на елементите
    function Suma(N: integer): real;
    var
      i: integer;
    begin
      Result:=0;
      for i:=1 to N do
       Result:=Result+a[i];
    end;
    
    //функция за намиране на броя на елементите
    function Broi(N: integer): integer;
    var
      i: integer;
    begin
      Result:=0;
      for i:=1 to N do
       if a[i]<>0 then
        Result:=Result+1;
    end;
    
    //функция за намиране на най-малката стойност в масива
    function StoinostMin(N: integer): real;
    var
      i: integer;
    begin
      Result:=a[1];
      for i:=2 to N do
       if a[i]<Result then
        Result:=a[i];
    end;
    
    //функция за намиране на номера на най-малката стойност в масива
    function NomerMin(N: integer):integer;
    var
      i: integer;
      chislo: real;
    begin
      chislo:=a[1];
      Result:=1;
      for i:=2 to N do
       if a[i]<chislo then
        Result:=i;
    end;
    
    //самата програма с менюто
    begin
      Write('Vavedete chislo N<20, s koeto da rabotim:');
      ReadLn(N);
      WriteLn;
      repeat
        WriteLn('Izberete opcia:');
        WriteLn('1 - vavejdane na ', N, ' na broi elementi v masiva');
        WriteLn('2 - zapis na masiva vav fail');
        WriteLn('3 - prochitane na masiva ot fail');
        WriteLn('4 - namirane na sumata na parvite ', N, ' elementa');
        WriteLn('5 - namirane na broia na parvite ', N, ' nenulevi elementa');
        WriteLn('6 - namirane na stoinostta na nai-malkia element');
        WriteLn('7 - namirane na nomera na nai-malkia element');
        WriteLn('0 - ako ne vi se zanimava poveche');
        ReadLn(opcia);
        case opcia of
            1: Vavejdane(N);
            2: Zapis(N);
            3: Prochit(N);
            4: WriteLn('Sumata na stoinostta na elementite e ', Suma(N):0:0);
            5: WriteLn('Broiat na nenulevite elementi e ', Broi(N));
            6: WriteLn('Stoinostta na nai-malkia element e ', StoinostMin(N):0:0);
            7: WriteLn('Nomerat na nai-malkia element e ', NomerMin(N));
        end;
        WriteLn('Gotovo. Natisnete Enter, za da prodaljite.');
        ReadLn;
        WriteLn;
      until opcia=0;
    end.
    
    • Данаил каза:

      Отлично направена задача и добре обяснена! Но при записа на масива във файл може да ползваш и директно Write(F, a[i]);, а при четене от файла идеята е да се прочете в масива, а не да се изведе на екрана. :-) Другото е така.

  2. Svetli каза:
    program Project1;
    var
      a:array[1..20] of Real;
      N,i,o:integer;
      T:text;
    
    //въвеждане на елементите на масива, N на брой и запис на масива във файл
    Procedure VavediE(N,i:integer);
    begin
      Assign(T,'Dokument.txt');
      Rewrite(T);
      Writeln('Vavedete chisla:');
      for i:= 1 to N do begin
        Readln(a[i]);
        Write(T, a[i]);
      end;
      Writeln('Stop! Vavedohte dostatuchno chisla!');
      Close(T);
    end;
    
    //прочитане на масива от файл
    Procedure ProchetiE(N,i:integer);
    begin
      Assign(T,'Dokument.txt');
      Reset(T);
      Writeln('Chislata ot faila sa: ');
      for i:= 1 to N do begin
        Read(T,a[i]);
        Writeln(a[i]:5:2);
      end;
      Close(T);
    end;
    
    //намиране на сумата на първите N елементa
    function SumaE(N,i:integer):Real;
    begin
      for i:= 1 to N do begin
        Result:=Result+a[i];
      end;
      Writeln('Sumata ot chislata e: ',Result:5:2);
    end;
    
    //намиране на броят на първите N ненулеви елементи
    function BroiNeO(N,i:integer):integer;
    begin
      Result:=0;
      for i:= 1 to N do begin
        if a[i]<>0 then
           Result:=Result+1;
      end;
      Writeln('Broq na chislata razlichni ot 0 sa: ',Result);
    end;
    
    //намиране на стойността на най-малкия елемент
    function NaiMalukE(N,i:integer):real;
    begin
      Result:=a[1];
      for i:= 1 to N do begin
        if a[i]< Result then
           Result:=a[i];
      end;
      Writeln('Nai-malkoto chislo e: ',Result:5:2);
    end;
    
    //намиране на номера на най-малкия елемент
    function NaiMalukN(N,i:integer):integer;
    var
      stoinost:real;
    begin
      Stoinost:=a[1];
      Result:=1;
      for i:= 2 to N do
        if a[i] < Stoinost then
           Result:=i;
      Writeln('Nomera na nai-malkiq element e: ',Result);
    end;
    
    begin
      Writeln('Vavedete kolko elementa shte se vavejdat:');
      Readln(N);
      Writeln;
    
      Writeln('Izberete operaciq za rabotata s masiv:');
      Writeln('1 - vavejdane na elementi i zapisa ima na fail');
      Writeln('2 - prochitane na masiva ot fail');
      Writeln('3 - namirane na sumata na chislata');
      Writeln('4 - namirane na broq na nenulevite elementi');
      Writeln('5 - namirane na stoinostta na nai-malkiq element');
      Writeln('6 - namirane na nomera na nai-malkiq element');
      Writeln;
    
      Readln(o);
    
      case o of
      1: VavediE(N,i);
      2: ProchetiE(N,i);
      3: SumaE(N,i);
      4: BroiNeO(N,i);
      5: NaiMalukE(N,i);
      6: NaiMalukN(N,i);
      else Writeln('Nqma takava operaciq');
      end;
    
      Readln;
    end. 
    
    • Данаил каза:

      Браво, Светли, много добре! Само че за функциите, които връщат резултат, е по-добре само да върнеш резултата, а отпечатването да стане в главната програма – така функцията ще е по-универсална. Другото е чудесно направено…

  3. procsy каза:
     program Project1;
    
    const N=10;
    var
      a:array [1..30] of integer;
    
    procedure MasivVavedi;
    var
    i:integer;
    begin
    Writeln('Vavedete Chislata na masiva');
      For i:=1 to N do begin
      Readln(a[i]);
    end;
    end;
    
    procedure MasivZapisFail;
    var
      i:integer;
      F: file of integer;
    begin
         Assign(F,'chisla.dat');
         Rewrite(F);
    for i:=1 to N do begin
         write(F,a[i]);
        end;
      for i:=1 to N do begin
         write(F,a[i]);
      end;
         close(F);
    end;
    
    procedure MasivProchitaneFail;
    var
      i:integer;
      F: file of integer;
    begin
      Assign(F,'chisla.dat');
      Reset(F);
      for i:=1 to N do begin
        read(F,a[i]);
      end;
       close(F);
    end;
    
    Function Sumachisla:integer;
    var suma,i:integer;
    
    begin
     suma:=0;
     For i:=1 to N do begin
     suma:=suma+a[i];
    end;
     Result:= Suma;
    end;
    
    Function Naimalkochislo:integer;
    var
      min,i:integer;
    begin
       min:=a[1];
       for i:=2 to N Do
       If min > a[i] then
       min:=a[i];
      Result:=min;
      end;
    
    Function Otkrivane:integer;
    var
      x,xi,i:integer;
      begin
        Write('Vavedete chisloto koeto tursite: ');
        Readln(x);
        xi:=-1;
        for i:=1 to N Do
        if a[i] = x then begin
        xi:=i;break;
        end;
        If xi= -1 then Writeln('chisloto ne e otkrito')
        else Writeln('Chisloto e s nomer: ',xi);
      end;
    
    begin
      MasivVavedi;
      MasivZapisFail;
      MasivProchitaneFail;
      WriteLn('Sumata e ', Sumachisla);
      Writeln('Nai-malkoto chislo e ', Naimalkochislo);
      Otkrivane;
      readln;
    end.       
    • Данаил каза:

      Браво, Любо! Много добре е като код, само в процедурата MasivZapisFail имаш излишни редове. И си оправи форматирането – погледни решенията на другите колко по-лесно се четат! И във функцията Otkrivane може да подаваш търсеното число като параметър, а накрая вместо да отпечатваш резултата да го върнеш като резултат, а отпечатването да стане в главната програма. Така функцията ще стане по-универсална и ще може да се използва за различни числа и за други цели освен за извеждане на екрана.

Вашият коментар