Шпаргалка по "Основам программирования"

Автор работы: Пользователь скрыл имя, 18 Июня 2012 в 10:07, шпаргалка

Описание работы

Работа содержит ответы на 27 вопросов по дисциплине "Основы программирования".

Файлы: 1 файл

вопросы к экзамену.информатика и прграммирование.docx

— 67.75 Кб (Скачать файл)

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,19,22);

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); Аналогично дается операция "меньше или равно" (<=).

Информация о работе Шпаргалка по "Основам программирования"