Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ostreykovsky_Laboratorny_praktikum_po_informa

.pdf
Скачиваний:
105
Добавлен:
07.06.2015
Размер:
7 Mб
Скачать

s_{

\g(x)

{ lg(2x)

lg(3s)

|

lg(nx)

 

2!

4!

6!

"

(2и)!'

На экран вывести значение суммы, число членов ряда, вошедших в сумму, и последний член ряда, вошедший в сумму. Сравнить получен­ ное на ЭВМ значение суммы членов ряда со значением, вычисленным по аналитическим формулам.

Методика выполнения работы

Program рг_4; Uses Crt;

Var s, eps, x, Un, Uk, y: Real; i:Integer;

Begin Clrscr;

x:=5; eps:=le-5; s:=l; i:=l;y:=-l*2; Un:=(Ln(x)/Ln(10))/y;

While Abs(Un)>eps Do Begin

s:=s+Un;

Uk:=Un;i:=i+l; y:= -y*(2*i-l)*(2*i); Un:=Ln(i*x)/Ln(10)/y;

End;

Writeln('s=',s:9:6,' n=', i,' U=', Uk: 9: 6); Readln;

End.

Результаты вычислений:

s = 0.690580 n = 5 U = 0.000032.

Работа №5. Использование итерационных операторов цикла

Задание. Составить программу для вычисления корней уравнения х4 - Зх2 - 8х = 29 на отрезке [1,9:2.0] с точностью eps = 10 ~* мето­ дом простой итерации. Примем за начальное значение х0=1.92. Вывести на экран корень уравнения до 5-го знака и число итера­ ций.

Методика выполнения работы

Заменим данное уравнение уравнением вида х= f(x) равносильным данному:

130

x = V29 + 3x2+8x;

Программа с использованием оператора цикла с постусловием:

Program pr_5a; Uses Crt;

Var xO,xl,eps:Real; n:Integer;

Begin Clrscr;

Readln(xO); eps: = l e - 4 ;

xl: = Exp(ln(29 +3*Sqr(xO) + 8*x0)*(l/4));

/i: = l;

Repeat

x O : = j c l ; •

xl: = Exp(Ln(29 + 3*Sqr(xO) + 8*x0)*(l/4)); n: = n + 1;

Until Abs(xQ - x\)<eps; Writeln('x = '^1:7:5,' n = \n - 1); Readln;

End.

Результат вычислений: х = 2.98770 n = 6.

Программа с использованием оператора цикла с предусловием:

Program pr_5b; Uses crt;

Var xO,xl,eps:Real; n:Integer;

Begin Clrscr; eps: = l e - 4 ; ^0: = 2.8;

X\:= Exp(Ln(29 +3*Sqr(x0) +8*x0)*(l/4));

/i: = l;

While Abs(xO-xl)>eps do Begin

x0: = xl;

xl: = Exp(Ln(29 + 3*Sqr(x0) + 8*x0)*(l/4)); n: = n + 1;

End; Writeln('x=',xl:10:8,' n=',n ); Readln;

End.

131

Работа № 6. Работа с массивами

Задание. Составить программу, сортирующую двумерный, случай­ ным образом сформированный массив, состоящий из заданного ко­ личества чисел в диапазоне от - 10 до 10, по возрастанию столбца, номер которого задается с клавиатуры (рис. 4.16).

Методика выполнения работы

Program pr_6;

 

 

 

Uses

crt;

 

 

 

Type

 

a = Array

[ 1.. 10] Of Integer;

 

Var

 

b:Array[1..10] Of a;

 

 

 

 

sr,sb,s,i,k,et,lyy':Integer;

 

Begin

\Угпе1п('Введите sr и sb');

 

 

 

Readln(sr,sb);

 

 

 

 

WritelnfBeeflHTe

значение

номера столбца, по которому

сортировать');

 

 

 

 

Reading);

 

 

 

 

Clrscr; Randomize;

 

 

For /: = 1 To sr Do

 

Fory:=l To sb Do

 

 

 

 

 

 

 

 

b[ij]- = Ю-Random (20);

 

 

 

 

Writeln('Исходный массив');

 

 

<^i=l,sr-l,l^X-

 

For /: = 1 To sr Do

 

 

 

 

Begin

 

 

|

et=b[i,s],k=n

 

For j : = 1 To sb Do

 

 

 

 

Write (b[iJ]A);

 

 

 

 

Writeln;

 

 

 

 

 

End;

 

 

 

 

For i: = 1 To sr-\

Do

 

|

et=bD,8],k-j 1

 

Begin

 

 

 

et: = b[ij];

k: = i;

 

 

 

 

 

 

- ^ l = l , s r , l 4 -

 

For j : = / + 1 To sr Do

 

 

 

 

if b\J,s]<et Then

y=b[k,l],b[k,l]=b[i,l],b[i,l]=y

Begin

 

 

 

 

 

et: = b[f,s];

 

 

^

 

k: =j;

 

 

 

End;

 

Рис. 4.16. Блок-схема алгоритма

For 1:=1 To sb Do

Begin

 

сортировки двумерного массива

 

132

y. = b[k,l];b[kj]: = b[i,l\; b[i,l\: =y;

End;

End;

Writeln('Отсортированный массив'); For /: = 1 To sr Do

Begin

For;: = 1 To sb Do Write (b[ij]:4); Writeln;

End; Readln;

End.

Работа № 7. Использование оператора выбора cas

Задание. Составить программу, имитирующую работу микрокальку­ лятора. Блок-схема алгоритма приведена на рис. 4.12.

Методика выполнения работы

Program pr_7;

 

Vaf

 

oper:Char;

{Описание символа арифметического действия}

jcj>,z:Real;

{Описание переменных, над которыми будут про­

изведены действия (операндов) и результата вычислений}

stop:Boolean;

{Признак ошибочной операции и останова}

Begin

 

stop: = False;

 

Repeat

{Оператор цикла}

Writeln; {Пустая строка — разделитель } Write('Bвeдитe х и у =');

Readln(x,y); Write('onepau,Hfl: '); Readln(oper);

Case oper Of {Выбор арифметического действия} '+': z:=x+y;

'-': z:=x~y; '*': z:=x*y; V: z:=xly\

Else stop:=True; End;

If Not stop Then Writelnf результат = ', z:6:3); Until stop

End.

133

Работа № 8. Использование пользовательской подпрограммы-функции

Задание. Составить программу для определения числа сочетаний

п\

С* =

:

, используя функцию при вычислении факториа-

т\*

(п-т)\

 

ла.

Методика выполнения работы

Program pr_8;

Var n,m:Byte; {переменная целого типа от 0 до 255(глобальные па­ раметры)}

nm:Longint; {переменная целого типа от -2147483648 до +2147483647}

Function Fact(k:Byte):Longint;{K — формальный параметр} {Функция вычисляет значение факториала}

Var />:Longint; {локальные параметры р и /} z':Byte;

Begin

/»: = i;

For i: = 1 To k Do p: =p*i;

Fact:=p;

End;

Begin

Writeln('Введите данные для определения числа сочетаний'); Readln(«,w);

ncm: = Fact(w) Div Fact(Tw) Div Fact(w-m);{целочисленное

деление}

Writeln('4Hcno сочетаний = ',ncm); Readln;

End.

Работа № 9. Использование пользовательской подпрограммы-процедуры

Задание № 1. Составить программу для вычисления полярных коор­ динат r-yjx2 + у2 и / = arctg(y/x) по прямоугольным координатам х и у (х > 0).

134

Методика выполнения работы

Program pr_9a; uses crt;

Var Xi,Yi,Ri,Fi:REAL; «,/:Integer;

Procedure Polar(jc,j>:Real;Var r/.Real); {Формальные параметры} Begin

F: = Arctan(y/x);

R: = Sqrt(x*x+y*yy,

End;

Begin

Clrscr;

 

Writeln('BBeflHTe количество точек');

 

Readln(n);

 

For /: = 1 To n do

 

Begin

 

\Угие1п('Введите значения хку\

i, '-й точки');

Readln(xi,yO'> Polar(jci,y/,ri^);{Фактические параметры} Write(ri:6:3,yz:10:3);

Writeln;

End;

Readln;

End.

Задание №2. Составить программу для вычисления полярных коор­ динат г = ^х2 + у2 и / = arctg(y/x) по прямоугольным координатам х и у (х > 0), используя процедуру без параметров.

Методика выполнения работы

Program рг_9Ъ;

Var XJ,R,F:real;

Procedure Polar;

Begin

F: = Arctan(y/x);

R: = Sqrt(x*x + y*yy,

End;

Begin

Readln(xj>);

Polar;

Write(r:6:3,/:10:3);

End.

135

Работа № 10. Операции с символами

Задание. Вывести на экран все 256 символов в виде таблицы 16x16. На месте служебных символов с кодами 7(звонок), 8(забой), ^та­ буляция), 10(следующая строка), 13(начало строки), 26(конец тек­ ста) и 27(Esc) поставить крестики.

Методика выполнения работы

Program рг_№;

 

Var

 

/V: Byte;

 

с: Char;

 

Begin

 

WriteLn;

{Пустая строка в начале}

Write(' ');

 

For у. = 0 to 15 Do

 

Write(/:4);

{Номера столбцов}

WriteLn;

 

For /: = 0 to 15

 

Do Begin

 

Write(/*16:3,' ');

{Номер строки* 16}

For j : = 0 To 15

Do

Begin

 

{Символ, который нужно вывести в этом месте таблицы} c: = Chr(/*16+y);

If ((c>=#7)And(c<=#10)) Or (c=#13) Or (c=#26) Or (c=#27)

Then

{нельзя показать}

Write('XXX':4)

 

Else

{можно показать}

Write(c:4);

 

End;

 

WriteLn;

{Курсор — в начало следующей строки}

End; Readln;

 

End.

 

Работа №11. Операции со строками

Задание. Дана строка символов, состоящая из слов, разделенных пробелами. Найти среднюю длину слова.

136

Методика выполнения работы

Основная проблема в этой задаче — определить количество слов и длину каждого из них. Что считается началом слова? Ситуация, ко­ гда в паре соседних символов левый — пробел, а правый — любой другой символ. В конце слова — наоборот. Необходимо просмотреть строку в поисках таких пар и подсчитать количество слов и их сум­ марную длину:

Program pr_ll; Var

s: String;

i, n, sum, last: Byte;

Begin

WritefBeeflHTe слова, разделенные пробелами: '); ReadLn(s);

{Уберем ведущие пробелы} While (Length(s)>0) And (s[l]=' ') Do

Delete(s,l,l); If Length(s}=0 Then

WriteLn('Ошибка! Строка не содержит слов!') Else begin

п: = 0;{количество слов}

last: = 0;

{позиция начала слова}

sum: = 0;

{суммарная длина слов}

s: = s+' ';

{дописываем пробел в конец строки,}

 

{чтобы и у последнего слова был конец}

{просматриваем строку с первого до предпоследнего символа} For I:=l To Length(s)-1

Do Begin

If (s[I]=' ') And (s[I+l]o' ') {начало слова} Then Begin

last:=I;{запоминаем позицию}

End;

Else

If (s[I+l]=' ') And (s[I]o' ') {конец слова} Then Begin

n: = n + 1;

sum: = sum + I-last;

End;

137

WriteLnf Средняя длина слова ',5ыт/и:7:3);

End.

Работа № 12. Операции с записями

Задание. Сформировать базу данных, состоящую из 10 записей по 4 поля в каждой: фамилия, имя, год рождения и телефон. Вывести на экран записи, в которых содержатся сведения об Иванове.

Методика выполнения работы

Program pr_12; Uses Crt; Type

person = Record sname,name:String[ 14]; gr.Integer; tele:String[8]; End;

Var spisok:Array[1..10] Of Person; i:Integer;

Begin

For i:=l To 10 Do Begin

With spisok[i] Do Begin

Writeln('<X>aMRnM'); Readln(sname); Writeln('имя'); Readln(name); Writeln(Tofl рождения'); Readln(gr); \Угке1п('Телефон'); Readln(tele);

End;

End;

WritelnfCnHCOK Фамилия Имя Год рождения Телефон'); For i:=l To 10 Do

Begin

With spisok[i] Do

If 8пате='Иванов' then

Writeln (sname:15,name:10, gr:8,tele:10); Writeln;

End;

Readln

End.

138

Работа № 13. Множества

Задание. Даны 2 множества Х\ и XI, содержащие элементы типа Byte. Сформировать новое множество 7, равное разности множеств Х\ и XI, и выделить из него подмножество 71, содержащее эле­ менты, делящиеся без остатка на 5 и на 3. На экран вывести мно­ жества и их мощность}

Методика выполнения работы

Program pr_13; Uses Crt;

Type SetByte = Set Of Byte; Const N=10;

Var

X\ X2,Y,Yl :SetByte;

M,Ml,*',A,B:Byte;

Procedure ShowSet(S:SetByte;Str.String;Ms:Byte); Var T:Byte;

Begin

WritelnfNta^ecTBO ',Str,' (мощность — ',Ms,') :'); For T:=0 To 255 Do If T In S Then Write(T,' '); Writeln;

End;

Begin

X\: = []-X2: = [];Y\: = [];

M = 0;M1: = 0;

{m,m\ мощности множеств 7,71}

For i: = 1 To N Do

 

Begin

 

ClrScr;

\Угпе('Введите ',i,'-M элемент множества XI =>'); Reading); X\ :=X1+[B];

ClrScr;

\Угие('Введите 'Д,'-й элемент множествах* =>'); Readln(B); X2:=X2+[B];

End;

Y:=Xl-X2;

For A: = \ To 255 Do If A In 7 Then Begin

IncCM);

If (A Mod 3=0) and (A Mod 5=0) Then Begin

139

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]