* Средномесечни температури (за период)

Във файл са записани средномесечните темератури за няколко месеца от 2016 година, по една на месец. Напишете програма, която пита за начален и краен месец и чрез функции прави следното:

  • въвежда температурите от клавиатурата във файл
  • прочита данните от файла и ги извежда на екрана
  • намира броят на месеците в които температурата е над дадената
  • извежда на екрана кои са тези месеци и каква е била температурата тогава
  • отпечатва температурата само за месеца, в който сте родени, ако е сред записаните
Публикувано в 10a с етикети , . Постоянна връзка.

4 коментара по * Средномесечни температури (за период)

  1. Боряна каза:
    program project1;
    procedure VavediChisla;
    var
      F: file of integer;
      b, e, chislo, m: integer;
    begin
      Assign(F, 't.dat');
      Rewrite(F);
      WriteLn('Izberete nachalen i kraen mesec (otdelete gi sas pauza):');
      ReadLn(b, e);
      Write(F, b);
      Write(F, e);
      WriteLn('Vavedete srednata temperatura za vseki mesec:');
      for m:= b to e do begin
        Write('mesec ', m, ' - ');
        ReadLn(chislo);
        Write(F, chislo);
      end;
      Close(F);
    end;
    procedure ProchetiChisla;
    var
      F: file of integer;
      b, e, chislo, m: integer;
    begin
      Assign(F, 't.dat');
      Reset(F);
      Read(F, b);
      Read(F, e);
      WriteLn('Temperaturite sa:');
      for m:= b to e do begin
        Read(F, chislo);
        WriteLn('mesec ', m, ' - ', chislo);
      end;
      Close(F);
    end;
    function NadDadenata(dadeno: integer): integer;
    var
      F: file of integer;
      b, e, chislo, m, br: integer;
    begin
      Assign(F, 't.dat');
      Reset(F);
      Read(F, b);
      Read(F, e);
      br:=0;
      for m:= b to e do begin
        Read(F, chislo);
        if (chislo>dadeno) then
          Inc(br);
      end;
      Close(F);
      Result:=br;
    end;
    procedure MeseciNadDadenata (dadeno: integer);
    var
      F: file of integer;
      b, e, chislo, m: integer;
    begin
      Assign(F, 't.dat');
      Reset(F);
      Read(F, b);
      Read(F, e);
      WriteLn('Temperaturite sa:');
      for m:= b to e do begin
        Read(F, chislo);
        if (chislo>dadeno) then
           WriteLn('mesec ', m, ' - ', chislo);
      end;
      Close(F);
    end;
    procedure RojdenMesec (RD: integer);
    var
      F: file of integer;
      b, e, chislo: integer;
    begin
      Assign(F, 't.dat');
      Reset(F);
      Read(F, b);
      Read(F, e);
      if (RD>=b) and (RD<=e) then begin
         Seek (F, RD+1);
         Read(F, chislo);
         WriteLn('Prez meseca na rojdenia vi den temperaturata e bila ', chislo);
      end
      else
          WriteLn('Vashiat rojden mesec ne e sred dannite.');
      Close(F);
    end;
    var
      izbor: char;
      dadeno, RD: integer;
    begin
      //въвеждане на данни (с условие в случай че потребителя реши
      //да ползва старите)
      WriteLn('Iskate li da vavedete novi stoinosti? Vavedete d za da i n za ne.');
      ReadLn(izbor);
      if izbor='d' then
        VavediChisla;
      WriteLn;
    
      //прочитане на данните (пак с условие)
      WriteLn('Iskate li da vidite dannite vav faila? Vavedete d za da i n za ne.');
      ReadLn(izbor);
      if izbor='d' then
        ProchetiChisla;
      WriteLn;
    
      //брой на температурите над дадената
      Write('Vavedete niakakva temperatura za sravnenie: ');
      ReadLn(dadeno);
      WriteLn('Mesecite s temperatura nad dadenata sa ', NadDadenata(dadeno), ' na broi.');
      WriteLn;
    
      //извеждане на месеците над дадената температура и каква е била тяхната температура
      WriteLn('Mesecite s temperatura nad dadenata sa:');
      MeseciNadDadenata(dadeno);
      WriteLn;
    
      //отпечатване на температурата на рождения ви месец (ако е сред дадените)
      Write('Vavedete porednia nomer na meseca, kogato ste rodeni: ');
      ReadLn(RD);
      RojdenMesec(RD);
    
      ReadLn;
    end.
    
  2. Svetli каза:
    program project1;
    var
      Temperatura: file of Integer;
      t,i,m,br,tdadeno,n,k,mr:integer;
    
    function ZapishiT(t:integer):integer;
    begin
      Assign(Temperatura, 'Temperatura.dat');
      Rewrite(Temperatura);
      Seek(Temperatura,n);
      for i:= n to k do
      begin
        Writeln('Vavedi temperatua');
        Readln(t);
        Write(Temperatura,t);
      end;
      Close(Temperatura);
      Writeln('Stop vie vavedohte dostatuchno informaciq');
    end;
    
    function ProchetiT(t:integer):integer;
    begin
      Assign(Temperatura, 'Temperatura.dat');
      Reset(Temperatura);
      Seek(Temperatura,n);
      for i:= n to k do
      begin
    
        Read(Temperatura,t);
        Writeln('Temperaturata e: ',t);
      end;
      Close(Temperatura);
      Writeln('Tova e vsichko ');
    end;
    
    function SravnenieT(tdadeno,t,br:integer):integer;
    begin
      Writeln('Vavedi temperatura za sravnenie');
      Readln(tdadeno);
    
      Assign(Temperatura, 'Temperatura.dat');
      Reset(Temperatura);
      Seek(Temperatura,n);
    
      for i:= n to k do
      begin
        Read(Temperatura,t);
        if t > tdadeno then
           br:=br+1;
      end;
      Writeln('Broqt na mesecite s temperatura po-golqma ot dadenata sa: ',br);
      Close(Temperatura);
    end;
    
    function MeseciT(t,m:integer):integer;
    begin
      Assign(Temperatura, 'Temperatura.dat');
      Reset(Temperatura);
      Seek(Temperatura,n);
    
      for i:= n to k do
      begin
        Read(Temperatura,t);
        if i=1 then Writeln('Temperaturata za mesec Qnuari e: ',t);
        if i=2 then Writeln('Temperaturata za mesec Fevruari e: ',t);
        if i=3 then Writeln('Temperaturata za mesec Mart e: ',t);
        if i=4 then Writeln('Temperaturata za mesec April e: ',t);
        if i=5 then Writeln('Temperaturata za mesec Mai e: ',t);
        if i=6 then Writeln('Temperaturata za mesec Juni e: ',t);
        if i=7 then Writeln('Temperaturata za mesec Juli e: ',t);
        if i=8 then Writeln('Temperaturata za mesec Avgust e: ',t);
        if i=9 then Writeln('Temperaturata za mesec Septemvri e: ',t);
        if i=10 then Writeln('Temperaturata za mesec Oktomvri e: ',t);
        if i=11 then Writeln('Temperaturata za mesec Noemvri e: ',t);
        if i=12 then Writeln('Temperaturata za mesec Dekemvri e: ',t);
      end;
    
      Close(Temperatura);
    
    
    end;
    
    function MesecRoden(t,m,mr:integer):integer;
    begin
      //отваряме файла
      Assign(Temperatura, 'Temperatura.dat');
      Reset(Temperatura);
      //питаме за месеца
      Writeln('Prez koi mesec ste roden');
      Readln(mr);
    
      if (mr>=n) and (k<=mr) then
        begin
          Seek(Temperatura,mr);
          Read(Temperatura,t);
          Writeln('Temperaturata prez meseca, v koito ste roden e: ',t);
        end;
    end;
    
    begin
      Writeln('Vavedete nachalna i kraina stoinost za period');
      Readln(n,k);
    
      ZapishiT(t);
      Writeln;
    
      ProchetiT(t);
      Writeln;
    
      SravnenieT(tdadeno,t,br);
      Writeln;
    
      MeseciT(t,m);
      Writeln;
    
      MesecRoden(t,m,mr);
    
      Readln;
    end.
    
    • Данаил каза:

      Леле, Светли, колко голяма програма си сътворил! И имаш удачни имена на променливите, много добре е подредена. Но с доброто – дотук. :-) забележките ми по кода са:

      1. Не е добра практика да слагаш всичко като глобални променливи. Прочети пак урока за глобални и локални променливи.
      2. Няма смисъл да подаваш нещо като параметър, и после във функцията да не му ползваш стойността, а да я въвеждаш пак. За тази цел си имаш локални променливи, декларирай си ги само за функцията.
      3. Виж, компилатора извежда много предупреждения при компилиране, обърни им внимание.
      4. Прочети си пак как точно се използва функцията Seek и виж дали я ползваш правилно. Например ето тази функция ще ти покаже всичко записано във файла:
        procedure ProchetiFail;
        var
          t:integer;
        begin
          Assign(Temperatura, 'Temperatura.dat');
          Reset(Temperatura);
          WriteLn('Pechat na vsicho nalichno vav faila');
          for i:= 1 to FileSize(Temperatura) do
          begin
            Read(Temperatura,t);
            Writeln('Temperaturata za mesec ', i, ' e: ',t);
          end;
          Close(Temperatura);
          Writeln('Tova e vsichko ');
        end;     

        Извикай я след като запишеш температури за период март-април и виж какво има във файла.

      5. В MesecRoden() е добре и като го няма месеца да изведе някакъв текст, за да е ясно каква е ситуацията.

      Тази програма е твърде сложна, а времето ни в час е малко. Добре си се справил, само вкъщи на спокойствие я довърши. Виж и в другите качени решения как е реализирано и си го обясни, за да проучиш и тяхната идея каква е била. Човек, ако е умен, може да се учи и от грешките, и от успехите на другите. Така мисля.

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