Программы циклической структуры. Массивы данных

Курсовая работа

Актуальность данной темы для курсовой работы как «Программы циклической структуры. Массивы данных» очень велика. В повседневной жизни мы постоянно сталкиваемся с повторяющимися действиями, выполняя которые мы затрачиваем огромное количество сил и времени, но упростить или отменить их зачастую просто не возможно. Но век высоких технологий позволяет теперь с помощью языка программирования, описать, тем более упростить любые действия в том числе нет необходимости описывать повторяющиеся действия шаг за шагом, для этого необходимо использовать циклические алгоритмы. В этой курсовой работе нами будут исследованы все возможные варианты описания циклических алгоритмов.

Массивы очень широко используются при разработке различного рода приложений. Массивы являются распространенным и полезным способом сохранения многих различных частей связанных данных. Массивы полезны при создании отсортированных и неотсортированных списков данных при сохранении таблиц данных и для выполнения многих других задач. С понятием «массив» приходится работать и при решении научно-технических и экономических задач связанных с обработкой совокупностей большого количества значений. Массив является удобным способом хранения нескольких связанных элементов данных в едином контейнере для большего удобства и эффективности программирования. Массив позволяет сохранять и манипулировать многими элементами данных посредством единственной переменной. циклический программа массив

Предмет исследования.

Программирование циклических структур и массивов данных

Объект исследования.

Теория циклических структур и массивов данных.

Целью в данной работе является решение задач прямо связанных с применением циклов и массивов.

Задачи:

  • изучить литературу по данной теме;
  • [Электронный ресурс]//URL: https://liarte.ru/kursovaya/programmyi-tsiklicheskoy-strukturyi-massivyi-dannyih/

  • научиться работать с циклами;
  • разобрать при каких условиях необходимо применять тот или иной вид циклической структуры что бы избежать логической ошибки;
  • научиться использовать массивы;
  • изучить ввод и вывод массивов.

Так Павловская Т.А. в книге «Паскаль. Программирование не языке высокого уровня» рассматривает вопросы разработки программы, уделяя большое внимание основным понятиям, операторам ввода и вывода данных, составлению программ, реализующих ветвление, циклические процессы, работе с массивами, процедурами и записями. Понятия циклов и их основные условия применения, использования и ограничения, что позволяет безошибочно действовать при создании программы.

7 стр., 3063 слов

Физическая организация баз данных на машинных носителях

... подход к представлению данных. Физическая организация баз данных Физическая организация данных определяет собой способ непосредственного размещения данных на машинном ... данных. Структуры баз данных Массив (функция с конечной областью определения) - простая совокупность элементов данных одного типа, средство оперирования группой данных одного типа. Отдельный элемент массива задается индексом. Массив ...

В своей книге «Методы программирования» Угольницкий Г.А. и др. изложили детальное и формальное изложение всех конструкций языка, а приведенные примеры изложены доступным языком с использованием различных приемов программирования. Подробно расписаны работа с массивами, ввод и вывод массивов, сортировка с приведение подробных примеров, которые позволяют легко обрабатывать большое количество информации и сортировать её.

1.1 Операторы цикла

Операторы цикла используются для вычислений, повторяющихся многократно. В паскале имеется три вида циклов: цикл с предусловием while, цикл с постусловием repeat и цикл с параметром for. Каждый из них состоит из определенной последовательности операторов.

телом цикла

Рис.1

Начальные установки

Проверка условия продолжения цикла выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием , рис.1,а ), либо после тела цикла (цикл с постусловием , рис.1, б ).

Разница между ними состоит в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, после чего проверяется, надо ли его выполнять еще раз. Проверка необходимости выполнения цикла с предусловием делается до тела цикла, поэтому возможно, что он не выполнится ни разу.

Параметром цикла

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат процедуры break, continue и оператор goto. Передавать управление извне внутрь цикла не рекомендуется, потому что при этом могут не выполниться начальные установки.

1.1.1 Цикл с предусловием while

Формат оператора прост:

while выражение do оператор

Выражение должно быть логического типа. Например, это может быть операция отношения или просто логическая переменная. Если результат вычисления выражения равен true, выполняется расположенный после служебного слова do простой или составной оператор 2 . Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается па следующий за ним оператор.

Если в теле цикла требуется выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end .

Пример. При помощи цикла вывести слово «привет» 5 раз.

Текст программы

program pr;

  • var x:string;
  • i:byte;

begin

i:=1;x:=’привет’; {Начальные параметры}

while i<=5 do begin{Заголовок цикла}

writeln(x); {Вывод текста}

inc(i); {увеличение на единицу}

end;

  • end.

1.1.2 Цикл с постусловием repeat

Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется.

repeat

тело цикла

until выражение

В отличие от цикла while этот цикл будет выполняться, пока логическое выражение после слова until ложно. Как только результат выражения станет истинным, произойдет выход из цикла. Вычисление выражения выполняется в конце каждой итерации цикла.

13 стр., 6358 слов

Сортировка данных в массиве

... сортировка Итак, мы рассмотрели алгоритм сортировки массива, имеющий сложность порядка O(n2). Алгоритмы, использующие деревья (турнирная сортировка, сортировка ... вверх по списку, пока не превысит значение scanDown или пока не встретится ... Пока объем копируемых данных (около половины размера массива) соизмерим с размером ... [scanDown]) scanDown--; По окончании этого цикла (и при условии что scanUp & ...

Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз: например, если в цикле вводятся данные и выполняется их проверка. Если же такой необходимости нет, предпочтительнее пользоваться циклом с предусловием.

Пример. При помощи цикла вывести слово «привет» 5 раз.

Текст программы

program pr;

  • var x:string;
  • i:byte;

begin

i:=0;x:=’привет’; {Начальные параметры}

repeat

writeln(x); {Вывод текста}

inc(i); {увеличение на единицу}

until i=5

end.

1.1.3 Цикл с параметром for

Этот оператор применится, если требуется выполнить тело цикла заранее заданное количество раз. Параметр порядкового типа на каждом проходе цикла автоматически либо увеличивается, либо уменьшается на единицу.

for <параметр>:=<начальное значение> to <конечное значение> dо <оператор>

  • for <параметр>:=<конечное значение>
  • downto <начальное значение>
  • do <оператор>

Выражения должны быть того же типа, что и переменная цикла 1 , оператор — простым или составным.

Пример 1.

var i:integer;

begin

for i:=1 to 10 do writeln (i);

  • end.

Цикл будет выполнен 10 раз на каждом проходе счетчик цикла переменная i увеличивается на 1.

Пример 2.

var i,sum:integer;

begin

sum:=0;

for i:=10 downto 1 do

begin

writeln(i);

  • sum:=sum+i;
  • end;
  • writeln(‘сумма чисел=’,sum);
  • end.

В этом цикле переменная 1 автоматически уменьшается на 1.

Пример 3.

var c:char;

begin

for c:=’a’ to ‘z’ do write(c:3);

  • end.

Здесь счетчик цикла c символьного тина поочередно принимает значение каждого символа от ‘a’ до ‘z’.

Если в теле цикла требуется выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.

1.2 Массивы

Массивы относят к структурированным типам данных. Все элементы (компоненты) массива принадлежат одному типу. Тип компонент массива может быть любым, число компонент массива задаётся при его описании и в дальнейшем не изменяется.

Массив — структура с так называемым случайным доступом, все его компоненты могут выбираться произвольно и являются одинаково доступными. К любому элементу массива можно обратиться, задав индекс (индексы), который однозначно определяет относительную позицию элемента в массиве. Тип индексов задаёт тип значений, которые используются для обращения к отдельным элементам массива. Он неявно определяет число элементов в массиве. Тип индекса может быть одним из упорядоченных типов, т.е. любым скалярным типом, кроме real. Следовательно, элементы массива всегда упорядочены.

В качестве индекса при обращении к элементу массива может быть использовано выражение.

16 стр., 7878 слов

Значение традиций древнерусского искусства

... русское искусство средневековья формировалось в борьбе двух структур - патриархальной и феодальной и двух религий - язычества и христианства. И ... местах языческих капищ; в нее проникли элементы народного обожествления природы ,а некоторым святым ... И в монументальной, и в иконописной живописи были идеи прославления единства и могущества Русской земли, мужества и духовной силы человека, чувства радости и ...

Массив с одним индексом называют одномерным (часто его называют также вектором).

Массив с двумя индексами называют двумерным массивом или матрицей. Первому индексу двумерного массива можно поставить в соответствие номер строки матрицы, второму — номер столбца. В Паскале допустимы массивы, содержащие три и более измерений.

Примером одномерного массива может служить линейная таблица или вектор:

Линейная таблица — одномерный массив с именем А.

2 -9 7 12 6 -35

Пример двумерного массива — это прямоугольная таблица или матрица.

Прямоугольная таблица — двумерный массив с именем В:

8 5 2 -5 0

3 11 -5 -7 4

12 45 9 10 23

При этом первый индекс показывает номер строки, а второй индекс-столбца. Например: значение элемента В[2,3] равно — 5, а значение элемента В[3,2] равно 45.

Таким образом, массив имеет следующие основные характеристики:

1. Размер — число элементов в массиве;

2. Имя массива;

3. Индексы элементов;

4. Значение элементов.

Имя массива и размерность характеризуют массив в целом.

Размерность массива задается при его описании, и при этом в памяти компьютера резервируется непрерывная область, в которую в дальнейшем заносятся значения элементов.

При описании массива надо:

  • определить имя массива
  • определить тип элементов массива
  • определить число элементов
  • выделить место в памяти.

При описании массива указывается максимально возможное значение элементов, причем это число первоначально определяется в разделе констант или непосредственно указывается в диапазоне индексов:

Массив целых чисел:

  • Var A: array[1..5] of integer;

Размер через константу

const N=5;

  • var A: array [1..N] of integer;
  • Массив можно описать либо введя в раздел type соответствующий тип, либо непосредственно в разделе переменных var.

Общий формат описания:

Type

<имя типа>=array [<диапазонов индексов>] of <тип элементов массива>;

или

var

<имя массива>: array [<диапазон индексов>] of <тип элементов массива>;

Тип индекса

В программе вы можете использовать как массивы целиком, так и отдельные элементы массивов. Элемент одномерного массива записывается в виде:

имя массива

любые операции,

Примеры описания массивов:

Type

mas1=array [1..30] of integer;

  • mas2=array [1..10, 1..15] of real;

var

a: mas1;

b: mas2;

или без предварительного описания типа:

  • var a: array [1..30] of integer;
  • b: array [1..10, 1..15] of real;

Массивы разных типов:

  • var x,y: array [1..10] of real;
  • c: array [1..20] of char;

Другой диапазон индексов:

Var Q: array [0..9] of real;

  • C: array [-5..13] of char;

Индексы других типов:

  • var A: array [`A’..’Z’] of real;

1.2.1 Ввод(заполнение) и вывод элементов массива

5 стр., 2139 слов

Описание местности с элементами рассуждения по картине И. И. ...

... орфограмм в словах сочинения-описания местности при помощи ученика-эксперта, групповая работа по описанию разных видов местности, проектирование домашнего задания, комментирование выставленных оценок. Планируемые результаты. Предметные: научиться составлять текст-описание местности публицистического стиля. Коммуникативные ...

В любых программах, связанных с обработкой массивов, всегда присутствует фрагмент ввода элементов массива в память компьютера (заполнения массива) и часто фрагмент вывода массива на экран.

Ввод (заполнение) элементов массива.

Для того, чтобы ввести значения элементов массива необходимо последовательно изменять значение индекса, начиная с первого до последнего, и вводить соответствующий элемент.

Для реализации этих действий удобно использовать цикл с заданным числом повторений («для»), в котором параметром цикла будет переменная — индекс массива.

Значение элементов может быть введены с клавиатуры, заданы случайным образом или определены с помощью оператора присваивания. ,Соответственно рассмотрим 3 способа ввода (заполнения) элементов массива.

1)с клавиатуры;

2)с помощью датчика случайных чисел;

3)с помощью формулы.

Пример: Заполнить массив А с клавиатуры

for i:=1 to 5 do

begin

write (`a[` , i, ‘]= ‘);

  • read (a[i]);

end;

a[1]=13

a[2]=10

a[3]=15

a[4]=20

a[5]=25

Заполнение массива случайными числами.

Число из интервала [0, M-1]: random (M)

Вещественное число от 0 до 1: Random

Числа из интервала [a,b]: random(b-a+1)+a

for i:=1 to 10 do

begin

a[i]:=random(101); {числа от 0 до 100}

end;

Перед первым обращением к функции случайных чисел необходимо инициализировать датчик случайных чисел с помощью процедуры randomize. Обычно эта процедура выполняется один раз в начале программы.

Заполнение массива с помощью формулы

Пример. Заполнить одномерный массив из 10 чисел по формуле b[i]:=i*3

Var b:= array [1..10] of integer;

  • i:integer;

begin

for i;=1 to 10 do

f[i]:=i*3;

end;

Вывод массива.

Для одномерного массива А из 3 элементов:

  • writeln(`Массив А:’);

for i: = 1 to 3 do

write (A[i]:4); {конец цикла}

writeln; {перевод курсора на следующую строку}

Для двумерных массивов:

Для ввода и вывода двумерного массива необходимо организовать вложенные циклы, причем обычно внешний по индексу строки i, а внутренний по индексу столбца j.

Оформим фрагменты в виде процедуры. Для процедуры ввода входным параметром будет число элементов массива, а параметром переменной (результатом) — сам полученный массив.

Рассмотрим процедуру формирования элементов двумерного массива b с помощью случайных чисел.

Считаем, что тип массива описан в основной программе:

type

mas2=array [1..10, 1..15] of real;

  • procedure vvod_dvum_sluch(n, m:byte; var b:mas2)

var i,j:byte;

begin

for i:=1 to n do

for j:=1 to m do

f[i,j]:=random(101);

end;

Массив, сформированный с помощью функции случайных чисел, обычно надо вывести на экран, чтобы видеть значения элементов с которыми программа работает дальше. Вывод получившихся значений можно осуществлять в той же процедуре, либо оформить отдельно:

  • Procedure print_dvum_mas(n,m: byte;
  • var b: mas2);
  • var i, j: byte;

begin

1 стр., 419 слов

«Что такое толерантность?» — значение и аргументы

... с аргументами; заключение. Эссе «Толерантность» отличается от сочинения тем, что ученик должен высказать субъективную оценку, свое личное отношение к проблеме. Сочинение- ... СНГ и России можно встретить истории, где инвалидов не пускают в общественные места, слепых с ... на тему «Толерантность» должно содержать личную субъективную оценку. Текст пишется в свободной форме, и он побуждает читателя к ...

for i:= 1 to n do {внешний цикл}

begin

for j:=1 to m do

write(b[i,j]:5); {вывод одной строки — внутренний цикл}

writeln {перевод строки}

end; {конец внешнего цикла}

end; {конец процедуры}

1.2.2 Сортировка массивов

Под сортировкой массивов понимают процесс перестановки элементов массива в определённом порядке.

Цель сортировки — облегчить последующий поиск элементов в отсортированном массиве.

Методы сортировки важны при обработке данных, с ними связаны многие фундаментальные приёмы построения алгоритмов.

Сортировки могут быть выполнены с использованием различных алгоритмов: как простых, так и усложнённых (но более эффективных).

Основное требование к методам сортировки: экономное использование памяти и быстродействие. Первое требование может быть выполнено, если переупорядочение элементов будет выполняться in situ (на том же месте).

Хорошие алгоритмы сортировки требуют порядка п *log 2 n сравнений.

Простые методы сортировки можно разбить на три основных класса в зависимости от лежащего в их основе приёма:

1. сортировка выбором;

2. сортировка обменом;

3. сортировка включением.

Простые методы сортировки требуют порядка п *п сравнений элементов (ключей).

Будем рассматривать массив А, состоящий из элементов вещественного типа. Сортировку будем осуществлять в порядке неубывания значений элементов массива.

Алгоритмы сортировки будем представлять в виде процедур. Определим следующий тип данных:

  • type vector=array[l..nmax] of real;
  • здесь nmax — максимально-возможный размер вектора.

Простые методы сортировки.

Сортировка посредством простого выбора.

Сортировка основана на идее многократного выбора (находится сначала наибольший элемент, затем второй по величине и т. д.) и сводится к следующему:

1. найти элемент с наибольшим значением;

2. поменять значениями найденный элемент и последний;

3. уменьшить на единицу количество просматриваемых элементов;

4. если <количество элементов для следующего просмотра больше единицы>то<повторить пункты, начиная с 1-го>.

Алгоритм:

Цикл по количеству просматриваемых элементов { i := п,п- 1, …,2}

{

Найти номер k максимального элемента среди а [1], а [2], …,a [i];

Поменять местами значения элементов а [k ] и а [i ]

}

Процедура на Паскале:

  • procedure sort_choice (var а : vector;
  • n : integer) ;
  • var x : real;
  • i,j,k : integer;

begin

for i :=n downto 2 do

begin

k:=l;

for j : =2 to i do

if a [ j ] >a [k] then к:=j ;

  • x:=a[k] ;
  • a[k] :=a[i] ;

a [i] :=x

3 стр., 1303 слов

«Жизненные ценности» — значение, аргументы и примеры

... принятых решениях, поступках и пр. Поэтому лучше понять ценности жизни раньше и не допустить таких мыслей в старости, чтобы не обременять свою ... с постелью, хотя до этого не придавал этому значения и даже роптал на что-то. Чем чаще происходит волевой отказ от удобств, ... говорил, что человек не может управлять собой сполна, ведь есть так называемые форс-мажоры. Ничто не вечно в мире человеческое тело ...

end;end;

  • Сортировка обменом (методом пузырька).

Сортировка обменам предусматривает систематический обмен значениями (местами) тех пар, в которых нарушается упорядоченность, до тех пор, пока таких пар не останется.

Алгоритм:

Цикл по количеству просмотров

Цикл по количеству сравниваемых значений при очередном просмотре

Если <упорядоченность в паре нарушена>то

<выполнить обмен значениями>.

Количество просмотров (повторений) во внешнем цикле равно п- 1. Оно может быть уменьшено, если i -й шаг показал, что массив уже упорядочен (во внутреннем цикле не было перестановок).

Процедура на Паскале:

  • procedure sort_exghange (var а:vector;
  • n:integer);
  • var i,j:integer;
  • x: real;
  • bound:boolean;

begin

bound:=true; i:=l;

while bound do

begin

bound:=false;

for j:=1 to n-i do

if a[j]>a[j+1] then

begin bound: =true ;

  • x:=a[j] ;
  • a[j] :=a[j+l] ;

a[j+l] :=x

end;

if bound then i:=i+1

end;

Сортировка включением .

Сортировка основана на следующем: предполагается, что элементы a [1], a [2], …, a [i -1] упорядочены , a [i ] вставляется на соответствующее место, не нарушая свойства упорядоченности. Для этого a [i ] сравнивается по очереди с a [i -1], a [i -2], … до тех пор, пока не будет обнаружено, что элемент a [i ] следует вставить между а [j ] и а [j +1] (j — номер элемента в а [1 … i -1], за которым следует вставить a [i ]).

Тогда элементы а [j +1], …, а [i -1] сдвигаются на одну позицию вправо, а новая запись помещается в позицию j +1. Удобно совмещать сравнение и перемещение.

Procedure sort_include (var а:vector; n: integer);

  • var i, j : integer ;
  • x: real;

begin

for i:=2 to n do

begin

x: =a[i]; j:=i-1;

  • while (j>
  • = l) and (x<a[j]) do

begin

a[j+1]:=a [ j]; j:=j-l

end;

a[j+l]:=x

end

end;

— Можно уменьшить количество сравнений при организации внутреннего цикла. Для этого используется метод барьера: вставляемое значение помещается в начало массива на дополнительное 0-е место ( а [0]: = а [i ]), диапазон индексов в определении типа vector расширяется:

  • type vector = array [о . . nmax] of real;

Получаем другой вариант сортировки методом включения:

  • procedure sort includel (var а:vector;
  • n:integer);
  • var i,j:integer;
  • x : real;

begin

for i: =2 to n do

begin

x:=a[i]; a[0] :=x; j:=i-l;

  • while x<a[j] do

begin

11 стр., 5397 слов

Реферат правовая охрана программ и данных защита информации

... и свойствах носителя информации. О. Макаров под электронным документом в широком смысле понимает имеющую юридическое значение информацию, ... правовом обороте должен представлять собой аналог бумажного документа и обеспечивать выполнение функций бумажного документа в сфере электронного обмена данными. ... динамики гражданского оборота и средства защиты субъективных прав и интересов участников электронной ...

a[j+l] :=a[j] ; j :=j-l

end;

a[j+1]:=x

end

end;

Задача №1

a=pi/2, b=pi, m=20 (m+1 — число повторений цикла).

1. Цикл «пока».

Алгоритм решения задачи

1. Взять первое значение аргумента.

2. Проверить удовлетворяет ли условию.

3.Если да, то

§ вычислить функцию;

  • § вывести значение;
  • § добавить шаг.

4.Завершить программу.

Текст программы

program z1_poka;

  • var x,y,a,b,h:real;m:byte;

begin

a:=pi/2;b:=pi;m:=20;

  • x:=a;
  • h:=(b-a)/m;
  • writeln(‘x’:3,’y’:10);
  • while x<=b do

begin

y:=sin(x/2)/cos(x/2)+cos(x);

  • writeln(x:5:3,y:10:3);
  • x:=x+h;
  • end;
  • end.

2. Цикл «до».

Алгоритм решения задачи

1. Взять первое значение аргумента.

2. Вычислить функцию.

3. Вывести значение функции.

4. Добавить шаг.

5. Проверить удовлетворяет ли условию.

§ если да, то перейти к шагу 2;

  • § если нет, то завершить программу.;

Текст программы

program z1_do;

  • uses crt;
  • var x,y,a,b,h:real;m:byte;

begin

a:=pi/2;b:=pi;m:=20;

  • x:=a;
  • h:=(b-a)/m;
  • writeln(‘x’:3,’y’:10);

repeat

y:=sin(x/2)/cos(x/2)+cos(x);

  • writeln(x:5:3,y:10:3);
  • x:=x+h;
  • until x>b

end.

3. Цикл «для».

Алгоритм решения задачи

1. Взять первое значение аргумента.

2. Вычислить функцию.

3. Вывести значение функции.

4. Добавить шаг.

5. Перейти к следующему значению аргумента.

6. Если оно не превышает конечное значение, то повторить 2-5 шаги.

Текст программы.

program z1_dlya;

  • var x,y,a,b,h:real;m:byte;

begin

a:=pi/2;b:=pi;m:=20;

  • x:=a;
  • h:=(b-a)/m;
  • writeln(‘x’:3,’y’:10);

for m:=1 to 21 do

begin

y:=sin(x/2)/cos(x/2)+cos(x);

  • writeln(x:5:3,y:10:3);
  • x:=x+h;
  • end;
  • end.

Протокол программы

x y

1.571 1.000

1.649 1.003

1.728 1.014

1.806 1.035

1.885 1.067

1.963 1.114

2.042 1.178

2.121 1.263

2.199 1.375

2.278 1.520

2.356 1.707

2.435 1.950

2.513 2.269

2.592 2.693

2.670 3.274

2.749 4.103

2.827 5.363

2.906 7.477

2.985 11.719

3.063 24.455

3.142 44.000

Задача №2

Программа, печатающая таблицу значений функции

для аргумента, изменяющегося в заданных пределах с заданным шагом.

Алгоритм решения задачи.

1. Ввести исходные данные.

40 стр., 19762 слов

Методика работы над теоретико-литературными понятиями в курсе ...

... литературная наука, изменились школьные программы, учебники, методические пособия. Появилось много новых, оригинальных программ, рассчитанных на углубленное изучение литературы в ... характер (научиться писать сочинения, успешно сдать экзамены в школе и в вуз и т.д.). Конечно, в ... в школе и создание системы изучения теоретико-литературных понятий в ... искусства". Место и значение литературы как учебного ...

2. Взять первое значение аргумента.

3. Определить, какому из интервалов оно принадлежит.

4. Вычислить значение функции по соответствующей формуле.

5. Вывести строку таблицы.

6. Перейти к следующему значению аргумента.

7. Если оно не превышает конечное значение, повторить шаги 3-6, иначе закончить.

Шаги 3-6 повторяются многократно, поэтому для их выполнения надо организовать цикл. Назовем необходимые нам переменные так: начальное значение аргумента — Хn, конечное значение аргумента — Хk, шаг изменения аргумента — dX, параметр — t. Все величины вещественные. Программа выводит таблицу, состоящую из двух столбцов: значений аргумента и соответствующих им значений функции 1 .

var Xn,Xk,dX,t,x,y:real;

begin

writeln(‘введите Xn,Xk,dX,t’);

  • readln(Xn,Xk,dX,t);
  • writeln( ‘——————-‘ );
  • writeln(‘| X | Y |’);
  • writeln( ‘——————-‘);
  • x:=Xn;{Начальные установки}

while x<=Xk do begin{Заголовок цикла}

if x<0 then y:=t;

  • if (x>=0) and (x<10) then y:=t*x;
  • if x>=10 then y:=2 * t;
  • writeln( ‘|’, x:7:2,’|’,y:7:2,’ |’);
  • x := x + dX; {Модификация параметра цикла}

end;

  • writeln(‘——————-‘);
  • end.

Задача №3

Найти количество всех трехзначных натуральных чисел, которые состоят из разных цифр, а само число делится на 3.

Алгоритм решения задачи.

1. Взять первое значение аргумента.

2. Проверить условия:

  • трехзначные натуральные числа состоят из разных цифр
  • число делится на 3.

3. Если число удовлетворяет условию, то значение k увеличиваем на единицу.

4. Перейти к следующему значению аргумента.

5. Если оно не превышает конечное значение, повторить шаги 2-4, иначе вывести количество чисел.

6. Завершить программу.

Текст программы

var i,k:integer;

begin

for i:=100 to 999 do

if (i div 100<> i div 10 mod 10)and(i div 100<>i mod 10)and (i div 10 mod 10<>i mod 10) and (i mod 3=0) then inc(k);

writeln(‘ количество ‘,k)

end .

Протокол программы

количество 228

Задача №4

Найти все такие тройки натуральных чисел x, y, z из интервала от 1 до 30, для которых выполняется равенство x*x-y*y+z*z=0.

Организуем вложенные циклы. Каждому значению первого аргумента подставляем все значения второго аргумента, каждому значению второго аргумента подставляем все значения третьего аргумента. Проверяем условие. Если оно выполняется, то выводим эти числа.

Текст программы

var x,y,z:1..30;

begin

for x:=1 to 30 do

for y:=1 to 30 do

for z:=1 to 30 do

if (x*x-y*y+z*z=0) then writeln(x:4,y:4,z:4); end.

Протокол программы

3 5 4

4 5 3

5 13 12

6 10 8

7 25 24

8 10 6

8 17 15

9 15 12

10 26 24

12 13 5

12 15 9

12 20 16

15 17 8

15 25 20

16 20 12

18 30 24

20 25 15

20 29 21

21 29 20

24 25 7

24 26 10

24 30 18

Задача №5

Даны два одномерных массива целых чисел (массив А, состоящий из 22 элементов, массив В — из 16 элементов), заполненных случайным образом числами из промежутка [-50,30]. Сформировать из элементов этих массивов два новых массива (C,D) (Ввод и вывод массивов оформить в процедурах).

Массив С состоит из элементов исходных массивов, меньших первого элемента массива А, а массив D — больших второго элемента массива В.

Алгоритм решения задачи:

1. Организуем процедуру ввода элементов массива случайным образом.

2. Организуем процедуру вывода.

3. Выводим массивы A и В

4. Проверяем условие, что элементы массивов А и В, меньше первого элемента массива А.

5. Выводим массив С.

6. Проверяем условие, что элементы массивов А и В, больше второго элемента массива В.

7. Выводим массив D.

Текст программы

const n=22; const m=16;const l=-50; const p=30;

  • type mas=array[1..n+m] of integer;
  • var a,b,c,d:mas;
  • i,j,k,t:integer;
  • procedure vvod(y:integer;var z:mas);
  • var i:integer;

begin

for i:=1 to y do

z[i]:=random(p-l+1)+l;

  • end;
  • procedure vivod(y:integer;var z:mas);
  • var i:integer;

begin

for i:=1 to y do

write(z[i]:5);

  • writeln;
  • end;

begin

randomize;

  • vvod(n,a);
  • write(‘ A ‘);
  • vivod(n,a);
  • vvod(m,b);
  • write(‘ B ‘);
  • vivod(m,b);
  • write(‘ C ‘);
  • k:=0;

for i:=1 to n do

if a[i]<a[1] then begin

k:=k+1;

  • c[k]:=a[i];
  • end;

for j:=1 to m do

if b[j]<a[1] then begin

k:=k+1;

  • c[k]:=b[j];
  • end;
  • vivod(k,c);
  • write(‘ D ‘);
  • t:=0;

for i:=1 to n do

if a[i]>b[2] then begin

t:=t+1;

  • d[t]:=a[i];
  • end;

for j:=1 to m do

if b[j]>b[2] then begin

t:=t+1;

  • d[t]:=b[j];
  • end;
  • vivod(t,d);
  • end.

Протокол программы

A 15 -21 20 -23 -45 -9 -34 -35 -36 -10 -40 -17 -20 -14 -5 -47 -9 20 -7 8 7 11

B -42 -50 -7 -19 28 15 21 -9 -24 -31 10 5 -37 -40 22 24

C -21 -23 -45 -9 -34 -35 -36 -10 -40 -17 -20 -14 -5 -47 -9 -7 8 7 11 -42 -50 -7 -19 -9 -24 -31 10 5 -37 -40

D 15 -21 20 -23 -45 -9 -34 -35 -36 -10 -40 -17 -20 -14 -5 -47 -9 20 -7 8 7 11 -42 -7 -19 28 15 21 -9 -24 -31 10 5 -37 -40 22 24

Задача №6

Дан массив из n целых элементов. Исключить последний минимальный элемент, то есть сдвинуть все значения таблицы, начиная с последнего минимального, влево на 1 позицию. Значение последнего элемента таблицы не определено.

Алгоритм решения задачи:

1. Ввести элементы массива.

2. Определить минимальный элемент.

3. Сместить элементы, начиная с минимального элемента, на одну позицию влево.

4. Вывести полученный массив.

Текст программы

const n=7;

  • var a:array[1..n] of integer;
  • i,min,m:integer;

begin

writeln(‘введите элементы массива A’);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);

  • readln(a[i]);
  • end;
  • write(‘сформирован массив A[‘,n,’]:’);

for i:=1 to n do

write(a[i]:5);

  • writeln;
  • m:=1;
  • min:=a[1];

for i:=2 to n do

if a[i]<=min then

begin

min:=a[i];m:=i;

  • end;
  • writeln(‘минимальный элемент a[‘,m,’]=’,min);

for i:=m to n-1 do

a[i]:=a[i+1];

  • write(‘полученная массив B:’);

for i:=1 to n-1 do

write(a[i]:5);

  • end.

Протокол программы

введите элементы массива A

a[1]=21

a[2]=32

a[3]=56

a[4]=23

a[5]=12

a[6]=36

a[7]=74

сформирован массив A[7]: 21 32 56 23 12 36 74

минимальный элемент a[5]=12

полученный массив B: 21 32 56 23 36 74

Задача №7

Дан двумерный массив целых чисел, состоящий из n строк и m столбцов, заполненный случайным образом числами из промежутка [-100,100]. Сформировать из элементов этого массива одномерный массив, каждый элемент которого равен сумме четных элементов соответствующей строки.

Алгоритм решения задачи:

1. Вывести массив случайным образом.

2. Найти четные элементы.

3. Найти сумму четных элементов в строке.

4. Вывести одномерный массив элементами, которого являются суммы четных элементов.

Текст программы

const n=6; m=7; t=-100; k=100;

  • var a:array[1..n,1..m] of integer;
  • b:array[1..n*m] of integer;
  • i,j,s:integer;

begin

writeln(‘исходный массив’);

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:= random(k-t+1)+t;

  • write(a[i,j]:5);
  • end;
  • writeln;
  • end;
  • writeln(‘новый массив’);

for i:=1 to n do begin

for j:=1 to m do

if a[i,j] mod 2=0 then b[i]:=b[i]+a[i,j];

  • write(b[i]:5) ;
  • end;
  • end.

Протокол программы

исходный массив

84 -36 17 -55 -48 11 38

23 84 -6 97 48 -30 -60

  • 77 26 -47 57 -36 8 -71
  • 25 100 -86 58 47 -22 57
  • 33 92 88 -93 -19 98 -97
  • 88 -32 -30 -52 -12 28 -83

новый массив

38 36 -2 50 278 -186

Задача №8

Заданы матрица размером (NxN) и число k (1<=k<=N).Столбец с максимальным по модулю элементом в k-й строке переставить с k-м столбцом.

Алгоритм решения задачи:

1. Ввести массив случайным образом.

2. Найти в k -ой строке максимальный по модулю элемент.

3. Поменять столбец в котором находится найденный элемент и k -й столбец.

4. Вывести новый массив.

Текст программы

const n=6; t=-100; z=100;

  • var a,b:array[1..n,1..n] of integer;
  • i,j,k,c,s,max:integer;

begin

writeln(‘исходный массив’);

for i:=1 to n do begin

for j:=1 to n do begin

a[i,j]:= random(z-t+1)+t;

  • write(a[i,j]:5);
  • end;
  • writeln;
  • end;
  • readln(k);
  • c:=1;max:=a[k,c];

for j:=1 to n do

if (abs(a[k,j]))>max then begin max:=a[k,j];c:=j; end;

  • writeln(‘максимальный элемент по модулю =’,max,’ столбец с максимальным элементом=’,c);

for j:=1 to n do begin

s:=a[i,c];

  • a[i,c]:=a[i,k];
  • a[i,k]:=s;end;
  • writeln(‘новый массив’);

for i:=1 to n do begin

for j:=1 to n do

write(a[i,j]:5);

  • writeln;
  • end;
  • end.

Протокол программы

исходный массив

24 82 -7 -57 29 -81

  • 98 -74 -16 -83 -76 26

30 87 34 85 -14 80

  • 13 55 9 40 75 49
  • 89 7 -83 5 -89 35
  • 26 -86 -8 -9 83 11

введите номер строки 1

максимальный элемент по модулю =82 столбец с максимальным элементом=2

новый массив

82 24 -7 -57 29 -81

  • 74 -98 -16 -83 -76 26

87 30 34 85 -14 80

55 -13 9 40 75 49

7 -89 -83 5 -89 35

  • 86 -26 -8 -9 83 11

Задача №9

Задан двумерный массив целых чисел размером n*m. Поменять местами в каждом столбце первый элемент с первым максимальным.

Алгоритм решения задачи:

1. Вывести массив случайным образом.

2. Найти максимальный элемент в столбце.

3. Поменять первый элемент с первым максимальный.

4. Вывести новый массив.

Текст программы

uses crt;

  • const n=5;m=6;

var

a:array[1..n,1..m] of integer;

  • d,max,i,j:integer;

begin

writeln(‘исходный массив’);

  • randomize;

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:=random(31)-10;

  • write(a[i,j]:5);
  • end;
  • writeln;
  • end;
  • max:=1;

for j:=1 to m do begin

for i:=2 to n do

if a[i,j]>a[max,j] then max:=i;

  • d:=a[1,j];
  • a[1,j]:=a[max,j];
  • a[max,j]:=d;
  • end;
  • writeln(‘новый массив’);

for i:=1 to n do begin

for j:=1 to m do

write(a[i,j]:5);

  • writeln;
  • end;
  • end.

Протокол программы

Исходный массив

16 -9 15 18 6 -10

8 17 3 14 14 -5

5 -4 9 -8 7 2

7 1 6 18 12 8

19 8 17 6 9 3

Новый массив

19 17 17 18 14 8

8 -9 3 14 6 -5

5 -4 9 -8 7 2

7 1 6 18 12 -10

16 8 15 6 9 3

Задача №10

Дан двумерный массив целых чисел, состоящий из 5 строк и 3 столбцов, заполненный случайным образом числами из промежутка [0,120]. Сформировать из элементов этого массива одномерный массив, каждый элемент которого равен сумме нечетных элементов соответствующего столбца.

Алгоритм решения задачи:

5. Вывести массив случайным образом.

6. Найти нечетные элементы.

7. Найти сумму нечетных элементов в столбце.

8. Вывести одномерный массив элементами, которого являются суммы нечетных элементов.

Текст программы

const n=5;m=3;t=0;k=120;

  • var i,j:integer;
  • a:array[1..n,1..m] of integer;
  • b:array[1..n*m] of integer;

begin

randomize;

  • writeln(‘исходный массив’);

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:=random(k-t+1)-t;

  • write(a[i,j]:5);
  • end;
  • writeln;end;

for j:=1 to m do

for i:=1 to n do

if a[i,j] mod 2<>0 then b[j]:=b[j]+a[i,j];

  • writeln(‘новый массив’);
  • for j:=1 to m do write(b[j]:5);
  • end.

Протокол программы

Исходный массив

32 38 54

72 96 71

9 88 104

27 25 63

52 32 40

Новый массив

36 25 134

Задача №11

Заданы матрица размером (NxN) и число k (1<=k<=N).

Строку с максимальным по модулю элементом в k -й строке переставить с k -й строкой.

Алгоритм решения задачи:

1. Ввести массив случайным образом.

2. Найти в k -ой строке максимальный элемент.

3. Поменять строку с индексом максимального элемента и строку k .

4. Вывести новый массив.

Текст программы

const n=6; t=0; z=100;

  • var a,b:array[1..n,1..n] of integer;
  • i,j,k,c,s,max:integer;

begin

writeln(‘исходный массив’);

for i:=1 to n do begin

for j:=1 to n do begin

a[i,j]:= random(z-t+1)+t;

  • write(a[i,j]:5);
  • end;
  • writeln;
  • end;
  • write(‘введите номер строки ‘);
  • readln(k);
  • c:=1;max:=a[k,c];

for i:=1 to n do

if (abs(a[k,j]))>max then begin max:=a[k,j];c:=j; end;

  • writeln(‘ максимальный элемент =’,max,’ индекс максимального элемента=’,c);

for j:=1 to n do begin

s:=a[k,j];

  • a[k,j]:=a[c,j];
  • a[c,j]:=s;
  • end;
  • writeln(‘новый массив’);

for i:=1 to n do begin

for j:=1 to n do begin

write(a[i,j]:5); end;

  • writeln;end;
  • end.

Протокол программы

Исходный массив

23 43 88 64 86 50

42 74 82 58 4 77

31 46 52 4 11 69

90 41 39 48 73 72

97 60 70 78 7 83

71 33 10 41 21 72

Введите номер строки 3

Максимальный элемент =69 индекс максимального элемента=6

Новый массив

23 43 88 64 86 50

42 74 82 58 4 77

71 33 10 41 21 72

90 41 39 48 73 72

97 60 70 78 7 83

31 46 52 4 11 69

Задача №12

Задан двумерный массив целых чисел размером n*m. Найти номер столбца, содержащего наибольшее количество нулей.

Алгоритм решения задачи:

1. Вывести массив случайным образом содержащий: -1, 0, 1.

2. Найти количество нулей в столбце и вывести его в одномерный массив.

3. Найти максимальный элемент в одномерном столбце.

4. Вывести номер максимального элемента.

Текст программы

const n=5;m=4;

  • var i,j,max,jmax:integer;
  • a:array[1..n,1..m] of integer;
  • b:array[1..m] of integer;

begin

randomize;

  • writeln(‘массив’);

for i:=1 to n do begin

for j:=1 to m do begin

a[i,j]:=random(3)-1;

  • write(a[i,j]:5);
  • end;
  • writeln;end;

for j:=1 to m do

begin

b[j]:=0;

for i:=1 to n do

if a[i,j]=0 then b[j]:=b[j]+1;

  • end;
  • max:=b[1];
  • jmax:=1;

for j:=2 to m do begin

if b[j]>max then begin

max:=b[j]; jmax:=j;end;

  • end;
  • writeln(‘ Наибольшее количество нулей в ‘,jmax ,’ столбце’);
  • end.

Протокол программы

массив

0 0 1 -1

0 0 0 1

1 0 1 1

1 -1 -1 1

1 0 -1 -1

Наибольшее количество нулей в 2 столбце

Заключение

В проведенной работе мы выяснили, что отсутствие циклов привело бы к большим затруднениям, память отведенная под программу была бы перегружена. На протяжении всей работы мы рассматривали разнообразие циклов начиная с арифметического, заканчивая итерационным циклом, который в свою очеред разделился на:

  • цикл for (цикл «ДЛЯ», цикл со счетчиком, здесь значения должны иметь порядковый тип, т.к. значение переменной цикла увеличивается или уменьшается на один при каждой итерации цикла);
  • цикл while-do (цикл «ДО», цикл с предусловием будет выполняться до тех пор пока выражение принимает истинное значение, но стоит выражению принять ложное значение, то осуществляется переход к следующему оператору);
  • цикл repeat-until (цикл «ПОКА», цикл с постусловием ведет себя противоположно циклу «ДО», т.е.

пока выражение ложное тело цикла продолжается, как только логическое выражение станет истинным, цикл прекратится).

Нами были рассмотрены примеры использования циклов, а так же мы выяснили, что тело цикла с предусловием может быть так и не выполнено, а вот тело цикла с постусловием всегда выполняется хотя бы один раз, этот факт необходимо учитывать при написании программы.

Код любой программы должен быть читаемым. Для того чтобы код был читаемым, он должен удовлетворять некоторым требованиям по форматированию кода и стилю его написания.

Для этого и нужна цикличность программной структуры, при постоянно повторяющейся действенности, мы устанавливает цикл, количество операций, и оперативность программы увеличивается, меньше времени тратиться у программиста на прописывание действия.

Не будем забывать и о вложенных циклах, когда один цикл начинает свою работу, только после того как другой цикл закончил свою. Циклическую программу можно составить и для поиска максимального или минимального значения, в некоторых случаях это удобнее чем использование записи поиска.

С точки зрения преподавания Паскаль универсален, удобен и в изучении, и в использовании. Язык программирования является строго типизированным языком, что позволяет использовать его при написании программ группами, что сейчас очень распространенно. При написании любой, даже самой маленькой программы необходимо помнить что, возможно, кому-то придется с ней работать, для этого при написании нужно учитывать все правила программирования.

1. Черкасов М.А. Практический курс программирования на паскале : Учебное пособие. — М.: МАИ, 2005.-186 с.:ил.

2. Павловская Т.А. Паскаль. Программирование не языке высокого уровня: Учебник для вузов.- СПб.: Питер,2007. — 393с.:ил.

3. Рапаков Г.Г.. Ржеуцкая С.А. Программирование на языке Pascal: — СПб.: БХВ, 2004. — 282с.

4. Григорьев С.А. Программирование на языке Паскаль для математиков: Учебное пособие. — Калининград: Калинингр. ун-т., 1997. — 92с.

5. Угольницкий Г.А. и др. Методы программирования. Учебное пособие. 2-ое издание. — М.:Вузовская книга, 2000. — 280с.

6. Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. — М.: Мир, 1987. — 232с., ил

7. Пильщиков В.Н. Сборник упражнений по языку Паскаль: Учебное пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 160с.

8. Богатырев Р. Журнал «Мир ПК» выпуск №4/2001 от 17.04.2001, с.58

9. Вылиток А.А., Матвеева Т.К. Динамические структуры данных. Задание практикума. Язык Паскаль. // Учебно-методическое пособие. — М.: Издательский отдел Факультета ВМиК МГУ им. М.В. Ломоносова, 2005. — с. 8-20.

10. Грогоно П. Программирование на языке Паскаль. — М.: Мир, 1982. — с. 108

11. Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие — СПбГУАП. СПб,2003 — с. 21-30

12. Моргун А. Н. Программирование на языке Паскаль (Pascal).

Основы обработки структур данных. — М.: Диалектика, 2005. — с. 576

13. Максимова Т.М. Программирование на языках высокого уровня: Методические указания к выполнению курсового проекта. — СПб.: ГУАП, 2005. — с.27

14. Перминов О.Н. Программирование на языке Паскаль:Справочник.- М.: Радио и связь, 1998. — с.243-304

15. Подвальный С.Л., Холопкина Л.В., Носачева М.П. Программирование на языке Паскаль: практикум — 2008, с.24

16. Сулейманов Р.Р. Методика решения учебных задач средствами программирования//Методическое пособие — М: 2010, с. 112

17. Трофимов С.П. Программирование на языке высокого уровня: Рабочая программа дисциплины. — Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2005. — с.12

18. Шумова Е.О., Рачева Н.В. Программирование на языке высокого уровня: Методические указания к курсовой работе. — СПб.: СЗТУ, 2002. — с.36

19. Игошина Л.В. Программирование на языке высокого уровня. Рабочая программа дисциплины. — Пенза: ПГУ, 2004. — с.5

20. Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка.//Пер. с англ. и предисл. Д.Б.Подшивалова — М.: Финансы и статистика,1989. — с. 151