Информатика Алгоритмизация и программирование
СОДЕРЖАНИЕ: Министерство образования и науки Российской федерации Федеральное агентство по образованию Саратовский Государственный Технический УниверситетМинистерство образования и науки Российской федерации
Федеральное агентство по образованию
Саратовский Государственный Технический Университет
Кафедра «Информатика»
Курсовая работа
Тема: «Информатика. Алгоритмизация и программирование»
Выполнил
студент АМФ ПСМ-21
Зеленин-Адамов С.Г.
Номер зачетки 040106
Проверил ассистент
кафедры «Информатика»
Можаева Н.А.
Саратов 2006
СОДЕРЖАНИЕ
Список использованной литературы.. 21
Задача 1.
Выполнить расчет максимальной мощности двигателя автомобиля и расчет внешней характеристики двигателя при следующих начальных условиях:
mo , кг |
Vmax , км/ч | Kв кг/м3 |
F, м2 |
v | nN мин-1 |
Kv | тр |
6000 | 100 | 0,62 | 3,9 | 0,021 | 3000 | 1,2 | 0,88 |
РЕШЕНИЕ.
Максимальная мощность двигателя тягача по условию обеспечения заданной максимальной скорости рассчитывается по формуле:
, (1)
где Nemax - искомая максимальная мощность, кВт ;
Nv – мощность на режиме максимальной скорости, кВт ;
Kv – отношение частоты вращения коленчатого вала двигателя при максимальной скорости движения тягача к номинальной частоте вращения:
, (2)
nN - частота вращения коленчатого вала двигателя на режиме максимальной мощности (номинальная), мин-1
nv - частота вращения коленчатого вала двигателя при максимальной скорости автомобиля, мин-1 .
Мощность на режиме максимальной скорости определяется по формуле (3):
, (3)
где m0 - масса тягача, кг;
v - суммарный коэффициент сопротивления дороги;
V max – заданная максимальная скорость тягача;
тр – КПД трансмиссии;
Kв - коэффициент сопротивления воздуха, кг/м3 ;
F – лобовая площадь тягача, м2 .
Внешняя характеристика двигателя представляет собой зависимость мощности, крутящего момента от частоты вращения коленчатого вала двигателя при полном открытии заслонки карбюратора.
При известном значении максимальной мощности Nemax мощность в любой другой точке характеристики может быть найдена по формуле Лейдермана:
(4)
где Ne - мощность двигателя при произвольном значении частоты вращения коленчатого вала, кВт ;
Nemax - максимальная мощность двигателя, кВт;
n - заданная частота вращения коленчатого вала, мин-1 ;
nN - частота вращения коленчатого вала на режиме максимальной мощности, мин-1 ;
a,b,c - коэффициенты, принимаемые для бензиновых двигателей, равны 1.
Крутящий момент в любой точке характеристики определяется по формуле:
Me =9549 ( Ne / n ), (5)
Составим схему алгоритма. В алгоритме будет три блока: ввод исходных данных, расчет по формулам(1)-(5) и вывод результата.
По приведенной блок-схеме была составлена программа, листинг которой приведен ниже.
program lab1;
var m0,vmax,Ke,F,Fv,nN,Ky,n_tr:real; {peremennye - ishodnye dannye}
Nv,Ne_max,n_v,Ne,Me:real; {peremennye - rezultaty}
BEGIN
{-----------VVOD ISHODNYH DANNYH-----}
writeln (Vvedite ishodnye dannye:);
write (m0=);readln(m0);
write (Vmax=);readln(Vmax);
write (Ke=);readln(Ke);
write (F=);readln(F);
write (Fv=);readln(Fv);
write (nN=);readln(nN);
write (Ky=);readln(Ky);
write (n_tr=);readln(n_tr);
{----------RASCHET-------------------}
Nv:=2.725E-03*m0*Fv*Vmax/n_tr+2.14e-05*Ke*F*sqr(Vmax)*Vmax/n_tr;
Ne_max:=Nv/(Ky*(1+Ky*(1+Ky)));
n_v:=Ky*nN;
Ne:=Ne_max*(n_v/nN+sqr(n_v/nN)-sqr(n_v/nN)*n_v/nN);
Me:=9549*(Ne/n_v);
{----------VIVOD REZULTATA-----------}
writeln(Nv=,Nv);
writeln(Ne_max=,Ne_max);
writeln(n_v=,n_v);
writeln(Ne=,Ne);
writeln(Me=,Me);
End.
Решение этой же задачи было проведено в ЭТ Excel. Ниже представлен лист с решением и результатами.
Программу написанную на языке Паскаль копирую и вставляю в проект, затем исправляю существенные различия.
Задача 2.
Вычислить функцию , для
с шагом
.
№ | a | b | h | f(x) | ||
Начало отрезка | Конец отрезка | Шаг по отрезку | ||||
9 | -12 | 0 | 1 | ![]() |
РЕШЕНИЕ
Выполним схему алгоритма.
Эта схема была реализована на языке Паскаль в трех вариантах: были задействованы циклы с предусловием, с постусловием и с параметром. Листинги программ приведены ниже.
а) Цикл с постусловием
program lab 21;
var x,f:real;
begin
x:=-12;
repeat
if x-7 then f:=sin((3.14/12)*x)
else
if x=-3 then f:=2*cos((3.14/6)*x+(3.14/12))
else
f:=5* sin((3.14/12)*x);
writeln(f(,x:3:1,)=,f:6:2);
x:=x+1;
until x0;
readln;
end.
б) Цикл с предусловием
program lab 22;
var x,y:real;
begin
x:=-12;
while x=0 do
begin
if x-7 then y:= sin((3.14/12)*x)
else
if x=-3 then y:= 2*cos((3.14/6)*x+(3.14/12))
else
y:= 5* sin((3.14/12)*x);
writeln(f(,x:3:1,)=,y:6:2);
x:=x+1;
end;
readln;
end.
в) Цикл с параметром
program lab 23;
var
x,y,a,b,h,n1: real;
n ,i : integer;
begin
x:=-12;
a:=-12;b:=0;h:= 1;
n1:=(b-a)/h; n:=round(n1);
for i:=0 to n do
begin
if x-7 then y:= sin((3.14/12)*x)
else
if x=-3 then y:= 2*cos((3.14/6)*x+(3.14/12))
else
y:= 5* sin((3.14/12)*x);
writeln(f(,x:3:1,)=,y:6:2);
x:=x+1;
end;
readln;
end.
Решение этой же задачи было проведено в Excel. При вычислении функции использовалась логическая функция ЕСЛИ. Лист с решением задачи размещен ниже.
Программу написанную на языке Паскаль копирую и вставляю в проект, затем исправляю существенные различия.
Задача 3
Применить метод деления отрезка пополам на интервале и найти с точностью
корни уравнения
.
№ | ![]() |
![]() |
![]() |
9 | -3 | 0 | ![]() |
РЕШЕНИЕ
Алгоритм метода половинного деления заключается в следующем:
1. Выбрать нулевое приближение x0 =( a+ b)/2.
2. Если f( x0 )=0, то x0 очевидно является корнем уравнения.
3. Если f( x0 )0, то проверить условия f( x0 )Ч f( a)0 и f( x0 )Ч f( b)0 и выбрать тот из отрезков [ a, х0 ], [х0 , b], на границах которого выполнено одно из этих условий (т.е. функция f(х) имеет на концах отрезка противоположные знаки).
4. Выбранный отрезок вновь разделить пополам и вычислить значение x1 .
5. Для х1 проверить условие f(х1 )=0 и, если оно не выполняется, вернуться к п. 4.
6. Процесс деления отрезков пополам продолжить до тех пор, пока длина отрезка, на концах которого функция имеет противоположные знаки, не будет меньше e .
7. Принять, что условие f(
xk
)
= 0
выполнено, если
Ниже приведены блок-схема алгоритма и листинг программы на языке Паскаль.
Program lab3;
function f1 (x: real): real;
begin
f1:=cos(0.2*x*x-2);
end;
var
x,a,b,e: real;
iteraz: integer;
begin
write (Input a = ); readln (a);
write (Input b = ); readln (b);
write (Input e = ); readln (e);
iteraz:=0;
x:=(a+b)/2;
while (f1(x)0) and (abs(a-b)e) do
begin
x:=(a+b)/2;
iteraz:=iteraz+1;
if (f1(a)*f1(x))0 then b:=x
else a:=x;
writeln (n=, iteraz, x=, x:3:6, f(x)=, f1(x):3:6);
end ;
readln ;
end.
Решение этой задаче было проведено и в MSExcel. Лист с решением задачи и ответом приведен ниже.
Задача 4.
Вычислить определенный интеграл методом прямоугольников: или трапеций, на выбор.
,
,
,
, с точностью
.
Формула метода прямоугольников:
Формула метода трапеций: .
№ | ![]() |
![]() |
![]() |
9 | -3 | 0 | ![]() |
РЕШЕНИЕ
Алгоритм метода трапеций заключается в следующем:
1. Отрезок [a,b] разбивается на n равных частей.
2. Интеграл представляет собой площадь криволинейной трапеции, ограниченной осью OX, прямыми x=aи x=bи графиком функции. Очевидно, что интеграл от функции на отрезке равен сумме интегралов от этой же функции на каждом из маленьких отрезков, полученных в результате разбиения. Но на каждом из маленьких отрезков мы приближенно заменяем площадь криволинейной трапеции на площадь прямолинейной трапеции с основанием (высотой), равным длине маленького отрезка, и высотами (основаниями) f(xn
) и f(xn
+1
), где xn
– левая граница отрезка, xn
+1
– правая граница отрезка. Основание (высота трапеции) равно
(b-a)/n, и таким образом площадь трапеции равна
(f(xn
)+f(xn
+1
))(b-a)/2n. У нас всего n трапеций, причем каждые две соседние трапеции имеют одинаковые высоты (основания). Таким образом, в сумму каждое из f(xn
) кроме f(a) и f(b) войдет дважды, и таким образом весь интеграл вычисляется как , где
.
3. В методе трапеций не определен шаг (количество отрезков разбиения). Очевидно, что чем больше количество отрезков, тем более точным будет результат. Поэтому, задаем начальное значение n (например n=10) и вычисляем интеграл.
4. После этого удваиваем n и снова вычисляем интеграл (п. 2). Сравнивая полученные результаты, делаем вывод, достигнута ли требуемая точность.
5. Если результаты отличаются друг от друга меньше чем на , то требуемая точность достигнута. Если нет, то снова удваиваем n и вычисляем интеграл еще раз (возвращаемся к п. 4).
Ниже представлена блок-схема алгоритма и листинг программы.
program pr4;
uses crt;
var
h,a,b,S,dS,P,x,eps:real;
n,i:integer;
function f(x:real) : real;
begin
f:=0,1*sin(0.1*x+0.0025*x*x)/cos(0.1*x+0.0025*x*x);
end;
begin
clrscr;
writeln(input a,b,n,eps, please);
write(a);
readln(a);
write(b);
readln(b);
write(n);
readln(n);
write(eps);
readln(eps);
s:=0;
repeat P:=S;
h:=(b-a)/2;
S:=0;
x:=a;
for i:= 1 to n do
begin
x:=x+h;
S:=S+f(x);
end;
S := S*h;
write(n=,n:3, h=,h:12:9);
n:=n*2;
until abs(P-S)/(s*100)eps;
writeln;
writeln(Result S=,S:10:6, dS=,dS:12:9);
writeln;
writeln(Process ended);
writeln(Press any key to exit);
repeat until keypressed ;
end .
Данная задача была решена также в MSExcel. Лист с решением задачи приведен ниже. Требуемая точность была достигнута при n=10.
Программа выполненная на языке Microsoft Visual Basic 6.0
Private Sub Command1_Click()
Dim i As Integer
Dim x(1 To 40) As Double
Dim f(1 To 40) As Double
Dim f1(1 To 40) As Double
Dim s(1 To 40) As Double
a = -3 * 3.14
b = 0
e = 0.1
n = 40
h = (b - a) / n
i = 1
x(i) = a
f(i) = 0.1 * Tan(0.1 * x(i) + 0.025 * x(i) ^ 2)
f1(i) = f(i)
s(i) = h * f(i)
For i = 2 To n
x(i) = x(i - 1) + h
f(i) = 0.1 * Tan(0.1 * x(i) + 0.025 * x(i) ^ 2)
f1(i) = f1(i - 1) + f(i)
s(i) = h * f1(i)
Next
For i = 1 To n
Print s=; s(i)
Next
If Abs(s(n) - s(n - 1)) e Then Print удвойте n
End Sub
Private Sub Form_Load()
End Sub
Задача 5.
Дана прямоугольная матрица Ci
,
j
,
, размером . Если данная матрица является квадратной, найти сумму элементов главной диагонали, в противном случае найти сумму всех членов матрицы.
РЕШЕНИЕ
Составим схему алгоритма.
![]() |
Program Lab_5;
uses crt;
var
i,j,m,n:integer;
b,a : array[1..10,1..10] of real;
s : real;
begin
clrscr;
write (chislo stolbcov n=); Readln(n);
write (chislo strok m=); readln (m);
begin
if m=n then
s:=0;
for i := 1 to n do
begin
for j := 1 to m do
begin
write(a[,i,,,j,]=); readln(a[i,j]);
end;
writeln;
end;
begin
if i=j then s:=s+a[i,j];
writeln(s:6:3);
end;
if ij then
begin
s:=0;
for i := 1 to n do
begin
for j := 1 to m do
begin
s:=s+a[i,j];
end;
writeln(s:6:3);
end;
end;
readln;
end;
end.
Данная задача была решена также в MSExcel. Лист с решением задачи приведен ниже.
Программа выполненная на языке Microsoft Visual Basic 6.0
Private Sub Command1_Click()
Dim i, j, m, n As Integer
Dim s As Double
Dim c(1 To 50, 1 To 50) As Double
m = 3
n = 3
For i = 1 To m
For j = 1 To n
c(i, j) = 7 * i - j
Next
Next
s = 0
For i = 1 To m
For j = 1 To n
If m = n Then s = s + c(i, i) Else s = s + c(i, j)
Next
Next
Print s
End Sub
Private Sub Form_Load()
End Sub
Список литературы
1. Информатика: Базовый курс. / С. В. Симонович и др. СПб.: Питер, 2005
2. Острейковский В. А. Информатика: Учеб. для вузов. – М.: Высш. шк., 2000. – 511 с.: ил.
3. Алексеев Е. В. и др. Вычислительная техника и программирование. Практикум по программированию: Практ. пособие / В. Е. Алексеев, А. С. Ваулин, Г. Б. Петрова; Под ред. А. В. Петрова. – М.: Высш. шк., 1991. – 400 с.: ил
4. Глушаков С. В., Мельников И. В. Персональный компьютер: Учебный курс / Худож. оформитель А. С. Юхтман. – Харьков: Фолио; М.: ООО «Издательство АСТ», 2001. – 520 с. – (Домашняя б-ка).
5. Леонтьев В. Новейшая энциклопедия персонального компьютера. – М.: ОЛМА-ПРЕСС, 1999. – 640 с.
6. Козлов В.В., Можаева Н.А., Зуева Н.Г. Информатика. Алгоритмизация и программирование. Мет. Указания и задания к курсовой работе,2006. -32с