
- •Вопрос №1.Цель, предмет и задачи изучения дисциплины.
- •Вопрос №3. Технология выполнения программ на языке тр в ide
- •Вопрос №4. Принципы алгоритмизации и программирования.
- •Вопрос №5. Этапы решения задач на эвм.
- •Вопрос №6. Алгоритм. Сущность, свойства.
- •Вопрос №7. Методы преобразования алгоритмов.
- •Вопрос №8. Основные приемы разработки алгоритмов.
- •Вопрос №9. Общая структура цикла и получение из нее структур циклов на языке Турбо Паскаль
- •Вопрос №14.
- •Int(X) – значением функции является целая часть вещественного числа X.
- •Вопрос №15. Структура программ и подпрограмм.
- •Вопрос№18. Обработка массивов.
- •Вопрос №19. Пример обработки текстов.
- •Вопрос №20. Порядок обработки текстовых файлов.
- •Вопрос №21. Стандартные файлы ввода-вывода.
- •Вопрос №22. Процедуры и функции ввода-вывода. Типы данных и форматы вывода.
- •Вопрос №23. Организация и использование процедур в языке Паскаль.
Вопрос №7. Методы преобразования алгоритмов.
Необходимы, чтобы преобразовывать неструктурированные алгоритмы в структурированные.
Дублирование кодов
Метод основывается на дублировании (повторении) тех частей алгоритма, вход в которые осуществляется из нескольких мест алгоритма.
Если часть дублирования большая или очень часто вызывается, то необходимо оформить ее в виде подпрограммы.
Введение булевой переменной(для циклов)
Пример программы:
Program TestA2;
Var A:array[1..10] of real
S:Real;
i:{1..11}Byte;
Povtor: Boolean;
Begin
{ввод массива А}
S:=0;i:=1;
Povtor:=True;
While Povtor do
If A[i]<0 then Povtor:=FALSE
Else
Begin
S:=S+A[i];
i:=i+1;
if I>10 then Povtor:=FALSE;
end;
writeln(S)
end.
Использование переменной состояния (подходит для любых алгоритмов)
Алгоритм применения переменной состояния
Все элементы неструктурированной схемы пронумерованы
Вводится переменная целого типа (н-р Sost:=1)
Si-> Si+Sost:=next N2
Элемент решения заменяется состоянием
Исходная схема разбивается на элементарные операции
Н-р.
While sost<>o do
Case sost of
1:..
2:…
……
End;
Уменьшается количество ошибок, для любого алгоритма, программа отлаживается наглядно
Пример:
While sost<>0 do
Case sost of
1: if p1 then sost:=3 else sost:=2;
2: begin s1; sost:=4; end;
3:if p2 then sost:=5 else sost:=4;
4:if p3 then sost:=0 else sost:=2;
5:begin s2;sost:=0; end;
End;
Вопрос №8. Основные приемы разработки алгоритмов.
Нахождение конечных сумм и произведений
Сумма:
Sum:=0;
For i:=1 to N do
Sum:sum+A[i];
Произведение:
P:=1;
For i:=1 to N do P:=P*A[i];
Но это используется, когда надо отдельно посчитать произведение.
А
вот
– нужно считать вместе, в противном
случае будет ошибка, произойдет
переполнение памяти.
Fact:=1;
Readln(N);
For i:=1 to N do
Fact:=Fact*I;
Writeln(Fact);
Вычисление бесконечных сумм и произведений.
Это нужно знать!:
А) Возведение в степень заменяется последовательным умножением
Б) Числитель и знаменатель считаются вместе, не по отдельности
В) используются операционные методы
Г)конец цикла определяется по относительной величине (погрешности):
Example. Найти с определенной погрешностью
Program qq; uses crt;
Var n:Integer;
A,S,x,Eps:Real;
Begin
Clrscr;
Writeln(‘введите x,Eps’);Readln(x,Eps);
S:=0;A:=1;n:=0;
Repeat
S:=S+A;
N:=n+2;
A:=A*(-x*x)/(n*(n-1));
Until ABS(-x*x/n*(n*(n-1))<Eps; {a/s<Eps}
Writeln(S);
End.
Вычисление полинома (многочлена)
S:=0;
For i:=n downto 0 do
S:=s*x+A[i];
Примером вычисления полинома может быть перевод строки в число:
‘129’
‘1’-1 s:=s*10+1 и т.д.
Поиск минимума, максимума
Пример программы поиска максимального элемента в строке чисел вводимых с клавиатуры:
Program found;
Var msx,chislo:real;
Begin
Read(max);
While not eoln do begin
Read(chislo);
If chislo>max then max:=chislo;
End;
Writeln(max);
End.
Уточнение корня делением пополам:
Постановка задачи: например:
Вычислить площадь треугольника по формуле Герона
Выбираем способ нахождения корня.
Выбрали уточнение корня делением пополам.
Составляем алгоритм
Текст процедуры:
procedure koren(x:Integer;Eps:Real;var y:Real);
begin
y:=x/2;
repeat
y:=y+0.5*(x/y-y);
until ABS(sqr(y)-x)<Eps;
end;
Пример самой программы вычисляющей квадратный корень:
program sqrt_y;
var x:Integer;
Eps,y:Real;
procedure koren(x:Integer;Eps:Real;var y:Real);
begin
y:=x/2;
repeat
y:=y+0.5*(x/y-y);
until ABS(sqr(y)-x)<Eps;
end;
begin
readln(x,Eps);
koren(x,Eps,y);
writeln(y);
writeln(sqrt(x));
readln
end.