Ostreykovsky_Laboratorny_praktikum_po_informa
.pdfs_{ |
\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