Автор работы: Пользователь скрыл имя, 18 Июня 2012 в 10:07, шпаргалка
Работа содержит ответы на 27 вопросов по дисциплине "Основы программирования".
Program Summa; { вычисление S=1+1/2+..+1/n }
Var i,n : Integer;
s : Real;
Begin
Write('N = '); Readln(n);
s:=0;
i:=1;
While i<=n Do Begin
s:=s+1/i;
i:=i+1
End;
Writeln('S = ',s:8:3);
End.
13.цикл с постусловием. Оператор цикла Repeat. Формат оператора: Repeat <оператор1> . . . <;операторn>
Until <условие>; <условие> - выражение логического типа. Операторы, между Repeat и Until, являются телом цикла. Тело цикла повторяется до тех пор, пока <условие> остается ЛОЖНЫМ (False). Оператор цикла Repeat называют оператором цикла с постусловием. Здесь тело цикла всегда выполняется хотя бы один раз.
Var X; integer; Sum: real;
Begin
Sum:=0;
repeat
Write('Значение Х= ');
Readln(X);
if X <> 999 then Sum:= Sum+X;
until X = 999;
Writeln('Сумма введенных чисел ', Sum);
end.
14.вычисление сумм и произведений в цикле. Знакочередующиеся суммы. Применение рекуррентных соотношений для вычисления общего члена последовательности. В алгоритмах вычисления сумм, произведений, количеств, пределов, последовательностей особенностью является содержание тела цикла. При вычислении суммы к значению суммы многократно прибавляются новые значения слагаемых. При вычислении произведения значение многократно помножается на очередной сомножитель. Рекуррентным соотношением будем называть такое, в котором очередное значение некоторой переменной выражается через предыдущее значение этой же переменной. В основе практически любого циклического алгоритма лежит то или иное рекуррентное соотношение. Наиболее распространены рекуррентные соотношения для суммирования. Для использования в цикле рекуррентное соотношение должно быть приведено к специфической форме, особенностью которой является использование безындексных переменных.
const n=10;
var s, a:real;
i:byte;
begin
a:=0; s:=a;
for i:=1 to n do begin
a:=a+1/i;
s:=s+a
end;
writeln(‘сумма=’,s:10:4);
end.
Ряд называется знакочередующимся (или знакопеременным), если его два любых соседних члена имеют противоположные знаки. Знакочередующийся ряд сходится, если: 1) его члены убывают по абсолютной величине и 2) его абсолютная величина общего члена стремится к нулю. Вычисление конечной суммы сводится к нахождению суммы некоторого количества слагаемых S = формула = f (1) + f (2) + …+ f (n), где i – номер слагаемого, f (i) – слагаемое с номером i. Вычисление суммы ряда организуется в виде циклического процесса, когда при каждом прохождении цикла номер слагаемого увеличивается на единицу, а сумма – на величину i-го слагаемого, равного f (i). Т. о., si = si-1 + f (i), где si и si-1 – суммы первых i и i − 1 слагаемых соответственно. Процесс повторяется до тех пор, пока не будут просуммированы все n слагаемых.
15.описание одномерных и двумерных массивов. Массив - это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Тип элементов массива называется базовым. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Доступ к элементам массива осуществляется путем индексирования элементов массива. Тип индекса определяет границы изменения индекса. Для описания массива предназначено словосочетание Array Of (массив из). Описание типа: Type mass = Array [1..10] Of real; Var a: mass; Описание может быть и без представления типа в разделе Type: Var mass : Array [1..10] Of real; Если имеется один индекс, то массив называется одномерным, если имеется n индексов, то массив называется n-мерным. Пусть в памяти ЭВМ расположена таблица чисел, представляющая собой двумерный массив М. Каждое число в таблице имеет тип Integer, это - тип компонент. Задав конкретное значение индексов можно выбрать определенную компоненту массива. Например, оператор N:=M[i,j] зашлет в N значение, стоящее в i строке, в j столбце.
16.задачи поиска в массивах. Бинарный поиск. Поиск осуществляется обычно с помощью цикла и оператора If. Например, пусть надо выяснить, сколько элементов массива A имеют нулевые значения. Для
ответа на этот вопрос вводят дополнительную переменную и используют операторы For и If:
k:=0 { счетчик нулевых элементов }
For i:=1 To 20 Do
If A[i]=0 then k:=k+1;
После выполнения цикла переменная К будет содержать количество элементов массива А с нулевыми значениями.
program poisk;
const n=10;
a:array [1..n] of integer=(2,4,5,6,8,10,11,12,
var l,m,x,r,i:integer;
begin
writeln ('массив:');
for i:=1 to n do
writeln(a[i]);
writeln ('ввести x ');
readln(x);
l := 1;
r := n + 1;
While l < r - 1 do
begin
m := (l + r) div 2;
if a[m] > x then r := m else l := m;
end;
if a[l] = x then WriteLn('искомый элемент- номер:',l) else writeln('нет такого элемента');
readln;
end.
17.сортировка массивов. Дан одномерный массив Х. Упорядочить массив Х по неубыванию (т.е. переставить его элементы так, чтобы для всех k выполнялось Х[k] <= X[k+1]).Имеется множество алгоритмов решения данной задачи. Сортировка выбором: отыскивается максимальный элемент и переносится в конец массива;
затем этот метод применяется ко всем элементам, кроме последнего (он уже находится на своем окончательном месте), и т.д.
Program Bubble;
Const n_max = 25;
Type Index = 1..n_max;
Var k,m,i,n : Index;
r : Real;
x : Array [ Index ] Of Real;
Begin
Repeat
Write('N = '); Readln(n)
Until n<=n_max;
Writeln('Введите массив');
For i:=1 To n Do Begin
Write('x[',i,'] = '); Readln(x[i])
End;
{ сортировка элементов массива }
For k:=n DownTo 2 Do Begin { поиск m-номера max x[1..k] }
m:=k;
For i:=1 To k-1 Do
If x[i]>x[m] Then m:=i;
If m<k Then Begin { перестановка элементов x[m] и x[k] }
r:=x[k];
x[k]:=x[m];
x[m]:=r
End
End;
{ вывод упорядоченного массива }
For k:=1 To n Do
Write(x[k]:6:2);
Writeln
End.
18.вспомогательные алгоритмы. Фактические и формальные параметры. Локальные и глобальные переменные. Для реализации вспомогательных алгоритмов служат подпрограммы или процедуры. Подпрограмма — самостоятельный фрагмент программы, оформленный в виде, допускающем многократное обращение к нему из разных точек программы. Обращение к подпрограмме — переход к выполнению подпрограммы с заданием информации, необходимой для ее выполнения и возврата. Существует два вида подпрограмм: процедуры и функции. Разница между ними состоит в том, что функция через свое имя возвращает одно значение определенного типа и может, использоваться в выражениях наряду со встроенными функциями. Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые — фактическими параметрами. Существует несколько способов передачи параметров в подпрограмму. Передача параметров по значению. Формальному параметру присваивается значение фактического параметра. В этом случае формальный параметр будет содержать копию значения, имеющегося в фактическом, и никакое воздействие, производимое внутри подпрограммы на формальные параметры, не отражается на параметрах фактических. Передача параметров по ссылке. В формальный параметр может быть помещён сам фактический параметр. При этом любое изменение формального параметра в подпрограмме отразится на фактическом параметре - оба параметра во время вызова подпрограммы суть одно и то же. Параметры, передаваемые по ссылке, дают возможность не только передавать параметры внутрь подпрограммы, но и возвращать вычисленные значения в точку вызова. Передача параметров по имени. В формальный параметр может быть помещено произвольное выражение. При этом вычисление этого выражения произойдёт внутри подпрограммы в тот момент, когда потребуется его значение. Если это значение фигурирует несколько раз, то и вычисляться оно будет тоже несколько раз. Параметры, передаваемые по имени, дают возможность писать довольно универсальные подпрограммы. Передача параметров через стек. Это фактически разновидность передачи параметра по значению «с ручным приводом», в данном случае отсутствует понятие формальных и фактических параметров. Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором. По зоне видимости различают локальные и глобальные переменные. Переменные, объявленные внутри функций, называются локальными переменными. Локальную переменную можно использовать только внутри блока, в котором она объявлена. Иными словами, локальная переменная невидима за пределами своего блока. Локальные переменные существуют только во время выполнения программного блока, в котором они объявлены, создаются они при входе в блок, а разрушаются — при выходе из него. Более того, переменная, объявленная в одном блоке, не имеет никакого отношения к переменной с тем же именем, объявленной в другом блоке. В отличие от локальных глобальные переменные видимы и могут использоваться в любом месте программы. Они сохраняют свое значение на протяжении всей работы программы. Чтобы создать глобальную переменную, ее необходимо объявить за пределами функции. Глобальная переменная может быть использована в любом выражении, независимо от того, в каком блоке это выражение используется.
19.организация процедур пользователя: процедура без параметров. При разработке программ часто используют уже готовые программы, когда решение исходной задачи заменяют решениями известных задач или когда один и тот же процесс повторяется в решении задачи многократно. В Паскале такие подзадачи называются процедурами. Паскаль допускает любую часть программы оформлять в виде процедуры. Процедура, как и программа (Program), состоит из заголовка и блока. Процедура может иметь те же разделы что и программа. Общий вид заголовка: Procedure N (P1:T1;P2:T2..Var P3:T3..); Здесь N имя процедуры, Pi-формальные параметры, Ti-их типы. Формальные параметры - это имена переменных, через которые осуществляется обмен информацией между программой и процедурой. Могут быть процедуры и без параметров, тогда организация передачи информации из программы в процедуру и обратно производится с помощью переменных, описанных в самой программе, а заголовок процедуры будет иметь более простой вид Procedure N;. Вообще, количество формальных параметров при конструировании процедуры зависит от ее назначения и этим определяется гибкость использования процедуры.
Program max3a; { нахождение max(a,b,c)}
Var a,b,c,M2,M3,x,y,m : Real;
Procedure Max2A;
Begin
If x>y Then m:=x Else m:=y
End;
Begin
Writeln('введите три числа');
Readln (a,b,c);
x:=a;y:=b; Max2A; M2:=M;
x:=M2;y:=c; Max2A; M3:=M;
Writeln ('Max(a,b,c) = ', M3)
End.
20.организация процедур пользователя: процедура с параметрами-переменными. Если перед именем формального параметра стоит ключевое слово var, то такой параметр есть параметр-переменная. Фактический параметр, соответствующий параметру-переменной, может быть только переменной. При вызове процедур параметры-переменные обрабатываются так: для формального параметра используется именно та ячейка, которая содержит соответствующий фактический параметр.
Program max3c; {нахождение max(a,b,c)}
Var a,b,c,M2,M3 : Real;
Procedure Max2C (x,y : Real;Var M : Real);
Begin
If x>y Then M:=x Else M:=y;
End;
Begin
Writeln('введите три числа');
Readln(a,b,c);
Max2C(a,b,M2);
Max2C(M2,c,M3);
Writeln('Max(a,b,c) = ',M3)
End.
21.организация процедур пользователя: процедура с параметрами значениями и параметрами-переменными. Различают два вида формальных параметров: параметры-значения и параметры-переменные. Формальные параметры-значения являются внутренними переменными процедуры, после окончания работы процедуры они прекращают свое существование, их значения не могут использоваться вне процедуры, поэтому с помощью параметров-значений нельзя представлять результаты работы процедуры вне тела процедуры, в основной части программы. Формальный параметр, способный передавать свое значение любой внешней переменной, называют ПАРАМЕТРОМ-ПЕРЕМЕННОЙ. Чтобы отличить параметр-переменную перед ним в списке формальных параметров процедуры записывают служебное слово Var. Для параметра-переменной должен быть указан его тип. Если фактическим параметром, передающим свое содержимое параметру-значению, может быть любое выражение соответствующего типа, то фактическим параметром для параметра-переменной может быть только переменная. Если формальный параметр определен как параметр-значение, то перед выполнением вызываемой процедуры вычисляется значение фактического параметра, полученный результат помещается во временную память, и только затем значение передается в процедуру непосредственно формальному параметру. Если при этом в качестве фактического параметра указано даже простейшее выражение в виде переменной или константы, все равно процедуре будет передана лишь копия содержимого переменной (константы), временно хранящаяся в памяти.
22. организация функций пользователя. Функция пользователя имеет структуру такую же, как и программа, состоит из заголовка и блока. Function F ([<Parameter>:<Type>; ... ]) : <Function_Type>; Формальные параметры одного типа, в заголовке, могут объединяться в группы. Формальные параметры в одной группе разделяются запятыми, группы разделяются точкой с запятой. В операторах функции должен быть оператор присваивания некоторого выражения псевдопеременной с именем, совпадающим с именем функции, поэтому в блоке функции обязательно должен присутствовать оператор: <имя функции>:=<выражение>; Алгоритм можно оформить как функцию в случае, когда в качестве результата получается единственное значение. Для вызова функции достаточно указать ее имя (с фактическими параметрами) в любом выражении.
Program Max3;
Var a,b,c,m:Real;
Function MAX(x,y:Real):Real;
Begin
If x>y Then MAX:=x Else MAX:=y
End;
Begin
Writeln('Введите значения 3 чисел');
Readln(a,b,c);
m:=Max(Max(a,b),c);
Writeln('Max(a,b,c)=',m:7:2)
End.
23.символьный тип. Функции и процедуры работы с символами. Одним из базовых типов в языке Паскаль является символьный тип Char. Элементами этого типа данных являются символы из кодовой таблицы символов данного компьютера. Не все символы могут отображаться на экране, однако все имеют свой номер в кодовой таблице. В компьютере MSX и в большинстве других кодовая таблица состоит из 256 символов с номерами от 0 до 255, и, следовательно, для хранения данных типа Char требуется 1 байт. Международное название этой таблицы - кодовая таблица ASCII. Значения переменных и констант должны быть заключены в апострофы. Все символы упорядочены и их можно сравнивать на отношениях "=","<>","<","<=",">",">=". Ввод и вывод символов может осуществляться с помощью стандартных процедур Read и Write соответственно. Паскаль содержит символьные функции:* Ord(Ch) - выдает код символа; * Chr(n) - выдает символ с кодом, равным n (n : Byte); * Succ(Ch) - выдает следующий символ за Ch; * Pred(Ch) - выдает предущий для Ch символ.
В Турбо-Паскале имеется возможность вводить символы, не нажимая клавиши <ВК>. Это обеспечивает встроенная процедура Read(Kbd,Ch). Здесь Kbd - служебное слово, означающее устройство клавиатура. По этой процедуре машина останавливается и ожидает нажатия клавиши. После нажатия клавиши с символом этот символ присваивается переменной Ch и дальше выполняется следующий оператор.
Program C1;
Var Ch:char;
Begin
Write('Введите символ: ');
Readln(Ch);
Writeln;
Writeln('Введенный символ = ',Ch:2);
Writeln('Его код = ',Ord(Ch):4);
Writeln('Следующий символ = ',Succ(Ch):2);
Writeln('Предыдущий символ = ',Pred(Ch):2)
End.
24.строковый тип. Функции и процедуры работы со строками. Строка - это массив символов. При использовании в выражении такой массив берется в апострофах. Турбо-Паскаль имеет свои собственные средства для работы со строками. Он имеет строковый тип, называемый String. Формат описания типа: Type str = String[n]; Var s:str; или прямое описание: Var st : String[50]; максимальная длина строки <=255 символов. Допускаются операции: присваивания - St1:='Turbo'; сцепления - St2:=St1+'Pascal'; операции отношения ":=","<>", "<=","<",">=",">". Сравнение строк проводится слева направо до первого несовпадающего символа, и та строка считается меньшей, в которой первый несовпадающий символ стоит раньше в кодовой таблице символов. Однако сравнение начинается с нулевого индекса, а не с первого, что приводит к многочисленным неприятностям, если не учитывать этого. Ввод/вывод строковых переменных, например, St1, производится в естественной форме, т.е. через операторы Readln(St1); и Writeln(St1);. При вводе вы набираете символы и завершаете нажатием ВК. При этом текущая длина запишется в нулевой байт строки. Процедуры: Delete(St,Poz,N) - удаление N символов строки St, начиная с позиции Poz. Если Poz>127, то ошибка.
Insert(St1,St2,Poz) - вставка строки St1 в строку St2, начиная с позиции Poz.
Str(X,St) - преобразование числового выражения величины X в строку и помещение результата в St. После X может указываться формат по таким же правилам, как и для Write.
Val(St,X,Kod) - преобразует значение St в величину типа Integer или Real и помещает в X. Если произошла ошибка, то номер первого неправильного символа записывается в Kod : Integer;. Если ошибки нет, то Kod=0. Значение St не должно содержать пробелов в начале и в конце строки (!).
Функции: Copy(St,Poz,N):String - выделяет из St подстроку длиной N, начиная с позиции Poz. Если Poz> текущей длины, то результат - пробел, если Poz>127, то - ошибка.
Concat(st1,st2,...,stn) - выполняет сцепление строк st1, st2,...,stn в указанном порядке. Сумма всех символов <= 127.
Length(St):Integer - выдает текущую длину строки.
Pos(St1,St2):Integer - выдает номер позиции, где находится первый символ строки St1 в том случае, если St1 является подстрокой в строке St2.Если это не так, то выдает 0.
UpCase(Ch):Char - преобразует маленькую букву в большую. Только для латинских букв. Ch:char.
Турбо-Паскаль имеет средства работы с экраном. Приведем соответствующие процедуры:
ClrScr - очистка экрана, курсор помещается в левый верхний угол с координатами (1,1).
GotoXY(Col,Lin) - помешает курсор на Col столбец и на Lin строку. (1<=Col<=80, 1<=Lin<=24 )
Insline - вставляет пустую строку в место расположения курсора.
Delline - уничтожает ту строку на экране, на которой расположен курсор; все нижестоящие строки сдвигаются на одну позицию вверх.
ClrEol - стирает все символы в строке, начиная с текущей позиции курсора до конца строки.
Program s2;
Const Dl = 50;
Type Stroka = String[Dl];
Stroka1 = String[80];
Var Poz : Integer;
a,b,c : Stroka;
St : Stroka1;
Begin
a:='Турбо-Паскаль ';
b:=' - это ';
c:='система программирования';
St:=a+b+c;
ClrScr;
GotoXY(20,2); Writeln(St); GotoXY(1,5); Writeln('Нажмите ВК'); Readln;
Poz:=Pos(c,St); { ищем расположение подстроки C в строке St }
a:='супер '; { новое значение строки a }
Insert(a,St,Poz); { делаем вставку строки b в строку St в позиции Poz }
Writeln('Результат вставки:');
GotoXY(20,8); Writeln(St); GotoXY(1,5); Writeln('Нажмите ВК'); Readln;
Poz:=Pos(b,St); { ищем расположение b в St }
Writeln('Результат удаления:');
GotoXY(20,12);
Delete(St,Poz+2,Length(a)-2); { удаляем подстроку b, но остается "-" }
Writeln(St); Writeln('Нажмите ВК'); Readln;
a:=Copy(St,1,Length('Турбо')); { вырежем слово 'Турбо ' из строки St }
Writeln('Результат вырезки из St: ',a)
End.
25.множества. В Паскале все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного. Этот тип называется базовым типом множества. Область значений типа множество - набор всевозможных подмножеств, составленных из элементов базового типа. Если базовый тип принимает N значений, то тип множество для него будет иметь 2^N различных значений. Множества в Паскале указываются в квадратных скобках. Для описания множественного типа используются словосочетание Set Of (множество из). Type <имя типа>=Set Of <базовый тип>; Var <идентификатор,...>:<имя типа>; Можно задать множественный тип и без предварительного описания: Var <идентификатор,...>:Set Of <базовый тип>; Над множествами одного типа допускаются операции: Объединение множеств: + ; Пересечение множеств: *; Разность множеств: - ; Результат всех этих операций определяется соответственно как результат операций А, U, / в математике. Над множествами одного типа допускаются операции отношения: Операция "равно" (=), (Если А и В состоят из одних и тех же элементов то в этом случае значение результата А=В равно True, в противном случае его значение равно False); Операция "не равно" (<>), (Если А и В отличаются по мощности или по значению хотя бы одного элемента, то в этом случае значение результата А<>В равно True, в противном случае его значение равно False); Операция "больше или равно" (>=), (Если все элементы В содержатся в А, то в этом случае значение А>=В равно True, в противном случае его значение равно False); Аналогично дается операция "меньше или равно" (<=).