- •Введение
- •ЗАДАНИЕ 1 Организация Ввода-вывода
- •ЗАДАНИЕ 3 Целочисленные выражения
- •ЗАДАНИЕ 4 Решение уравнений и неравенств
- •ЗАДАНИЕ 5 Символьная обработка
- •ЗАДАНИЕ 6 Обработка одномерных массивов
- •ЗАДАНИЕ 8 Вычисление определенного интеграла
- •ЗАДАНИЕ 9 Электронные таблицы Excel
- •ЗАДЕНИЕ 11 Метод Рунге-Кутты решения дифференциальных уравнений
- •Задание 12 Математический пакет Mathcad
- •Литература
26
Варианты заданий обработки чисел
Таблица 5.1
Вариант |
N |
P |
L |
Q |
1 |
3 |
11 |
3 |
7 |
2 |
6 |
8 |
4 |
6 |
3 |
5 |
7 |
5 |
5 |
4 |
8 |
6 |
8 |
4 |
5 |
9 |
4 |
9 |
3 |
6 |
3 |
13 |
10 |
9 |
7 |
3 |
11 |
11 |
5 |
8 |
4 |
9 |
7 |
4 |
9 |
5 |
2 |
2 |
3 |
10 |
3 |
6 |
9 |
9 |
11 |
7 |
5 |
5 |
4 |
12 |
8 |
3 |
6 |
9 |
Варианты заданий обработки текста
1.Определить, сколько раз в тексте встречается буква В и сколько – С.
2.Заменить в тексте все буквы А на О и букву Д на Т.
3.В тексте убрать лишние пробелы, оставив по одному.
4.Подсчитать, сколько слов в тексте имеют удвоенное сочетание букв.
5.Определить количество символов в самом длинном слове и указать его порядковый номер.
6.Разбить последовательность символов на слова, оканчивающиеся буквой
А.
7.Определить, входит ли в группу символов, заключенных в скобки буква А.
8.Подсчитать, сколько слов в тексте имеют сочетание букв "жи", "ши".
9.В тексте убрать все двойные буквы, оставив по одной.
10.Подсчитать количество букв в каждом слове и найти самое короткое.
11.Разбить слова длиннее восьми букв на короткие не более восьми в каж-
дом.
12.Заменить в тексте знаки ' + ' на '–' и подсчитать количество замен.
ЗАДАНИЕ 6 Обработка одномерных массивов
Цель задания
1.Изучение приемов программирования задач с расчетом и выводом таблицы и графика функции.
2.Изучение способов формирования и обработки массивов.
27
3. Приобретение навыков использования файлов для хранения результатов расчетов.
Постановка задачи
1.Составить программу для расчета и вывода в файл таблицы функции y( x ) при изменении x в пределах от А до В, разбивая отрезок на 50 участков.
2.Предусмотреть в программе занесение значений функции и аргумента в одномерные массивы и выполнение их обработки в соответствии с вариантом задания.
3.Вывести на экран график функции, используя масштабирование.
Содержание отчета
1.Постановка задачи.
2.Описание алгоритма формирования и обработки массивов.
3.Текст программы и результаты ее выполнения.
Пример программы, которая вычисляет значения функции y( x ) = a sin( kx + b ) + 2kx
при k = p / 10 ; b = p / 4 ;a = 10
в интервале от А до , Вкоторые считываются из файла'o.dat' вместе с значениями Q и P, например: ( -50 30 -6 10); заносит значения x , y в соответствующие массивы; определяет интервалы возрастания функции, если ее значения заключены между Q и P("в трубке" QP); выводит результаты расчетов в файл 'o.rez' ; строит график функции.
program Odn1_Mass;{Определить интервалы возрастания функции в трубке [p,q]}
uses Crt,Graph; const N=50; var F1,F2:text;
var X,Y: array [0..N] of real;A,B,H,P,Q,MaxX,MaxY,Mx,My: real; C,Xr,Yr: array[0..N] of integer;Qr,Pr:integer;
K,I:integer;
var DriverVar,ModeVar,Ec: integer; function Yx(D:real): real;
const K=Pi/10;Bet=Pi/4;A=10.0; begin
Yx:=A*Sin(K*D+Bet)+2*D*K;
end;
28
procedure Init; begin
DriverVar:=Detect;
InitGraph(DriverVar,ModeVar,'');
Ec:=GraphResult;
if Ec <> grOK then Writeln('Графическая системная ошибка'); Halt(1)
end;
begin ClrScr;
Assign (F1,'o.dat');
Assign (F2,'o.rez'); Reset(F1); Rewrite(F2); Readln(F1,A,B,Q,P); H:=(B-A)/N;
for I:=0 to N do begin X[I]:=A+H*I; Y[I]:=Yx(X[I]); end;
for I:=0 to N-1 do begin
C[I]:=0;
if (Y[I]>Q) and (Y[I]<P) then if (Y[I+1]>Y[I]) then C[I]:=1;
end; |
|
|
|
|
C[N]:=0; |
|
|
|
|
if (Y[N]>Q) and (Y[N]<P) |
then |
|
||
if Y[N]>Y[N-1] then C[N]:=1; |
||||
for I:=1 to 45 do |
|
|
|
|
Write(F2,'-'); |
|
|
|
|
Writeln(F2); |
|
|
|
|
Writeln(F2,' | |
I | |
X |
| Y |
| C |'); |
for I:=1 to 45 do |
|
|
|
|
Write(F2,'-'); |
|
|
|
|
Writeln(F2); |
|
|
|
|
for I:=0 to N do |
|
|
|
|
Writeln(F2,' | |
',I:4,' |
| ',X[I]:8:3,' | |
',Y[I]:8:3,' | ',C[I]:4, |
|
' | '); |
|
|
|
|
for I:=0 to 45 do Write(F2,'-'); Writeln(F2); K:=0;
for I:=0 to N do
29
if (C[I]>0) then begin
if (C[I]<>C[I-1]) or (I=0) then begin
K:=K+1;
Write(F2,' ',K, '- интервал возрастания функции в трубке [', X[I]:8:4);
end; end else
if C[I-1]>0 then Writeln(F2,'...',X[I-1]:8:4,']');
if (C[N]>0) and (C[N-1]>0) then Writeln(F2,'...',X[N]:8:4,']');
if K=0 then Writeln(F2,' Интервалов возрастания функции в трубке нет'); Close(F1);
Close(F2);
MaxX:=0;
MaxY:=0;
for I:=0 to N do begin
if Abs(X[I])>MaxX then MaxX:=Abs(X[I]);
if Abs(Y[I])>MaxY then MaxY:=Abs(Y[I]);
end;
DriverVar:=Detect;
InitGraph(DriverVar,ModeVar,''); setlinestyle (0,0,3); setbkcolor(1);
setcolor(8);
Line(10,GetmaxY div 2 ,GetmaxX-10,GetMaxY div 2); Line(GetMaxX div 2,GetmaxY -10, GetMaxX div 2,10); Mx:=(GetmaxX div 2-20)/MaxX;
My:=(GetmaxY div 2-20)/MaxY; for I:=0 to N do
begin
Xr[I]:=Round(X[I]*Mx)+GetMaxX div 2; Yr[I]:=-Round(Y[I]*My)+GetmaxY div 2;
end;
setcolor(2);
for I:=0 to N-1 do begin
Circle(Xr[I],Yr[I],2);
LIne(Xr[I],Yr[I],Xr[I+1],Yr[I+1]);
end;
30
setlinestyle (3,0,1); Qr:=-Round(Q*My)+GetmaxY div 2; Pr:=-Round(P*My)+GetmaxY div 2; setcolor(4); Line(10,Qr,GetmaxX-10,Qr); Line(10,Pr,GetmaxX-10,Pr);
Readln;
Init;
CloseGraph;
end.
В результате работы программы в файл будет выведена следующая таблица с комментариями (в массиве С находится единица, если приращение функции больше нуля и значение находится в трубке QP и ноль в противном случае):
Таблица 6.1
| |
I |
| |
X |
| |
Y |
| |
C |
| |
--------------------------------------------- |
||||||||
| |
0 |
| |
-50.000 |
| |
-38.487 |
| |
0 |
| |
| |
1 |
| |
-48.400 |
| |
-40.014 |
| |
0 |
| |
|
2 |
| |
-46.800 |
| |
-39.164 |
| |
0 |
| |
| |
3 |
| |
-45.200 |
| |
-35.901 |
| |
0 |
| |
|
………………………. |
|
|
|
||||
| |
45 |
| |
22.000 |
| |
23.700 |
| |
0 |
| |
| |
46 |
| |
23.600 |
| |
24.237 |
| |
0 |
| |
| |
47 |
| |
25.200 |
| |
22.447 |
| |
0 |
| |
| |
48 |
| |
26.800 |
| |
19.020 |
| |
0 |
| |
| |
49 |
| |
28.400 |
| |
15.054 |
| |
0 |
| |
| |
50 |
| |
30.000 |
| |
11.778 |
| |
0 |
| |
---------------------------------------------- |
|
1- интервал возрастания функции в трубке [-19.6000... |
-18.0000] |
2- интервал возрастания функции в трубке [ -3.6000... |
1.2000] |
3- интервал возрастания функции в трубке [ 12.4000... |
17.2000] |
Графическое изображение выводится на экран монитора.
Варианты задания:
1. Определить первый интервал возрастания функции на отрезке
[-1,5…20]:
y = e- x sin x
20
31
2. Определить последний интервал возрастания функции на отрезке [0…20]:
x
y= 70e10 sin x ;
3.Определить первый интервал возрастания функции в трубке
[-2.5…1.4] на отрезке [-5…20]:
y = 10 sin x ;
4
4. Определить последний интервал возрастания функции в трубке
[-5…4] на отрезке [-5…60]:
æ |
x |
|
p ö |
|
|||
y = 10 sinç |
|
+ |
|
|
÷ |
; |
|
3 |
3 |
||||||
è |
|
ø |
|
5. Определить второй интервал положительных значений функции в трубке [- 5…3] на отрезке [-5…40]:
y= 10 cos( x / 7 );
6.Определить предпоследний интервал положительных значений функции в трубке [-5…1] на отрезке [0…40]:
y = -3 - 5 sin x ;
2
7.Найти первый интервал выпуклости функции на отрезке [-20…10]:
у= cos( x + p / 4 ) + 0 ,5 x
8.Найти первый интервал вогнутости функции на отрезке [-10…30]:
у = cos( 2 x ) + x
9.Найти последний интервал выпуклости функции на отрезке [-20…4]:
у= 2 sin( x + p / 2,5 ) + x
10.Найти второй интервал выпуклости функции на отрезке [-20…10]:
у= 3 cos( x + p / 3 )
11.Найти первый интервал убывания функции на отрезке [0…20]:
у= 3 cos( x + p / 5 ) + 1,5x
12.Найти последний интервал убывания функции в трубке[0.3…1] на отрезке [- 20…10]:
у= 3 cos( x + p / 2 ) + x
ЗАДАНИЕ7 Сортировка массивов
Цель задания
1.Получение практических навыков работы с массивами
2.Знакомство с алгоритмами упорядочения.
32
Постановка задачи
Для массива чисел выполнить указанные действия и перестановки и вывести результаты в числовой и графической форме.
Содержание отчета
1. Постановка задачи для конкретного варианта.
2.Текст программы и результаты ее выполнения.
3. Результаты тестирования.
Методические указания
1.Перед выполнением варианта задания ознакомится с программами сортировки массивов по невозрастанию (по материалам лекций).
2.Исходные данные должны содержать числа с разными знаками.
Пример программы, которая формирует массив из 20 случайных чисел больших А=-10 и меньших С=100 и перемещает в его начало все элементы модуль которых меньше В=10.
program Sort_Mass; uses Crt,Graph; const
Q=-10;
P=10;
N=20;
M=110;
var DriverVar,ModeVar,Ec: integer;
var A,Ar: array[1..N] of integer; MaxA,Ma: real; D,I,J,H,Qr,Pr: integer;
begin ClrScr;
Randomize;
Writeln(' Исходный массив'); for I:=1 to N do
begin
A[I]:= Random(M)-10; Write(A[I],' ');
end;
Writeln;
for I:=2 to N do
if Abs(A[I]) < P then begin
D:=A[I];
J:=I; repeat
A[J]:=A[J-1]; J:=J-1;
until J<=1;
33
A[1]:=D;
Writeln('Массив после перестановки элемента с номером ',I); for H:=1 to N do Write(A[H],' ');
Writeln;
end;
MaxA:=0;
for I:=0 to N do begin
if Abs(A[I])>MaxA then MaxA:=Abs(A[I]);
end;
DriverVar:=Detect;
InitGraph(DriverVar,ModeVar,''); setlinestyle (0,0,3); setbkcolor(1);
setcolor(8);
Line(10,GetmaxY div 2,GetmaxX-10,GetMaxY div 2); Ma:=(GetmaxY div 2-40)/MaxA;
for I:=1 to N do begin
Ar[I]:=-Round(A[I]*Ma)+GetMaxY div 2; end;
setcolor(2);
for I:=1 to N do begin
SetFillstyle(1,3); Bar(I*30,Ar[I],I*30+10,GetMaxY div 2);
end;
setlinestyle (3,0,1); Qr:=-Round(Q*Ma)+GetmaxY div 2; Pr:=-Round(P*Ma)+GetmaxY div 2; setcolor(4); Line(10,Qr,GetmaxX-10,Qr); Line(10,Pr,GetmaxX-10,Pr);
Readln;
CloseGraph;
end.
Варианты задания
Во всех вариантах построить диаграммы, отражающие величину элементов массива на экране:
1. Сформировать массив из 30 элементов, разность между элементами которого меньше А=5 и переставить в начало все элементы меньшие В=4.