Это — старая версия документа!


Песочница

Список ссылок

Завораживающая механика

Презентации проектов

Фамильная честь Вустеров

Подсветка синтаксиса

Работа с внешним файлом

{ Составить программу, которая обеспечивает ввод
  с клавиатуры и запись во внешний файл следующей
  информации о студентах гр.3120: фамилии, года
  рождения и оценки сессии.
  Обработать созданный внешний файл: вычислить
  средний бал группы по каждому предмету и распечатать
  список студентов, средний бал которых выше среднего
  балла группы и год рождения меньше среднего. }
Program gr3120;
Uses Crt;
Type Student = Record
                 FIO : string[25];
                 Year : integer;
                 o1, o2, o3 : byte;
               End;
Var f : file of Student;
    Group : array [1..30] of Student;
    St : Student;
    n, i : byte;
    co1, co2, co3, cYear : real;
Begin
  ClrScr;
  Write('Введите количество студентов: ');ReadLn(n);
  WriteLn('Введите сведения о студентах: ');
  Assign(f,'gr3120.dat');
  Rewrite(f);
  for i:=1 to n do begin
    with Group[i] do begin
      Write('Фамилия И.О.: ');ReadLn(FIO);
      Write('Год рождения: ');ReadLn(Year);
      WriteLn('Оценки за сессию:');
      Write('Предмет1: ');ReadLn(o1);
      Write('Предмет2: ');ReadLn(o2);
      Write('Предмет3: ');ReadLn(o3);
      end;
      Write(f,Group[i]);
    end;
  Close(f);
  WriteLn('Файл записан.');
  WriteLn('Содержимое файла:');
  Reset(f);
  while not Eof(f) do begin
    Read(f,St);
    WriteLn(St.FIO:25,St.Year:6,St.o1:3,St.o2:3,St.o3:3);
    end;
  Close(f);
  WriteLn('Обработка данных из файла:');
  co1 := 0; co2 := 0; co3 := 0; cYear := 0;
  Reset(f);
  for i:=1 to n do begin
    Read(f,Group[i]);
    with Group[i] do begin
      co1 := co1 + o1;
      co2 := co2 + o2;
      co3 := co3 + o3;
      cYear := cYear + Year;
      end;
    end;
    co1 := co1 / n;
    co2 := co2 / n;
    co3 := co3 / n;
    cYear := cYear / n;
  Close(f);
  WriteLn('Средний балл по предметам:',co1:6:2,co2:6:2,co3:6:2);
  WriteLn('Средний год рождения:',cYear:12:0);
  WriteLn('Список студентов, у которых оценки выше средних');
  WriteLn('  и год рождения меньше среднего:');
  for i:=1 to n do
    with Group[i] do
      if (o1>co1) and (o2>co2) and (o3>co3) and (Year<cYear) then
        WriteLn(FIO:25,Year:6,o1:3,o2:3,o3:3);
  ReadKey;
End.
Результат работы программы

Построение графика функции

{ Вычислить функции f(x) на отрезке [1,5] с шагом 0.1
          x^2 , если 1<= x <=2.5
  f(x) ={ x^1/2 (это корень квадратный из <X>), если 2.5< x <=4.2
          -1, если 4.2 < x <= 5
  Записать значение функции в файл в виде < x f(x) >.
  Построить графики функций f(x) в градуированной системе координат. }
Program GraphFunc;
{$N+ E+}
Uses Crt, Graph;
Const KoefX = 35; n = 1000; Color = 2;
Var f : Text;
    x : Real;
    Xasp, Yasp, KoefY : Word;
Function Func(x:Extended) : Extended;
  begin
    if (x>=1) and (x<=2.5)
      then Func := x * x
      else if (x>2.5) and (x<=4.2)
             then Func := sqrt(x)
             else Func := -1;
  end;
Procedure SaveFuncFile;
  begin
    Assign(f,'Func.txt');
    Rewrite(f);
    WriteLn(f,'  x   f(x)');
    x := 1;
    repeat
      WriteLn(f,x:4:1,Func(x):6:2);
      x := x + 0.1;
    until x > 5;
    Close(f);
  end;
Procedure GrInit;
  var grDriver, grMode, ErrCode : integer;
  begin
    grDriver := Detect;
    InitGraph(grDriver,grMode,'');
    ErrCode := GraphResult;
    if ErrCode <> grOk then begin
      WriteLn('Ошибка графики: ',GraphErrorMsg(ErrCode));
      WriteLn('Программа остановлена.');
      Halt(1);
      end;
    GetAspectRatio(Xasp,Yasp);
    KoefY := round((Xasp / Yasp) * KoefX);
  end;
Procedure SysCoord;
  const dx = 2; dy = 2;
  var x, y : Word; s : string[5]; t : integer;
  begin
    Line(0, GetMaxY div 2, GetMaxX, GetMaxY div 2);
    Line(GetMaxX - 2*dx, GetMaxY div 2 + 2*dy, GetMaxX, GetMaxY div 2);
    Line(GetMaxX - 2*dx, GetMaxY div 2 - 2*dy, GetMaxX, GetMaxY div 2);
    OutTextXY(GetMaxX - 15,GetMaxY div 2 - 15,'X');
    x := (GetMaxX div 2) mod KoefX; t := (GetMaxX div 2) div KoefX;
    while x < GetMaxX do begin
      Line(x, GetMaxY div 2 - dy, x, GetMaxY div 2 + dy);
      Str(-t,s); t := t - 1;
      OutTextXY(x + dx, GetMaxY div 2 + 8, s);
      x := x + KoefX;
      end;
    Line(GetMaxX div 2, 0, GetMaxX div 2, GetMaxY);
    Line(GetMaxX div 2 - 2*dx, 2*dy, GetMaxX div 2, 0);
    Line(GetMaxX div 2 + 2*dx, 2*dy, GetMaxX div 2, 0);
    OutTextXY(GetMaxX div 2 + 10, 10,'Y');
    y := (GetMaxY div 2) mod KoefY; t := (GetMaxY div 2) div KoefY;
    while y < GetMaxY do begin
      Line(GetMaxX div 2 - dx, y, GetMaxX div 2 + dx, y);
      Str(t,s); t := t - 1;
      if s<>'0' then OutTextXY(GetMaxX div 2 - 20, y - dy, s);
      y := y + KoefY;
      end;
  end;
Procedure DrawGraph;
  var xi, yi, h : Extended;
  begin
    h := 0.1 / KoefX ;
    xi := 1;
    while xi < 5 do begin
      yi := Func(xi);
      PutPixel(GetMaxX div 2 + round(xi * KoefX),
               GetMaxY div 2 - round(yi * KoefY),Color);
      xi := xi + h;
      end;
  end;
Begin
  ClrScr;
  SaveFuncFile;
  GrInit;
  SysCoord;
  DrawGraph;
  ReadKey;
  CloseGraph;
End.
Содержимое полученного файла (FUNC.TXT):
  x   f(x)
 1.0  1.00
 1.1  1.21
 1.2  1.44
 1.3  1.69
 1.4  1.96
 1.5  2.25
 1.6  2.56
 1.7  2.89
 1.8  3.24
 1.9  3.61
 2.0  4.00
 2.1  4.41
 2.2  4.84
 2.3  5.29
 2.4  5.76
 2.5  6.25
 2.6  1.61
 2.7  1.64
 2.8  1.67
 2.9  1.70
 3.0  1.73
 3.1  1.76
 3.2  1.79
 3.3  1.82
 3.4  1.84
 3.5  1.87
 3.6  1.90
 3.7  1.92
 3.8  1.95
 3.9  1.97
 4.0  2.00
 4.1  2.02
 4.2  2.05
 4.3 -1.00
 4.4 -1.00
 4.5 -1.00
 4.6 -1.00
 4.7 -1.00
 4.8 -1.00
 4.9 -1.00
 5.0 -1.00

Результат работы программы

{ Вычислить функции sin(x), cos(x), f(x)
  на отрезке [-Pi,Pi] с шагом Pi/20
 
          sin(x), если -Pi <= x <= 0
  f(x) ={ cos(x), если 0 < x <= Pi
 
  Записать значение функции в файл в виде < x sin(x) cos (x) f(x) >.
  Построить графики функций f(x) в градуированной системе координат. }
Program GraphFunc;
{$N+ E+}
Uses Crt, Graph;
Const KoefX = 70; n = 1000; Color = 2;
Var f : Text;
    x : Real;
    Xasp, Yasp, KoefY : Word;
Function Func(x:Extended) : Extended;
  begin
    if (x >= -Pi) and (x <= 0)
      then Func := sin(x)
      else Func := cos(x);
  end;
Procedure SaveFuncFile;
  begin
    Assign(f,'Func.txt');
    Rewrite(f);
    WriteLn(f,'  x   sin(x)   cos(x)   f(x)');
    x := -Pi;
    repeat
      WriteLn(f,x:4:1,sin(x):7:2,cos(x):9:2,Func(x):8:2);
      x := x + Pi/20;
    until x > Pi;
    Close(f);
  end;
Procedure GrInit;
  var grDriver, grMode, ErrCode : integer;
  begin
    grDriver := Detect;
    InitGraph(grDriver,grMode,'');
    ErrCode := GraphResult;
    if ErrCode <> grOk then begin
      WriteLn('Ошибка графики: ',GraphErrorMsg(ErrCode));
      WriteLn('Программа остановлена.');
      Halt(1);
      end;
    GetAspectRatio(Xasp,Yasp);
    KoefY := round((Xasp / Yasp) * KoefX);
  end;
Procedure SysCoord;
  const dx = 2; dy = 2;
  var x, y : Word; s : string[5]; t : integer;
  begin
    Line(0, GetMaxY div 2, GetMaxX, GetMaxY div 2);
    Line(GetMaxX - 2*dx, GetMaxY div 2 + 2*dy, GetMaxX, GetMaxY div 2);
    Line(GetMaxX - 2*dx, GetMaxY div 2 - 2*dy, GetMaxX, GetMaxY div 2);
    OutTextXY(GetMaxX - 15,GetMaxY div 2 - 15,'X');
    x := (GetMaxX div 2) mod KoefX; t := (GetMaxX div 2) div KoefX;
    while x < GetMaxX do begin
      Line(x, GetMaxY div 2 - dy, x, GetMaxY div 2 + dy);
      Str(-t,s); t := t - 1;
      OutTextXY(x + dx, GetMaxY div 2 + 8, s);
      x := x + KoefX;
      end;
    Line(GetMaxX div 2, 0, GetMaxX div 2, GetMaxY);
    Line(GetMaxX div 2 - 2*dx, 2*dy, GetMaxX div 2, 0);
    Line(GetMaxX div 2 + 2*dx, 2*dy, GetMaxX div 2, 0);
    OutTextXY(GetMaxX div 2 + 10, 10,'Y');
    y := (GetMaxY div 2) mod KoefY; t := (GetMaxY div 2) div KoefY;
    while y < GetMaxY do begin
      Line(GetMaxX div 2 - dx, y, GetMaxX div 2 + dx, y);
      Str(t,s); t := t - 1;
      if s<>'0' then OutTextXY(GetMaxX div 2 - 20, y - dy, s);
      y := y + KoefY;
      end;
  end;
Procedure DrawGraph;
  var xi, yi, h : Extended;
  begin
    h := Pi/20 / KoefX ;
    xi := -Pi;
    while xi < Pi do begin
      yi := Func(xi);
      PutPixel(GetMaxX div 2 + round(xi * KoefX),
               GetMaxY div 2 - round(yi * KoefY),Color);
      xi := xi + h;
      end;
  end;
Begin
  ClrScr;
  SaveFuncFile;
  GrInit;
  SysCoord;
  DrawGraph;
  ReadKey;
  CloseGraph;
End.
Содержимое полученного файла (FUNC.TXT):
  x   sin(x)   cos(x)   f(x)
-3.1  -0.00    -1.00   -0.00
-3.0  -0.16    -0.99   -0.16
-2.8  -0.31    -0.95   -0.31
-2.7  -0.45    -0.89   -0.45
-2.5  -0.59    -0.81   -0.59
-2.4  -0.71    -0.71   -0.71
-2.2  -0.81    -0.59   -0.81
-2.0  -0.89    -0.45   -0.89
-1.9  -0.95    -0.31   -0.95
-1.7  -0.99    -0.16   -0.99
-1.6  -1.00    -0.00   -1.00
-1.4  -0.99     0.16   -0.99
-1.3  -0.95     0.31   -0.95
-1.1  -0.89     0.45   -0.89
-0.9  -0.81     0.59   -0.81
-0.8  -0.71     0.71   -0.71
-0.6  -0.59     0.81   -0.59
-0.5  -0.45     0.89   -0.45
-0.3  -0.31     0.95   -0.31
-0.2  -0.16     0.99   -0.16
-0.0  -0.00     1.00   -0.00
 0.2   0.16     0.99    0.99
 0.3   0.31     0.95    0.95
 0.5   0.45     0.89    0.89
 0.6   0.59     0.81    0.81
 0.8   0.71     0.71    0.71
 0.9   0.81     0.59    0.59
 1.1   0.89     0.45    0.45
 1.3   0.95     0.31    0.31
 1.4   0.99     0.16    0.16
 1.6   1.00     0.00    0.00
 1.7   0.99    -0.16   -0.16
 1.9   0.95    -0.31   -0.31
 2.0   0.89    -0.45   -0.45
 2.2   0.81    -0.59   -0.59
 2.4   0.71    -0.71   -0.71
 2.5   0.59    -0.81   -0.81
 2.7   0.45    -0.89   -0.89
 2.8   0.31    -0.95   -0.95
 3.0   0.16    -0.99   -0.99
 3.1   0.00    -1.00   -1.00

Результат работы программы

Вставка рисунка

Хранение файла

 
playground/playground.1252625328.txt.gz · Последние изменения: 2009/09/11 03:28 От admin
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki