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

информатика_книги / Информатика. Теория и практика_Острейковский В.А, Полякова И.В_2008 -608с

.pdf
Скачиваний:
159
Добавлен:
06.06.2015
Размер:
7.43 Mб
Скачать

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

Цель работы: изучить правила использования итерационных операторов цикла в среде Турбо Паскаль.

Задание: составить программу для вычисления корней уравнения x4 – 3x2 8x = 29 на отрезке [1,9 : 2.0] с точностью eps = = 10–4 методом простой итерации. Примем за начальное значе- ние x0 = 1.92. Вывести на экран корень уравнения до пятого знака и число итераций.

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

заменим данное уравнение уравнением вида x = f(x), равно-

сильным данному: x = 429 3x2 8x .

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

Program pr_5à; Uses Crt;

Var x0, x1, eps: Real; n: Integer;

Begin Clrscr;

Readln(x0); eps:= 1e-4;

x1:= Exp(ln(29 +3*Sqr(x0) +8*x0)*(1/4)); n:= 1;

Repeat x0:= x1;

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

Until Abs(x0-x1) < eps; Writeln(' x=', x1:7:5, ' n=', n-1); Readln;

End.

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

511

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

Program pr_5b; Uses Crt;

Var x0,x1,eps: Real; n: Integer;

Begin Clrscr;

eps:= 1e-4; X0:= 2.8;

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

While Abs(x0-x1)>eps do Begin

x0:= x1;

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

End;

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

End.

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

Цель работы: изучить правила работы с массивами в среде Турбо Паскаль.

Задание: составить программу, сортирующую двухмерный, случайным образом сформированный массив, состоящий из заданного количества чисел в диапазоне от –10 до 10, по возрастанию столбца, номер которого задается с клавиатуры.

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

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, l, y,j: Integer; Begin

Writeln('Введите sr и sb');

512

Readln(sr,sb);

Writeln('Введите значение номера столбца, по которому сортировать');

Readln(s);

Clrscr;

Randomize;

For i:= 1 To sr Do For j:= 1 To sb Do

b[i,j]:=10-Random (20); Writeln('Исходный массив');

For i:= 1 To sr Do Begin

For j:=1 To sb Do Write (b[i,j]:4);

Writeln;

End;

For i:= 1 To sr-1 Do Begin

et:=b[i,s]; k:=i; For j:=i+1 To sr Do

if b[j,s]<et Then Begin

et:=b[j,s];

k:=j;

End;

For l:=1 To sb Do Begin

y:=b[k,l];

b[k,l]:=b[i,l];

b[i,l]:=y;

End;

End;

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

Begin

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

End;

Readln;

End.

513

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

Цель работы: изучить правила использования оператора выбора case в среде Турбо Паскаль.

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

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

Program pr_7;

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

x,y,z:Real; {Описание переменных, над которыми будут произведены действия (операндов), и результата вычислений}

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

Begin

stop:=false;

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

Writeln; {Пустая строка-разделитель}

Write('Введите x и y='); Readln(x,y); Write('операция: '); Readln(oper);

Case oper Of {Выбор арифметического действия}

'+': z:= x+y; '—': z:= x-y; '*': z:= x*y; '/': z:= x/y;

Else stop:=true; End;

If Not stop Then

Writeln(' результат = ',z:6:3); Until stop

End.

514

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

Цель работы: изучить правила работы с пользовательской подпрограммой-функцией в среде Турбо Паскаль.

Задание: составить программу для определения числа соче-

таний C

m

n !

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

n

=

 

m ! * n m !

 

факториала.

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

Program pr_8;

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

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

{Функция вычисляет значение факториала}

Function Fact(k:Byte):Longint;

{K — формальный параметр}

Var p: Longint; {Локальные параметры p и i} i:Byte;

Begin p:= 1;

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

End;

Begin

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

Readln(n,m);

ncm:=Fact(n) Div Fact(m) Div

Fact(n-m); {Целочисленное деление}

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

End.

515

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

Цель работы: изучить правила работы с пользовательской подпрограммой-процедурой в среде Турбо Паскаль.

Задание 1: составить программу для вычисления полярных

координат r = x2 y2 è f = arctg (y/x) по прямоугольным координатам x è y (x > 0).

Методика выполнения задания:

Program pr_9a; Uses Crt;

Var Xi, Yi, Ri, Fi: Real; n, i: Integer;

Procedure Polar(x, y: Real; Var r, f: Real);

{Формальные параметры}

Begin

F:= Arctan(y/õ); R:= Sqrt(x*x+y*y);

End; Begin

Clrscr;

Writeln('Введите количество точек'); Readln(n);

For i:=1 To n Ddo Begin

Writeln('Введите значения x и y ', i,'-й точки'); Readln(xi,yi);

Polar(xi,yi,ri,fi); {Фактические параметры}

Write(ri:6:3, fi:10:3); Writeln;

End;

Readln;

End.

516

Задание 2: составить программу для вычисления полярных

координат r = x2 y2 è f = arctg(y/x) по прямоугольным координатам x è y (x > 0), используя процедуру без параметров.

Методика выполнения задания:

Program pr_9b;

Var X, Y, R, F: real;

Procedure Polar;

Begin

F:=Arctan(y/õ);

R:=Sqrt(x*x+y*y);

End;

Begin

Readln(x,y);

Polar;

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

End.

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

Цель работы: изучить операции с символами в среде Турбо Паскаль.

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

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

Program pr_10; Var

i, j: Byte; c: Char;

Begin

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

Write(‘ ’);

For j:= 0 to 15 Do

Write(j:4); {Номера столбцов}

517

WriteLn;

For i:= 0 to 15 Do Begin

Write(i*16:3, ‘ ’); {Номер строки*16}

For j:= 0 To 15 Do Begin

{Символ, который нужно вывести в этом месте таблицы}

c:= Chr(i*16+j);

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. Операции со строками

Цель работы: изучить операции со строками в среде Турбо Паскаль.

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

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

Program pr_11; Var

s: String;

518

i, n, sum, last: Byte; Begin

Write(‘Введите слова, разделенные пробелами: ’); ReadLn(s);

{Уберем ведущие пробелы}

While (Length(s)>0) And (s[1] = ‘ ’) Do Delete(s, 1, 1);

If Length(s) = 0 Then

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

n:= 0;{Количество слов}

last:= 0;{Позиция начала слова} sum:= 0;{Суммарная длина слов}

s:= s + ‘ ’;{Дописываем пробел в конец строки,} {Чтобы и у последнего слова был конец}

{Просматриваем строку с первого до предпоследнего символа}

For I:= 1 To Length(s) — 1 Do Begin

If (s[I] = ‘ ’) And (s[I+1] <> ‘ ’)

{Начало слова}

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

Else

If (s[I+1] = ‘ ’) And (s[I] <> ‘ ’)

{Конец слова}

Then

Begin

n:= n + 1;

sum:= sum + I — last; End

End;

WriteLn(‘Средняя длина слова ’, sum/n:7:3); End;

End.

519

Работа ¹ 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:= 1 To 10 Do Begin

With spisok[i] Do Begin

Writeln(‘Фамилия’); Readln(name); Writeln(‘Имя’); Readln(name); Writeln(‘Год рождения’); Readln(gr); Writeln(‘Телефон’); Readln(tele);

End;

End;

Writeln(‘Список Фамилия Имя Год рождения Телефон’); For i:= 1 To 10 Do

520

Соседние файлы в папке информатика_книги