Рефераты. Основы программирования на языке Паскаль

for i:=l to 100 do

  for j:=l to 100 do

    for k:=l to 100 do

   writeln (i, j, k);

дает столбик цифр:

111

112

113

114

– – – – –

121

122

123

124

– – – – –

211

212

213

– – – – –

  100100100,

что составляет 1000000 строчек.

Пример: найти rez = f (х1) + f (х2 )+.. .+f (x6),

где

f(x) считать с точностью не менее e=0.01;

х1=0.1, затем xn=xn-l+0.2, пока х не станет равным 1.1.

Нам нужно вычислить rez. Поскольку это будет сумма, то вначале положим rez=0, затем вычислим f(х1) с нужной точностью и добавим к rez, и т.д., то есть:

Rez : = 0 ; x:=0.l;

for i:=l to 6 do

Begin  Rez:=Rez+f(x);

x:=x+0.2;

end;

Теперь в данную программу нужно "вставить" вычисленные f(x) с необходимой точностью. Для этого найдем сумму, составляющую f(x) для n элементов, затем – для n+l элемента, сравним их по модулю и, когда разность между ними будет меньше Е, сумму для n+l элемента ряда примем за более точную и добавим к Rez. При вычислении f(x) количество членов ряда, которые нам придется суммировать, не известны, поэтому придется применять цикл типа repeat или while. Кроме того, в элементы ряда входит 2n! Факториал подсчитывается по схеме 1! = 1, 21 = 1*2; з! =1*2*3 и т.д., т.е. например, 8! = 1*2*3*4*5*6*7*8. Далее, при подсчете следующего значения ряда, можно величину 2n! найти по схеме: fak: = fak*(n-l)*n. Ряд у нас знакопеременный, т.е. меняется '+', '–' перед каждым членом ряда. Меняем знак с помощью схемы znak: = znak*(-1). Если исходный знак = +l, то в ячейке znak будет храниться то +l, то -1.

С учетом сказанного выше f(x) с нужной точностью вычисляется:

fxpred: = 0; fxpos: =l, n: = 2; znak: = 1; fak: = 1;

while Abs(fxpos – fxpred) > = 0.01 do

Begin fxpred: = fxpos: znak: = znak*(-1); fak: = fak*(n-l)*n;

     fxpos: = fxpos+znak*exp(n*in (x))/fak;

     n: = n+2;

     end;

Соединив оба фрагмента программы и снабдив их описаниями, получим готовую программу:

        Program Prim22;

    Var n,fak,i,znak:longint;

        rez,x,fxpred,fxpos:real;

 BEGIN  rez:=0; x:=0.1;      writeln;

        for i:= 1 to 6 do

     Begin fxpred:=0; fxpos:=1; n:=2; znak:=1; fak:=1;

           while abs(fxpos-fxpred)>=0.001 do

        Begin znak:=znak*(-1); fak:=fak*(n-1)*n;

              fxpred:=fxpos;

              fxpos:=fxpos+znak*exp(n*ln(x))/fak; n:=n+2;

        end;  writeln('x=',x*180/pi,'(ја ¤)  cos(x)=',fxpos);

              x:=x+0.2; rez:=rez+fxpos; end;

           writeln('rez=',rez);

                      readln;              END.

5. Ввод – вывод

 

5.1. Общие положения


Ввод-вывод выполняется с помощью операторов read, readln – читать и write, writeln – писать. Читать и писать определяется по отношению к оперативной памяти (ОП). Так, read, readln – читать, т. е. вводить с внешнего устройства (файла) и заносить данные в ОП, write, writeln – писать, т.е. выводить данные из ОП на внешний файл (устройство). Файл состоит из компонент, структура которых определяется при его создании.

Внешними устройствами (файлами) могут быть: экран монитора, клавиатура, память на гибких дисках, память на жестком или лазерном дисках, линии связи и т.п. В операторах ввода-вывода указывается имя файла, с которым будет производиться ввод-вывод, этот файл считается логическим. Кроме того, есть понятие физического файла. Физический файл – это устройство, Например, гибкий магнитный диск, жесткий диск и т. д. Логический файл имеет имя, которое можно указывать в операторах ввода-вывода.

 

5. 2. Ввод


Ввод производится с помощью операторов read или readln.

Формат операторов: read (FV, х1, х2, ..., хn);

или    readln (FV, х1, х2, ..., хn);

где FV - имя файла, с которого считывается информация, а х1, х2 и т.д. – ячейки памяти, в которые заносится информация, считываемая с файла. Если FV отсутствует, то чтение производится с клавиатуры. Файл представляет собой как бы ленту с компонентами (рис 5.1):

 




Компонента может быть данным любого типа (см. с.9). Оператор readln начинает считывание с начала новой компоненты, а read может начинать не с начала. Если прежнее чтение закончилось внутри компоненты, то следующий read будет читать с того места, на котором закончилось предыдущее чтение (рис. 5.2).


 









В данном случае файл организован на каком-либо носителе (например на диске) и состоит из компонент, в каждой находится по три данных. Если для чтения из файлов применить операторы read (a, b); read (c, d); то в памяти будет а=3.2, b=8.6, c=0.2, d=7.01; если – операторы readln (a, b); readln (c, d), то в памяти а=3.2, b=8.6, c=7.01, d=8.3.

Замечание. При чтении данных с клавиатуры необходимо всегда использовать операторы readln (х1, х2, ..., хn); (без указания имени файла).

 

5. 3. Вывод


Вывод производится с помощью операторов write или writeln.

Формат операторов: write (FV, x1, x2, ..., xn);

                                    writeln (FV, x1, x2, ..., xn);

Работа оператора: в файл с именем FV выводится информация из ячеек оперативной памяти x1, x2, ..., xn. Если FV отсутствует, вывод производится на экран монитора. При этом оператор write начинает вывод в то место компоненты файла, где был закончен прежний вывод, а оператор writeln начнет вывод с начала новой компоненты. Проиллюстрируем работу этих операторов на примере вывода данных на экран монитора.

Имеется фрагмент программы (напомним, что текст в скобках { } является комментарием и машиной не воспринимается);

  Var  a, b, c, d : integer;

Begin   a: = 25; b: = 38; c: = 126; d: = 256;

  writeln (a, b, c, d);                 {результат 2538126256}

  writeln (a, b); writeln (c, d);  {результат 2538 }  

                                                       {126256 }

   writeln (' a= ', a, ' b= ', b);     {результат a=25 b=38}

  {символы в апострофах   выводятся как строковая константа}

  write (a, b, c, d);                     {результат 2538126256}

  write (a, b); write (c, d);        {результат 2538126256}

  write (' a= ', a, '   b= ', b);    

  write ('   c= ', c, '   d= ',d);     {результат  a=25   b=38   c=126    d=256 }

 

5. 4. Некоторые возможности ввода-вывода


Оператор Readln; (без скобок, имени файла и списка ячеек памяти) вызовет остановку машины. Продолжение выполнения программы произойдет после нажатия кнопки Enter. Это очень удобно при просмотре каких-либо промежуточных результатов, например:

writeln ('a=  ', a); Readln;

Машина выведет а=. . . и остановится, после нажатия кнопки Enter выполнение программы продолжится.

Оператор writeln; вызовет переход к новой компоненте, в случае вывода на экран – к новой строке экрана. Рассмотрим фрагмент программы:

  Var  i, k;  integer;

Begin  i: = 126; k: = 1997;

  writeln ('i= ', i, '   k= ', k);   {результат i=126   k=1997}

   writeln (i: 3, k: 6);                 {результат 126    1997}

{числа, указанные после : определяют поле вывода, при выводе }

{данное "прижимается" в поле к правому краю 1997}

  writeln (i: 7, k: 8);                    {результат    ....126 ....1997}

Пример:

Program Prim23;Var r,pl:real;BEGIN      writeln('введите радиус шара'); readln(r);      pl:=4*pi*sqr(r);writeln('____________________________________________________');writeln('! площадь шара рад.r=',r:14,' = ',pl:14,'!');writeln('____________________________________________________');

readln; END.

В результате на экран выведется информация:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

! площадь шара радиусом  R=хххххххххххххх  =  ххххххххххххххх  !

- - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - -

Здесь ххххххххххххх - изображения чисел.

С помощью такого приема строятся различные таблицы.

При выводе величины Real в операторах write и writeln отводится поле шириной 18 символов для вывода данных с "плавающей точкой" в следующем формате..х.ххххххххххЕ*хх; здесь х – цифры, * – знак, который может быть '+' или '-', '.' – десятичная точка, отделяющая целую часть от дробной. Перед целой частью, в случае отрицательного данного, может стоять знак минус.

Таким образом:

в памяти машины     вид оператора        результат

R = 715.432                  writeln (R);               7.1543200000E+02

R = -1.919e+01            writeln (R);              -1.9190000000E+01

R = -567.986                 writeln (R);              -5.6798600000E+02

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.